simplify/cleanup wxTheXXXList and wxGDIObject code (patch 1452023 from Paul Cornett)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@38767 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2006-04-16 22:33:24 +00:00
parent d0914b9d8d
commit 1de8d512b7
12 changed files with 97 additions and 258 deletions

View File

@ -898,7 +898,6 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
wx/gtk/dcscreen.h
wx/gtk/dnd.h
wx/gtk/font.h
wx/gtk/gdiobj.h
wx/gtk/icon.h
wx/gtk/minifram.h
wx/gtk/pen.h
@ -1069,7 +1068,6 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
wx/gtk1/dcscreen.h
wx/gtk1/dnd.h
wx/gtk1/font.h
wx/gtk1/gdiobj.h
wx/gtk1/icon.h
wx/gtk1/minifram.h
wx/gtk1/pen.h
@ -1300,7 +1298,6 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
wx/motif/font.h
wx/motif/frame.h
wx/motif/gauge.h
wx/motif/gdiobj.h
wx/motif/icon.h
wx/motif/listbox.h
wx/motif/mdi.h
@ -1385,7 +1382,6 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
wx/x11/dcscreen.h
wx/x11/dnd.h
wx/x11/font.h
wx/x11/gdiobj.h
wx/x11/icon.h
wx/x11/minifram.h
wx/x11/palette.h
@ -1551,7 +1547,6 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
wx/msw/frame.h
wx/msw/gauge95.h
wx/msw/gdiimage.h
wx/msw/gdiobj.h
wx/msw/icon.h
wx/msw/imaglist.h
wx/msw/iniconf.h
@ -1731,7 +1726,6 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
wx/mgl/dcscreen.h
wx/mgl/font.h
wx/mgl/fontutil.h
wx/mgl/gdiobj.h
wx/mgl/icon.h
wx/mgl/palette.h
wx/mgl/pen.h
@ -1874,7 +1868,6 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
wx/os2/frame.h
wx/os2/gauge.h
wx/os2/gdiimage.h
wx/os2/gdiobj.h
wx/os2/helpwin.h
wx/os2/icon.h
wx/os2/iniconf.h
@ -2069,7 +2062,6 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
wx/mac/fontdlg.h
wx/mac/frame.h
wx/mac/gauge.h
wx/mac/gdiobj.h
wx/mac/glcanvas.h
wx/mac/gsockmac.h
wx/mac/helpxxxx.h
@ -2156,7 +2148,6 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
wx/mac/carbon/fontdlg.h
wx/mac/carbon/frame.h
wx/mac/carbon/gauge.h
wx/mac/carbon/gdiobj.h
wx/mac/carbon/gsockmac.h
wx/mac/carbon/helpxxxx.h
wx/mac/carbon/icon.h
@ -2361,7 +2352,6 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
wx/cocoa/fontdlg.h
wx/cocoa/frame.h
wx/cocoa/gauge.h
wx/cocoa/gdiobj.h
wx/cocoa/icon.h
wx/cocoa/listbox.h
wx/cocoa/log.h

View File

@ -371,13 +371,6 @@ Constructor. The application should not construct its own brush list:
use the object pointer {\bf wxTheBrushList}.
\membersection{wxBrushList::AddBrush}\label{wxbrushlistaddbrush}
\func{void}{AddBrush}{\param{wxBrush *}{brush}}
Used internally by wxWidgets to add a brush to the list.
\membersection{wxBrushList::FindOrCreateBrush}\label{wxbrushlistfindorcreatebrush}
\func{wxBrush *}{FindOrCreateBrush}{\param{const wxColour\& }{colour}, \param{int}{ style = wxSOLID}}
@ -392,10 +385,3 @@ to the brush list, and returns it.
\docparam{style}{Brush style. See \helpref{wxBrush::SetStyle}{wxbrushsetstyle} for a list of styles.}
\membersection{wxBrushList::RemoveBrush}\label{wxbrushlistremovebrush}
\func{void}{RemoveBrush}{\param{wxBrush *}{brush}}
Used by wxWidgets to remove a brush from the list.

View File

