cleaning up image mess for os/2
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@5010 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -72,6 +72,9 @@ protected:
|
|||||||
long m_type;
|
long m_type;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if !defined(__VISAGECPP__)
|
||||||
|
// Why define these here and then again in the individual image format headers??
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// wxPNGHandler
|
// wxPNGHandler
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -208,6 +211,8 @@ public:
|
|||||||
};
|
};
|
||||||
#endif // wxUSE_PCX
|
#endif // wxUSE_PCX
|
||||||
|
|
||||||
|
#endif //__VISAGECPP__
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// wxImage
|
// wxImage
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
@@ -51,8 +51,11 @@
|
|||||||
#error "See the documentation on the 'longlong' pragma."
|
#error "See the documentation on the 'longlong' pragma."
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
|
#if !defined(__VISAGECPP__)
|
||||||
|
// Visualage does not support this pragma
|
||||||
#warning "Your compiler does not appear to support 64 bit integers, "\
|
#warning "Your compiler does not appear to support 64 bit integers, "\
|
||||||
"using emulation class instead."
|
"using emulation class instead."
|
||||||
|
#endif
|
||||||
#define wxUSE_LONGLONG_WX 1
|
#define wxUSE_LONGLONG_WX 1
|
||||||
#endif // compiler
|
#endif // compiler
|
||||||
|
|
||||||
|
@@ -255,6 +255,7 @@
|
|||||||
|
|
||||||
// wxToolBar class
|
// wxToolBar class
|
||||||
#define wxUSE_TOOLBAR 1
|
#define wxUSE_TOOLBAR 1
|
||||||
|
#define wxUSE_TOOLBAR_NATIVE 1
|
||||||
|
|
||||||
// wxStatusBar class
|
// wxStatusBar class
|
||||||
#define wxUSE_STATUSBAR 1
|
#define wxUSE_STATUSBAR 1
|
||||||
|
@@ -254,6 +254,7 @@
|
|||||||
|
|
||||||
// wxToolBar class
|
// wxToolBar class
|
||||||
#define wxUSE_TOOLBAR 1
|
#define wxUSE_TOOLBAR 1
|
||||||
|
#define wxUSE_TOOLBAR_NATIVE 1
|
||||||
|
|
||||||
// wxStatusBar class
|
// wxStatusBar class
|
||||||
#define wxUSE_STATUSBAR 1
|
#define wxUSE_STATUSBAR 1
|
||||||
|
@@ -19,73 +19,102 @@ WXDLLEXPORT_DATA(extern const wxChar*) wxToolBarNameStr;
|
|||||||
|
|
||||||
class WXDLLEXPORT wxToolBar: public wxToolBarBase
|
class WXDLLEXPORT wxToolBar: public wxToolBarBase
|
||||||
{
|
{
|
||||||
DECLARE_DYNAMIC_CLASS(wxToolBar)
|
public:
|
||||||
public:
|
/*
|
||||||
/*
|
* Public interface
|
||||||
* Public interface
|
*/
|
||||||
*/
|
|
||||||
|
|
||||||
wxToolBar();
|
wxToolBar() { Init(); }
|
||||||
|
|
||||||
inline wxToolBar(wxWindow *parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
|
inline wxToolBar( wxWindow* pParent
|
||||||
long style = wxNO_BORDER|wxTB_HORIZONTAL,
|
,wxWindowID vId
|
||||||
const wxString& name = wxToolBarNameStr)
|
,const wxPoint& rPos = wxDefaultPosition
|
||||||
{
|
,const wxSize& rSize = wxDefaultSize
|
||||||
Create(parent, id, pos, size, style, name);
|
,long lStyle = wxNO_BORDER|wxTB_HORIZONTAL
|
||||||
}
|
,const wxString& rName = wxToolBarNameStr
|
||||||
~wxToolBar();
|
)
|
||||||
|
{
|
||||||
|
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
|
||||||
|
);
|
||||||
|
|
||||||
bool Create(wxWindow *parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
|
virtual ~wxToolBar();
|
||||||
long style = wxNO_BORDER|wxTB_HORIZONTAL,
|
|
||||||
const wxString& name = wxToolBarNameStr);
|
|
||||||
|
|
||||||
// Call default behaviour
|
// override/implement base class virtuals
|
||||||
void OnMouseEvent(wxMouseEvent& event);
|
virtual wxToolBarToolBase* FindToolForPosition( wxCoord x
|
||||||
|
,wxCoord y
|
||||||
|
) const;
|
||||||
|
|
||||||
// If pushedBitmap is NULL, a reversed version of bitmap is
|
// The post-tool-addition call
|
||||||
// created and used as the pushed/toggled image.
|
virtual bool Realize(void);
|
||||||
// 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
|
virtual void SetToolBitmapSize(const wxSize& rSize);
|
||||||
void SetToolBitmapSize(const wxSize& size);
|
virtual wxSize GetToolSize(void) const;
|
||||||
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
|
virtual void SetRows(int nRows);
|
||||||
wxSize GetToolSize() const;
|
|
||||||
|
|
||||||
wxSize GetMaxSize() const;
|
// IMPLEMENTATION
|
||||||
|
virtual bool OS2Command( WXUINT uParam
|
||||||
virtual bool GetToolState(int toolIndex) const;
|
,WXWORD wId
|
||||||
|
);
|
||||||
// Add all the buttons
|
virtual bool OS2OnNotify( int nCtrl
|
||||||
virtual bool CreateTools();
|
,WXLPARAM lParam
|
||||||
virtual void SetRows(int nRows);
|
,WXLPARAM* pResult
|
||||||
virtual void LayoutButtons() {}
|
);
|
||||||
|
void OnMouseEvent(wxMouseEvent& rEvent);
|
||||||
// The post-tool-addition call
|
void OnSysColourChanged(wxSysColourChangedEvent& rEvent);
|
||||||
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);
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
WXHBITMAP m_hBitmap;
|
void Init(void);
|
||||||
|
// implement base class pure virtuals
|
||||||
|
virtual bool DoInsertTool(size_t pos, wxToolBarToolBase *tool);
|
||||||
|
virtual bool DoDeleteTool(size_t pos, wxToolBarToolBase *tool);
|
||||||
|
|
||||||
DECLARE_EVENT_TABLE()
|
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
|
#endif // wxUSE_TOOLBAR
|
||||||
|
@@ -71,7 +71,7 @@ wxImageRefData::wxImageRefData()
|
|||||||
|
|
||||||
wxImageRefData::~wxImageRefData()
|
wxImageRefData::~wxImageRefData()
|
||||||
{
|
{
|
||||||
if (m_data)
|
if (m_data)
|
||||||
free( m_data );
|
free( m_data );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -382,7 +382,7 @@ bool wxImage::LoadFile( const wxString& filename, long type )
|
|||||||
wxBufferedInputStream bstream( stream );
|
wxBufferedInputStream bstream( stream );
|
||||||
return LoadFile(bstream, type);
|
return LoadFile(bstream, type);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
wxLogError( _("Can't load image from file '%s': file does not exist."), filename.c_str() );
|
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 );
|
wxBufferedInputStream bstream( stream );
|
||||||
return LoadFile(bstream, mimetype);
|
return LoadFile(bstream, mimetype);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
wxLogError( _("Can't load image from file '%s': file does not exist."), filename.c_str() );
|
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();
|
int height = GetHeight();
|
||||||
|
|
||||||
// Create picture
|
// Create picture
|
||||||
|
|
||||||
wxBitmap bitmap( width , height , wxDisplayDepth() ) ;
|
wxBitmap bitmap( width , height , wxDisplayDepth() ) ;
|
||||||
|
|
||||||
// Create mask
|
// Create mask
|
||||||
|
|
||||||
if (HasMask())
|
if (HasMask())
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
unsigned char *mask_data = (unsigned char*)malloc( ((width >> 3)+8) * height );
|
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 );
|
mask_image = gdk_image_new_bitmap( gdk_visual_get_system(), mask_data, width, height );
|
||||||
|
|
||||||
wxMask *mask = new wxMask();
|
wxMask *mask = new wxMask();
|
||||||
mask->m_bitmap = gdk_pixmap_new( (GdkWindow*)&gdk_root_parent, width, height, 1 );
|
mask->m_bitmap = gdk_pixmap_new( (GdkWindow*)&gdk_root_parent, width, height, 1 );
|
||||||
|
|
||||||
bitmap.SetMask( mask );
|
bitmap.SetMask( mask );
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
// Render
|
// Render
|
||||||
|
|
||||||
int r_mask = GetMaskRed();
|
int r_mask = GetMaskRed();
|
||||||
int g_mask = GetMaskGreen();
|
int g_mask = GetMaskGreen();
|
||||||
int b_mask = GetMaskBlue();
|
int b_mask = GetMaskBlue();
|
||||||
|
|
||||||
CGrafPtr origPort ;
|
CGrafPtr origPort ;
|
||||||
GDHandle origDevice ;
|
GDHandle origDevice ;
|
||||||
|
|
||||||
@@ -1086,7 +1086,7 @@ wxBitmap wxImage::ConvertToBitmap() const
|
|||||||
SetGWorld( bitmap.GetHBITMAP() , NULL ) ;
|
SetGWorld( bitmap.GetHBITMAP() , NULL ) ;
|
||||||
|
|
||||||
register unsigned char* data = GetData();
|
register unsigned char* data = GetData();
|
||||||
|
|
||||||
int index = 0;
|
int index = 0;
|
||||||
for (int y = 0; y < height; y++)
|
for (int y = 0; y < height; y++)
|
||||||
{
|
{
|
||||||
@@ -1102,7 +1102,7 @@ wxBitmap wxImage::ConvertToBitmap() const
|
|||||||
unsigned char r = data[index++];
|
unsigned char r = data[index++];
|
||||||
unsigned char g = data[index++];
|
unsigned char g = data[index++];
|
||||||
unsigned char b = data[index++];
|
unsigned char b = data[index++];
|
||||||
|
|
||||||
if ( r != lastr || g != lastg || b != lastb )
|
if ( r != lastr || g != lastg || b != lastb )
|
||||||
{
|
{
|
||||||
lastcolor.red = ( lastr << 8 ) + lastr ;
|
lastcolor.red = ( lastr << 8 ) + lastr ;
|
||||||
@@ -1136,9 +1136,9 @@ wxBitmap wxImage::ConvertToBitmap() const
|
|||||||
} // for height
|
} // for height
|
||||||
|
|
||||||
SetGWorld( origPort , origDevice ) ;
|
SetGWorld( origPort , origDevice ) ;
|
||||||
|
|
||||||
return bitmap;
|
return bitmap;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
wxImage::wxImage( const wxBitmap &bitmap )
|
wxImage::wxImage( const wxBitmap &bitmap )
|
||||||
@@ -1149,11 +1149,11 @@ wxImage::wxImage( const wxBitmap &bitmap )
|
|||||||
wxFAIL_MSG( "invalid bitmap" );
|
wxFAIL_MSG( "invalid bitmap" );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// create an wxImage object
|
// create an wxImage object
|
||||||
int width = bitmap.GetWidth();
|
int width = bitmap.GetWidth();
|
||||||
int height = bitmap.GetHeight();
|
int height = bitmap.GetHeight();
|
||||||
Create( width, height );
|
Create( width, height );
|
||||||
/*
|
/*
|
||||||
unsigned char *data = GetData();
|
unsigned char *data = GetData();
|
||||||
if( !data )
|
if( !data )
|
||||||
@@ -1161,18 +1161,18 @@ wxImage::wxImage( const wxBitmap &bitmap )
|
|||||||
wxFAIL_MSG( "could not allocate data for image" );
|
wxFAIL_MSG( "could not allocate data for image" );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// calc the number of bytes per scanline and padding in the DIB
|
// calc the number of bytes per scanline and padding in the DIB
|
||||||
int bytePerLine = width*3;
|
int bytePerLine = width*3;
|
||||||
int sizeDWORD = sizeof( DWORD );
|
int sizeDWORD = sizeof( DWORD );
|
||||||
div_t lineBoundary = div( bytePerLine, sizeDWORD );
|
div_t lineBoundary = div( bytePerLine, sizeDWORD );
|
||||||
int padding = 0;
|
int padding = 0;
|
||||||
if( lineBoundary.rem > 0 )
|
if( lineBoundary.rem > 0 )
|
||||||
{
|
{
|
||||||
padding = sizeDWORD - lineBoundary.rem;
|
padding = sizeDWORD - lineBoundary.rem;
|
||||||
bytePerLine += padding;
|
bytePerLine += padding;
|
||||||
}
|
}
|
||||||
|
|
||||||
// create a DIB header
|
// create a DIB header
|
||||||
int headersize = sizeof(BITMAPINFOHEADER);
|
int headersize = sizeof(BITMAPINFOHEADER);
|
||||||
LPBITMAPINFO lpDIBh = (BITMAPINFO *) malloc( headersize );
|
LPBITMAPINFO lpDIBh = (BITMAPINFO *) malloc( headersize );
|
||||||
@@ -1205,13 +1205,13 @@ wxImage::wxImage( const wxBitmap &bitmap )
|
|||||||
free( lpDIBh );
|
free( lpDIBh );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// copy data from the device-dependent bitmap to the DIB
|
// copy data from the device-dependent bitmap to the DIB
|
||||||
HDC hdc = ::GetDC(NULL);
|
HDC hdc = ::GetDC(NULL);
|
||||||
HBITMAP hbitmap;
|
HBITMAP hbitmap;
|
||||||
hbitmap = (HBITMAP) bitmap.GetHBITMAP();
|
hbitmap = (HBITMAP) bitmap.GetHBITMAP();
|
||||||
::GetDIBits( hdc, hbitmap, 0, height, lpBits, lpDIBh, DIB_RGB_COLORS );
|
::GetDIBits( hdc, hbitmap, 0, height, lpBits, lpDIBh, DIB_RGB_COLORS );
|
||||||
|
|
||||||
// copy DIB data into the wxImage object
|
// copy DIB data into the wxImage object
|
||||||
int i, j;
|
int i, j;
|
||||||
unsigned char *ptdata = data;
|
unsigned char *ptdata = data;
|
||||||
@@ -1227,7 +1227,7 @@ wxImage::wxImage( const wxBitmap &bitmap )
|
|||||||
}
|
}
|
||||||
ptbits += padding;
|
ptbits += padding;
|
||||||
}
|
}
|
||||||
|
|
||||||
// similarly, set data according to the possible mask bitmap
|
// similarly, set data according to the possible mask bitmap
|
||||||
if( bitmap.GetMask() && bitmap.GetMask()->GetMaskBitmap() )
|
if( bitmap.GetMask() && bitmap.GetMask()->GetMaskBitmap() )
|
||||||
{
|
{
|
||||||
@@ -1237,9 +1237,9 @@ wxImage::wxImage( const wxBitmap &bitmap )
|
|||||||
::SetTextColor( memdc, RGB( 0, 0, 0 ) );
|
::SetTextColor( memdc, RGB( 0, 0, 0 ) );
|
||||||
::SetBkColor( memdc, RGB( 255, 255, 255 ) );
|
::SetBkColor( memdc, RGB( 255, 255, 255 ) );
|
||||||
::GetDIBits( memdc, hbitmap, 0, height, lpBits, lpDIBh, DIB_RGB_COLORS );
|
::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
|
// 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;
|
ptdata = data;
|
||||||
ptbits = lpBits;
|
ptbits = lpBits;
|
||||||
for( i=0; i<height; i++ )
|
for( i=0; i<height; i++ )
|
||||||
@@ -1257,7 +1257,7 @@ wxImage::wxImage( const wxBitmap &bitmap )
|
|||||||
ptbits += 3;
|
ptbits += 3;
|
||||||
}
|
}
|
||||||
ptbits += padding;
|
ptbits += padding;
|
||||||
}
|
}
|
||||||
SetMaskColour( r, g, b );
|
SetMaskColour( r, g, b );
|
||||||
SetMask( TRUE );
|
SetMask( TRUE );
|
||||||
}
|
}
|
||||||
@@ -1265,8 +1265,8 @@ wxImage::wxImage( const wxBitmap &bitmap )
|
|||||||
{
|
{
|
||||||
SetMask( FALSE );
|
SetMask( FALSE );
|
||||||
}
|
}
|
||||||
// free allocated resources
|
// free allocated resources
|
||||||
::ReleaseDC(NULL, hdc);
|
::ReleaseDC(NULL, hdc);
|
||||||
free(lpDIBh);
|
free(lpDIBh);
|
||||||
free(lpBits);
|
free(lpBits);
|
||||||
*/
|
*/
|
||||||
@@ -2376,7 +2376,7 @@ unsigned long wxImage::ComputeHistogram( wxHashTable &h )
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
hnode = new wxHNode();
|
hnode = new wxHNode();
|
||||||
hnode->index = nentries++;
|
hnode->index = nentries++;
|
||||||
hnode->value = 1;
|
hnode->value = 1;
|
||||||
|
|
||||||
h.Put(key, (wxObject *)hnode);
|
h.Put(key, (wxObject *)hnode);
|
||||||
|
Reference in New Issue
Block a user