From: Robert Roebling Date: Sat, 24 Oct 1998 17:12:05 +0000 (+0000) Subject: Removed usage of GdkImlib X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/01111366c9b4ea40eee7f4b13ddfe6f6b9f886db Removed usage of GdkImlib Added platform independent wxImage class Changed wxBitmap and wxImageList accordingly Correctted header text git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@905 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/gtk/accel.h b/include/wx/gtk/accel.h index 3f7ce4056e..9b2f0e69d0 100644 --- a/include/wx/gtk/accel.h +++ b/include/wx/gtk/accel.h @@ -3,7 +3,7 @@ // Purpose: wxAcceleratorTable class // Author: Robert // Modified by: -// RCS-ID: +// RCS-ID: $id$ // Copyright: (c) Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk/app.h b/include/wx/gtk/app.h index 53f89a2abe..2df05b4886 100644 --- a/include/wx/gtk/app.h +++ b/include/wx/gtk/app.h @@ -4,7 +4,7 @@ // Author: Robert Roebling // Created: 01/02/97 // Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Copyright: (c) 1998 Robert Roebling, Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk/bitmap.h b/include/wx/gtk/bitmap.h index 81406d49ec..15af99d2c5 100644 --- a/include/wx/gtk/bitmap.h +++ b/include/wx/gtk/bitmap.h @@ -2,9 +2,8 @@ // Name: bitmap.h // Purpose: // Author: Robert Roebling -// Created: 01/02/97 // RCS-ID: $Id$ -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -20,6 +19,7 @@ #include "wx/object.h" #include "wx/string.h" #include "wx/palette.h" +#include "wx/image.h" //----------------------------------------------------------------------------- // classes @@ -60,7 +60,6 @@ class wxMask: public wxObject // wxBitmap //----------------------------------------------------------------------------- -// CMB 20/5/98: added xbm constructor and GetBitmap() method class wxBitmap: public wxObject { DECLARE_DYNAMIC_CLASS(wxBitmap) @@ -70,6 +69,7 @@ class wxBitmap: public wxObject wxBitmap(); wxBitmap( int width, int height, int depth = -1 ); wxBitmap( const char bits[], int width, int height, int depth = 1 ); + wxBitmap( const wxImage &image ); wxBitmap( char **bits ); wxBitmap( const wxBitmap& bmp ); wxBitmap( const wxBitmap* bmp ); @@ -79,6 +79,8 @@ class wxBitmap: public wxObject bool operator == ( const wxBitmap& bmp ); bool operator != ( const wxBitmap& bmp ); bool Ok() const; + + wxImage ConvertToImage() const; int GetHeight() const; int GetWidth() const; @@ -90,8 +92,6 @@ class wxBitmap: public wxObject wxMask *GetMask() const; void SetMask( wxMask *mask ); - void Resize( int height, int width ); - bool SaveFile( const wxString &name, int type, wxPalette *palette = (wxPalette *) NULL ); bool LoadFile( const wxString &name, int type = wxBITMAP_TYPE_XPM); @@ -104,10 +104,6 @@ class wxBitmap: public wxObject GdkPixmap *GetPixmap() const; GdkBitmap *GetBitmap() const; - void DestroyImage(); - void RecreateImage(); - void Render(); - // no data :-) }; diff --git a/include/wx/gtk/bmpbuttn.h b/include/wx/gtk/bmpbuttn.h index 6800d97bf4..5d61d0708b 100644 --- a/include/wx/gtk/bmpbuttn.h +++ b/include/wx/gtk/bmpbuttn.h @@ -2,9 +2,8 @@ // Name: bmpbutton.h // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk/brush.h b/include/wx/gtk/brush.h index 66a3d451d5..8a9fd41bf4 100644 --- a/include/wx/gtk/brush.h +++ b/include/wx/gtk/brush.h @@ -2,9 +2,8 @@ // Name: brush.h // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk/button.h b/include/wx/gtk/button.h index bbc5f130e2..bfabb1d0be 100644 --- a/include/wx/gtk/button.h +++ b/include/wx/gtk/button.h @@ -2,9 +2,8 @@ // Name: button.h // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk/checkbox.h b/include/wx/gtk/checkbox.h index d83a8d59ea..f2027e494b 100644 --- a/include/wx/gtk/checkbox.h +++ b/include/wx/gtk/checkbox.h @@ -2,9 +2,8 @@ // Name: checkbox.h // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk/choice.h b/include/wx/gtk/choice.h index 9929a37fef..40cecba786 100644 --- a/include/wx/gtk/choice.h +++ b/include/wx/gtk/choice.h @@ -2,9 +2,8 @@ // Name: choice.h // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk/colour.h b/include/wx/gtk/colour.h index da8e9ee208..77e4155350 100644 --- a/include/wx/gtk/colour.h +++ b/include/wx/gtk/colour.h @@ -2,9 +2,8 @@ // Name: colour.h // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk1/accel.h b/include/wx/gtk1/accel.h index 3f7ce4056e..9b2f0e69d0 100644 --- a/include/wx/gtk1/accel.h +++ b/include/wx/gtk1/accel.h @@ -3,7 +3,7 @@ // Purpose: wxAcceleratorTable class // Author: Robert // Modified by: -// RCS-ID: +// RCS-ID: $id$ // Copyright: (c) Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk1/app.h b/include/wx/gtk1/app.h index 53f89a2abe..2df05b4886 100644 --- a/include/wx/gtk1/app.h +++ b/include/wx/gtk1/app.h @@ -4,7 +4,7 @@ // Author: Robert Roebling // Created: 01/02/97 // Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Copyright: (c) 1998 Robert Roebling, Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk1/bitmap.h b/include/wx/gtk1/bitmap.h index 81406d49ec..15af99d2c5 100644 --- a/include/wx/gtk1/bitmap.h +++ b/include/wx/gtk1/bitmap.h @@ -2,9 +2,8 @@ // Name: bitmap.h // Purpose: // Author: Robert Roebling -// Created: 01/02/97 // RCS-ID: $Id$ -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -20,6 +19,7 @@ #include "wx/object.h" #include "wx/string.h" #include "wx/palette.h" +#include "wx/image.h" //----------------------------------------------------------------------------- // classes @@ -60,7 +60,6 @@ class wxMask: public wxObject // wxBitmap //----------------------------------------------------------------------------- -// CMB 20/5/98: added xbm constructor and GetBitmap() method class wxBitmap: public wxObject { DECLARE_DYNAMIC_CLASS(wxBitmap) @@ -70,6 +69,7 @@ class wxBitmap: public wxObject wxBitmap(); wxBitmap( int width, int height, int depth = -1 ); wxBitmap( const char bits[], int width, int height, int depth = 1 ); + wxBitmap( const wxImage &image ); wxBitmap( char **bits ); wxBitmap( const wxBitmap& bmp ); wxBitmap( const wxBitmap* bmp ); @@ -79,6 +79,8 @@ class wxBitmap: public wxObject bool operator == ( const wxBitmap& bmp ); bool operator != ( const wxBitmap& bmp ); bool Ok() const; + + wxImage ConvertToImage() const; int GetHeight() const; int GetWidth() const; @@ -90,8 +92,6 @@ class wxBitmap: public wxObject wxMask *GetMask() const; void SetMask( wxMask *mask ); - void Resize( int height, int width ); - bool SaveFile( const wxString &name, int type, wxPalette *palette = (wxPalette *) NULL ); bool LoadFile( const wxString &name, int type = wxBITMAP_TYPE_XPM); @@ -104,10 +104,6 @@ class wxBitmap: public wxObject GdkPixmap *GetPixmap() const; GdkBitmap *GetBitmap() const; - void DestroyImage(); - void RecreateImage(); - void Render(); - // no data :-) }; diff --git a/include/wx/gtk1/bmpbuttn.h b/include/wx/gtk1/bmpbuttn.h index 6800d97bf4..5d61d0708b 100644 --- a/include/wx/gtk1/bmpbuttn.h +++ b/include/wx/gtk1/bmpbuttn.h @@ -2,9 +2,8 @@ // Name: bmpbutton.h // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk1/brush.h b/include/wx/gtk1/brush.h index 66a3d451d5..8a9fd41bf4 100644 --- a/include/wx/gtk1/brush.h +++ b/include/wx/gtk1/brush.h @@ -2,9 +2,8 @@ // Name: brush.h // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk1/button.h b/include/wx/gtk1/button.h index bbc5f130e2..bfabb1d0be 100644 --- a/include/wx/gtk1/button.h +++ b/include/wx/gtk1/button.h @@ -2,9 +2,8 @@ // Name: button.h // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk1/checkbox.h b/include/wx/gtk1/checkbox.h index d83a8d59ea..f2027e494b 100644 --- a/include/wx/gtk1/checkbox.h +++ b/include/wx/gtk1/checkbox.h @@ -2,9 +2,8 @@ // Name: checkbox.h // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk1/choice.h b/include/wx/gtk1/choice.h index 9929a37fef..40cecba786 100644 --- a/include/wx/gtk1/choice.h +++ b/include/wx/gtk1/choice.h @@ -2,9 +2,8 @@ // Name: choice.h // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk1/colour.h b/include/wx/gtk1/colour.h index da8e9ee208..77e4155350 100644 --- a/include/wx/gtk1/colour.h +++ b/include/wx/gtk1/colour.h @@ -2,9 +2,8 @@ // Name: colour.h // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/image.h b/include/wx/image.h new file mode 100644 index 0000000000..dd8a5e9754 --- /dev/null +++ b/include/wx/image.h @@ -0,0 +1,162 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: image.h +// Purpose: wxImage class +// Author: Robert Roebling +// RCS-ID: $Id$ +// Copyright: (c) Robert Roebling +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_IMAGE_H_ +#define _WX_IMAGE_H_ + +#ifdef __GNUG__ +#pragma interface "image.h" +#endif + +#include "wx/setup.h" +#include "wx/object.h" +#include "wx/string.h" +#include "wx/gdicmn.h" + +//----------------------------------------------------------------------------- +// classes +//----------------------------------------------------------------------------- + +class WXDLLEXPORT wxImageHandler; +class WXDLLEXPORT wxPNGHandler; +class WXDLLEXPORT wxBMPHandler; +class WXDLLEXPORT wxImage; + +//----------------------------------------------------------------------------- +// wxImageHandler +//----------------------------------------------------------------------------- + +class WXDLLEXPORT wxImageHandler: public wxObject +{ + DECLARE_DYNAMIC_CLASS(wxImageHandler) + +public: + wxImageHandler() { m_name = ""; m_extension = ""; m_type = 0; } + + virtual bool LoadFile( wxImage *image, const wxString& name ); + virtual bool SaveFile( wxImage *image, const wxString& name ); + + inline void SetName(const wxString& name) { m_name = name; } + inline void SetExtension(const wxString& ext) { m_extension = ext; } + inline void SetType(long type) { m_type = type; } + inline wxString GetName() const { return m_name; } + inline wxString GetExtension() const { return m_extension; } + inline long GetType() const { return m_type; } + +protected: + wxString m_name; + wxString m_extension; + long m_type; + +}; + +//----------------------------------------------------------------------------- +// wxPNGHandler +//----------------------------------------------------------------------------- + +class WXDLLEXPORT wxPNGHandler: public wxImageHandler +{ + DECLARE_DYNAMIC_CLASS(wxPNGHandler) + +public: + + inline wxPNGHandler() + { + m_name = "PNG file"; + m_extension = "png"; + m_type = wxBITMAP_TYPE_PNG; + }; + + virtual bool LoadFile( wxImage *image, const wxString& name ); + virtual bool SaveFile( wxImage *image, const wxString& name ); +}; + +//----------------------------------------------------------------------------- +// wxBMPHandler +//----------------------------------------------------------------------------- + +class WXDLLEXPORT wxBMPHandler: public wxImageHandler +{ + DECLARE_DYNAMIC_CLASS(wxBMPHandler) + +public: + + inline wxBMPHandler() + { + m_name = "BMP file"; + m_extension = "bmp"; + m_type = wxBITMAP_TYPE_BMP; + }; + + virtual bool LoadFile( wxImage *image, const wxString& name ); +}; +//----------------------------------------------------------------------------- +// wxImage +//----------------------------------------------------------------------------- + +class WXDLLEXPORT wxImage: public wxObject +{ + DECLARE_DYNAMIC_CLASS(wxImage) + + friend class WXDLLEXPORT wxImageHandler; + +public: + + wxImage(); + wxImage( int width, int height ); + wxImage( const wxString& name, long type = wxBITMAP_TYPE_PNG ); + + wxImage( const wxImage& image ); + wxImage( const wxImage* image ); + + void Create( int width, int height ); + void Destroy(); + + virtual bool LoadFile( const wxString& name, long type = wxBITMAP_TYPE_PNG ); + virtual bool SaveFile( const wxString& name, int type ); + + bool Ok() const; + int GetWidth() const; + int GetHeight() const; + + char unsigned *GetData() const; + void SetData( char unsigned *data ); + + void SetMaskColour( unsigned char r, unsigned char g, unsigned char b ); + unsigned char GetMaskRed() const; + unsigned char GetMaskGreen() const; + unsigned char GetMaskBlue() const; + void SetMask( bool mask = TRUE ); + bool HasMask() const; + + inline wxImage& operator = (const wxImage& image) + { if (*this == image) return (*this); Ref(image); return *this; } + inline bool operator == (const wxImage& image) + { return m_refData == image.m_refData; } + inline bool operator != (const wxImage& image) + { return m_refData != image.m_refData; } + + static inline wxList& GetHandlers() { return sm_handlers; } + static void AddHandler( wxImageHandler *handler ); + static void InsertHandler( wxImageHandler *handler ); + static bool RemoveHandler( const wxString& name ); + static wxImageHandler *FindHandler( const wxString& name ); + static wxImageHandler *FindHandler( const wxString& extension, long imageType ); + static wxImageHandler *FindHandler( long imageType ); + + static void CleanUpHandlers(); + +protected: + + static wxList sm_handlers; + +}; + +#endif + // _WX_IMAGE_H_ diff --git a/samples/image/Makefile b/samples/image/Makefile new file mode 100644 index 0000000000..bccce53f76 --- /dev/null +++ b/samples/image/Makefile @@ -0,0 +1 @@ +include ../../setup/general/makeapp diff --git a/samples/image/Makefile.in b/samples/image/Makefile.in new file mode 100644 index 0000000000..d8cbc50a2a --- /dev/null +++ b/samples/image/Makefile.in @@ -0,0 +1,26 @@ +# WXXT base directory +WXBASEDIR=@WXBASEDIR@ + +# set the OS type for compilation +OS=@OS@ +# compile a library only +RULE=bin + +# define library name +BIN_TARGET=image +# define library sources +BIN_SRC=\ +image.cpp + +#define library objects +BIN_OBJ=\ +image.o + +# additional things needed to link +BIN_LINK= + +# additional things needed to compile +ADD_COMPILE= + +# include the definitions now +include ../../../template.mak diff --git a/samples/image/horse.png b/samples/image/horse.png new file mode 100644 index 0000000000..a9cd2a354f Binary files /dev/null and b/samples/image/horse.png differ diff --git a/samples/image/image.cpp b/samples/image/image.cpp new file mode 100644 index 0000000000..997b1f9484 --- /dev/null +++ b/samples/image/image.cpp @@ -0,0 +1,158 @@ +/* + * Program: image + * + * Author: Robert Roebling + * + * Copyright: (C) 1998, Robert Roebling + * + */ + +#include "wx/wx.h" +#include "wx/image.h" + +// derived classes + +class MyFrame; +class MyApp; + +// MyCanvas + +class MyCanvas: public wxScrolledWindow +{ + DECLARE_DYNAMIC_CLASS(MyCanvas) + + public: + + MyCanvas(void) {}; + MyCanvas( wxWindow *parent, wxWindowID, const wxPoint &pos, const wxSize &size ); + ~MyCanvas(void); + void OnPaint( wxPaintEvent &event ); + + wxBitmap *my_horse; + + DECLARE_EVENT_TABLE() +}; + +// MyFrame + +class MyFrame: public wxFrame +{ + DECLARE_DYNAMIC_CLASS(MyFrame) + + public: + + MyFrame(void); + void OnSize( wxSizeEvent &event ); + void OnAbout( wxCommandEvent &event ); + void OnQuit( wxCommandEvent &event ); + + MyCanvas *m_canvas; + + DECLARE_EVENT_TABLE() +}; + +// MyApp + +class MyApp: public wxApp +{ + public: + + MyApp(void); + virtual bool OnInit(void); +}; + +// main program + +IMPLEMENT_APP(MyApp) + +// MyCanvas + +IMPLEMENT_DYNAMIC_CLASS(MyCanvas, wxScrolledWindow) + +BEGIN_EVENT_TABLE(MyCanvas,wxScrolledWindow) + EVT_PAINT (MyCanvas::OnPaint) +END_EVENT_TABLE() + +MyCanvas::MyCanvas( wxWindow *parent, const wxWindowID id, const wxPoint &pos, const wxSize &size ) + : wxScrolledWindow( parent, id, pos, size, wxSUNKEN_BORDER ) +{ + wxImage image; + image.LoadFile( "../horse.png", wxBITMAP_TYPE_PNG ); + my_horse = new wxBitmap( image ); +} + +MyCanvas::~MyCanvas(void) +{ + delete my_horse; +} + +void MyCanvas::OnPaint( wxPaintEvent &WXUNUSED(event) ) +{ + wxPaintDC dc( this ); + PrepareDC( dc ); + + dc.DrawBitmap( *my_horse, 30, 120 ); +} + +// MyFrame + +const ID_QUIT = 108; +const ID_ABOUT = 109; + +IMPLEMENT_DYNAMIC_CLASS( MyFrame, wxFrame ) + +BEGIN_EVENT_TABLE(MyFrame,wxFrame) + EVT_MENU (ID_ABOUT, MyFrame::OnAbout) + EVT_MENU (ID_QUIT, MyFrame::OnQuit) +END_EVENT_TABLE() + +MyFrame::MyFrame(void) : + wxFrame( (wxFrame *) NULL, -1, (char *) "Robert's Test application", wxPoint(20,20), wxSize(470,360) ) +{ + wxMenu *file_menu = new wxMenu(); + file_menu->Append( ID_ABOUT, "About.."); + file_menu->Append( ID_QUIT, "Exit"); + + wxMenuBar *menu_bar = new wxMenuBar(); + menu_bar->Append(file_menu, "File"); + menu_bar->Show( TRUE ); + + SetMenuBar( menu_bar ); + + m_canvas = new MyCanvas( this, -1, wxPoint(2,62), wxSize(300-4,120-4) ); + m_canvas->SetScrollbars( 10, 10, 50, 50 ); +} + +void MyFrame::OnQuit( wxCommandEvent &WXUNUSED(event) ) +{ + Close( TRUE ); +} + +void MyFrame::OnAbout( wxCommandEvent &WXUNUSED(event) ) +{ + (void) wxMessageBox( "Image demo\nRobert Roebling (c) 1998", "About Image Demo", wxOK ); +} + +//----------------------------------------------------------------------------- +// MyApp +//----------------------------------------------------------------------------- + +MyApp::MyApp(void) : + wxApp( ) +{ +} + +bool MyApp::OnInit(void) +{ + wxImage::AddHandler( new wxPNGHandler ); + + wxFrame *frame = new MyFrame(); + frame->Show( TRUE ); + + return TRUE; +} + + + + + diff --git a/src/Makefile.in b/src/Makefile.in index 5caeef4a46..7ec517ec58 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -39,7 +39,6 @@ all:: @if test ! -d generic; then mkdir generic; fi @if test ! -d png; then mkdir png; fi @if test ! -d zlib; then mkdir zlib; fi - @if test ! -d gdk_imlib; then mkdir gdk_imlib; fi @if test ! -d iodbc; then mkdir iodbc; fi install:: @@ -118,13 +117,11 @@ clean:: $(RM) -rf generic $(RM) -rf png $(RM) -rf zlib - $(RM) -rf gdk_imlib $(RM) -rf iodbc @$(RM) lexer.c parser.c #additional things needed for compile -ADD_COMPILE= \ - -DHAVE_LIBPNG -DDJPEG_PROG=\"\" -DCJPEG_PROG=\"\" +ADD_COMPILE= # include the definitions now include ../../template.mak diff --git a/src/common/image.cpp b/src/common/image.cpp new file mode 100644 index 0000000000..dae0abc86c --- /dev/null +++ b/src/common/image.cpp @@ -0,0 +1,898 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: image.cpp +// Purpose: wxImage +// Author: Robert Roebling +// RCS-ID: $Id$ +// Copyright: (c) Robert Roebling +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifdef __GNUG__ +#pragma implementation "image.h" +#endif + +#include "wx/image.h" +#include "wx/debug.h" +#include "wx/log.h" +#include "../png/png.h" + +//----------------------------------------------------------------------------- +// wxImage +//----------------------------------------------------------------------------- + +class wxImageRefData: public wxObjectRefData +{ + public: + + wxImageRefData(void); + ~wxImageRefData(void); + + int m_width; + int m_height; + unsigned char *m_data; + bool m_hasMask; + unsigned char m_maskRed,m_maskGreen,m_maskBlue; + bool m_ok; +}; + +wxImageRefData::wxImageRefData(void) +{ + m_width = 0; + m_height = 0; + m_data = (unsigned char*) NULL; + m_ok = FALSE; + m_maskRed = 0; + m_maskGreen = 0; + m_maskBlue = 0; + m_hasMask = FALSE; +} + +wxImageRefData::~wxImageRefData(void) +{ + if (m_data) free( m_data ); +} + +wxList wxImage::sm_handlers; + +//----------------------------------------------------------------------------- + +#define M_IMGDATA ((wxImageRefData *)m_refData) + +#if !USE_SHARED_LIBRARIES +IMPLEMENT_DYNAMIC_CLASS(wxImage, wxObject) +#endif + +wxImage::wxImage() +{ +} + +wxImage::wxImage( int width, int height ) +{ + Create( width, height ); +} + +wxImage::wxImage( const wxString& name, long type ) +{ + LoadFile( name, type ); +} + +wxImage::wxImage( const wxImage& image ) +{ + Ref(image); +} + +wxImage::wxImage( const wxImage* image ) +{ + if (image) Ref(*image); +} + +void wxImage::Create( int width, int height ) +{ + m_refData = new wxImageRefData(); + + M_IMGDATA->m_data = (unsigned char *) malloc( width*height*3 ); + if (M_IMGDATA->m_data) + { + for (int l = 0; l < width*height*3; l++) M_IMGDATA->m_data[l] = 0; + + M_IMGDATA->m_width = width; + M_IMGDATA->m_height = height; + M_IMGDATA->m_ok = TRUE; + } + else + { + UnRef(); + } +} + +void wxImage::Destroy() +{ + UnRef(); +} + +bool wxImage::Ok() const +{ + return (M_IMGDATA && M_IMGDATA->m_ok); +} + +char unsigned *wxImage::GetData() const +{ + if (!Ok()) return (char unsigned *)NULL; + + return M_IMGDATA->m_data; +} + +void wxImage::SetData( char unsigned *WXUNUSED(data) ) +{ +} + +void wxImage::SetMaskColour( unsigned char r, unsigned char g, unsigned char b ) +{ + if (!Ok()) return; + + M_IMGDATA->m_maskRed = r; + M_IMGDATA->m_maskGreen = g; + M_IMGDATA->m_maskBlue = b; + M_IMGDATA->m_hasMask = TRUE; +} + +unsigned char wxImage::GetMaskRed() const +{ + if (!Ok()) return 0; + + return M_IMGDATA->m_maskRed; +} + +unsigned char wxImage::GetMaskGreen() const +{ + if (!Ok()) return 0; + + return M_IMGDATA->m_maskGreen; +} + +unsigned char wxImage::GetMaskBlue() const +{ + if (!Ok()) return 0; + + return M_IMGDATA->m_maskBlue; +} + +void wxImage::SetMask( bool mask ) +{ + if (!Ok()) return; + + M_IMGDATA->m_hasMask = mask; +} + +bool wxImage::HasMask() const +{ + if (!Ok()) return FALSE; + + return M_IMGDATA->m_hasMask; +} + +int wxImage::GetWidth() const +{ + return (M_IMGDATA ? M_IMGDATA->m_width : 0); +} + +int wxImage::GetHeight() const +{ + return (M_IMGDATA ? M_IMGDATA->m_height : 0); +} + +bool wxImage::LoadFile( const wxString& filename, long type ) +{ + UnRef(); + + m_refData = new wxImageRefData; + + wxImageHandler *handler = FindHandler(type); + + if (handler == NULL) + { + wxLogWarning( "No image handler for type %d defined.", type ); + + return FALSE; + } + + return handler->LoadFile( this, filename ); +} + +bool wxImage::SaveFile( const wxString& filename, int type ) +{ + wxImageHandler *handler = FindHandler(type); + + if (handler == NULL) + { + wxLogWarning( "No image handler for type %d defined.", type ); + + return FALSE; + } + + return handler->SaveFile( this, filename ); +} + +void wxImage::AddHandler( wxImageHandler *handler ) +{ + sm_handlers.Append( handler ); +} + +void wxImage::InsertHandler( wxImageHandler *handler ) +{ + sm_handlers.Insert( handler ); +} + +bool wxImage::RemoveHandler( const wxString& name ) +{ + wxImageHandler *handler = FindHandler(name); + if (handler) + { + sm_handlers.DeleteObject(handler); + return TRUE; + } + else + return FALSE; +} + +wxImageHandler *wxImage::FindHandler( const wxString& name ) +{ + wxNode *node = sm_handlers.First(); + while (node) + { + wxImageHandler *handler = (wxImageHandler*)node->Data(); + if (handler->GetName() == name) return handler; + node = node->Next(); + } + return (wxImageHandler *)NULL; +} + +wxImageHandler *wxImage::FindHandler( const wxString& extension, long bitmapType ) +{ + wxNode *node = sm_handlers.First(); + while (node) + { + wxImageHandler *handler = (wxImageHandler*)node->Data(); + if ( handler->GetExtension() == extension && + (bitmapType == -1 || handler->GetType() == bitmapType) ) + return handler; + node = node->Next(); + } + return (wxImageHandler*)NULL; +} + +wxImageHandler *wxImage::FindHandler( long bitmapType ) +{ + wxNode *node = sm_handlers.First(); + while (node) + { + wxImageHandler *handler = (wxImageHandler *)node->Data(); + if (handler->GetType() == bitmapType) return handler; + node = node->Next(); + } + return NULL; +} + +void wxImage::CleanUpHandlers() +{ + wxNode *node = sm_handlers.First(); + while (node) + { + wxImageHandler *handler = (wxImageHandler *)node->Data(); + wxNode *next = node->Next(); + delete handler; + delete node; + node = next; + } +} + +//----------------------------------------------------------------------------- +// wxImageHandler +//----------------------------------------------------------------------------- + +#if !USE_SHARED_LIBRARIES +IMPLEMENT_DYNAMIC_CLASS(wxImageHandler,wxObject) +#endif + +bool wxImageHandler::LoadFile( wxImage *WXUNUSED(image), const wxString& WXUNUSED(name) ) +{ + return FALSE; +} + +bool wxImageHandler::SaveFile( wxImage *WXUNUSED(image), const wxString& WXUNUSED(name) ) +{ + return FALSE; +} + +//----------------------------------------------------------------------------- +// wxPNGHandler +//----------------------------------------------------------------------------- + +#if !USE_SHARED_LIBRARIES +IMPLEMENT_DYNAMIC_CLASS(wxPNGHandler,wxImageHandler) +#endif + +bool wxPNGHandler::LoadFile( wxImage *image, const wxString& name ) +{ + FILE *f; + png_structp png_ptr; + png_infop info_ptr; + unsigned char *ptr, **lines, *ptr2; + int transp,bit_depth,color_type,interlace_type; + png_uint_32 width, height; + + image->Destroy(); + + transp = 0; + png_ptr = png_create_read_struct( PNG_LIBPNG_VER_STRING, NULL, NULL, NULL ); + if (!png_ptr) return FALSE; + + info_ptr = png_create_info_struct( png_ptr ); + if (!info_ptr) + { + png_destroy_read_struct( &png_ptr, NULL, NULL ); + return FALSE; + } + + if (setjmp(png_ptr->jmpbuf)) + { + png_destroy_read_struct( &png_ptr, &info_ptr, NULL ); + return FALSE; + } + + if (info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA) + { + png_destroy_read_struct( &png_ptr, &info_ptr, NULL ); + return FALSE; + } + + f = fopen( name, "rb" ); + png_init_io( png_ptr, f ); + + png_read_info( png_ptr, info_ptr ); + png_get_IHDR( png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, &interlace_type, NULL, NULL ); + + if (color_type == PNG_COLOR_TYPE_PALETTE) png_set_expand( png_ptr ); + + png_set_strip_16( png_ptr ); + png_set_packing( png_ptr ); + if (png_get_valid( png_ptr, info_ptr, PNG_INFO_tRNS)) png_set_expand( png_ptr ); + png_set_filler( png_ptr, 0xff, PNG_FILLER_AFTER ); + + image->Create( width, height ); + + if (!image->Ok()) + { + png_destroy_read_struct( &png_ptr, &info_ptr, NULL ); + return FALSE; + } + + lines = (unsigned char **)malloc( height * sizeof(unsigned char *) ); + if (lines == NULL) + { + image->Destroy(); + png_destroy_read_struct( &png_ptr, &info_ptr, NULL ); + return FALSE; + } + + for (unsigned int i = 0; i < height; i++) + { + if ((lines[i] = (unsigned char *)malloc(width * (sizeof(unsigned char) * 4))) == NULL) + { + image->Destroy(); + for (unsigned int n = 0; n < i; n++) free( lines[n] ); + free( lines ); + png_destroy_read_struct( &png_ptr, &info_ptr, NULL ); + return FALSE; + } + } + + png_read_image( png_ptr, lines ); + png_destroy_read_struct( &png_ptr, &info_ptr, NULL ); + ptr = image->GetData(); + if ((color_type == PNG_COLOR_TYPE_GRAY) || + (color_type == PNG_COLOR_TYPE_GRAY_ALPHA)) + { + for (unsigned int y = 0; y < height; y++) + { + ptr2 = lines[y]; + for (unsigned int x = 0; x < width; x++) + { + unsigned char r = *ptr2++; + unsigned char a = *ptr2++; + if (a < 128) + { + *ptr++ = 255; + *ptr++ = 0; + *ptr++ = 255; + transp = 1; + } + else + { + *ptr++ = r; + *ptr++ = r; + *ptr++ = r; + } + } + } + } + else + { + for (unsigned int y = 0; y < height; y++) + { + ptr2 = lines[y]; + for (unsigned int x = 0; x < width; x++) + { + unsigned char r = *ptr2++; + unsigned char g = *ptr2++; + unsigned char b = *ptr2++; + unsigned char a = *ptr2++; + if (a < 128) + { + *ptr++ = 255; + *ptr++ = 0; + *ptr++ = 255; + transp = 1; + } + else + { + if ((r == 255) && (g == 0) && (b == 255)) r = 254; + *ptr++ = r; + *ptr++ = g; + *ptr++ = b; + } + } + } + } + for (unsigned int i = 0; i < height; i++) free( lines[i] ); + free( lines ); + if (transp) + image->SetMaskColour( 255, 0, 255 ); + else + image->SetMask( FALSE ); + + return TRUE; +} + + +bool wxPNGHandler::SaveFile( wxImage *image, const wxString& name ) +{ + FILE *f = fopen( name, "wb" ); + if (f) + { + png_structp png_ptr = png_create_write_struct( PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); + if (!png_ptr) + { + fclose( f ); + return FALSE; + } + + png_infop info_ptr = png_create_info_struct(png_ptr); + if (info_ptr == NULL) + { + fclose(f); + png_destroy_write_struct( &png_ptr, (png_infopp)NULL ); + return FALSE; + } + + if (setjmp(png_ptr->jmpbuf)) + { + fclose( f ); + png_destroy_write_struct( &png_ptr, (png_infopp)NULL ); + return FALSE; + } + + png_init_io( png_ptr, f ); + png_set_IHDR( png_ptr, info_ptr, image->GetWidth(), image->GetHeight(), 8, + PNG_COLOR_TYPE_RGB_ALPHA, PNG_INTERLACE_NONE, + PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); + + png_color_8 sig_bit; + sig_bit.red = 8; + sig_bit.green = 8; + sig_bit.blue = 8; + sig_bit.alpha = 8; + png_set_sBIT( png_ptr, info_ptr, &sig_bit ); + png_write_info( png_ptr, info_ptr ); + png_set_shift( png_ptr, &sig_bit ); + png_set_packing( png_ptr ); + + unsigned char *data = (unsigned char *)malloc( image->GetWidth()*4 ); + if (!data) + { + fclose( f ); + png_destroy_write_struct( &png_ptr, (png_infopp)NULL ); + return FALSE; + } + + for (int y = 0; y < image->GetHeight(); y++) + { + unsigned char *ptr = image->GetData() + (y * image->GetWidth() * 3); + for (int x = 0; x < image->GetWidth(); x++) + { + data[(x << 2) + 0] = *ptr++; + data[(x << 2) + 1] = *ptr++; + data[(x << 2) + 2] = *ptr++; + if ((data[(x << 2) + 0] == image->GetMaskRed()) && + (data[(x << 2) + 1] == image->GetMaskGreen()) && + (data[(x << 2) + 2] == image->GetMaskBlue())) + data[(x << 2) + 3] = 0; + else + data[(x << 2) + 3] = 255; + } + png_bytep row_ptr = data; + png_write_rows( png_ptr, &row_ptr, 1 ); + } + free(data); + png_write_end( png_ptr, info_ptr ); + png_destroy_write_struct( &png_ptr, (png_infopp)NULL ); + + fclose(f); + } + return TRUE; +} + +//----------------------------------------------------------------------------- +// wxBMPHandler +//----------------------------------------------------------------------------- + +#if !USE_SHARED_LIBRARIES +IMPLEMENT_DYNAMIC_CLASS(wxBMPHandler,wxImageHandler) +#endif + +bool wxBMPHandler::LoadFile( wxImage *image, const wxString& name ) +{ + FILE *file; + unsigned char *data, *ptr; + int done, i, bpp, planes, comp, ncolors, line, column, + linesize, linepos, rshift = 0, gshift = 0, bshift = 0; + unsigned char byte; + short int word; + long int dbuf[4], dword, rmask = 0, gmask = 0, bmask = 0, offset, + size; + signed char bbuf[4]; + struct _cmap + { + unsigned char r, g, b; + } + *cmap = NULL; + +#define BI_RGB 0 +#define BI_RLE8 1 +#define BI_RLE4 2 +#define BI_BITFIELDS 3 + + image->Destroy(); + + file = fopen(name, "r"); + if (!file) + return NULL; + + done = 0; + /* + * Reading the bmp header + */ + + fread(&bbuf, 1, 2, file); + + fread(dbuf, 4, 4, file); + + size = dbuf[0]; + offset = dbuf[2]; + + fread(dbuf, 4, 2, file); + int width = (int)dbuf[0]; + int height = (int)dbuf[1]; + if (width > 32767) + { + fprintf(stderr, "IMLIB ERROR: Image width > 32767 pixels for file\n"); + fclose(file); + return FALSE; + } + if (height > 32767) + { + fprintf(stderr, "IMLIB ERROR: Image height > 32767 pixels for file\n"); + fclose(file); + return FALSE; + } + fread(&word, 2, 1, file); + planes = (int)word; + fread(&word, 2, 1, file); + bpp = (int)word; + if (bpp != 1 && bpp != 4 && bpp != 8 && bpp && 16 && bpp != 24 && bpp != 32) + { + fprintf(stderr, "IMLIB ERROR: unknown bitdepth in file\n"); + fclose(file); + return FALSE; + } + fread(dbuf, 4, 4, file); + comp = (int)dbuf[0]; + if (comp != BI_RGB && comp != BI_RLE4 && comp != BI_RLE8 && comp != BI_BITFIELDS) + { + fprintf(stderr, "IMLIB ERROR: unknown encoding in Windows BMP file\n"); + fclose(file); + return FALSE; + } + fread(dbuf, 4, 2, file); + ncolors = (int)dbuf[0]; + if (ncolors == 0) + ncolors = 1 << bpp; + /* some more sanity checks */ + if (((comp == BI_RLE4) && (bpp != 4)) || ((comp == BI_RLE8) && (bpp != 8)) || ((comp == BI_BITFIELDS) && (bpp != 16 && bpp != 32))) + { + fprintf(stderr, "IMLIB ERROR: encoding of BMP doesn't match bitdepth\n"); + fclose(file); + return FALSE; + } + if (bpp < 16) + { + cmap = (struct _cmap *)malloc(sizeof(struct _cmap) * ncolors); + + if (!cmap) + { + fprintf(stderr, "IMLIB ERROR: Cannot allocate RAM for color map in BMP file\n"); + fclose(file); + return FALSE; + } + } + else + cmap = NULL; + + image->Create( width, height ); + ptr = image->GetData(); + if (!ptr) + { + fprintf(stderr, "IMLIB ERROR: Cannot allocate RAM for RGB data in file\n"); + fclose(file); + if (cmap) + free(cmap); + return FALSE; + } + + /* + * Reading the palette, if it exists. + */ + if (bpp < 16 && ncolors != 0) + { + for (i = 0; i < ncolors; i++) + { + fread(bbuf, 1, 4, file); + cmap[i].b = bbuf[0]; + cmap[i].g = bbuf[1]; + cmap[i].r = bbuf[2]; + } + } + else if (bpp == 16 || bpp == 32) + { + if (comp == BI_BITFIELDS) + { + int bit = 0; + + fread(dbuf, 4, 3, file); + bmask = dbuf[0]; + gmask = dbuf[1]; + rmask = dbuf[2]; + /* find shift amount.. ugly, but i can't think of a better way */ + for (bit = 0; bit < bpp; bit++) + { + if (bmask & (1 << bit)) + bshift = bit; + if (gmask & (1 << bit)) + gshift = bit; + if (rmask & (1 << bit)) + rshift = bit; + } + } + else if (bpp == 16) + { + rmask = 0x7C00; + gmask = 0x03E0; + bmask = 0x001F; + rshift = 10; + gshift = 5; + bshift = 0; + } + else if (bpp == 32) + { + rmask = 0x00FF0000; + gmask = 0x0000FF00; + bmask = 0x000000FF; + rshift = 16; + gshift = 8; + bshift = 0; + } + } + + /* + * REading the image data + */ + fseek(file, offset, SEEK_SET); + data = ptr; + + /* set the whole image to the background color */ + if (bpp < 16 && (comp == BI_RLE4 || comp == BI_RLE8)) + { + for (i = 0; i < width * height; i++) + { + *ptr++ = cmap[0].r; + *ptr++ = cmap[0].g; + *ptr++ = cmap[0].b; + } + ptr = data; + } + line = 0; + column = 0; +#define poffset (line * width * 3 + column * 3) + + /* + * BMPs are stored upside down... hmmmmmmmmmm.... + */ + + linesize = ((width * bpp + 31) / 32) * 4; + for (line = (height - 1); line >= 0; line--) + { + linepos = 0; + for (column = 0; column < width;) + { + if (bpp < 16) + { + int index; + + linepos++; + byte = getc(file); + if (bpp == 1) + { + int bit = 0; + + for (bit = 0; bit < 8; bit++) + { + index = ((byte & (0x80 >> bit)) ? 1 : 0); + ptr[poffset] = cmap[index].r; + ptr[poffset + 1] = cmap[index].g; + ptr[poffset + 2] = cmap[index].b; + column++; + } + } + else if (bpp == 4) + { + if (comp == BI_RLE4) + { + fprintf(stderr, "can't deal with 4bit encoded yet.\n"); + image->Destroy(); + free(cmap); + return FALSE; + } + else + { + int nibble = 0; + + for (nibble = 0; nibble < 2; nibble++) + { + index = ((byte & (0xF0 >> nibble * 4)) >> (!nibble * 4)); + if (index >= 16) + index = 15; + ptr[poffset] = cmap[index].r; + ptr[poffset + 1] = cmap[index].g; + ptr[poffset + 2] = cmap[index].b; + column++; + } + } + } + else if (bpp == 8) + { + if (comp == BI_RLE8) + { + unsigned char first; + + first = byte; + byte = getc(file); + if (first == 0) + { + if (byte == 0) + { +/* column = width; */ + } + else if (byte == 1) + { + column = width; + line = -1; + } + else if (byte == 2) + { + byte = getc(file); + column += byte; + linepos = column * bpp / 8; + byte = getc(file); + line += byte; + } + else + { + int absolute = byte; + + for (i = 0; i < absolute; i++) + { + +linepos++; + byte = getc(file); + ptr[poffset] = cmap[byte].r; + ptr[poffset + 1] = cmap[byte].g; + ptr[poffset + 2] = cmap[byte].b; + column++; + } + if (absolute & 0x01) + byte = getc(file); + } + } + else + { + for (i = 0; i < first; i++) + { + ptr[poffset] = cmap[byte].r; + ptr[poffset + 1] = cmap[byte].g; + ptr[poffset + 2] = cmap[byte].b; + column++; + linepos++; + } + } + } + else + { + ptr[poffset] = cmap[byte].r; + ptr[poffset + 1] = cmap[byte].g; + ptr[poffset + 2] = cmap[byte].b; + column++; + linepos += size; + } + } + } + else if (bpp == 24) + { + linepos += fread(&bbuf, 1, 3, file); + ptr[poffset] = (unsigned char)bbuf[2]; + ptr[poffset + 1] = (unsigned char)bbuf[1]; + ptr[poffset + 2] = (unsigned char)bbuf[0]; + column++; + } + else if (bpp == 16) + { + unsigned char temp; + + linepos += fread(&word, 2, 1, file); + temp = (word & rmask) >> rshift; + ptr[poffset] = temp; + temp = (word & gmask) >> gshift; + ptr[poffset + 1] = temp; + temp = (word & bmask) >> gshift; + ptr[poffset + 2] = temp; + column++; + } + else + { + unsigned char temp; + + linepos += fread(&dword, 4, 1, file); + temp = (dword & rmask) >> rshift; + ptr[poffset] = temp; + temp = (dword & gmask) >> gshift; + ptr[poffset + 1] = temp; + temp = (dword & bmask) >> bshift; + ptr[poffset + 2] = temp; + column++; + } + } + while ((linepos < linesize) && (comp != 1) && (comp != 2)) + { + int temp = fread(&byte, 1, 1, file); + + linepos += temp; + if (!temp) + break; + } + } + if (cmap) free(cmap); + + image->SetMask( FALSE ); + + fclose(file); + return TRUE; +} + diff --git a/src/generic/imaglist.cpp b/src/generic/imaglist.cpp index 20a5101650..fcc9c4e173 100644 --- a/src/generic/imaglist.cpp +++ b/src/generic/imaglist.cpp @@ -2,9 +2,8 @@ // Name: imaglist.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -91,15 +90,6 @@ bool wxImageList::RemoveAll() bool wxImageList::GetSize( int index, int &width, int &height ) const { -#ifdef __WXGTK__ - - width = m_width; - height = m_height; - - return (m_images.Nth( index ) != NULL); - -#else - wxNode *node = m_images.Nth( index ); if (node) { @@ -114,8 +104,6 @@ bool wxImageList::GetSize( int index, int &width, int &height ) const height = 0; return FALSE; } - -#endif } bool wxImageList::Draw( int index, wxDC &dc, int x, int y, @@ -125,19 +113,6 @@ bool wxImageList::Draw( int index, wxDC &dc, int x, int y, if (!node) return FALSE; wxBitmap *bm = (wxBitmap*)node->Data(); -#ifdef __WXGTK__ - - // As X doesn't have a standard size for icons, we resize here. - // Otherwise we'd simply have to forbid different bitmap sizes. - - if ((m_width != bm->GetWidth()) || - (m_height != bm->GetHeight())) - { - bm->Resize( m_width, m_height ); - } - -#endif - wxIcon *icon = (wxIcon*)bm; dc.DrawIcon( *icon, x, y, (flags & wxIMAGELIST_DRAW_TRANSPARENT) > 0 ); diff --git a/src/gtk.inc b/src/gtk.inc index 063d5cca2f..507bb5b075 100644 --- a/src/gtk.inc +++ b/src/gtk.inc @@ -25,6 +25,7 @@ LIB_CPP_SRC=\ common/hash.cpp \ common/helpbase.cpp \ common/intl.cpp \ + common/image.cpp \ common/ipcbase.cpp \ common/layout.cpp \ common/list.cpp \ @@ -167,12 +168,3 @@ LIB_C_SRC=\ zlib/infcodes.c \ zlib/infutil.c \ zlib/inffast.c \ -\ - gdk_imlib/cache.c \ - gdk_imlib/colors.c \ - gdk_imlib/globals.c \ - gdk_imlib/load.c \ - gdk_imlib/misc.c \ - gdk_imlib/rend.c \ - gdk_imlib/save.c \ - gdk_imlib/utils.c diff --git a/src/gtk/app.cpp b/src/gtk/app.cpp index fb0c54118a..d65cff17cf 100644 --- a/src/gtk/app.cpp +++ b/src/gtk/app.cpp @@ -2,9 +2,8 @@ // Name: app.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling, Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -24,10 +23,6 @@ #include "unistd.h" -#ifdef wxUSE_GDK_IMLIB -#include "../gdk_imlib/gdk_imlib.h" -#endif - //----------------------------------------------------------------------------- // global data //----------------------------------------------------------------------------- @@ -38,6 +33,74 @@ wxAppInitializerFunction wxApp::m_appInitFn = (wxAppInitializerFunction) NULL; extern wxList wxPendingDelete; extern wxResourceCache *wxTheResourceCache; +unsigned char g_palette[64*3] = +{ + 0x0, 0x0, 0x0, + 0xff, 0xff, 0xff, + 0xff, 0x0, 0x0, + 0xff, 0xff, 0x0, + 0x0, 0xff, 0x0, + 0x0, 0x0, 0xff, + 0x0, 0xff, 0xff, + 0x99, 0x99, 0x99, + 0xff, 0x88, 0x0, + 0x88, 0x0, 0x0, + 0x0, 0x88, 0x88, + 0x88, 0x88, 0x0, + 0xff, 0xcc, 0x97, + 0xbb, 0xbb, 0xbb, + 0x9f, 0x6b, 0x42, + 0x55, 0x55, 0x55, + 0xdd, 0xdd, 0xdd, + 0x77, 0x77, 0x77, + 0x33, 0x33, 0x33, + 0xcc, 0x0, 0x0, + 0xff, 0x44, 0x0, + 0xff, 0xcc, 0x0, + 0xcc, 0xcc, 0x0, + 0x60, 0x60, 0x0, + 0x0, 0x43, 0x0, + 0x0, 0x7f, 0x0, + 0x0, 0xcc, 0x0, + 0x0, 0x44, 0x44, + 0x0, 0x0, 0x44, + 0x0, 0x0, 0x88, + 0xef, 0xb1, 0x7b, + 0xdf, 0x98, 0x5f, + 0xbf, 0x87, 0x56, + 0x7f, 0x57, 0x26, + 0x5f, 0x39, 0xc, + 0x3f, 0x1c, 0x0, + 0x21, 0x0, 0x0, + 0x0, 0x43, 0x87, + 0x2d, 0x70, 0xaf, + 0x5a, 0x9e, 0xd7, + 0x87, 0xcc, 0xff, + 0xff, 0xe0, 0xba, + 0x21, 0x43, 0xf, + 0x3d, 0x5d, 0x25, + 0x59, 0x78, 0x3a, + 0x75, 0x93, 0x4f, + 0x91, 0xae, 0x64, + 0xad, 0xc8, 0x7a, + 0xf0, 0xa8, 0xef, + 0xd0, 0x88, 0xd0, + 0xaf, 0x66, 0xaf, + 0x8e, 0x44, 0x8e, + 0x6d, 0x22, 0x6d, + 0x4b, 0x0, 0x4b, + 0xff, 0xc0, 0xbc, + 0xff, 0x93, 0x91, + 0xff, 0x66, 0x67, + 0xd8, 0xf2, 0xbf, + 0xff, 0xc9, 0x68, + 0xff, 0x96, 0x67, + 0xa5, 0x60, 0xff, + 0x51, 0xff, 0x99, + 0x3f, 0xa5, 0x63, + 0x98, 0x90, 0x67 +}; + //----------------------------------------------------------------------------- // local functions //----------------------------------------------------------------------------- @@ -355,15 +418,22 @@ int wxEntry( int argc, char *argv[] ) gtk_init( &argc, &argv ); -#ifdef wxUSE_GDK_IMLIB - - gdk_imlib_init(); - - gtk_widget_push_visual(gdk_imlib_get_visual()); + GdkColormap *cmap = gdk_colormap_new( gdk_visual_get_system(), TRUE ); - gtk_widget_push_colormap(gdk_imlib_get_colormap()); - -#endif + for (int i = 0; i < 64; i++) + { + GdkColor col; + col.red = g_palette[i*3 + 0] << 8; + col.green = g_palette[i*3 + 1] << 8; + col.blue = g_palette[i*3 + 2] << 8; + col.pixel = 0; + + gdk_color_alloc( cmap, &col ); + } + + gtk_widget_push_colormap( cmap ); + + gtk_widget_set_default_colormap( cmap ); wxApp::CommonInit(); diff --git a/src/gtk/bitmap.cpp b/src/gtk/bitmap.cpp index 07519ea19f..4706c2e7d7 100644 --- a/src/gtk/bitmap.cpp +++ b/src/gtk/bitmap.cpp @@ -2,9 +2,8 @@ // Name: bitmap.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 // RCS-ID: $Id$ -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -15,15 +14,7 @@ #include "wx/bitmap.h" #include "wx/icon.h" #include "gdk/gdkprivate.h" - -#ifdef wxUSE_GDK_IMLIB - -#include "../gdk_imlib/gdk_imlib.h" -#include "gdk/gdkx.h" // GDK_DISPLAY -#include -#include - -#endif +#include "gdk/gdkx.h" //----------------------------------------------------------------------------- // wxMask @@ -50,11 +41,7 @@ wxMask::wxMask( const wxBitmap& WXUNUSED(bitmap) ) wxMask::~wxMask(void) { -#ifdef wxUSE_GDK_IMLIB - // do not delete the mask, gdk_imlib does it for you -#else if (m_bitmap) gdk_bitmap_unref( m_bitmap ); -#endif } GdkBitmap *wxMask::GetBitmap(void) const @@ -66,7 +53,6 @@ GdkBitmap *wxMask::GetBitmap(void) const // wxBitmap //----------------------------------------------------------------------------- -// CMB 20/5/98: added m_bitmap for GdkBitmaps class wxBitmapRefData: public wxObjectRefData { public: @@ -80,9 +66,6 @@ class wxBitmapRefData: public wxObjectRefData int m_width; int m_height; int m_bpp; -#ifdef wxUSE_GDK_IMLIB - GdkImlibImage *m_image; -#endif wxPalette *m_palette; }; @@ -95,19 +78,11 @@ wxBitmapRefData::wxBitmapRefData(void) m_height = 0; m_bpp = 0; m_palette = (wxPalette *) NULL; -#ifdef wxUSE_GDK_IMLIB - m_image = (GdkImlibImage *) NULL; -#endif } wxBitmapRefData::~wxBitmapRefData(void) { -#ifdef wxUSE_GDK_IMLIB - if (m_pixmap) gdk_imlib_free_pixmap( m_pixmap ); - if (m_image) gdk_imlib_kill_image( m_image ); -#else if (m_pixmap) gdk_pixmap_unref( m_pixmap ); -#endif if (m_bitmap) gdk_bitmap_unref( m_bitmap ); if (m_mask) delete m_mask; if (m_palette) delete m_palette; @@ -141,8 +116,6 @@ wxBitmap::wxBitmap( char **bits ) { m_refData = new wxBitmapRefData(); -#ifndef wxUSE_GDK_IMLIB - GdkBitmap *mask = NULL; M_BMPDATA->m_pixmap = @@ -156,13 +129,6 @@ wxBitmap::wxBitmap( char **bits ) gdk_window_get_size( M_BMPDATA->m_pixmap, &(M_BMPDATA->m_width), &(M_BMPDATA->m_height) ); -#else - - M_BMPDATA->m_image = gdk_imlib_create_image_from_xpm_data( bits ); - Render(); - -#endif - M_BMPDATA->m_bpp = 24; // ? if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this); @@ -189,7 +155,6 @@ wxBitmap::wxBitmap( const wxString &filename, int type ) if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this); } -// CMB 15/5/98: add constructor for xbm bitmaps wxBitmap::wxBitmap( const char bits[], int width, int height, int WXUNUSED(depth)) { m_refData = new wxBitmapRefData(); @@ -315,43 +280,7 @@ void wxBitmap::SetMask( wxMask *mask ) M_BMPDATA->m_mask = mask; } -void wxBitmap::Resize( int height, int width ) -{ - if (!Ok()) - { - wxFAIL_MSG( "invalid bitmap" ); - return; - } - -#ifdef wxUSE_GDK_IMLIB - - if (M_BMPDATA->m_bitmap) - { - wxFAIL_MSG( "wxBitmap::Resize not supported for mono-bitmaps" ); - return; - } - - if (!M_BMPDATA->m_image) RecreateImage(); - - if (M_BMPDATA->m_pixmap) gdk_imlib_free_pixmap( M_BMPDATA->m_pixmap ); - if (M_BMPDATA->m_mask) delete M_BMPDATA->m_mask; - - GdkImlibImage* image = gdk_imlib_clone_scaled_image( M_BMPDATA->m_image, height, width ); - gdk_imlib_destroy_image( M_BMPDATA->m_image ); - M_BMPDATA->m_image = image; - M_BMPDATA->m_height = height; - M_BMPDATA->m_width = width; - - Render(); - -#else - - wxFAIL_MSG( "wxBitmap::Resize not implemented without GdkImlib" ); - -#endif -} - -bool wxBitmap::SaveFile( const wxString &name, int WXUNUSED(type), +bool wxBitmap::SaveFile( const wxString &WXUNUSED(name), int WXUNUSED(type), wxPalette *WXUNUSED(palette) ) { if (!Ok()) @@ -360,55 +289,17 @@ bool wxBitmap::SaveFile( const wxString &name, int WXUNUSED(type), return FALSE; } -#ifdef wxUSE_GDK_IMLIB - - if (M_BMPDATA->m_bitmap) - { - wxFAIL_MSG( "wxBitmap::SaveFile not supported for mono-bitmaps" ); - return FALSE; - } - - if (!M_BMPDATA->m_image) RecreateImage(); - - return gdk_imlib_save_image( M_BMPDATA->m_image, WXSTRINGCAST name, (GdkImlibSaveInfo *) NULL ); - -#else - - wxFAIL_MSG( "wxBitmap::SaveFile not implemented without GdkImlib" ); - -#endif - return FALSE; } -bool wxBitmap::LoadFile( const wxString &name, int WXUNUSED(type) ) +bool wxBitmap::LoadFile( const wxString &WXUNUSED(name), int WXUNUSED(type) ) { -#ifdef wxUSE_GDK_IMLIB - - UnRef(); - m_refData = new wxBitmapRefData(); - - M_BMPDATA->m_image = gdk_imlib_load_image( WXSTRINGCAST name ); - - if (!M_BMPDATA->m_image) + if (!Ok()) { - UnRef(); + wxFAIL_MSG( "invalid bitmap" ); return FALSE; } - - Render(); - - gdk_window_get_size( M_BMPDATA->m_pixmap, &(M_BMPDATA->m_width), &(M_BMPDATA->m_height) ); - M_BMPDATA->m_bpp = 24; // ? - - return TRUE; - -#else - - wxFAIL_MSG( "wxBitmap::LoadFile not implemented without GdkImlib" ); -#endif - return FALSE; } @@ -426,8 +317,6 @@ GdkPixmap *wxBitmap::GetPixmap(void) const return (GdkPixmap *) NULL; } -// if (!M_BMPDATA->m_image) RecreateImage(); - return M_BMPDATA->m_pixmap; } @@ -442,118 +331,200 @@ GdkBitmap *wxBitmap::GetBitmap(void) const return M_BMPDATA->m_bitmap; } -void wxBitmap::DestroyImage(void) +wxBitmap::wxBitmap( const wxImage &image ) { - if (!Ok()) - { - wxFAIL_MSG( "invalid bitmap" ); - return; - } + if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this); - if (M_BMPDATA->m_image) - { - gdk_imlib_destroy_image( M_BMPDATA->m_image ); - M_BMPDATA->m_image = (GdkImlibImage *) NULL; - } -} + if (!image.Ok()) return; -void wxBitmap::RecreateImage(void) -{ - if (!Ok()) - { - wxFAIL_MSG( "invalid bitmap" ); - return; - } - -#ifdef wxUSE_GDK_IMLIB + m_refData = new wxBitmapRefData(); - DestroyImage(); + M_BMPDATA->m_height = image.GetHeight(); + M_BMPDATA->m_width = image.GetWidth(); + int width = image.GetWidth(); + int height = image.GetHeight(); + + // Create picture - wxCHECK_RET( M_BMPDATA->m_pixmap != NULL, "invalid bitmap" ); + GdkImage *data_image = + gdk_image_new( GDK_IMAGE_FASTEST, gdk_visual_get_system(), width, height ); - long size = (long)(M_BMPDATA->m_width)*(long)(M_BMPDATA->m_height)*(long)3; - unsigned char *data = new unsigned char[size]; - for (long i = 0; i < size; i++) data[i] = 100; + M_BMPDATA->m_pixmap = + gdk_pixmap_new( (GdkWindow*)&gdk_root_parent, width, height, -1 ); + + // Create mask - GdkImage *image = gdk_image_get( M_BMPDATA->m_pixmap, 0, 0, M_BMPDATA->m_width, M_BMPDATA->m_height ); + GdkImage *mask_image = (GdkImage*) NULL; - long pos = 0; - for (int j = 0; j < M_BMPDATA->m_height; j++) + if (image.HasMask()) { - for (int i = 0; i < M_BMPDATA->m_width; i++) - { - XColor xcol; - xcol.pixel = gdk_image_get_pixel( image, i, j ); - Colormap cm = ((GdkColormapPrivate*)gdk_imlib_get_colormap())->xcolormap; - XQueryColor( gdk_display, cm, &xcol ); - - data[pos] = xcol.red; - data[pos+1] = xcol.green; - data[pos+2] = xcol.blue; - pos += 3; - } + unsigned char *mask_data = (unsigned char*)malloc( ((width >> 3)+8) * height ); + + mask_image = gdk_image_new_bitmap( gdk_visual_get_system(), mask_data, width, height ); + + M_BMPDATA->m_mask = new wxMask(); + M_BMPDATA->m_mask->m_bitmap = gdk_pixmap_new( (GdkWindow*)&gdk_root_parent, width, height, 1 ); } - wxCHECK_RET( M_BMPDATA->m_pixmap != NULL, "invalid bitmap" ); + // Retrieve depth + + M_BMPDATA->m_bpp = data_image->depth; + + int render_depth = 8; + if (M_BMPDATA->m_bpp > 8) render_depth = M_BMPDATA->m_bpp; + + // Render + + int r_mask = image.GetMaskRed(); + int g_mask = image.GetMaskGreen(); + int b_mask = image.GetMaskBlue(); + + unsigned char* data = image.GetData(); + + int index = 0; + for (int y = 0; y < height; y++) + for (int x = 0; x < width; x++) + { + int r = data[index]; + index++; + int g = data[index]; + index++; + int b = data[index]; + index++; + + if (image.HasMask()) + { + if ((r == r_mask) && (b = b_mask) && (g = g_mask)) + gdk_image_put_pixel( mask_image, x, y, 0 ); + else + gdk_image_put_pixel( mask_image, x, y, 1 ); + } + + switch (render_depth) + { + case 8: + { + GdkColormap *cmap = gtk_widget_get_default_colormap(); + GdkColor *colors = cmap->colors; + int max = 3 * (65536); + int index = -1; + + for (int i = 0; i < cmap->size; i++) + { + int rdiff = (r << 8) - colors[i].red; + int gdiff = (g << 8) - colors[i].green; + int bdiff = (b << 8) - colors[i].blue; + int sum = ABS (rdiff) + ABS (gdiff) + ABS (bdiff); + if (sum < max) { index = i; max = sum; } + } + + gdk_image_put_pixel( data_image, x, y, index ); + + break; + } + case 15: + { + guint32 pixel = ((r & 0xf8) << 7) | ((g & 0xf8) << 2) | ((b & 0xf8) >> 3); + gdk_image_put_pixel( data_image, x, y, pixel ); + break; + } + case 16: + { + guint32 pixel = ((r & 0xf8) << 8) | ((g & 0xfc) << 3) | ((b & 0xf8) >> 3); + gdk_image_put_pixel( data_image, x, y, pixel ); + break; + } + case 24: + { + break; + } + case 32: + { + break; + } + default: break; + } + } + + // Blit picture - M_BMPDATA->m_image = gdk_imlib_create_image_from_data( - data, (unsigned char*)NULL, M_BMPDATA->m_width, M_BMPDATA->m_height ); + GdkGC *data_gc = gdk_gc_new( M_BMPDATA->m_pixmap ); - delete[] data; + gdk_draw_image( M_BMPDATA->m_pixmap, data_gc, data_image, 0, 0, 0, 0, width, height ); - gdk_image_destroy( image ); + gdk_image_destroy( data_image ); + gdk_gc_unref( data_gc ); - Render(); + // Blit mask -#else + if (image.HasMask()) + { + GdkGC *mask_gc = gdk_gc_new( M_BMPDATA->m_mask->m_bitmap ); - wxFAIL_MSG( "wxBitmap::RecreateImage not implemented without GdkImlib" ); + gdk_draw_image( M_BMPDATA->m_mask->m_bitmap, mask_gc, mask_image, 0, 0, 0, 0, width, height ); -#endif + gdk_image_destroy( mask_image ); + gdk_gc_unref( mask_gc ); + } + } -void wxBitmap::Render(void) +wxImage wxBitmap::ConvertToImage() const { + wxImage image; + if (!Ok()) { wxFAIL_MSG( "invalid bitmap" ); - return; + return image; } -#ifdef wxUSE_GDK_IMLIB - - if (!M_BMPDATA->m_image) RecreateImage(); + GdkImage *gdk_image = gdk_image_get( M_BMPDATA->m_pixmap, 0, 0, M_BMPDATA->m_width, M_BMPDATA->m_height ); - if (M_BMPDATA->m_pixmap) - { - gdk_imlib_free_pixmap( M_BMPDATA->m_pixmap ); - M_BMPDATA->m_pixmap = (GdkPixmap*) NULL; - } - if (M_BMPDATA->m_mask) - { - delete M_BMPDATA->m_mask; - M_BMPDATA->m_mask = (wxMask*) NULL; - } + if (!gdk_image) return image; - gdk_imlib_render( M_BMPDATA->m_image, M_BMPDATA->m_image->rgb_width, M_BMPDATA->m_image->rgb_height ); - M_BMPDATA->m_width = M_BMPDATA->m_image->rgb_width; - M_BMPDATA->m_height = M_BMPDATA->m_image->rgb_height; - M_BMPDATA->m_pixmap = gdk_imlib_move_image( M_BMPDATA->m_image ); + image.Create( M_BMPDATA->m_width, M_BMPDATA->m_height ); + char unsigned *data = image.GetData(); - wxCHECK_RET( M_BMPDATA->m_pixmap != NULL, "pixmap rendering failed" ) + int bpp = gdk_image->bpp; + GdkColormap *cmap = gtk_widget_get_default_colormap(); - GdkBitmap *mask = gdk_imlib_move_mask( M_BMPDATA->m_image ); - if (mask) + long pos = 0; + for (int j = 0; j < M_BMPDATA->m_height; j++) { - M_BMPDATA->m_mask = new wxMask(); - M_BMPDATA->m_mask->m_bitmap = mask; + for (int i = 0; i < M_BMPDATA->m_width; i++) + { + int pixel = gdk_image_get_pixel( gdk_image, i, j ); + if (bpp <= 8) + { + data[pos] = cmap->colors[pixel].red >> 8; + data[pos+1] = cmap->colors[pixel].green >> 8; + data[pos+2] = cmap->colors[pixel].blue >> 8; + } else if (bpp == 15) + { + data[pos] = (pixel >> 7) & 0xf8; + data[pos+1] = (pixel >> 3) & 0xf8; + data[pos+2] = (pixel << 3) & 0xf8; + } else if (bpp == 16) + { + data[pos] = (pixel >> 8) & 0xf8; + data[pos+1] = (pixel >> 3) & 0xfc; + data[pos+2] = (pixel << 3) & 0xf8; + } else + { + data[pos] = (pixel >> 16) & 0xff; + data[pos+1] = (pixel >> 8) & 0xff; + data[pos+2] = pixel & 0xff; + } + + pos += 3; + } } -#else + gdk_image_destroy( gdk_image ); - wxFAIL_MSG( "wxBitmap::Render not implemented without GdkImlib" ); - -#endif + return image; } + diff --git a/src/gtk/bmpbuttn.cpp b/src/gtk/bmpbuttn.cpp index 25968dbcd8..df7d7f6a1a 100644 --- a/src/gtk/bmpbuttn.cpp +++ b/src/gtk/bmpbuttn.cpp @@ -2,9 +2,8 @@ // Name: bmpbuttn.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk/brush.cpp b/src/gtk/brush.cpp index ae90ec472d..29131bbede 100644 --- a/src/gtk/brush.cpp +++ b/src/gtk/brush.cpp @@ -2,9 +2,8 @@ // Name: brush.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk/button.cpp b/src/gtk/button.cpp index 034e229f18..b0278860ac 100644 --- a/src/gtk/button.cpp +++ b/src/gtk/button.cpp @@ -2,9 +2,8 @@ // Name: button.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk/checkbox.cpp b/src/gtk/checkbox.cpp index c4aac9364a..385f9bc7c3 100644 --- a/src/gtk/checkbox.cpp +++ b/src/gtk/checkbox.cpp @@ -2,9 +2,8 @@ // Name: checkbox.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk/choice.cpp b/src/gtk/choice.cpp index edcf64f3e9..f6e3925ea4 100644 --- a/src/gtk/choice.cpp +++ b/src/gtk/choice.cpp @@ -2,9 +2,8 @@ // Name: choice.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk/colour.cpp b/src/gtk/colour.cpp index b7c2dc1176..7e57df104f 100644 --- a/src/gtk/colour.cpp +++ b/src/gtk/colour.cpp @@ -15,9 +15,7 @@ #include "wx/gdicmn.h" -#ifdef wxUSE_GDK_IMLIB -#include "../gdk_imlib/gdk_imlib.h" -#endif +#include "gdk/gdkprivate.h" //----------------------------------------------------------------------------- // wxColour @@ -186,19 +184,30 @@ void wxColour::CalcPixel( GdkColormap *cmap ) if ((M_COLDATA->m_hasPixel) && (M_COLDATA->m_colormap == cmap)) return; M_COLDATA->FreeColour(); -#ifdef wxUSE_GDK_IMLIB - - int r = M_COLDATA->m_color.red >> SHIFT; - int g = M_COLDATA->m_color.green >> SHIFT; - int b = M_COLDATA->m_color.blue >> SHIFT; - M_COLDATA->m_hasPixel = TRUE; - M_COLDATA->m_color.pixel = gdk_imlib_best_color_match( &r, &g, &b ); - -#else + GdkColormapPrivate *private_colormap = (GdkColormapPrivate*) cmap; + if ((private_colormap->visual->type == GDK_VISUAL_GRAYSCALE) || + (private_colormap->visual->type == GDK_VISUAL_PSEUDO_COLOR)) + { + GdkColor *colors = cmap->colors; + int max = 3 * (65536); + int index = -1; - M_COLDATA->m_hasPixel = gdk_color_alloc( cmap, &M_COLDATA->m_color ); - -#endif + for (int i = 0; i < cmap->size; i++) + { + int rdiff = (M_COLDATA->m_color.red - colors[i].red); + int gdiff = (M_COLDATA->m_color.green - colors[i].green); + int bdiff = (M_COLDATA->m_color.blue - colors[i].blue); + int sum = ABS (rdiff) + ABS (gdiff) + ABS (bdiff); + if (sum < max) { index = i; max = sum; } + } + + M_COLDATA->m_hasPixel = TRUE; + M_COLDATA->m_color.pixel = index; + } + else + { + M_COLDATA->m_hasPixel = gdk_color_alloc( cmap, &M_COLDATA->m_color ); + } M_COLDATA->m_colormap = cmap; } diff --git a/src/gtk/combobox.cpp b/src/gtk/combobox.cpp index efe78a6f3f..59f2f9821e 100644 --- a/src/gtk/combobox.cpp +++ b/src/gtk/combobox.cpp @@ -2,9 +2,8 @@ // Name: combobox.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk/control.cpp b/src/gtk/control.cpp index 61bab59ecf..658ebcd8c9 100644 --- a/src/gtk/control.cpp +++ b/src/gtk/control.cpp @@ -2,9 +2,8 @@ // Name: control.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling, Julian Smart and Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk/cursor.cpp b/src/gtk/cursor.cpp index 7195cfa0c6..20a8d3c19e 100644 --- a/src/gtk/cursor.cpp +++ b/src/gtk/cursor.cpp @@ -2,9 +2,8 @@ // Name: cursor.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk/data.cpp b/src/gtk/data.cpp index 96bce38d00..815bdca347 100644 --- a/src/gtk/data.cpp +++ b/src/gtk/data.cpp @@ -2,8 +2,7 @@ // Name: data.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: +// Id: $id$ // Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk/dc.cpp b/src/gtk/dc.cpp index 13ffab2a44..3678494de4 100644 --- a/src/gtk/dc.cpp +++ b/src/gtk/dc.cpp @@ -2,7 +2,6 @@ // Name: dc.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 // RCS-ID: $Id$ // Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem // Licence: wxWindows licence diff --git a/src/gtk/dcclient.cpp b/src/gtk/dcclient.cpp index 17cd007433..a724a4d51c 100644 --- a/src/gtk/dcclient.cpp +++ b/src/gtk/dcclient.cpp @@ -2,9 +2,8 @@ // Name: dcclient.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 // RCS-ID: $Id$ -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Copyright: (c) 1998 Robert Roebling, Markus Holzem, Chris Breeze // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -138,8 +137,6 @@ void wxPaintDC::DrawLine( long x1, long y1, long x2, long y2 ) { if (!Ok()) return; - if (m_isMemDC) ((wxMemoryDC*)this)->m_selected.DestroyImage(); - if (m_pen.GetStyle() != wxTRANSPARENT) { gdk_draw_line( m_window, m_penGC, @@ -151,8 +148,6 @@ void wxPaintDC::CrossHair( long x, long y ) { if (!Ok()) return; - if (m_isMemDC) ((wxMemoryDC*)this)->m_selected.DestroyImage(); - if (m_pen.GetStyle() != wxTRANSPARENT) { int w = 0; @@ -171,8 +166,6 @@ void wxPaintDC::DrawArc( long x1, long y1, long x2, long y2, double xc, double y { if (!Ok()) return; - if (m_isMemDC) ((wxMemoryDC*)this)->m_selected.DestroyImage(); - long xx1 = XLOG2DEV(x1); long yy1 = YLOG2DEV(y1); long xx2 = XLOG2DEV(x2); @@ -221,8 +214,6 @@ void wxPaintDC::DrawEllipticArc( long x, long y, long width, long height, double { if (!Ok()) return; - if (m_isMemDC) ((wxMemoryDC*)this)->m_selected.DestroyImage(); - long xx = XLOG2DEV(x); long yy = YLOG2DEV(y); long ww = m_signX * XLOG2DEVREL(width); @@ -245,8 +236,6 @@ void wxPaintDC::DrawPoint( long x, long y ) { if (!Ok()) return; - if (m_isMemDC) ((wxMemoryDC*)this)->m_selected.DestroyImage(); - if (m_pen.GetStyle() != wxTRANSPARENT) gdk_draw_point( m_window, m_penGC, XLOG2DEV(x), YLOG2DEV(y) ); } @@ -255,8 +244,6 @@ void wxPaintDC::DrawLines( int n, wxPoint points[], long xoffset, long yoffset ) { if (!Ok()) return; - if (m_isMemDC) ((wxMemoryDC*)this)->m_selected.DestroyImage(); - if (m_pen.GetStyle() == wxTRANSPARENT) return; for (int i = 0; i < n-1; i++) @@ -273,8 +260,6 @@ void wxPaintDC::DrawLines( wxList *points, long xoffset, long yoffset ) { if (!Ok()) return; - if (m_isMemDC) ((wxMemoryDC*)this)->m_selected.DestroyImage(); - if (m_pen.GetStyle() == wxTRANSPARENT) return; wxNode *node = points->First(); @@ -295,8 +280,6 @@ void wxPaintDC::DrawPolygon( int n, wxPoint points[], long xoffset, long yoffset { if (!Ok()) return; - if (m_isMemDC) ((wxMemoryDC*)this)->m_selected.DestroyImage(); - if (!n) return; // Nothing to draw GdkPoint *gdkpoints = new GdkPoint[n+1]; int i; @@ -322,8 +305,6 @@ void wxPaintDC::DrawPolygon( wxList *lines, long xoffset, long yoffset, int WXUN { if (!Ok()) return; - if (m_isMemDC) ((wxMemoryDC*)this)->m_selected.DestroyImage(); - int n = lines->Number(); GdkPoint *gdkpoints = new GdkPoint[n]; wxNode *node = lines->First(); @@ -356,8 +337,6 @@ void wxPaintDC::DrawRectangle( long x, long y, long width, long height ) { if (!Ok()) return; - if (m_isMemDC) ((wxMemoryDC*)this)->m_selected.DestroyImage(); - long xx = XLOG2DEV(x); long yy = YLOG2DEV(y); long ww = m_signX * XLOG2DEVREL(width); @@ -381,8 +360,6 @@ void wxPaintDC::DrawRoundedRectangle( long x, long y, long width, long height, d { if (!Ok()) return; - if (m_isMemDC) ((wxMemoryDC*)this)->m_selected.DestroyImage(); - if (radius < 0.0) radius = - radius * ((width < height) ? width : height); long xx = XLOG2DEV(x); @@ -448,8 +425,6 @@ void wxPaintDC::DrawEllipse( long x, long y, long width, long height ) { if (!Ok()) return; - if (m_isMemDC) ((wxMemoryDC*)this)->m_selected.DestroyImage(); - long xx = XLOG2DEV(x); long yy = YLOG2DEV(y); long ww = m_signX * XLOG2DEVREL(width); @@ -477,8 +452,6 @@ void wxPaintDC::DrawIcon( const wxIcon &icon, long x, long y, bool useMask ) if (!icon.Ok()) return; - if (m_isMemDC) ((wxMemoryDC*)this)->m_selected.DestroyImage(); - int xx = XLOG2DEV(x); int yy = YLOG2DEV(y); @@ -506,8 +479,6 @@ bool wxPaintDC::Blit( long xdest, long ydest, long width, long height, { if (!Ok()) return FALSE; - if (m_isMemDC) ((wxMemoryDC*)this)->m_selected.DestroyImage(); - if (m_isMemDC) { wxMemoryDC* srcDC = (wxMemoryDC*)source; @@ -547,8 +518,6 @@ void wxPaintDC::DrawText( const wxString &text, long x, long y, bool WXUNUSED(us { if (!Ok()) return; - if (m_isMemDC) ((wxMemoryDC*)this)->m_selected.DestroyImage(); - GdkFont *font = m_font.GetInternalFont( m_scaleY ); x = XLOG2DEV(x); @@ -618,8 +587,6 @@ void wxPaintDC::Clear(void) { if (!Ok()) return; - if (m_isMemDC) ((wxMemoryDC*)this)->m_selected.DestroyImage(); - if (!m_isMemDC) { gdk_window_clear( m_window ); diff --git a/src/gtk/dcmemory.cpp b/src/gtk/dcmemory.cpp index aa8ab7a269..f346200a81 100644 --- a/src/gtk/dcmemory.cpp +++ b/src/gtk/dcmemory.cpp @@ -2,9 +2,8 @@ // Name: dcmemory.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 // RCS-ID: $Id$ -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -14,10 +13,6 @@ #include "wx/dcmemory.h" -#ifdef wxUSE_GDK_IMLIB -#include "../gdk_imlib/gdk_imlib.h" -#endif - //----------------------------------------------------------------------------- // wxMemoryDC //----------------------------------------------------------------------------- @@ -28,22 +23,14 @@ wxMemoryDC::wxMemoryDC(void) { m_ok = FALSE; -#ifdef wxUSE_GDK_IMLIB - m_cmap = gdk_imlib_get_colormap(); -#else - m_cmap = gdk_colormap_get_system(); -#endif + m_cmap = gtk_widget_get_default_colormap(); } wxMemoryDC::wxMemoryDC( wxDC *WXUNUSED(dc) ) { m_ok = FALSE; -#ifdef wxUSE_GDK_IMLIB - m_cmap = gdk_imlib_get_colormap(); -#else - m_cmap = gdk_colormap_get_system(); -#endif + m_cmap = gtk_widget_get_default_colormap(); } wxMemoryDC::~wxMemoryDC(void) diff --git a/src/gtk/dcscreen.cpp b/src/gtk/dcscreen.cpp index c3a9303751..cd47777fdb 100644 --- a/src/gtk/dcscreen.cpp +++ b/src/gtk/dcscreen.cpp @@ -2,9 +2,8 @@ // Name: dcscreen.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk/dialog.cpp b/src/gtk/dialog.cpp index 73ae00a02b..9bbc5f9a28 100644 --- a/src/gtk/dialog.cpp +++ b/src/gtk/dialog.cpp @@ -2,9 +2,8 @@ // Name: dialog.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk/dnd.cpp b/src/gtk/dnd.cpp index 458eb72641..4090bb15ec 100644 --- a/src/gtk/dnd.cpp +++ b/src/gtk/dnd.cpp @@ -2,8 +2,9 @@ // Name: dnd.cpp // Purpose: wxDropTarget class // Author: Robert Roebling -// Copyright: Robert Roebling -// Licence: wxWindows license +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// #ifdef __GNUG__ diff --git a/src/gtk/filedlg.cpp b/src/gtk/filedlg.cpp index 021946bb57..dae464b19f 100644 --- a/src/gtk/filedlg.cpp +++ b/src/gtk/filedlg.cpp @@ -2,9 +2,8 @@ // Name: filedlg.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk/font.cpp b/src/gtk/font.cpp index ef95c79be8..119b9cc83c 100644 --- a/src/gtk/font.cpp +++ b/src/gtk/font.cpp @@ -2,8 +2,7 @@ // Name: font.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: +// Id: $id$ // Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk/frame.cpp b/src/gtk/frame.cpp index bead5e36e2..fbb256de87 100644 --- a/src/gtk/frame.cpp +++ b/src/gtk/frame.cpp @@ -2,9 +2,8 @@ // Name: frame.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk/gauge.cpp b/src/gtk/gauge.cpp index 8499339d67..30688eda35 100644 --- a/src/gtk/gauge.cpp +++ b/src/gtk/gauge.cpp @@ -2,9 +2,8 @@ // Name: gauge.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk/notebook.cpp b/src/gtk/notebook.cpp index 0a3b30089d..f006c328a0 100644 --- a/src/gtk/notebook.cpp +++ b/src/gtk/notebook.cpp @@ -2,9 +2,8 @@ // Name: notebook.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling, Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk/timer.cpp b/src/gtk/timer.cpp index 4e36a67f14..89ecf05f6d 100644 --- a/src/gtk/timer.cpp +++ b/src/gtk/timer.cpp @@ -2,9 +2,8 @@ // Name: timer.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk/utilsgtk.cpp b/src/gtk/utilsgtk.cpp index 3de7efc8bc..086ef60b6b 100644 --- a/src/gtk/utilsgtk.cpp +++ b/src/gtk/utilsgtk.cpp @@ -2,7 +2,6 @@ // Name: utils.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 // Id: $Id$ // Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem // Licence: wxWindows licence diff --git a/src/gtk/win_gtk.c b/src/gtk/win_gtk.c index 3a999cdeff..c4e8c42101 100644 --- a/src/gtk/win_gtk.c +++ b/src/gtk/win_gtk.c @@ -1,10 +1,9 @@ /* /////////////////////////////////////////////////////////////////////////// // Name: wx_gtk.h -// Purpose: +// Purpose: native GTK+ widget for wxWindows // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////// */ diff --git a/src/gtk/window.cpp b/src/gtk/window.cpp index 1e6c3b6b92..eb9b9dcb84 100644 --- a/src/gtk/window.cpp +++ b/src/gtk/window.cpp @@ -2,9 +2,8 @@ // Name: window.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling, Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk1/app.cpp b/src/gtk1/app.cpp index fb0c54118a..d65cff17cf 100644 --- a/src/gtk1/app.cpp +++ b/src/gtk1/app.cpp @@ -2,9 +2,8 @@ // Name: app.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling, Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -24,10 +23,6 @@ #include "unistd.h" -#ifdef wxUSE_GDK_IMLIB -#include "../gdk_imlib/gdk_imlib.h" -#endif - //----------------------------------------------------------------------------- // global data //----------------------------------------------------------------------------- @@ -38,6 +33,74 @@ wxAppInitializerFunction wxApp::m_appInitFn = (wxAppInitializerFunction) NULL; extern wxList wxPendingDelete; extern wxResourceCache *wxTheResourceCache; +unsigned char g_palette[64*3] = +{ + 0x0, 0x0, 0x0, + 0xff, 0xff, 0xff, + 0xff, 0x0, 0x0, + 0xff, 0xff, 0x0, + 0x0, 0xff, 0x0, + 0x0, 0x0, 0xff, + 0x0, 0xff, 0xff, + 0x99, 0x99, 0x99, + 0xff, 0x88, 0x0, + 0x88, 0x0, 0x0, + 0x0, 0x88, 0x88, + 0x88, 0x88, 0x0, + 0xff, 0xcc, 0x97, + 0xbb, 0xbb, 0xbb, + 0x9f, 0x6b, 0x42, + 0x55, 0x55, 0x55, + 0xdd, 0xdd, 0xdd, + 0x77, 0x77, 0x77, + 0x33, 0x33, 0x33, + 0xcc, 0x0, 0x0, + 0xff, 0x44, 0x0, + 0xff, 0xcc, 0x0, + 0xcc, 0xcc, 0x0, + 0x60, 0x60, 0x0, + 0x0, 0x43, 0x0, + 0x0, 0x7f, 0x0, + 0x0, 0xcc, 0x0, + 0x0, 0x44, 0x44, + 0x0, 0x0, 0x44, + 0x0, 0x0, 0x88, + 0xef, 0xb1, 0x7b, + 0xdf, 0x98, 0x5f, + 0xbf, 0x87, 0x56, + 0x7f, 0x57, 0x26, + 0x5f, 0x39, 0xc, + 0x3f, 0x1c, 0x0, + 0x21, 0x0, 0x0, + 0x0, 0x43, 0x87, + 0x2d, 0x70, 0xaf, + 0x5a, 0x9e, 0xd7, + 0x87, 0xcc, 0xff, + 0xff, 0xe0, 0xba, + 0x21, 0x43, 0xf, + 0x3d, 0x5d, 0x25, + 0x59, 0x78, 0x3a, + 0x75, 0x93, 0x4f, + 0x91, 0xae, 0x64, + 0xad, 0xc8, 0x7a, + 0xf0, 0xa8, 0xef, + 0xd0, 0x88, 0xd0, + 0xaf, 0x66, 0xaf, + 0x8e, 0x44, 0x8e, + 0x6d, 0x22, 0x6d, + 0x4b, 0x0, 0x4b, + 0xff, 0xc0, 0xbc, + 0xff, 0x93, 0x91, + 0xff, 0x66, 0x67, + 0xd8, 0xf2, 0xbf, + 0xff, 0xc9, 0x68, + 0xff, 0x96, 0x67, + 0xa5, 0x60, 0xff, + 0x51, 0xff, 0x99, + 0x3f, 0xa5, 0x63, + 0x98, 0x90, 0x67 +}; + //----------------------------------------------------------------------------- // local functions //----------------------------------------------------------------------------- @@ -355,15 +418,22 @@ int wxEntry( int argc, char *argv[] ) gtk_init( &argc, &argv ); -#ifdef wxUSE_GDK_IMLIB - - gdk_imlib_init(); - - gtk_widget_push_visual(gdk_imlib_get_visual()); + GdkColormap *cmap = gdk_colormap_new( gdk_visual_get_system(), TRUE ); - gtk_widget_push_colormap(gdk_imlib_get_colormap()); - -#endif + for (int i = 0; i < 64; i++) + { + GdkColor col; + col.red = g_palette[i*3 + 0] << 8; + col.green = g_palette[i*3 + 1] << 8; + col.blue = g_palette[i*3 + 2] << 8; + col.pixel = 0; + + gdk_color_alloc( cmap, &col ); + } + + gtk_widget_push_colormap( cmap ); + + gtk_widget_set_default_colormap( cmap ); wxApp::CommonInit(); diff --git a/src/gtk1/bitmap.cpp b/src/gtk1/bitmap.cpp index 07519ea19f..4706c2e7d7 100644 --- a/src/gtk1/bitmap.cpp +++ b/src/gtk1/bitmap.cpp @@ -2,9 +2,8 @@ // Name: bitmap.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 // RCS-ID: $Id$ -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -15,15 +14,7 @@ #include "wx/bitmap.h" #include "wx/icon.h" #include "gdk/gdkprivate.h" - -#ifdef wxUSE_GDK_IMLIB - -#include "../gdk_imlib/gdk_imlib.h" -#include "gdk/gdkx.h" // GDK_DISPLAY -#include -#include - -#endif +#include "gdk/gdkx.h" //----------------------------------------------------------------------------- // wxMask @@ -50,11 +41,7 @@ wxMask::wxMask( const wxBitmap& WXUNUSED(bitmap) ) wxMask::~wxMask(void) { -#ifdef wxUSE_GDK_IMLIB - // do not delete the mask, gdk_imlib does it for you -#else if (m_bitmap) gdk_bitmap_unref( m_bitmap ); -#endif } GdkBitmap *wxMask::GetBitmap(void) const @@ -66,7 +53,6 @@ GdkBitmap *wxMask::GetBitmap(void) const // wxBitmap //----------------------------------------------------------------------------- -// CMB 20/5/98: added m_bitmap for GdkBitmaps class wxBitmapRefData: public wxObjectRefData { public: @@ -80,9 +66,6 @@ class wxBitmapRefData: public wxObjectRefData int m_width; int m_height; int m_bpp; -#ifdef wxUSE_GDK_IMLIB - GdkImlibImage *m_image; -#endif wxPalette *m_palette; }; @@ -95,19 +78,11 @@ wxBitmapRefData::wxBitmapRefData(void) m_height = 0; m_bpp = 0; m_palette = (wxPalette *) NULL; -#ifdef wxUSE_GDK_IMLIB - m_image = (GdkImlibImage *) NULL; -#endif } wxBitmapRefData::~wxBitmapRefData(void) { -#ifdef wxUSE_GDK_IMLIB - if (m_pixmap) gdk_imlib_free_pixmap( m_pixmap ); - if (m_image) gdk_imlib_kill_image( m_image ); -#else if (m_pixmap) gdk_pixmap_unref( m_pixmap ); -#endif if (m_bitmap) gdk_bitmap_unref( m_bitmap ); if (m_mask) delete m_mask; if (m_palette) delete m_palette; @@ -141,8 +116,6 @@ wxBitmap::wxBitmap( char **bits ) { m_refData = new wxBitmapRefData(); -#ifndef wxUSE_GDK_IMLIB - GdkBitmap *mask = NULL; M_BMPDATA->m_pixmap = @@ -156,13 +129,6 @@ wxBitmap::wxBitmap( char **bits ) gdk_window_get_size( M_BMPDATA->m_pixmap, &(M_BMPDATA->m_width), &(M_BMPDATA->m_height) ); -#else - - M_BMPDATA->m_image = gdk_imlib_create_image_from_xpm_data( bits ); - Render(); - -#endif - M_BMPDATA->m_bpp = 24; // ? if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this); @@ -189,7 +155,6 @@ wxBitmap::wxBitmap( const wxString &filename, int type ) if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this); } -// CMB 15/5/98: add constructor for xbm bitmaps wxBitmap::wxBitmap( const char bits[], int width, int height, int WXUNUSED(depth)) { m_refData = new wxBitmapRefData(); @@ -315,43 +280,7 @@ void wxBitmap::SetMask( wxMask *mask ) M_BMPDATA->m_mask = mask; } -void wxBitmap::Resize( int height, int width ) -{ - if (!Ok()) - { - wxFAIL_MSG( "invalid bitmap" ); - return; - } - -#ifdef wxUSE_GDK_IMLIB - - if (M_BMPDATA->m_bitmap) - { - wxFAIL_MSG( "wxBitmap::Resize not supported for mono-bitmaps" ); - return; - } - - if (!M_BMPDATA->m_image) RecreateImage(); - - if (M_BMPDATA->m_pixmap) gdk_imlib_free_pixmap( M_BMPDATA->m_pixmap ); - if (M_BMPDATA->m_mask) delete M_BMPDATA->m_mask; - - GdkImlibImage* image = gdk_imlib_clone_scaled_image( M_BMPDATA->m_image, height, width ); - gdk_imlib_destroy_image( M_BMPDATA->m_image ); - M_BMPDATA->m_image = image; - M_BMPDATA->m_height = height; - M_BMPDATA->m_width = width; - - Render(); - -#else - - wxFAIL_MSG( "wxBitmap::Resize not implemented without GdkImlib" ); - -#endif -} - -bool wxBitmap::SaveFile( const wxString &name, int WXUNUSED(type), +bool wxBitmap::SaveFile( const wxString &WXUNUSED(name), int WXUNUSED(type), wxPalette *WXUNUSED(palette) ) { if (!Ok()) @@ -360,55 +289,17 @@ bool wxBitmap::SaveFile( const wxString &name, int WXUNUSED(type), return FALSE; } -#ifdef wxUSE_GDK_IMLIB - - if (M_BMPDATA->m_bitmap) - { - wxFAIL_MSG( "wxBitmap::SaveFile not supported for mono-bitmaps" ); - return FALSE; - } - - if (!M_BMPDATA->m_image) RecreateImage(); - - return gdk_imlib_save_image( M_BMPDATA->m_image, WXSTRINGCAST name, (GdkImlibSaveInfo *) NULL ); - -#else - - wxFAIL_MSG( "wxBitmap::SaveFile not implemented without GdkImlib" ); - -#endif - return FALSE; } -bool wxBitmap::LoadFile( const wxString &name, int WXUNUSED(type) ) +bool wxBitmap::LoadFile( const wxString &WXUNUSED(name), int WXUNUSED(type) ) { -#ifdef wxUSE_GDK_IMLIB - - UnRef(); - m_refData = new wxBitmapRefData(); - - M_BMPDATA->m_image = gdk_imlib_load_image( WXSTRINGCAST name ); - - if (!M_BMPDATA->m_image) + if (!Ok()) { - UnRef(); + wxFAIL_MSG( "invalid bitmap" ); return FALSE; } - - Render(); - - gdk_window_get_size( M_BMPDATA->m_pixmap, &(M_BMPDATA->m_width), &(M_BMPDATA->m_height) ); - M_BMPDATA->m_bpp = 24; // ? - - return TRUE; - -#else - - wxFAIL_MSG( "wxBitmap::LoadFile not implemented without GdkImlib" ); -#endif - return FALSE; } @@ -426,8 +317,6 @@ GdkPixmap *wxBitmap::GetPixmap(void) const return (GdkPixmap *) NULL; } -// if (!M_BMPDATA->m_image) RecreateImage(); - return M_BMPDATA->m_pixmap; } @@ -442,118 +331,200 @@ GdkBitmap *wxBitmap::GetBitmap(void) const return M_BMPDATA->m_bitmap; } -void wxBitmap::DestroyImage(void) +wxBitmap::wxBitmap( const wxImage &image ) { - if (!Ok()) - { - wxFAIL_MSG( "invalid bitmap" ); - return; - } + if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this); - if (M_BMPDATA->m_image) - { - gdk_imlib_destroy_image( M_BMPDATA->m_image ); - M_BMPDATA->m_image = (GdkImlibImage *) NULL; - } -} + if (!image.Ok()) return; -void wxBitmap::RecreateImage(void) -{ - if (!Ok()) - { - wxFAIL_MSG( "invalid bitmap" ); - return; - } - -#ifdef wxUSE_GDK_IMLIB + m_refData = new wxBitmapRefData(); - DestroyImage(); + M_BMPDATA->m_height = image.GetHeight(); + M_BMPDATA->m_width = image.GetWidth(); + int width = image.GetWidth(); + int height = image.GetHeight(); + + // Create picture - wxCHECK_RET( M_BMPDATA->m_pixmap != NULL, "invalid bitmap" ); + GdkImage *data_image = + gdk_image_new( GDK_IMAGE_FASTEST, gdk_visual_get_system(), width, height ); - long size = (long)(M_BMPDATA->m_width)*(long)(M_BMPDATA->m_height)*(long)3; - unsigned char *data = new unsigned char[size]; - for (long i = 0; i < size; i++) data[i] = 100; + M_BMPDATA->m_pixmap = + gdk_pixmap_new( (GdkWindow*)&gdk_root_parent, width, height, -1 ); + + // Create mask - GdkImage *image = gdk_image_get( M_BMPDATA->m_pixmap, 0, 0, M_BMPDATA->m_width, M_BMPDATA->m_height ); + GdkImage *mask_image = (GdkImage*) NULL; - long pos = 0; - for (int j = 0; j < M_BMPDATA->m_height; j++) + if (image.HasMask()) { - for (int i = 0; i < M_BMPDATA->m_width; i++) - { - XColor xcol; - xcol.pixel = gdk_image_get_pixel( image, i, j ); - Colormap cm = ((GdkColormapPrivate*)gdk_imlib_get_colormap())->xcolormap; - XQueryColor( gdk_display, cm, &xcol ); - - data[pos] = xcol.red; - data[pos+1] = xcol.green; - data[pos+2] = xcol.blue; - pos += 3; - } + unsigned char *mask_data = (unsigned char*)malloc( ((width >> 3)+8) * height ); + + mask_image = gdk_image_new_bitmap( gdk_visual_get_system(), mask_data, width, height ); + + M_BMPDATA->m_mask = new wxMask(); + M_BMPDATA->m_mask->m_bitmap = gdk_pixmap_new( (GdkWindow*)&gdk_root_parent, width, height, 1 ); } - wxCHECK_RET( M_BMPDATA->m_pixmap != NULL, "invalid bitmap" ); + // Retrieve depth + + M_BMPDATA->m_bpp = data_image->depth; + + int render_depth = 8; + if (M_BMPDATA->m_bpp > 8) render_depth = M_BMPDATA->m_bpp; + + // Render + + int r_mask = image.GetMaskRed(); + int g_mask = image.GetMaskGreen(); + int b_mask = image.GetMaskBlue(); + + unsigned char* data = image.GetData(); + + int index = 0; + for (int y = 0; y < height; y++) + for (int x = 0; x < width; x++) + { + int r = data[index]; + index++; + int g = data[index]; + index++; + int b = data[index]; + index++; + + if (image.HasMask()) + { + if ((r == r_mask) && (b = b_mask) && (g = g_mask)) + gdk_image_put_pixel( mask_image, x, y, 0 ); + else + gdk_image_put_pixel( mask_image, x, y, 1 ); + } + + switch (render_depth) + { + case 8: + { + GdkColormap *cmap = gtk_widget_get_default_colormap(); + GdkColor *colors = cmap->colors; + int max = 3 * (65536); + int index = -1; + + for (int i = 0; i < cmap->size; i++) + { + int rdiff = (r << 8) - colors[i].red; + int gdiff = (g << 8) - colors[i].green; + int bdiff = (b << 8) - colors[i].blue; + int sum = ABS (rdiff) + ABS (gdiff) + ABS (bdiff); + if (sum < max) { index = i; max = sum; } + } + + gdk_image_put_pixel( data_image, x, y, index ); + + break; + } + case 15: + { + guint32 pixel = ((r & 0xf8) << 7) | ((g & 0xf8) << 2) | ((b & 0xf8) >> 3); + gdk_image_put_pixel( data_image, x, y, pixel ); + break; + } + case 16: + { + guint32 pixel = ((r & 0xf8) << 8) | ((g & 0xfc) << 3) | ((b & 0xf8) >> 3); + gdk_image_put_pixel( data_image, x, y, pixel ); + break; + } + case 24: + { + break; + } + case 32: + { + break; + } + default: break; + } + } + + // Blit picture - M_BMPDATA->m_image = gdk_imlib_create_image_from_data( - data, (unsigned char*)NULL, M_BMPDATA->m_width, M_BMPDATA->m_height ); + GdkGC *data_gc = gdk_gc_new( M_BMPDATA->m_pixmap ); - delete[] data; + gdk_draw_image( M_BMPDATA->m_pixmap, data_gc, data_image, 0, 0, 0, 0, width, height ); - gdk_image_destroy( image ); + gdk_image_destroy( data_image ); + gdk_gc_unref( data_gc ); - Render(); + // Blit mask -#else + if (image.HasMask()) + { + GdkGC *mask_gc = gdk_gc_new( M_BMPDATA->m_mask->m_bitmap ); - wxFAIL_MSG( "wxBitmap::RecreateImage not implemented without GdkImlib" ); + gdk_draw_image( M_BMPDATA->m_mask->m_bitmap, mask_gc, mask_image, 0, 0, 0, 0, width, height ); -#endif + gdk_image_destroy( mask_image ); + gdk_gc_unref( mask_gc ); + } + } -void wxBitmap::Render(void) +wxImage wxBitmap::ConvertToImage() const { + wxImage image; + if (!Ok()) { wxFAIL_MSG( "invalid bitmap" ); - return; + return image; } -#ifdef wxUSE_GDK_IMLIB - - if (!M_BMPDATA->m_image) RecreateImage(); + GdkImage *gdk_image = gdk_image_get( M_BMPDATA->m_pixmap, 0, 0, M_BMPDATA->m_width, M_BMPDATA->m_height ); - if (M_BMPDATA->m_pixmap) - { - gdk_imlib_free_pixmap( M_BMPDATA->m_pixmap ); - M_BMPDATA->m_pixmap = (GdkPixmap*) NULL; - } - if (M_BMPDATA->m_mask) - { - delete M_BMPDATA->m_mask; - M_BMPDATA->m_mask = (wxMask*) NULL; - } + if (!gdk_image) return image; - gdk_imlib_render( M_BMPDATA->m_image, M_BMPDATA->m_image->rgb_width, M_BMPDATA->m_image->rgb_height ); - M_BMPDATA->m_width = M_BMPDATA->m_image->rgb_width; - M_BMPDATA->m_height = M_BMPDATA->m_image->rgb_height; - M_BMPDATA->m_pixmap = gdk_imlib_move_image( M_BMPDATA->m_image ); + image.Create( M_BMPDATA->m_width, M_BMPDATA->m_height ); + char unsigned *data = image.GetData(); - wxCHECK_RET( M_BMPDATA->m_pixmap != NULL, "pixmap rendering failed" ) + int bpp = gdk_image->bpp; + GdkColormap *cmap = gtk_widget_get_default_colormap(); - GdkBitmap *mask = gdk_imlib_move_mask( M_BMPDATA->m_image ); - if (mask) + long pos = 0; + for (int j = 0; j < M_BMPDATA->m_height; j++) { - M_BMPDATA->m_mask = new wxMask(); - M_BMPDATA->m_mask->m_bitmap = mask; + for (int i = 0; i < M_BMPDATA->m_width; i++) + { + int pixel = gdk_image_get_pixel( gdk_image, i, j ); + if (bpp <= 8) + { + data[pos] = cmap->colors[pixel].red >> 8; + data[pos+1] = cmap->colors[pixel].green >> 8; + data[pos+2] = cmap->colors[pixel].blue >> 8; + } else if (bpp == 15) + { + data[pos] = (pixel >> 7) & 0xf8; + data[pos+1] = (pixel >> 3) & 0xf8; + data[pos+2] = (pixel << 3) & 0xf8; + } else if (bpp == 16) + { + data[pos] = (pixel >> 8) & 0xf8; + data[pos+1] = (pixel >> 3) & 0xfc; + data[pos+2] = (pixel << 3) & 0xf8; + } else + { + data[pos] = (pixel >> 16) & 0xff; + data[pos+1] = (pixel >> 8) & 0xff; + data[pos+2] = pixel & 0xff; + } + + pos += 3; + } } -#else + gdk_image_destroy( gdk_image ); - wxFAIL_MSG( "wxBitmap::Render not implemented without GdkImlib" ); - -#endif + return image; } + diff --git a/src/gtk1/bmpbuttn.cpp b/src/gtk1/bmpbuttn.cpp index 25968dbcd8..df7d7f6a1a 100644 --- a/src/gtk1/bmpbuttn.cpp +++ b/src/gtk1/bmpbuttn.cpp @@ -2,9 +2,8 @@ // Name: bmpbuttn.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk1/brush.cpp b/src/gtk1/brush.cpp index ae90ec472d..29131bbede 100644 --- a/src/gtk1/brush.cpp +++ b/src/gtk1/brush.cpp @@ -2,9 +2,8 @@ // Name: brush.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk1/button.cpp b/src/gtk1/button.cpp index 034e229f18..b0278860ac 100644 --- a/src/gtk1/button.cpp +++ b/src/gtk1/button.cpp @@ -2,9 +2,8 @@ // Name: button.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk1/checkbox.cpp b/src/gtk1/checkbox.cpp index c4aac9364a..385f9bc7c3 100644 --- a/src/gtk1/checkbox.cpp +++ b/src/gtk1/checkbox.cpp @@ -2,9 +2,8 @@ // Name: checkbox.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk1/choice.cpp b/src/gtk1/choice.cpp index edcf64f3e9..f6e3925ea4 100644 --- a/src/gtk1/choice.cpp +++ b/src/gtk1/choice.cpp @@ -2,9 +2,8 @@ // Name: choice.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk1/colour.cpp b/src/gtk1/colour.cpp index b7c2dc1176..7e57df104f 100644 --- a/src/gtk1/colour.cpp +++ b/src/gtk1/colour.cpp @@ -15,9 +15,7 @@ #include "wx/gdicmn.h" -#ifdef wxUSE_GDK_IMLIB -#include "../gdk_imlib/gdk_imlib.h" -#endif +#include "gdk/gdkprivate.h" //----------------------------------------------------------------------------- // wxColour @@ -186,19 +184,30 @@ void wxColour::CalcPixel( GdkColormap *cmap ) if ((M_COLDATA->m_hasPixel) && (M_COLDATA->m_colormap == cmap)) return; M_COLDATA->FreeColour(); -#ifdef wxUSE_GDK_IMLIB - - int r = M_COLDATA->m_color.red >> SHIFT; - int g = M_COLDATA->m_color.green >> SHIFT; - int b = M_COLDATA->m_color.blue >> SHIFT; - M_COLDATA->m_hasPixel = TRUE; - M_COLDATA->m_color.pixel = gdk_imlib_best_color_match( &r, &g, &b ); - -#else + GdkColormapPrivate *private_colormap = (GdkColormapPrivate*) cmap; + if ((private_colormap->visual->type == GDK_VISUAL_GRAYSCALE) || + (private_colormap->visual->type == GDK_VISUAL_PSEUDO_COLOR)) + { + GdkColor *colors = cmap->colors; + int max = 3 * (65536); + int index = -1; - M_COLDATA->m_hasPixel = gdk_color_alloc( cmap, &M_COLDATA->m_color ); - -#endif + for (int i = 0; i < cmap->size; i++) + { + int rdiff = (M_COLDATA->m_color.red - colors[i].red); + int gdiff = (M_COLDATA->m_color.green - colors[i].green); + int bdiff = (M_COLDATA->m_color.blue - colors[i].blue); + int sum = ABS (rdiff) + ABS (gdiff) + ABS (bdiff); + if (sum < max) { index = i; max = sum; } + } + + M_COLDATA->m_hasPixel = TRUE; + M_COLDATA->m_color.pixel = index; + } + else + { + M_COLDATA->m_hasPixel = gdk_color_alloc( cmap, &M_COLDATA->m_color ); + } M_COLDATA->m_colormap = cmap; } diff --git a/src/gtk1/combobox.cpp b/src/gtk1/combobox.cpp index efe78a6f3f..59f2f9821e 100644 --- a/src/gtk1/combobox.cpp +++ b/src/gtk1/combobox.cpp @@ -2,9 +2,8 @@ // Name: combobox.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk1/control.cpp b/src/gtk1/control.cpp index 61bab59ecf..658ebcd8c9 100644 --- a/src/gtk1/control.cpp +++ b/src/gtk1/control.cpp @@ -2,9 +2,8 @@ // Name: control.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling, Julian Smart and Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk1/cursor.cpp b/src/gtk1/cursor.cpp index 7195cfa0c6..20a8d3c19e 100644 --- a/src/gtk1/cursor.cpp +++ b/src/gtk1/cursor.cpp @@ -2,9 +2,8 @@ // Name: cursor.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk1/data.cpp b/src/gtk1/data.cpp index 96bce38d00..815bdca347 100644 --- a/src/gtk1/data.cpp +++ b/src/gtk1/data.cpp @@ -2,8 +2,7 @@ // Name: data.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: +// Id: $id$ // Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk1/dc.cpp b/src/gtk1/dc.cpp index 13ffab2a44..3678494de4 100644 --- a/src/gtk1/dc.cpp +++ b/src/gtk1/dc.cpp @@ -2,7 +2,6 @@ // Name: dc.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 // RCS-ID: $Id$ // Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem // Licence: wxWindows licence diff --git a/src/gtk1/dcclient.cpp b/src/gtk1/dcclient.cpp index 17cd007433..a724a4d51c 100644 --- a/src/gtk1/dcclient.cpp +++ b/src/gtk1/dcclient.cpp @@ -2,9 +2,8 @@ // Name: dcclient.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 // RCS-ID: $Id$ -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Copyright: (c) 1998 Robert Roebling, Markus Holzem, Chris Breeze // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -138,8 +137,6 @@ void wxPaintDC::DrawLine( long x1, long y1, long x2, long y2 ) { if (!Ok()) return; - if (m_isMemDC) ((wxMemoryDC*)this)->m_selected.DestroyImage(); - if (m_pen.GetStyle() != wxTRANSPARENT) { gdk_draw_line( m_window, m_penGC, @@ -151,8 +148,6 @@ void wxPaintDC::CrossHair( long x, long y ) { if (!Ok()) return; - if (m_isMemDC) ((wxMemoryDC*)this)->m_selected.DestroyImage(); - if (m_pen.GetStyle() != wxTRANSPARENT) { int w = 0; @@ -171,8 +166,6 @@ void wxPaintDC::DrawArc( long x1, long y1, long x2, long y2, double xc, double y { if (!Ok()) return; - if (m_isMemDC) ((wxMemoryDC*)this)->m_selected.DestroyImage(); - long xx1 = XLOG2DEV(x1); long yy1 = YLOG2DEV(y1); long xx2 = XLOG2DEV(x2); @@ -221,8 +214,6 @@ void wxPaintDC::DrawEllipticArc( long x, long y, long width, long height, double { if (!Ok()) return; - if (m_isMemDC) ((wxMemoryDC*)this)->m_selected.DestroyImage(); - long xx = XLOG2DEV(x); long yy = YLOG2DEV(y); long ww = m_signX * XLOG2DEVREL(width); @@ -245,8 +236,6 @@ void wxPaintDC::DrawPoint( long x, long y ) { if (!Ok()) return; - if (m_isMemDC) ((wxMemoryDC*)this)->m_selected.DestroyImage(); - if (m_pen.GetStyle() != wxTRANSPARENT) gdk_draw_point( m_window, m_penGC, XLOG2DEV(x), YLOG2DEV(y) ); } @@ -255,8 +244,6 @@ void wxPaintDC::DrawLines( int n, wxPoint points[], long xoffset, long yoffset ) { if (!Ok()) return; - if (m_isMemDC) ((wxMemoryDC*)this)->m_selected.DestroyImage(); - if (m_pen.GetStyle() == wxTRANSPARENT) return; for (int i = 0; i < n-1; i++) @@ -273,8 +260,6 @@ void wxPaintDC::DrawLines( wxList *points, long xoffset, long yoffset ) { if (!Ok()) return; - if (m_isMemDC) ((wxMemoryDC*)this)->m_selected.DestroyImage(); - if (m_pen.GetStyle() == wxTRANSPARENT) return; wxNode *node = points->First(); @@ -295,8 +280,6 @@ void wxPaintDC::DrawPolygon( int n, wxPoint points[], long xoffset, long yoffset { if (!Ok()) return; - if (m_isMemDC) ((wxMemoryDC*)this)->m_selected.DestroyImage(); - if (!n) return; // Nothing to draw GdkPoint *gdkpoints = new GdkPoint[n+1]; int i; @@ -322,8 +305,6 @@ void wxPaintDC::DrawPolygon( wxList *lines, long xoffset, long yoffset, int WXUN { if (!Ok()) return; - if (m_isMemDC) ((wxMemoryDC*)this)->m_selected.DestroyImage(); - int n = lines->Number(); GdkPoint *gdkpoints = new GdkPoint[n]; wxNode *node = lines->First(); @@ -356,8 +337,6 @@ void wxPaintDC::DrawRectangle( long x, long y, long width, long height ) { if (!Ok()) return; - if (m_isMemDC) ((wxMemoryDC*)this)->m_selected.DestroyImage(); - long xx = XLOG2DEV(x); long yy = YLOG2DEV(y); long ww = m_signX * XLOG2DEVREL(width); @@ -381,8 +360,6 @@ void wxPaintDC::DrawRoundedRectangle( long x, long y, long width, long height, d { if (!Ok()) return; - if (m_isMemDC) ((wxMemoryDC*)this)->m_selected.DestroyImage(); - if (radius < 0.0) radius = - radius * ((width < height) ? width : height); long xx = XLOG2DEV(x); @@ -448,8 +425,6 @@ void wxPaintDC::DrawEllipse( long x, long y, long width, long height ) { if (!Ok()) return; - if (m_isMemDC) ((wxMemoryDC*)this)->m_selected.DestroyImage(); - long xx = XLOG2DEV(x); long yy = YLOG2DEV(y); long ww = m_signX * XLOG2DEVREL(width); @@ -477,8 +452,6 @@ void wxPaintDC::DrawIcon( const wxIcon &icon, long x, long y, bool useMask ) if (!icon.Ok()) return; - if (m_isMemDC) ((wxMemoryDC*)this)->m_selected.DestroyImage(); - int xx = XLOG2DEV(x); int yy = YLOG2DEV(y); @@ -506,8 +479,6 @@ bool wxPaintDC::Blit( long xdest, long ydest, long width, long height, { if (!Ok()) return FALSE; - if (m_isMemDC) ((wxMemoryDC*)this)->m_selected.DestroyImage(); - if (m_isMemDC) { wxMemoryDC* srcDC = (wxMemoryDC*)source; @@ -547,8 +518,6 @@ void wxPaintDC::DrawText( const wxString &text, long x, long y, bool WXUNUSED(us { if (!Ok()) return; - if (m_isMemDC) ((wxMemoryDC*)this)->m_selected.DestroyImage(); - GdkFont *font = m_font.GetInternalFont( m_scaleY ); x = XLOG2DEV(x); @@ -618,8 +587,6 @@ void wxPaintDC::Clear(void) { if (!Ok()) return; - if (m_isMemDC) ((wxMemoryDC*)this)->m_selected.DestroyImage(); - if (!m_isMemDC) { gdk_window_clear( m_window ); diff --git a/src/gtk1/dcmemory.cpp b/src/gtk1/dcmemory.cpp index aa8ab7a269..f346200a81 100644 --- a/src/gtk1/dcmemory.cpp +++ b/src/gtk1/dcmemory.cpp @@ -2,9 +2,8 @@ // Name: dcmemory.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 // RCS-ID: $Id$ -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -14,10 +13,6 @@ #include "wx/dcmemory.h" -#ifdef wxUSE_GDK_IMLIB -#include "../gdk_imlib/gdk_imlib.h" -#endif - //----------------------------------------------------------------------------- // wxMemoryDC //----------------------------------------------------------------------------- @@ -28,22 +23,14 @@ wxMemoryDC::wxMemoryDC(void) { m_ok = FALSE; -#ifdef wxUSE_GDK_IMLIB - m_cmap = gdk_imlib_get_colormap(); -#else - m_cmap = gdk_colormap_get_system(); -#endif + m_cmap = gtk_widget_get_default_colormap(); } wxMemoryDC::wxMemoryDC( wxDC *WXUNUSED(dc) ) { m_ok = FALSE; -#ifdef wxUSE_GDK_IMLIB - m_cmap = gdk_imlib_get_colormap(); -#else - m_cmap = gdk_colormap_get_system(); -#endif + m_cmap = gtk_widget_get_default_colormap(); } wxMemoryDC::~wxMemoryDC(void) diff --git a/src/gtk1/dcscreen.cpp b/src/gtk1/dcscreen.cpp index c3a9303751..cd47777fdb 100644 --- a/src/gtk1/dcscreen.cpp +++ b/src/gtk1/dcscreen.cpp @@ -2,9 +2,8 @@ // Name: dcscreen.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk1/dialog.cpp b/src/gtk1/dialog.cpp index 73ae00a02b..9bbc5f9a28 100644 --- a/src/gtk1/dialog.cpp +++ b/src/gtk1/dialog.cpp @@ -2,9 +2,8 @@ // Name: dialog.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk1/dnd.cpp b/src/gtk1/dnd.cpp index 458eb72641..4090bb15ec 100644 --- a/src/gtk1/dnd.cpp +++ b/src/gtk1/dnd.cpp @@ -2,8 +2,9 @@ // Name: dnd.cpp // Purpose: wxDropTarget class // Author: Robert Roebling -// Copyright: Robert Roebling -// Licence: wxWindows license +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// #ifdef __GNUG__ diff --git a/src/gtk1/filedlg.cpp b/src/gtk1/filedlg.cpp index 021946bb57..dae464b19f 100644 --- a/src/gtk1/filedlg.cpp +++ b/src/gtk1/filedlg.cpp @@ -2,9 +2,8 @@ // Name: filedlg.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk1/font.cpp b/src/gtk1/font.cpp index ef95c79be8..119b9cc83c 100644 --- a/src/gtk1/font.cpp +++ b/src/gtk1/font.cpp @@ -2,8 +2,7 @@ // Name: font.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: +// Id: $id$ // Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk1/frame.cpp b/src/gtk1/frame.cpp index bead5e36e2..fbb256de87 100644 --- a/src/gtk1/frame.cpp +++ b/src/gtk1/frame.cpp @@ -2,9 +2,8 @@ // Name: frame.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk1/gauge.cpp b/src/gtk1/gauge.cpp index 8499339d67..30688eda35 100644 --- a/src/gtk1/gauge.cpp +++ b/src/gtk1/gauge.cpp @@ -2,9 +2,8 @@ // Name: gauge.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk1/notebook.cpp b/src/gtk1/notebook.cpp index 0a3b30089d..f006c328a0 100644 --- a/src/gtk1/notebook.cpp +++ b/src/gtk1/notebook.cpp @@ -2,9 +2,8 @@ // Name: notebook.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling, Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk1/timer.cpp b/src/gtk1/timer.cpp index 4e36a67f14..89ecf05f6d 100644 --- a/src/gtk1/timer.cpp +++ b/src/gtk1/timer.cpp @@ -2,9 +2,8 @@ // Name: timer.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk1/utilsgtk.cpp b/src/gtk1/utilsgtk.cpp index 3de7efc8bc..086ef60b6b 100644 --- a/src/gtk1/utilsgtk.cpp +++ b/src/gtk1/utilsgtk.cpp @@ -2,7 +2,6 @@ // Name: utils.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 // Id: $Id$ // Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem // Licence: wxWindows licence diff --git a/src/gtk1/win_gtk.c b/src/gtk1/win_gtk.c index 3a999cdeff..c4e8c42101 100644 --- a/src/gtk1/win_gtk.c +++ b/src/gtk1/win_gtk.c @@ -1,10 +1,9 @@ /* /////////////////////////////////////////////////////////////////////////// // Name: wx_gtk.h -// Purpose: +// Purpose: native GTK+ widget for wxWindows // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////// */ diff --git a/src/gtk1/window.cpp b/src/gtk1/window.cpp index 1e6c3b6b92..eb9b9dcb84 100644 --- a/src/gtk1/window.cpp +++ b/src/gtk1/window.cpp @@ -2,9 +2,8 @@ // Name: window.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $id$ +// Copyright: (c) 1998 Robert Roebling, Julian Smart // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////