@ -29,12 +29,6 @@ deleted and their resources freed, eliminating the possibility of `memory leaks'
Constructor. The application should not construct its own font list:
use the object pointer {\bf wxTheFontList}.
\membersection{wxFontList::AddFont}\label{wxfontlistaddfont}
\func{void}{AddFont}{\param{wxFont *}{font}}
Used by wxWidgets to add a font to the list, called in the font constructor.
\membersection{wxFontList::FindOrCreateFont}\label{findorcreatefont}
\func{wxFont *}{FindOrCreateFont}{\param{int}{ point\_size}, \param{int}{ family}, \param{int}{ style}, \param{int}{ weight}, \param{bool}{ underline = false},
@ -43,10 +37,3 @@ Used by wxWidgets to add a font to the list, called in the font constructor.
Finds a font of the given specification, or creates one and adds it to the list. See the \helpref{wxFont constructor}{wxfontctor} for
details of the arguments.
\membersection{wxFontList::RemoveFont}\label{wxfontlistremovefont}
\func{void}{RemoveFont}{\param{wxFont *}{font}}
Used by wxWidgets to remove a font from the list.

View File

@ -390,12 +390,6 @@ backward compatibility with earlier versions of wxWidgets.
Constructor. The application should not construct its own pen list:
use the object pointer {\bf wxThePenList}.
\membersection{wxPenList::AddPen}\label{wxpenlistaddpen}
\func{void}{AddPen}{\param{wxPen*}{ pen}}
Used internally by wxWidgets to add a pen to the list.
\membersection{wxPenList::FindOrCreatePen}\label{wxpenlistfindorcreatepen}
\func{wxPen*}{FindOrCreatePen}{\param{const wxColour\& }{colour}, \param{int}{ width}, \param{int}{ style}}
@ -417,9 +411,3 @@ to the pen list, and returns it.
\docparam{width}{Width of pen.}
\docparam{style}{Pen style. See \helpref{wxPen::wxPen}{wxpenctor} for a list of styles.}
\membersection{wxPenList::RemovePen}\label{wxpenlistremovepen}
\func{void}{RemovePen}{\param{wxPen*}{ pen}}
Used by wxWidgets to remove a pen from the list.

View File

@ -452,40 +452,46 @@ public:
typedef wxInt8 wxDash;
class WXDLLEXPORT wxPenList : public wxList
class WXDLLIMPEXP_CORE wxGDIObjListBase {
public:
wxGDIObjListBase();
~wxGDIObjListBase();
protected:
wxList list;
};
class WXDLLIMPEXP_CORE wxPenList: public wxGDIObjListBase
{
public:
wxPenList() { }
~wxPenList();
void AddPen(wxPen *pen);
void RemovePen(wxPen *pen);
wxPen *FindOrCreatePen(const wxColour& colour, int width, int style);
#if WXWIN_COMPATIBILITY_2_6
wxDEPRECATED( void AddPen(wxPen*) );
wxDEPRECATED( void RemovePen(wxPen*) );
#endif
};
class WXDLLEXPORT wxBrushList : public wxList
class WXDLLIMPEXP_CORE wxBrushList: public wxGDIObjListBase
{
public:
wxBrushList() { }
~wxBrushList();
void AddBrush(wxBrush *brush);
void RemoveBrush(wxBrush *brush);
wxBrush *FindOrCreateBrush(const wxColour& colour, int style = wxSOLID);
#if WXWIN_COMPATIBILITY_2_6
wxDEPRECATED( void AddBrush(wxBrush*) );
wxDEPRECATED( void RemoveBrush(wxBrush*) );
#endif
};
class WXDLLEXPORT wxFontList : public wxList
class WXDLLIMPEXP_CORE wxFontList: public wxGDIObjListBase
{
public:
wxFontList() { }
~wxFontList();
void AddFont(wxFont *font);
void RemoveFont(wxFont *font);
wxFont *FindOrCreateFont(int pointSize, int family, int style, int weight,
bool underline = false,
const wxString& face = wxEmptyString,
wxFontEncoding encoding = wxFONTENCODING_DEFAULT);
#if WXWIN_COMPATIBILITY_2_6
wxDEPRECATED( void AddFont(wxFont*) );
wxDEPRECATED( void RemoveFont(wxFont*) );
#endif
};
WX_DECLARE_STRING_HASH_MAP( wxColour *, wxStringToColourHashMap );
@ -523,16 +529,6 @@ private:
wxStringToColourHashMap *m_map;
};
class WXDLLEXPORT wxBitmapList : public wxList
{
public:
wxBitmapList(){}
~wxBitmapList();
void AddBitmap(wxBitmap *bitmap);
void RemoveBitmap(wxBitmap *bitmap);
};
class WXDLLEXPORT wxResourceCache: public wxList
{
public:
@ -551,7 +547,6 @@ public:
extern WXDLLEXPORT_DATA(wxPenList*) wxThePenList;
extern WXDLLEXPORT_DATA(wxBrushList*) wxTheBrushList;
extern WXDLLEXPORT_DATA(wxFontList*) wxTheFontList;
extern WXDLLEXPORT_DATA(wxBitmapList*) wxTheBitmapList;
/* Stock objects

View File

@ -12,29 +12,40 @@
#ifndef _WX_GDIOBJ_H_BASE_
#define _WX_GDIOBJ_H_BASE_
#include "wx/defs.h"
#include "wx/object.h"
#if defined(__WXPALMOS__)
#include "wx/palmos/gdiobj.h"
#elif defined(__WXMSW__)
#include "wx/msw/gdiobj.h"
#elif defined(__WXMOTIF__)
#include "wx/motif/gdiobj.h"
#elif defined(__WXGTK20__)
#include "wx/gtk/gdiobj.h"
#elif defined(__WXGTK__)
#include "wx/gtk1/gdiobj.h"
#elif defined(__WXX11__)
#include "wx/x11/gdiobj.h"
#elif defined(__WXMGL__)
#include "wx/mgl/gdiobj.h"
#elif defined(__WXMAC__)
#include "wx/mac/gdiobj.h"
#elif defined(__WXCOCOA__)
#include "wx/cocoa/gdiobj.h"
#elif defined(__WXPM__)
#include "wx/os2/gdiobj.h"
#endif
// ----------------------------------------------------------------------------
// wxGDIRefData is the base class for wxXXXData structures which contain the
// real data for the GDI object and are shared among all wxWin objects sharing
// the same native GDI object
// ----------------------------------------------------------------------------
class WXDLLIMPEXP_CORE wxGDIRefData: public wxObjectRefData { };
// ----------------------------------------------------------------------------
// wxGDIObject
// ----------------------------------------------------------------------------
class WXDLLIMPEXP_CORE wxGDIObject: public wxObject
{
public:
bool IsNull() const { return m_refData == NULL; }
#if defined(__WXMSW__) || defined(__WXOS2__) || defined(__WXPALMOS__)
// Creates the resource
virtual bool RealizeResource() { return false; }
// Frees the resource
virtual bool FreeResource(bool WXUNUSED(force) = false) { return false; }
virtual bool IsFree() const { return false; }
// Returns handle.
virtual WXHANDLE GetResourceHandle() const { return 0; }
#endif // defined(__WXMSW__) || defined(__WXOS2__)
DECLARE_DYNAMIC_CLASS(wxGDIObject)
};
#endif
// _WX_GDIOBJ_H_BASE_

View File

@ -97,8 +97,6 @@ bool wxFont::Create(int pointSize, int family, int style, int weight, bool under
wxFont::~wxFont()
{
if (wxTheFontList)
wxTheFontList->DeleteObject(this);
}
bool wxFont::RealizeResource()

View File

@ -48,7 +48,6 @@ int wxPageNumber;
wxFontList *wxTheFontList = NULL;
wxPenList *wxThePenList = NULL;
wxBrushList *wxTheBrushList = NULL;
wxBitmapList *wxTheBitmapList = NULL;
wxColourDatabase *wxTheColourDatabase = NULL;
// 'Null' objects

View File

@ -719,7 +719,6 @@ void wxInitializeStockLists()
wxTheBrushList = new wxBrushList;
wxThePenList = new wxPenList;
wxTheFontList = new wxFontList;
wxTheBitmapList = new wxBitmapList;
}
void wxDeleteStockLists()
@ -727,57 +726,30 @@ void wxDeleteStockLists()
wxDELETE(wxTheBrushList);
wxDELETE(wxThePenList);
wxDELETE(wxTheFontList);
wxDELETE(wxTheBitmapList);
}
// ============================================================================
// wxTheXXXList stuff (semi-obsolete)
// ============================================================================
wxBitmapList::~wxBitmapList ()
wxGDIObjListBase::wxGDIObjListBase()
{
wxList::compatibility_iterator node = GetFirst ();
while (node)
}
wxGDIObjListBase::~wxGDIObjListBase()
{
for (wxList::compatibility_iterator node = list.GetFirst(); node; node = node->GetNext())
{
wxBitmap *bitmap = (wxBitmap *) node->GetData ();
wxList::compatibility_iterator next = node->GetNext ();
if (bitmap->GetVisible())
delete bitmap;
node = next;
delete wx_static_cast(wxObject*, node->GetData());
}
}
// Pen and Brush lists
wxPenList::~wxPenList ()
{
wxList::compatibility_iterator node = GetFirst ();
while (node)
{
wxPen *pen = (wxPen *) node->GetData ();
wxList::compatibility_iterator next = node->GetNext ();
if (pen->GetVisible())
delete pen;
node = next;
}
}
void wxPenList::AddPen (wxPen * pen)
{
Append (pen);
}
void wxPenList::RemovePen (wxPen * pen)
{
DeleteObject (pen);
}
wxPen *wxPenList::FindOrCreatePen (const wxColour& colour, int width, int style)
{
for (wxList::compatibility_iterator node = GetFirst (); node; node = node->GetNext ())
for (wxList::compatibility_iterator node = list.GetFirst(); node; node = node->GetNext())
{
wxPen *each_pen = (wxPen *) node->GetData ();
if (each_pen &&
each_pen->GetVisible() &&
if (
each_pen->GetWidth () == width &&
each_pen->GetStyle () == style &&
each_pen->GetColour ().Red () == colour.Red () &&
@ -786,48 +758,23 @@ wxPen *wxPenList::FindOrCreatePen (const wxColour& colour, int width, int style)
return each_pen;
}
wxPen *pen = new wxPen (colour, width, style);
if ( !pen->Ok() )
wxPen* pen = NULL;
wxPen penTmp(colour, width, style);
if (penTmp.Ok())
{
// don't save the invalid pens in the list
delete pen;
return NULL;
pen = new wxPen(penTmp);
list.Append(pen);
}
AddPen(pen);
// we'll delete it ourselves later
pen->SetVisible(true);
return pen;
}
wxBrushList::~wxBrushList ()
{
wxList::compatibility_iterator node = GetFirst ();
while (node)
{
wxBrush *brush = (wxBrush *) node->GetData ();
wxList::compatibility_iterator next = node->GetNext ();
if (brush && brush->GetVisible())
delete brush;
node = next;
}
}
void wxBrushList::AddBrush (wxBrush * brush)
{
Append (brush);
}
wxBrush *wxBrushList::FindOrCreateBrush (const wxColour& colour, int style)
{
for (wxList::compatibility_iterator node = GetFirst (); node; node = node->GetNext ())
for (wxList::compatibility_iterator node = list.GetFirst(); node; node = node->GetNext())
{
wxBrush *each_brush = (wxBrush *) node->GetData ();
if (each_brush &&
each_brush->GetVisible() &&
if (
each_brush->GetStyle () == style &&
each_brush->GetColour ().Red () == colour.Red () &&
each_brush->GetColour ().Green () == colour.Green () &&
@ -835,56 +782,17 @@ wxBrush *wxBrushList::FindOrCreateBrush (const wxColour& colour, int style)
return each_brush;
}
wxBrush *brush = new wxBrush (colour, style);
if ( !brush->Ok() )
wxBrush* brush = NULL;
wxBrush brushTmp(colour, style);
if (brushTmp.Ok())
{
// don't put the brushes we failed to create into the list
delete brush;
return NULL;
brush = new wxBrush(brushTmp);
list.Append(brush);
}
AddBrush(brush);
// we'll delete it ourselves later
brush->SetVisible(true);
return brush;
}
void wxBrushList::RemoveBrush (wxBrush * brush)
{
DeleteObject (brush);
}
wxFontList::~wxFontList ()
{
wxList::compatibility_iterator node = GetFirst ();
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->GetData ();
wxList::compatibility_iterator next = node->GetNext ();
if (font->GetVisible())
delete font;
node = next;
}
}
void wxFontList::AddFont (wxFont * font)
{
Append (font);
}
void wxFontList::RemoveFont (wxFont * font)
{
DeleteObject (font);
}
wxFont *wxFontList::FindOrCreateFont(int pointSize,
int family,
int style,
@ -893,13 +801,12 @@ wxFont *wxFontList::FindOrCreateFont(int pointSize,
const wxString& facename,
wxFontEncoding encoding)
{
wxFont *font = (wxFont *)NULL;
wxFont *font;
wxList::compatibility_iterator node;
for ( node = GetFirst(); node; node = node->GetNext() )
for (node = list.GetFirst(); node; node = node->GetNext())
{
font = (wxFont *)node->GetData();
if ( font->GetVisible() &&
font->Ok() &&
if (
font->GetPointSize () == pointSize &&
font->GetStyle () == style &&
font->GetWeight () == weight &&
@ -944,30 +851,26 @@ wxFont *wxFontList::FindOrCreateFont(int pointSize,
}
}
if ( !node )
// font not found, create the new one
font = NULL;
wxFont fontTmp(pointSize, family, style, weight, underline, facename, encoding);
if (fontTmp.Ok())
{
// font not found, create the new one
font = new wxFont(pointSize, family, style, weight,
underline, facename, encoding);
AddFont(font);
// and mark it as being cacheable
font->SetVisible(true);
font = new wxFont(fontTmp);
list.Append(font);
}
return font;
}
void wxBitmapList::AddBitmap(wxBitmap *bitmap)
{
Append(bitmap);
}
void wxBitmapList::RemoveBitmap(wxBitmap *bitmap)
{
DeleteObject(bitmap);
}
#if WXWIN_COMPATIBILITY_2_6
void wxBrushList::AddBrush(wxBrush*) { }
void wxBrushList::RemoveBrush(wxBrush*) { }
void wxFontList::AddFont(wxFont*) { }
void wxFontList::RemoveFont(wxFont*) { }
void wxPenList::AddPen(wxPen*) { }
void wxPenList::RemovePen(wxPen*) { }
#endif
wxSize wxGetDisplaySize()
{

View File

@ -28,6 +28,8 @@
IMPLEMENT_DYNAMIC_CLASS(wxGDIObject, wxObject)
#define M_GDIDATA wx_static_cast(wxGDIRefData*, m_refData)
/*
void wxGDIObject::IncrementResourceUsage(void)
{

View File

@ -54,14 +54,10 @@ wxBrushRefData::~wxBrushRefData()
//
wxBrush::wxBrush()
{
if ( wxTheBrushList )
wxTheBrushList->AddBrush(this);
} // end of wxBrush::wxBrush
wxBrush::~wxBrush()
{
if ( wxTheBrushList )
wxTheBrushList->RemoveBrush(this);
} // end of wxBrush::~wxBrush
wxBrush::wxBrush(
@ -77,9 +73,6 @@ wxBrush::wxBrush(
memset(&M_BRUSHDATA->m_vBundle, '\0', sizeof(AREABUNDLE));
RealizeResource();
if ( wxTheBrushList )
wxTheBrushList->AddBrush(this);
} // end of wxBrush::wxBrush
wxBrush::wxBrush(
@ -94,9 +87,6 @@ wxBrush::wxBrush(
memset(&M_BRUSHDATA->m_vBundle, '\0', sizeof(AREABUNDLE));
RealizeResource();
if ( wxTheBrushList )
wxTheBrushList->AddBrush(this);
} // end of wxBrush::wxBrush
bool wxBrush::RealizeResource()

View File

@ -60,14 +60,10 @@ wxPenRefData::~wxPenRefData()
//
wxPen::wxPen()
{
if ( wxThePenList )
wxThePenList->AddPen(this);
} // end of wxPen::wxPen
wxPen::~wxPen()
{
if (wxThePenList)
wxThePenList->RemovePen(this);
} // end of wxPen::wxPen
// Should implement Create
@ -87,9 +83,6 @@ wxPen::wxPen(
M_PENDATA->m_hPen = 0L;
RealizeResource();
if ( wxThePenList )
wxThePenList->AddPen(this);
} // end of wxPen::wxPen
wxPen::wxPen(
@ -107,9 +100,6 @@ wxPen::wxPen(
M_PENDATA->m_hPen = 0;
RealizeResource();
if ( wxThePenList )
wxThePenList->AddPen(this);
} // end of wxPen::wxPen
int wx2os2PenStyle(