#pragma hdrstop
#endif
+
#include "wx/gdicmn.h"
#include "wx/brush.h"
#include "wx/pen.h"
#include "wx/font.h"
#include "wx/palette.h"
+#include "wx/log.h"
#include <string.h>
-#ifdef __WINDOWS__
+#ifdef __WXMSW__
#include <windows.h>
#endif
#if !USE_SHARED_LIBRARY
-IMPLEMENT_DYNAMIC_CLASS(wxRect, wxObject)
IMPLEMENT_CLASS(wxColourDatabase, wxList)
IMPLEMENT_DYNAMIC_CLASS(wxFontList, wxList)
IMPLEMENT_DYNAMIC_CLASS(wxPenList, wxList)
IMPLEMENT_DYNAMIC_CLASS(wxBrushList, wxList)
IMPLEMENT_DYNAMIC_CLASS(wxBitmapList, wxList)
+IMPLEMENT_DYNAMIC_CLASS(wxResourceCache, wxList)
+/*
+IMPLEMENT_DYNAMIC_CLASS(wxRect, wxObject)
IMPLEMENT_DYNAMIC_CLASS(wxPoint, wxObject)
IMPLEMENT_DYNAMIC_CLASS(wxRealPoint, wxObject)
+*/
#endif
-wxRect::wxRect(void)
+wxRect::wxRect()
{
x = 0; y = 0; width = 0; height = 0;
}
-wxRect::wxRect(const long xx, const long yy, const long w, const long h)
+wxRect::wxRect(long xx, long yy, long w, long h)
{
x = xx; y = yy; width = w; height = h;
}
{
}
-wxColourDatabase::~wxColourDatabase (void)
+wxColourDatabase::~wxColourDatabase ()
{
// Cleanup Colour allocated in Initialize()
wxNode *node = First ();
}
// Colour database stuff
-void wxColourDatabase::Initialize (void)
+void wxColourDatabase::Initialize ()
{
// Don't initialize for X: colours are found
// in FindColour below.
cdef cc;
static cdef table[]={
-#ifdef __WINDOWS__
+// #ifdef __WXMSW__
{"AQUAMARINE",112, 219, 147},
{"BLACK",0, 0, 0},
{"BLUE", 0, 0, 255},
{"WHITE", 255, 255, 255},
{"YELLOW", 255, 255, 0},
{"YELLOW GREEN", 153, 204, 50},
-#endif
+// #endif
-#if defined(__GTK__) || defined(__X__)
+#if defined(__WXGTK__) || defined(__X__)
{"MEDIUM GOLDENROD", 234, 234, 173},
{"MEDIUM FOREST GREEN", 107, 142, 35},
{"LIGHT MAGENTA", 255, 0, 255},
if (node)
return (wxColour *)node->Data();
-#ifdef __WINDOWS__
+#ifdef __WXMSW__
else return NULL;
#endif
-#ifdef __GTK__
+// TODO for other implementations. This should really go into
+// platform-specific directories.
+#ifdef __WXSTUBS__
+ else return NULL;
+#endif
+
+#ifdef __WXGTK__
else {
wxColour *col = new wxColour( colour );
else {
XColor xcolour;
-#ifdef __MOTIF__
+#ifdef __WXMOTIF__
Display *display = XtDisplay(wxTheApp->topLevel) ;
#endif
#ifdef __XVIEW__
unsigned char red = colour.Red ();
unsigned char green = colour.Green ();
unsigned char blue = colour.Blue ();
-
+
for (wxNode * node = First (); node; node = node->Next ())
{
wxColour *col = (wxColour *) node->Data ();
+
if (col->Red () == red && col->Green () == green && col->Blue () == blue)
{
char *found = node->key.string;
}
-void
-wxInitializeStockObjects (void)
-{
+void wxInitializeStockLists () {
wxTheBrushList = new wxBrushList;
wxThePenList = new wxPenList;
wxTheFontList = new wxFontList;
wxTheBitmapList = new wxBitmapList;
+}
-#ifdef __MOTIF__
+void wxInitializeStockObjects ()
+{
+#ifdef __WXMOTIF__
#endif
#ifdef __X__
wxFontPool = new XFontPool;
}
void
-wxDeleteStockObjects (void)
-{
- DELETEP(wxNORMAL_FONT);
- DELETEP(wxSMALL_FONT);
- DELETEP(wxITALIC_FONT);
- DELETEP(wxSWISS_FONT);
-
- DELETEP(wxRED_PEN);
- DELETEP(wxCYAN_PEN);
- DELETEP(wxGREEN_PEN);
- DELETEP(wxBLACK_PEN);
- DELETEP(wxWHITE_PEN);
- DELETEP(wxTRANSPARENT_PEN);
- DELETEP(wxBLACK_DASHED_PEN);
- DELETEP(wxGREY_PEN);
- DELETEP(wxMEDIUM_GREY_PEN);
- DELETEP(wxLIGHT_GREY_PEN);
-
- DELETEP(wxBLUE_BRUSH);
- DELETEP(wxGREEN_BRUSH);
- DELETEP(wxWHITE_BRUSH);
- DELETEP(wxBLACK_BRUSH);
- DELETEP(wxTRANSPARENT_BRUSH);
- DELETEP(wxCYAN_BRUSH);
- DELETEP(wxRED_BRUSH);
- DELETEP(wxGREY_BRUSH);
- DELETEP(wxMEDIUM_GREY_BRUSH);
- DELETEP(wxLIGHT_GREY_BRUSH);
-
- DELETEP(wxBLACK);
- DELETEP(wxWHITE);
- DELETEP(wxRED);
- DELETEP(wxBLUE);
- DELETEP(wxGREEN);
- DELETEP(wxCYAN);
- DELETEP(wxLIGHT_GREY);
-
- DELETEP(wxSTANDARD_CURSOR);
- DELETEP(wxHOURGLASS_CURSOR);
- DELETEP(wxCROSS_CURSOR);
-}
-
-wxBitmapList::wxBitmapList (void)
-{
-}
-
-wxBitmapList::~wxBitmapList (void)
+wxDeleteStockObjects ()
{
+ wxDELETE(wxNORMAL_FONT);
+ wxDELETE(wxSMALL_FONT);
+ wxDELETE(wxITALIC_FONT);
+ wxDELETE(wxSWISS_FONT);
+
+ wxDELETE(wxRED_PEN);
+ wxDELETE(wxCYAN_PEN);
+ wxDELETE(wxGREEN_PEN);
+ wxDELETE(wxBLACK_PEN);
+ wxDELETE(wxWHITE_PEN);
+ wxDELETE(wxTRANSPARENT_PEN);
+ wxDELETE(wxBLACK_DASHED_PEN);
+ wxDELETE(wxGREY_PEN);
+ wxDELETE(wxMEDIUM_GREY_PEN);
+ wxDELETE(wxLIGHT_GREY_PEN);
+
+ wxDELETE(wxBLUE_BRUSH);
+ wxDELETE(wxGREEN_BRUSH);
+ wxDELETE(wxWHITE_BRUSH);
+ wxDELETE(wxBLACK_BRUSH);
+ wxDELETE(wxTRANSPARENT_BRUSH);
+ wxDELETE(wxCYAN_BRUSH);
+ wxDELETE(wxRED_BRUSH);
+ wxDELETE(wxGREY_BRUSH);
+ wxDELETE(wxMEDIUM_GREY_BRUSH);
+ wxDELETE(wxLIGHT_GREY_BRUSH);
+
+ wxDELETE(wxBLACK);
+ wxDELETE(wxWHITE);
+ wxDELETE(wxRED);
+ wxDELETE(wxBLUE);
+ wxDELETE(wxGREEN);
+ wxDELETE(wxCYAN);
+ wxDELETE(wxLIGHT_GREY);
+
+ wxDELETE(wxSTANDARD_CURSOR);
+ wxDELETE(wxHOURGLASS_CURSOR);
+ wxDELETE(wxCROSS_CURSOR);
+}
+
+void wxDeleteStockLists() {
+ wxDELETE(wxTheBrushList);
+ wxDELETE(wxThePenList);
+ wxDELETE(wxTheFontList);
+ wxDELETE(wxTheBitmapList);
+}
+
+wxBitmapList::wxBitmapList ()
+{
+}
+
+wxBitmapList::~wxBitmapList ()
+{
+ wxLogDebug("~wxBitmapList: count = %d", Number());
+#ifdef __WXMSW__
+
wxNode *node = First ();
while (node)
{
wxBitmap *bitmap = (wxBitmap *) node->Data ();
wxNode *next = node->Next ();
- delete bitmap;
-// bitmap->FreeResource(TRUE);
+ if (bitmap->GetVisible())
+ delete bitmap;
node = next;
}
+#endif
}
// Pen and Brush lists
-wxPenList::~wxPenList (void)
+wxPenList::~wxPenList ()
{
+#ifdef __WXMSW__
wxNode *node = First ();
while (node)
{
wxPen *pen = (wxPen *) node->Data ();
wxNode *next = node->Next ();
- delete pen;
-// pen->FreeResource(TRUE);
+ if (pen->GetVisible())
+ delete pen;
node = next;
}
+#endif
}
void wxPenList::AddPen (wxPen * pen)
DeleteObject (pen);
}
-wxPen *wxPenList::FindOrCreatePen (const wxColour& colour, const int width, const int style)
+wxPen *wxPenList::FindOrCreatePen (const wxColour& colour, int width, int style)
{
for (wxNode * node = First (); node; node = node->Next ())
{
return pen;
}
-wxPen *wxPenList::FindOrCreatePen (const wxString& colour, const int width, const int style)
+wxPen *wxPenList::FindOrCreatePen (const wxString& colour, int width, int style)
{
wxColour *the_colour = wxTheColourDatabase->FindColour (colour);
if (the_colour)
return NULL;
}
-wxBrushList::~wxBrushList (void)
+wxBrushList::~wxBrushList ()
{
+#ifdef __WXMSW__
wxNode *node = First ();
while (node)
{
wxBrush *brush = (wxBrush *) node->Data ();
wxNode *next = node->Next ();
- delete brush;
+ if (brush->GetVisible())
+ delete brush;
node = next;
}
+#endif
}
void wxBrushList::AddBrush (wxBrush * brush)
Append (brush);
}
-wxBrush *wxBrushList::FindOrCreateBrush (const wxColour& colour, const int style)
+wxBrush *wxBrushList::FindOrCreateBrush (const wxColour& colour, int style)
{
for (wxNode * node = First (); node; node = node->Next ())
{
return brush;
}
-wxBrush *wxBrushList::FindOrCreateBrush (const wxString& colour, const int style)
+wxBrush *wxBrushList::FindOrCreateBrush (const wxString& colour, int style)
{
wxColour *the_colour = wxTheColourDatabase->FindColour (colour);
if (the_colour)
DeleteObject (brush);
}
-wxFontList::~wxFontList (void)
+wxFontList::~wxFontList ()
{
-#ifdef __WINDOWS__
+#ifdef __WXMSW__
wxNode *node = First ();
while (node)
{
-/*
+ // Only delete objects that are 'visible', i.e.
+ // that have been created using FindOrCreate...,
+ // where the pointers are expected to be shared
+ // (and therefore not deleted by any one part of an app).
wxFont *font = (wxFont *) node->Data ();
wxNode *next = node->Next ();
- delete font;
- node = next;
-*/
- // New for 2.0: don't delete the font (it may be a member
- // of a wxDC, for example)
- wxFont *font = (wxFont *) node->Data ();
- wxNode *next = node->Next ();
-
- // Force the font to be deleted
- font->FreeResource(TRUE);
+ if (font->GetVisible())
+ delete font;
node = next;
- }
+}
#endif
}
}
wxFont *wxFontList::
- FindOrCreateFont (const int PointSize, const int FamilyOrFontId, const int Style, const int Weight, const bool underline, const wxString& Face)
+ FindOrCreateFont (int PointSize, int FamilyOrFontId, int Style, int Weight, bool underline, const wxString& Face)
{
for (wxNode * node = First (); node; node = node->Next ())
{
each_font->GetStyle () == Style &&
each_font->GetWeight () == Weight &&
each_font->GetUnderlined () == underline &&
-#if defined(__X__) || (defined(__WINDOWS__) && USE_PORTABLE_FONTS_IN_MSW)
+#if defined(__X__) || (defined(__WXMSW__) && USE_PORTABLE_FONTS_IN_MSW)
each_font->GetFontId () == FamilyOrFontId) /* New font system */
#else
each_font->GetFamily () == FamilyOrFontId &&
void wxBitmapList::RemoveBitmap(wxBitmap *bitmap)
{ DeleteObject(bitmap); }
+wxSize wxGetDisplaySize()
+{
+ int x, y;
+ wxDisplaySize(& x, & y);
+ return wxSize(x, y);
+}
+
+wxResourceCache::wxResourceCache () : wxList() {
+}
+
+wxResourceCache::wxResourceCache (const unsigned int the_key_type) : wxList(the_key_type) {
+}
+
+wxResourceCache::~wxResourceCache () {
+ wxNode *node = First ();
+ while (node) {
+ wxGDIObject *item = (wxGDIObject *)node->Data();
+ if (item->IsKindOf(CLASSINFO(wxBrush))) {
+ wxBrush *brush = (wxBrush *)item;
+ delete brush;
+ }
+
+ if (item->IsKindOf(CLASSINFO(wxFont))) {
+ wxFont *font = (wxFont *)item;
+ delete font;
+ }
+
+ if (item->IsKindOf(CLASSINFO(wxBitmap))) {
+ wxBitmap *bitmap = (wxBitmap *)item;
+ delete bitmap;
+ }
+
+ if (item->IsKindOf(CLASSINFO(wxColour))) {
+ wxColour *colour = (wxColour *)item;
+ delete colour;
+ }
+
+ wxNode *next = node->Next ();
+ node = next;
+ }
+}
+