From 97fdfcc9fdc68c3510599bf483afcb34d8768057 Mon Sep 17 00:00:00 2001 From: David Webster Date: Fri, 17 Dec 1999 05:42:26 +0000 Subject: [PATCH] cleaning up image mess for os/2 git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@5010 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/image.h | 5 ++ include/wx/longlong.h | 3 + include/wx/os2/setup.h | 1 + include/wx/os2/setup0.h | 1 + include/wx/os2/toolbar.h | 159 +++++++++++++++++++++++---------------- src/common/image.cpp | 60 +++++++-------- 6 files changed, 134 insertions(+), 95 deletions(-) diff --git a/include/wx/image.h b/include/wx/image.h index bbe0f2e6f9..2d1306e778 100644 --- a/include/wx/image.h +++ b/include/wx/image.h @@ -72,6 +72,9 @@ protected: long m_type; }; +#if !defined(__VISAGECPP__) +// Why define these here and then again in the individual image format headers?? + //----------------------------------------------------------------------------- // wxPNGHandler //----------------------------------------------------------------------------- @@ -208,6 +211,8 @@ public: }; #endif // wxUSE_PCX +#endif //__VISAGECPP__ + //----------------------------------------------------------------------------- // wxImage //----------------------------------------------------------------------------- diff --git a/include/wx/longlong.h b/include/wx/longlong.h index 1e5ee03100..c39828d061 100644 --- a/include/wx/longlong.h +++ b/include/wx/longlong.h @@ -51,8 +51,11 @@ #error "See the documentation on the 'longlong' pragma." #endif #else + #if !defined(__VISAGECPP__) + // Visualage does not support this pragma #warning "Your compiler does not appear to support 64 bit integers, "\ "using emulation class instead." + #endif #define wxUSE_LONGLONG_WX 1 #endif // compiler diff --git a/include/wx/os2/setup.h b/include/wx/os2/setup.h index 5042e1dcbc..5dee3624f5 100644 --- a/include/wx/os2/setup.h +++ b/include/wx/os2/setup.h @@ -255,6 +255,7 @@ // wxToolBar class #define wxUSE_TOOLBAR 1 +#define wxUSE_TOOLBAR_NATIVE 1 // wxStatusBar class #define wxUSE_STATUSBAR 1 diff --git a/include/wx/os2/setup0.h b/include/wx/os2/setup0.h index 36254e5f5c..1f3016ea9f 100644 --- a/include/wx/os2/setup0.h +++ b/include/wx/os2/setup0.h @@ -254,6 +254,7 @@ // wxToolBar class #define wxUSE_TOOLBAR 1 +#define wxUSE_TOOLBAR_NATIVE 1 // wxStatusBar class #define wxUSE_STATUSBAR 1 diff --git a/include/wx/os2/toolbar.h b/include/wx/os2/toolbar.h index 6fff034fd2..828fc4dd67 100644 --- a/include/wx/os2/toolbar.h +++ b/include/wx/os2/toolbar.h @@ -19,73 +19,102 @@ WXDLLEXPORT_DATA(extern const wxChar*) wxToolBarNameStr; class WXDLLEXPORT wxToolBar: public wxToolBarBase { - DECLARE_DYNAMIC_CLASS(wxToolBar) - public: - /* - * Public interface - */ - - wxToolBar(); - - inline wxToolBar(wxWindow *parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, - long style = wxNO_BORDER|wxTB_HORIZONTAL, - const wxString& name = wxToolBarNameStr) - { - Create(parent, id, pos, size, style, name); - } - ~wxToolBar(); - - bool Create(wxWindow *parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, - long style = wxNO_BORDER|wxTB_HORIZONTAL, - const wxString& name = wxToolBarNameStr); - - // Call default behaviour - void OnMouseEvent(wxMouseEvent& event); - - // If pushedBitmap is NULL, a reversed version of bitmap is - // created and used as the pushed/toggled image. - // If toggle is TRUE, the button toggles between the two states. - wxToolBarTool *AddTool(int toolIndex, const wxBitmap& bitmap, const wxBitmap& pushedBitmap = wxNullBitmap, - bool toggle = FALSE, long xPos = -1, long yPos = -1, wxObject *clientData = NULL, - const wxString& helpString1 = "", const wxString& helpString2 = ""); - //Virtual function hiding suppression - inline wxToolBarTool *AddTool(int toolIndex, const wxBitmap& bitmap, const wxBitmap& pushedBitmap = wxNullBitmap, - bool toggle = FALSE, wxCoord xPos = -1, wxCoord yPos = -1, wxObject *clientData = NULL, - const wxString& helpString1 = "", const wxString& helpString2 = "") - { return(AddTool(toolIndex, bitmap, pushedBitmap, toggle, (long)xPos, (long)yPos, clientData, helpString1, helpString2)); } - - // Set default bitmap size - void SetToolBitmapSize(const wxSize& size); - void EnableTool(int toolIndex, bool enable); // additional drawing on enabling - void ToggleTool(int toolIndex, bool toggle); // toggle is TRUE if toggled on - void ClearTools(); - - // The button size is bigger than the bitmap size - wxSize GetToolSize() const; - - wxSize GetMaxSize() const; - - virtual bool GetToolState(int toolIndex) const; - - // Add all the buttons - virtual bool CreateTools(); - virtual void SetRows(int nRows); - virtual void LayoutButtons() {} - - // The post-tool-addition call - bool Realize() { return CreateTools(); }; - - // IMPLEMENTATION - virtual bool OS2Command(WXUINT param, WXWORD id); - virtual bool OS2OnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result); - - // Responds to colour changes - void OnSysColourChanged(wxSysColourChangedEvent& event); +public: + /* + * Public interface + */ + + wxToolBar() { Init(); } + + inline wxToolBar( wxWindow* pParent + ,wxWindowID vId + ,const wxPoint& rPos = wxDefaultPosition + ,const wxSize& rSize = wxDefaultSize + ,long lStyle = wxNO_BORDER|wxTB_HORIZONTAL + ,const wxString& rName = wxToolBarNameStr + ) + { + Create( pParent + ,vId + ,rPos + ,rSize + ,lStyle + ,rName + ); + } + bool Create( wxWindow* pParent + ,wxWindowID vId + ,const wxPoint& rPos = wxDefaultPosition + ,const wxSize& rSize = wxDefaultSize + ,long lStyle = wxNO_BORDER|wxTB_HORIZONTAL + ,const wxString& rName = wxToolBarNameStr + ); + + virtual ~wxToolBar(); + + // override/implement base class virtuals + virtual wxToolBarToolBase* FindToolForPosition( wxCoord x + ,wxCoord y + ) const; + + // The post-tool-addition call + virtual bool Realize(void); + + virtual void SetToolBitmapSize(const wxSize& rSize); + virtual wxSize GetToolSize(void) const; + + virtual void SetRows(int nRows); + + // IMPLEMENTATION + virtual bool OS2Command( WXUINT uParam + ,WXWORD wId + ); + virtual bool OS2OnNotify( int nCtrl + ,WXLPARAM lParam + ,WXLPARAM* pResult + ); + void OnMouseEvent(wxMouseEvent& rEvent); + void OnSysColourChanged(wxSysColourChangedEvent& rEvent); protected: - WXHBITMAP m_hBitmap; - -DECLARE_EVENT_TABLE() + void Init(void); + // implement base class pure virtuals + virtual bool DoInsertTool(size_t pos, wxToolBarToolBase *tool); + virtual bool DoDeleteTool(size_t pos, wxToolBarToolBase *tool); + + virtual void DoEnableTool(wxToolBarToolBase *tool, bool enable); + virtual void DoToggleTool(wxToolBarToolBase *tool, bool toggle); + virtual void DoSetToggle(wxToolBarToolBase *tool, bool toggle); + + virtual wxToolBarToolBase* CreateTool( int vId + ,const wxBitmap& rBitmap1 + ,const wxBitmap& rBitmap2 + ,bool bToggle + ,wxObject* pClientData + ,const wxString& rShortHelpString + ,const wxString& rLongHelpString + ); + virtual wxToolBarToolBase* CreateTool(wxControl* pControl); + + // should be called whenever the toolbar size changes + void UpdateSize(void); + + // override WndProc to process WM_SIZE + virtual MRESULT OS2WindowProc( HWND hWnd + ,WXUINT ulMsg + ,WXWPARAM wParam + ,WXLPARAM lParam + ); + + // the big bitmap containing all bitmaps of the toolbar buttons + WXHBITMAP m_hBitmap; + + // the total number of toolbar elements + size_t m_nButtons; + +private: + DECLARE_EVENT_TABLE() + DECLARE_DYNAMIC_CLASS(wxToolBar) }; #endif // wxUSE_TOOLBAR diff --git a/src/common/image.cpp b/src/common/image.cpp index 59c7baec99..fcdc3d34e9 100644 --- a/src/common/image.cpp +++ b/src/common/image.cpp @@ -71,7 +71,7 @@ wxImageRefData::wxImageRefData() wxImageRefData::~wxImageRefData() { - if (m_data) + if (m_data) free( m_data ); } @@ -382,7 +382,7 @@ bool wxImage::LoadFile( const wxString& filename, long type ) wxBufferedInputStream bstream( stream ); return LoadFile(bstream, type); } - else + else { wxLogError( _("Can't load image from file '%s': file does not exist."), filename.c_str() ); @@ -402,7 +402,7 @@ bool wxImage::LoadFile( const wxString& filename, const wxString& mimetype ) wxBufferedInputStream bstream( stream ); return LoadFile(bstream, mimetype); } - else + else { wxLogError( _("Can't load image from file '%s': file does not exist."), filename.c_str() ); @@ -1054,31 +1054,31 @@ wxBitmap wxImage::ConvertToBitmap() const int height = GetHeight(); // Create picture - + wxBitmap bitmap( width , height , wxDisplayDepth() ) ; - + // Create mask - + if (HasMask()) { /* 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 ); - + wxMask *mask = new wxMask(); mask->m_bitmap = gdk_pixmap_new( (GdkWindow*)&gdk_root_parent, width, height, 1 ); - + bitmap.SetMask( mask ); */ } - + // Render - + int r_mask = GetMaskRed(); int g_mask = GetMaskGreen(); int b_mask = GetMaskBlue(); - + CGrafPtr origPort ; GDHandle origDevice ; @@ -1086,7 +1086,7 @@ wxBitmap wxImage::ConvertToBitmap() const SetGWorld( bitmap.GetHBITMAP() , NULL ) ; register unsigned char* data = GetData(); - + int index = 0; for (int y = 0; y < height; y++) { @@ -1102,7 +1102,7 @@ wxBitmap wxImage::ConvertToBitmap() const unsigned char r = data[index++]; unsigned char g = data[index++]; unsigned char b = data[index++]; - + if ( r != lastr || g != lastg || b != lastb ) { lastcolor.red = ( lastr << 8 ) + lastr ; @@ -1136,9 +1136,9 @@ wxBitmap wxImage::ConvertToBitmap() const } // for height SetGWorld( origPort , origDevice ) ; - + return bitmap; - + } wxImage::wxImage( const wxBitmap &bitmap ) @@ -1149,11 +1149,11 @@ wxImage::wxImage( const wxBitmap &bitmap ) wxFAIL_MSG( "invalid bitmap" ); return; } - + // create an wxImage object int width = bitmap.GetWidth(); int height = bitmap.GetHeight(); - Create( width, height ); + Create( width, height ); /* unsigned char *data = GetData(); if( !data ) @@ -1161,18 +1161,18 @@ wxImage::wxImage( const wxBitmap &bitmap ) wxFAIL_MSG( "could not allocate data for image" ); return; } - + // calc the number of bytes per scanline and padding in the DIB int bytePerLine = width*3; int sizeDWORD = sizeof( DWORD ); div_t lineBoundary = div( bytePerLine, sizeDWORD ); int padding = 0; - if( lineBoundary.rem > 0 ) + if( lineBoundary.rem > 0 ) { padding = sizeDWORD - lineBoundary.rem; bytePerLine += padding; } - + // create a DIB header int headersize = sizeof(BITMAPINFOHEADER); LPBITMAPINFO lpDIBh = (BITMAPINFO *) malloc( headersize ); @@ -1205,13 +1205,13 @@ wxImage::wxImage( const wxBitmap &bitmap ) free( lpDIBh ); return; } - + // copy data from the device-dependent bitmap to the DIB HDC hdc = ::GetDC(NULL); HBITMAP hbitmap; hbitmap = (HBITMAP) bitmap.GetHBITMAP(); ::GetDIBits( hdc, hbitmap, 0, height, lpBits, lpDIBh, DIB_RGB_COLORS ); - + // copy DIB data into the wxImage object int i, j; unsigned char *ptdata = data; @@ -1227,7 +1227,7 @@ wxImage::wxImage( const wxBitmap &bitmap ) } ptbits += padding; } - + // similarly, set data according to the possible mask bitmap if( bitmap.GetMask() && bitmap.GetMask()->GetMaskBitmap() ) { @@ -1237,9 +1237,9 @@ wxImage::wxImage( const wxBitmap &bitmap ) ::SetTextColor( memdc, RGB( 0, 0, 0 ) ); ::SetBkColor( memdc, RGB( 255, 255, 255 ) ); ::GetDIBits( memdc, hbitmap, 0, height, lpBits, lpDIBh, DIB_RGB_COLORS ); - ::DeleteDC( memdc ); + ::DeleteDC( memdc ); // background color set to RGB(16,16,16) in consistent with wxGTK - unsigned char r=16, g=16, b=16; + unsigned char r=16, g=16, b=16; ptdata = data; ptbits = lpBits; for( i=0; iindex = nentries++; + hnode->index = nentries++; hnode->value = 1; h.Put(key, (wxObject *)hnode); -- 2.45.2