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:
David Webster 1999-12-17 05:42:26 +00:00
parent d895ad7c54
commit 97fdfcc9fd
6 changed files with 125 additions and 86 deletions

View File

@ -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
//-----------------------------------------------------------------------------

View File

@ -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

View File

@ -255,6 +255,7 @@
// wxToolBar class
#define wxUSE_TOOLBAR 1
#define wxUSE_TOOLBAR_NATIVE 1
// wxStatusBar class
#define wxUSE_STATUSBAR 1

View File

@ -254,6 +254,7 @@
// wxToolBar class
#define wxUSE_TOOLBAR 1
#define wxUSE_TOOLBAR_NATIVE 1
// wxStatusBar class
#define wxUSE_STATUSBAR 1

View File

@ -19,73 +19,102 @@ WXDLLEXPORT_DATA(extern const wxChar*) wxToolBarNameStr;
class WXDLLEXPORT wxToolBar: public wxToolBarBase
{
DECLARE_DYNAMIC_CLASS(wxToolBar)
public:
/*
* Public interface
*/
public:
/*
* Public interface
*/
wxToolBar();
wxToolBar() { Init(); }
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();
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
);
bool Create(wxWindow *parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
long style = wxNO_BORDER|wxTB_HORIZONTAL,
const wxString& name = wxToolBarNameStr);
virtual ~wxToolBar();
// Call default behaviour
void OnMouseEvent(wxMouseEvent& event);
// override/implement base class virtuals
virtual wxToolBarToolBase* FindToolForPosition( wxCoord x
,wxCoord y
) const;
// 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)); }
// The post-tool-addition call
virtual bool Realize(void);
// 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();
virtual void SetToolBitmapSize(const wxSize& rSize);
virtual wxSize GetToolSize(void) const;
// The button size is bigger than the bitmap size
wxSize GetToolSize() const;
virtual void SetRows(int nRows);
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);
// 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;
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

View File

@ -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; i<height; i++ )
@ -1257,7 +1257,7 @@ wxImage::wxImage( const wxBitmap &bitmap )
ptbits += 3;
}
ptbits += padding;
}
}
SetMaskColour( r, g, b );
SetMask( TRUE );
}
@ -1265,8 +1265,8 @@ wxImage::wxImage( const wxBitmap &bitmap )
{
SetMask( FALSE );
}
// free allocated resources
::ReleaseDC(NULL, hdc);
// free allocated resources
::ReleaseDC(NULL, hdc);
free(lpDIBh);
free(lpBits);
*/
@ -2376,7 +2376,7 @@ unsigned long wxImage::ComputeHistogram( wxHashTable &h )
else
{
hnode = new wxHNode();
hnode->index = nentries++;
hnode->index = nentries++;
hnode->value = 1;
h.Put(key, (wxObject *)hnode);