wxX11:
Lots of wxBitmap et al work. Adapted wxIcon, wxCursor to this. Split wxApp init things up so that the X11 display is available sooner. Changed initial display code accordingly. Corrected wxDC::DrawBitmap. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14170 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -91,12 +91,15 @@ public:
|
||||
|
||||
WXWindow GetTopLevelWidget() const { return m_topLevelWidget; }
|
||||
WXColormap GetMainColormap(WXDisplay* display);
|
||||
WXDisplay* GetInitialDisplay() const { return m_initialDisplay; }
|
||||
long GetMaxRequestSize() const { return m_maxRequestSize; }
|
||||
|
||||
// This handler is called when a property change event occurs
|
||||
virtual void HandlePropertyChange(WXEvent *event);
|
||||
|
||||
// We need this before create the app
|
||||
static WXDisplay* GetDisplay() { return ms_display; }
|
||||
static WXDisplay* ms_display;
|
||||
|
||||
public:
|
||||
static long sm_lastMessageTime;
|
||||
int m_nCmdShow;
|
||||
@@ -106,7 +109,6 @@ protected:
|
||||
|
||||
WXWindow m_topLevelWidget;
|
||||
WXColormap m_mainColormap;
|
||||
WXDisplay* m_initialDisplay;
|
||||
long m_maxRequestSize;
|
||||
wxEventLoop* m_mainLoop;
|
||||
|
||||
|
@@ -1,11 +1,11 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: bitmap.h
|
||||
// Purpose: wxBitmap class
|
||||
// Author: Julian Smart
|
||||
// Author: Julian Smart, Robert Roebling
|
||||
// Modified by:
|
||||
// Created: 17/09/98
|
||||
// RCS-ID: $Id$
|
||||
// Copyright: (c) Julian Smart
|
||||
// Copyright: (c) Julian Smart, Robert Roebling
|
||||
// Licence: wxWindows licence
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -16,203 +16,117 @@
|
||||
#pragma interface "bitmap.h"
|
||||
#endif
|
||||
|
||||
#include "wx/gdiobj.h"
|
||||
#include "wx/gdicmn.h"
|
||||
#include "wx/defs.h"
|
||||
#include "wx/object.h"
|
||||
#include "wx/string.h"
|
||||
#include "wx/palette.h"
|
||||
#include "wx/gdiobj.h"
|
||||
|
||||
// Bitmap
|
||||
class WXDLLEXPORT wxDC;
|
||||
class WXDLLEXPORT wxControl;
|
||||
class WXDLLEXPORT wxBitmap;
|
||||
class WXDLLEXPORT wxBitmapHandler;
|
||||
class WXDLLEXPORT wxIcon;
|
||||
class WXDLLEXPORT wxCursor;
|
||||
class WXDLLEXPORT wxImage;
|
||||
//-----------------------------------------------------------------------------
|
||||
// classes
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
// A mask is a mono bitmap used for drawing bitmaps
|
||||
// transparently.
|
||||
class WXDLLEXPORT wxMask: public wxObject
|
||||
class wxMask;
|
||||
class wxBitmap;
|
||||
class wxImage;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// wxMask
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
class wxMask: public wxObject
|
||||
{
|
||||
DECLARE_DYNAMIC_CLASS(wxMask)
|
||||
|
||||
public:
|
||||
wxMask();
|
||||
|
||||
// Construct a mask from a bitmap and a colour indicating
|
||||
// the transparent area
|
||||
wxMask(const wxBitmap& bitmap, const wxColour& colour);
|
||||
|
||||
// Construct a mask from a bitmap and a palette index indicating
|
||||
// the transparent area
|
||||
wxMask(const wxBitmap& bitmap, int paletteIndex);
|
||||
|
||||
// Construct a mask from a mono bitmap (copies the bitmap).
|
||||
wxMask(const wxBitmap& bitmap);
|
||||
|
||||
wxMask( const wxBitmap& bitmap, const wxColour& colour );
|
||||
wxMask( const wxBitmap& bitmap, int paletteIndex );
|
||||
wxMask( const wxBitmap& bitmap );
|
||||
~wxMask();
|
||||
|
||||
bool Create( const wxBitmap& bitmap, const wxColour& colour );
|
||||
bool Create( const wxBitmap& bitmap, int paletteIndex );
|
||||
bool Create( const wxBitmap& bitmap );
|
||||
|
||||
// implementation
|
||||
WXPixmap GetBitmap() const { return m_bitmap; }
|
||||
void SetBitmap( WXPixmap bitmap ) { m_bitmap = bitmap; }
|
||||
|
||||
bool Create(const wxBitmap& bitmap, const wxColour& colour);
|
||||
bool Create(const wxBitmap& bitmap, int paletteIndex);
|
||||
bool Create(const wxBitmap& bitmap);
|
||||
WXDisplay *GetDisplay() const { return m_display; }
|
||||
void SetDisplay( WXDisplay *display ) { m_display = display; }
|
||||
|
||||
WXPixmap GetPixmap() const { return m_pixmap; }
|
||||
void SetPixmap(WXPixmap pixmap) { m_pixmap = pixmap; }
|
||||
|
||||
protected:
|
||||
WXPixmap m_pixmap;
|
||||
private:
|
||||
WXPixmap m_bitmap;
|
||||
WXDisplay *m_display;
|
||||
|
||||
private:
|
||||
DECLARE_DYNAMIC_CLASS(wxMask)
|
||||
};
|
||||
|
||||
class WXDLLEXPORT wxBitmapRefData: public wxGDIRefData
|
||||
//-----------------------------------------------------------------------------
|
||||
// wxBitmap
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
class wxBitmap: public wxGDIObject
|
||||
{
|
||||
friend class WXDLLEXPORT wxBitmap;
|
||||
friend class WXDLLEXPORT wxIcon;
|
||||
friend class WXDLLEXPORT wxCursor;
|
||||
public:
|
||||
wxBitmapRefData();
|
||||
~wxBitmapRefData();
|
||||
|
||||
public:
|
||||
int m_width;
|
||||
int m_height;
|
||||
int m_depth;
|
||||
bool m_ok;
|
||||
int m_numColors;
|
||||
wxPalette m_bitmapPalette;
|
||||
int m_quality;
|
||||
|
||||
wxMask * m_bitmapMask; // Optional mask
|
||||
|
||||
// Motif implementation
|
||||
public:
|
||||
WXPixmap m_pixmap;
|
||||
WXDisplay* m_display;
|
||||
bool m_freePixmap;
|
||||
unsigned long* m_freeColors;
|
||||
long m_freeColorsCount;
|
||||
};
|
||||
|
||||
#define M_BITMAPDATA ((wxBitmapRefData *)m_refData)
|
||||
|
||||
class WXDLLEXPORT wxBitmapHandler: public wxObject
|
||||
{
|
||||
DECLARE_DYNAMIC_CLASS(wxBitmapHandler)
|
||||
public:
|
||||
wxBitmapHandler() { m_name = ""; m_extension = ""; m_type = 0; };
|
||||
|
||||
virtual bool Create(wxBitmap *bitmap, void *data, long flags, int width, int height, int depth = 1);
|
||||
virtual bool LoadFile(wxBitmap *bitmap, const wxString& name, long flags,
|
||||
int desiredWidth, int desiredHeight);
|
||||
virtual bool SaveFile(wxBitmap *bitmap, const wxString& name, int type, const wxPalette *palette = NULL);
|
||||
|
||||
void SetName(const wxString& name) { m_name = name; }
|
||||
void SetExtension(const wxString& ext) { m_extension = ext; }
|
||||
void SetType(long type) { m_type = type; }
|
||||
wxString GetName() const { return m_name; }
|
||||
wxString GetExtension() const { return m_extension; }
|
||||
long GetType() const { return m_type; }
|
||||
protected:
|
||||
wxString m_name;
|
||||
wxString m_extension;
|
||||
long m_type;
|
||||
};
|
||||
|
||||
#define M_BITMAPHANDLERDATA ((wxBitmapRefData *)bitmap->GetRefData())
|
||||
|
||||
class WXDLLEXPORT wxBitmap: public wxGDIObject
|
||||
{
|
||||
DECLARE_DYNAMIC_CLASS(wxBitmap)
|
||||
|
||||
friend class WXDLLEXPORT wxBitmapHandler;
|
||||
|
||||
public:
|
||||
wxBitmap(); // Platform-specific
|
||||
|
||||
// Copy constructors
|
||||
wxBitmap(const wxBitmap& bitmap)
|
||||
{ Ref(bitmap); }
|
||||
|
||||
// Initialize with raw XBM data
|
||||
wxBitmap(const char bits[], int width, int height, int depth = 1);
|
||||
|
||||
// from XPM
|
||||
wxBitmap(const char **data) { (void) Create((void *)data, wxBITMAP_TYPE_XPM_DATA, 0, 0, 0); }
|
||||
wxBitmap(char **data) { (void) Create((void *)data, wxBITMAP_TYPE_XPM_DATA, 0, 0, 0); }
|
||||
|
||||
// Load a file or resource
|
||||
wxBitmap(const wxString& name, long type = wxBITMAP_TYPE_XPM);
|
||||
|
||||
// Constructor for generalised creation from data
|
||||
wxBitmap(void *data, long type, int width, int height, int depth = 1);
|
||||
|
||||
// If depth is omitted, will create a bitmap compatible with the display
|
||||
wxBitmap(int width, int height, int depth = -1);
|
||||
|
||||
// Convert from wxImage:
|
||||
wxBitmap(const wxImage& image, int depth = -1) { (void)CreateFromImage(image, depth); }
|
||||
|
||||
wxBitmap();
|
||||
wxBitmap( int width, int height, int depth = -1 );
|
||||
wxBitmap( const char bits[], int width, int height, int depth = 1 );
|
||||
wxBitmap( const char **bits ) { (void)CreateFromXpm(bits); }
|
||||
wxBitmap( char **bits ) { (void)CreateFromXpm((const char **)bits); }
|
||||
wxBitmap( const wxBitmap& bmp );
|
||||
wxBitmap( const wxString &filename, int type = wxBITMAP_TYPE_XPM );
|
||||
wxBitmap( const wxImage& image, int depth = -1 ) { (void)CreateFromImage(image, depth); }
|
||||
~wxBitmap();
|
||||
wxBitmap& operator = ( const wxBitmap& bmp );
|
||||
bool operator == ( const wxBitmap& bmp ) const;
|
||||
bool operator != ( const wxBitmap& bmp ) const;
|
||||
bool Ok() const;
|
||||
|
||||
bool Create(int width, int height, int depth = -1);
|
||||
|
||||
virtual bool Create(int width, int height, int depth = -1);
|
||||
virtual bool Create(void *data, long type, int width, int height, int depth = 1);
|
||||
|
||||
wxBitmap GetSubBitmap( const wxRect& rect ) const;
|
||||
|
||||
virtual bool LoadFile(const wxString& name, long type = wxBITMAP_TYPE_XPM);
|
||||
virtual bool SaveFile(const wxString& name, int type, const wxPalette *cmap = NULL);
|
||||
int GetHeight() const;
|
||||
int GetWidth() const;
|
||||
int GetDepth() const;
|
||||
|
||||
wxImage ConvertToImage() const;
|
||||
|
||||
bool CopyFromIcon(const wxIcon& icon);
|
||||
|
||||
bool Ok() const { return (M_BITMAPDATA && M_BITMAPDATA->m_ok); }
|
||||
int GetWidth() const { return (M_BITMAPDATA ? M_BITMAPDATA->m_width : 0); }
|
||||
int GetHeight() const { return (M_BITMAPDATA ? M_BITMAPDATA->m_height : 0); }
|
||||
int GetDepth() const { return (M_BITMAPDATA ? M_BITMAPDATA->m_depth : 0); }
|
||||
int GetQuality() const { return (M_BITMAPDATA ? M_BITMAPDATA->m_quality : 0); }
|
||||
void SetWidth(int w);
|
||||
void SetHeight(int h);
|
||||
void SetDepth(int d);
|
||||
void SetQuality(int q);
|
||||
void SetOk(bool isOk);
|
||||
|
||||
wxPalette* GetPalette() const { return (M_BITMAPDATA ? (& M_BITMAPDATA->m_bitmapPalette) : (wxPalette*) NULL); }
|
||||
void SetPalette(const wxPalette& palette);
|
||||
|
||||
wxMask *GetMask() const { return (M_BITMAPDATA ? M_BITMAPDATA->m_bitmapMask : (wxMask*) NULL); }
|
||||
void SetMask(wxMask *mask) ;
|
||||
|
||||
wxBitmap& operator = (const wxBitmap& bitmap) { if (*this == bitmap) return (*this); Ref(bitmap); return *this; }
|
||||
bool operator == (const wxBitmap& bitmap) const { return m_refData == bitmap.m_refData; }
|
||||
bool operator != (const wxBitmap& bitmap) const { return m_refData != bitmap.m_refData; }
|
||||
|
||||
// Format handling
|
||||
static wxList& GetHandlers() { return sm_handlers; }
|
||||
static void AddHandler(wxBitmapHandler *handler);
|
||||
static void InsertHandler(wxBitmapHandler *handler);
|
||||
static bool RemoveHandler(const wxString& name);
|
||||
static wxBitmapHandler *FindHandler(const wxString& name);
|
||||
static wxBitmapHandler *FindHandler(const wxString& extension, long bitmapType);
|
||||
static wxBitmapHandler *FindHandler(long bitmapType);
|
||||
|
||||
static void InitStandardHandlers();
|
||||
static void CleanUpHandlers();
|
||||
|
||||
// Motif implementation
|
||||
public:
|
||||
WXDisplay* GetDisplay() const { return M_BITMAPDATA->m_display; }
|
||||
WXPixmap GetPixmap() const { return (WXPixmap) M_BITMAPDATA->m_pixmap; }
|
||||
void SetPixmapNull() { M_BITMAPDATA->m_pixmap = 0; }
|
||||
|
||||
protected:
|
||||
static wxList sm_handlers;
|
||||
|
||||
protected:
|
||||
bool CreateFromImage(const wxImage& image, int depth);
|
||||
};
|
||||
// copies the contents and mask of the given (colour) icon to the bitmap
|
||||
virtual bool CopyFromIcon(const wxIcon& icon);
|
||||
|
||||
// Creates a bitmap with transparent areas drawn in
|
||||
// the given colour.
|
||||
wxBitmap wxCreateMaskedBitmap(const wxBitmap& bitmap, wxColour& colour);
|
||||
wxMask *GetMask() const;
|
||||
void SetMask( wxMask *mask );
|
||||
|
||||
wxBitmap GetSubBitmap( const wxRect& rect ) const;
|
||||
|
||||
bool SaveFile( const wxString &name, int type, wxPalette *palette = (wxPalette *) NULL );
|
||||
bool LoadFile( const wxString &name, int type = wxBITMAP_TYPE_XPM );
|
||||
|
||||
wxPalette *GetPalette() const;
|
||||
wxPalette *GetColourMap() const
|
||||
{ return GetPalette(); };
|
||||
|
||||
// implementation
|
||||
// --------------
|
||||
|
||||
void SetHeight( int height );
|
||||
void SetWidth( int width );
|
||||
void SetDepth( int depth );
|
||||
void SetPixmap( WXPixmap pixmap );
|
||||
void SetBitmap( WXPixmap bitmap );
|
||||
|
||||
WXPixmap GetPixmap() const;
|
||||
WXPixmap GetBitmap() const;
|
||||
|
||||
WXDisplay *GetDisplay() const;
|
||||
|
||||
protected:
|
||||
bool CreateFromXpm(const char **bits);
|
||||
bool CreateFromImage(const wxImage& image, int depth);
|
||||
|
||||
private:
|
||||
DECLARE_DYNAMIC_CLASS(wxBitmap)
|
||||
};
|
||||
|
||||
#endif
|
||||
// _WX_BITMAP_H_
|
||||
|
@@ -18,67 +18,41 @@
|
||||
|
||||
#include "wx/bitmap.h"
|
||||
|
||||
/* Cursor for one display, so we can choose the correct one for
|
||||
* the current display.
|
||||
*/
|
||||
class wxXCursor : public wxObject
|
||||
{
|
||||
DECLARE_DYNAMIC_CLASS(wxXCursor)
|
||||
|
||||
public:
|
||||
WXDisplay* m_display;
|
||||
WXCursor m_cursor;
|
||||
};
|
||||
#if wxUSE_IMAGE
|
||||
#include "wx/image.h"
|
||||
#endif
|
||||
|
||||
class WXDLLEXPORT wxCursorRefData: public wxBitmapRefData
|
||||
{
|
||||
friend class WXDLLEXPORT wxBitmap;
|
||||
friend class WXDLLEXPORT wxCursor;
|
||||
public:
|
||||
wxCursorRefData();
|
||||
~wxCursorRefData();
|
||||
|
||||
wxList m_cursors; // wxXCursor objects, one per display
|
||||
wxStockCursor m_cursorId; // wxWindows standard cursor id
|
||||
};
|
||||
//-----------------------------------------------------------------------------
|
||||
// wxCursor
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#define M_CURSORDATA ((wxCursorRefData *)m_refData)
|
||||
#define M_CURSORHANDLERDATA ((wxCursorRefData *)bitmap->m_refData)
|
||||
|
||||
// Cursor
|
||||
class WXDLLEXPORT wxCursor: public wxBitmap
|
||||
class wxCursor: public wxObject
|
||||
{
|
||||
DECLARE_DYNAMIC_CLASS(wxCursor)
|
||||
|
||||
public:
|
||||
|
||||
wxCursor();
|
||||
|
||||
// Copy constructors
|
||||
wxCursor(const wxCursor& cursor) { Ref(cursor); }
|
||||
|
||||
wxCursor(const char bits[], int width, int height, int hotSpotX = -1, int hotSpotY = -1,
|
||||
const char maskBits[] = NULL);
|
||||
|
||||
wxCursor(const wxString& name, long flags = wxBITMAP_TYPE_XBM,
|
||||
int hotSpotX = 0, int hotSpotY = 0);
|
||||
|
||||
wxCursor(wxStockCursor id);
|
||||
wxCursor( int cursorId );
|
||||
wxCursor( const wxCursor &cursor );
|
||||
#if wxUSE_IMAGE
|
||||
wxCursor( const wxImage & image );
|
||||
#endif
|
||||
wxCursor( const char bits[], int width, int height,
|
||||
int hotSpotX=-1, int hotSpotY=-1,
|
||||
const char maskBits[]=0, wxColour *fg=0, wxColour *bg=0 );
|
||||
~wxCursor();
|
||||
|
||||
virtual bool Ok() const { return ((m_refData != NULL) && M_CURSORDATA->m_ok); }
|
||||
|
||||
wxCursor& operator = (const wxCursor& cursor) { if (*this == cursor) return (*this); Ref(cursor); return *this; }
|
||||
bool operator == (const wxCursor& cursor) const { return m_refData == cursor.m_refData; }
|
||||
bool operator != (const wxCursor& cursor) const { return m_refData != cursor.m_refData; }
|
||||
|
||||
// Motif-specific.
|
||||
// Create/get a cursor for the current display
|
||||
WXCursor GetXCursor(WXDisplay* display) ;
|
||||
// Make a cursor from standard id
|
||||
WXCursor MakeCursor(WXDisplay* display, wxStockCursor id);
|
||||
wxCursor& operator = ( const wxCursor& cursor );
|
||||
bool operator == ( const wxCursor& cursor ) const;
|
||||
bool operator != ( const wxCursor& cursor ) const;
|
||||
bool Ok() const;
|
||||
|
||||
// implementation
|
||||
|
||||
WXCursor GetCursor() const;
|
||||
|
||||
private:
|
||||
DECLARE_DYNAMIC_CLASS(wxCursor)
|
||||
};
|
||||
|
||||
extern WXDLLEXPORT void wxSetCursor(const wxCursor& cursor);
|
||||
|
||||
#endif
|
||||
// _WX_CURSOR_H_
|
||||
|
@@ -18,42 +18,39 @@
|
||||
|
||||
#include "wx/bitmap.h"
|
||||
|
||||
#define M_ICONDATA ((wxBitmapRefData *)m_refData)
|
||||
#define M_ICONHANDLERDATA ((wxBitmapRefData *)bitmap->GetRefData())
|
||||
//-----------------------------------------------------------------------------
|
||||
// wxIcon
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
// Icon
|
||||
class WXDLLEXPORT wxIcon: public wxBitmap
|
||||
class wxIcon: public wxBitmap
|
||||
{
|
||||
DECLARE_DYNAMIC_CLASS(wxIcon)
|
||||
|
||||
public:
|
||||
wxIcon();
|
||||
|
||||
// Copy constructors
|
||||
inline wxIcon(const wxIcon& icon) { Ref(icon); }
|
||||
|
||||
// Initialize with XBM data
|
||||
wxIcon(const char bits[], int width, int height);
|
||||
|
||||
// Initialize with XPM data
|
||||
wxIcon(const char **data);
|
||||
wxIcon(char **data);
|
||||
|
||||
wxIcon(const wxString& name, long flags = wxBITMAP_TYPE_XPM,
|
||||
int desiredWidth = -1, int desiredHeight = -1);
|
||||
~wxIcon();
|
||||
|
||||
bool LoadFile(const wxString& name, long flags = wxBITMAP_TYPE_XPM,
|
||||
int desiredWidth = -1, int desiredHeight = -1);
|
||||
|
||||
inline wxIcon& operator = (const wxIcon& icon) { if (*this == icon) return (*this); Ref(icon); return *this; }
|
||||
inline bool operator == (const wxIcon& icon) const { return m_refData == icon.m_refData; }
|
||||
inline bool operator != (const wxIcon& icon) const { return m_refData != icon.m_refData; }
|
||||
|
||||
virtual bool Ok() const { return ((m_refData != NULL) && (M_ICONDATA->m_ok)); }
|
||||
wxIcon( const wxIcon& icon);
|
||||
wxIcon( const char **bits, int width=-1, int height=-1 );
|
||||
|
||||
bool CopyFromBitmap(const wxBitmap& bitmap);
|
||||
// For compatibility with wxMSW where desired size is sometimes required to
|
||||
// distinguish between multiple icons in a resource.
|
||||
wxIcon( const wxString& filename, int type = wxBITMAP_TYPE_XPM,
|
||||
int WXUNUSED(desiredWidth)=-1, int WXUNUSED(desiredHeight)=-1 ) :
|
||||
wxBitmap(filename, type)
|
||||
{
|
||||
}
|
||||
wxIcon( char **bits, int width=-1, int height=-1 );
|
||||
|
||||
wxIcon& operator = (const wxIcon& icon);
|
||||
inline bool operator == (const wxIcon& icon) { return m_refData == icon.m_refData; }
|
||||
inline bool operator != (const wxIcon& icon) { return m_refData != icon.m_refData; }
|
||||
|
||||
// create from bitmap (which should have a mask unless it's monochrome):
|
||||
// there shouldn't be any implicit bitmap -> icon conversion (i.e. no
|
||||
// ctors, assignment operators...), but it's ok to have such function
|
||||
void CopyFromBitmap(const wxBitmap& bmp);
|
||||
|
||||
private:
|
||||
DECLARE_DYNAMIC_CLASS(wxIcon)
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
// _WX_ICON_H_
|
||||
|
Reference in New Issue
Block a user