1 ///////////////////////////////////////////////////////////////////////////// 
   3 // Purpose:     interface of wxPen* classes 
   4 // Author:      wxWidgets team 
   6 // Licence:     wxWindows license 
   7 ///////////////////////////////////////////////////////////////////////////// 
  10     The possible styles for a wxPen. 
  14     wxPENSTYLE_INVALID 
= -1, 
  23         /**< Long dashed style. */ 
  25     wxPENSTYLE_SHORT_DASH
, 
  26         /**< Short dashed style. */ 
  29         /**< Dot and dash style. */ 
  32         /**< Use the user dashes: see wxPen::SetDashes. */ 
  34     wxPENSTYLE_TRANSPARENT
, 
  35         /**< No pen is used. */ 
  37     wxPENSTYLE_STIPPLE_MASK_OPAQUE
, 
  38         /**< @todo WHAT's this? */ 
  40     wxPENSTYLE_STIPPLE_MASK
, 
  41         /**< @todo WHAT's this? */ 
  44         /**< Use the stipple bitmap. */ 
  46     wxPENSTYLE_BDIAGONAL_HATCH
, 
  47         /**< Backward diagonal hatch. */ 
  49     wxPENSTYLE_CROSSDIAG_HATCH
, 
  50         /**< Cross-diagonal hatch. */ 
  52     wxPENSTYLE_FDIAGONAL_HATCH
, 
  53         /**< Forward diagonal hatch. */ 
  55     wxPENSTYLE_CROSS_HATCH
, 
  58     wxPENSTYLE_HORIZONTAL_HATCH
, 
  59         /**< Horizontal hatch. */ 
  61     wxPENSTYLE_VERTICAL_HATCH
, 
  62         /**< Vertical hatch. */ 
  64     wxPENSTYLE_FIRST_HATCH 
= wxPENSTYLE_BDIAGONAL_HATCH
, 
  65     wxPENSTYLE_LAST_HATCH 
= wxPENSTYLE_VERTICAL_HATCH
 
  69     The possible join values of a wxPen. 
  71     @todo use wxPENJOIN_ prefix 
  84     The possible cap values of a wxPen. 
  86     @todo use wxPENCAP_ prefix 
 102     A pen is a drawing tool for drawing outlines. It is used for drawing 
 103     lines and painting the outline of rectangles, ellipses, etc. 
 104     It has a colour, a width and a style. 
 106     @note On a monochrome display, wxWidgets shows all non-white pens as black. 
 108     Do not initialize objects on the stack before the program commences, 
 109     since other required structures may not have been set up yet. 
 110     Instead, define global pointers to objects and create them in wxApp::OnInit() 
 113     An application may wish to dynamically create pens with different characteristics, 
 114     and there is the consequent danger that a large number of duplicate pens will 
 115     be created. Therefore an application may wish to get a pointer to a pen by using 
 116     the global list of pens ::wxThePenList, and calling the member function 
 117     wxPenList::FindOrCreatePen(). 
 118     See wxPenList for more info. 
 120     This class uses @ref overview_refcount "reference counting and copy-on-write" internally 
 121     so that assignments between two instances of this class are very cheap. 
 122     You can therefore use actual objects instead of pointers without efficiency problems. 
 123     If an instance of this class is changed it will create its own data internally 
 124     so that other instances, which previously shared the data using the reference 
 125     counting, are not affected. 
 137     @li ::wxTRANSPARENT_PEN 
 138     @li ::wxBLACK_DASHED_PEN 
 140     @li ::wxMEDIUM_GREY_PEN 
 141     @li ::wxLIGHT_GREY_PEN 
 143     @see wxPenList, wxDC, wxDC::SetPen() 
 145 class wxPen 
: public wxGDIObject
 
 149         Default constructor. The pen will be uninitialised, and IsOk() will return @false. 
 154         Constructs a pen from a colour object, pen width and style. 
 159             Pen width. Under Windows, the pen width cannot be greater than 1 if 
 160             the style is @c wxDOT, @c wxLONG_DASH, @c wxSHORT_DASH, @c wxDOT_DASH, or @c wxUSER_DASH. 
 162             The style may be one of the ::wxPenStyle values. 
 164         @remarks Different versions of Windows and different versions of other 
 165                  platforms support very different subsets of the styles above 
 166                  - there is no similarity even between Windows95 and Windows98 - 
 169         @see SetStyle(), SetColour(), SetWidth() 
 171     wxPen(const wxColour
& colour
, int width 
= 1, wxPenStyle style 
= wxPENSTYLE_SOLID
); 
 174         Constructs a stippled pen from a stipple bitmap and a width. 
 177             Pen width. Under Windows, the pen width cannot be greater than 1 if 
 178             the style is @c wxDOT, @c wxLONG_DASH, @c wxSHORT_DASH, @c wxDOT_DASH, or @c wxUSER_DASH. 
 182         @onlyfor{wxmsw,wxmac} 
 184         @see SetWidth(), SetStipple() 
 186     wxPen(const wxBitmap
& stipple
, int width
); 
 189         Copy constructor, uses @ref overview_refcount. 
 192             A pointer or reference to a pen to copy. 
 194     wxPen(const wxPen
& pen
); 
 198         @see @ref overview_refcount_destruct "reference-counted object destruction" 
 200         @remarks Although all remaining pens are deleted when the application 
 201                  exits, the application should try to clean up all pens 
 202                  itself. This is because wxWidgets cannot know if a 
 203                  pointer to the pen object is stored in an application 
 204                  data structure, and there is a risk of double deletion. 
 209         Returns the pen cap style, which may be one of @c wxCAP_ROUND, @c 
 210         wxCAP_PROJECTING and @c wxCAP_BUTT. 
 212         The default is @c wxCAP_ROUND. 
 216     virtual wxPenCap 
GetCap() const; 
 219         Returns a reference to the pen colour. 
 223     virtual wxColour 
GetColour() const; 
 226         Gets an array of dashes (defined as char in X, DWORD under Windows). 
 227         @a dashes is a pointer to the internal array. Do not deallocate or store this 
 230         @return The number of dashes associated with this pen. 
 234     virtual int GetDashes(wxDash
** dashes
) const; 
 237         Returns the pen join style, which may be one of @c wxJOIN_BEVEL, @c 
 238         wxJOIN_ROUND and @c wxJOIN_MITER. 
 240         The default is @c wxJOIN_ROUND. 
 244     virtual wxPenJoin 
GetJoin() const; 
 247         Gets a pointer to the stipple bitmap. 
 251     virtual wxBitmap
* GetStipple() const; 
 254         Returns the pen style. 
 256         @see wxPen(), SetStyle() 
 258     virtual wxPenStyle 
GetStyle() const; 
 261         Returns the pen width. 
 265     virtual int GetWidth() const; 
 268         Returns @true if the pen is initialised. 
 270     virtual bool IsOk() const; 
 273         Sets the pen cap style, which may be one of @c wxCAP_ROUND, @c wxCAP_PROJECTING 
 274         and @c wxCAP_BUTT. The default is @c wxCAP_ROUND. 
 278     virtual void SetCap(wxPenCap capStyle
); 
 282         The pen's colour is changed to the given colour. 
 286     virtual void SetColour(wxColour
& colour
); 
 287     virtual void SetColour(unsigned char red
, unsigned char green
, unsigned char blue
); 
 291         Associates an array of pointers to dashes (defined as char in X, DWORD under 
 292         Windows) with the pen. 
 294         The array is not deallocated by wxPen, but neither must it be deallocated by 
 295         the calling application until the pen is deleted or this function is called 
 300     virtual void SetDashes(int n
, const wxDash
* dash
); 
 303         Sets the pen join style, which may be one of @c wxJOIN_BEVEL, @c wxJOIN_ROUND 
 306         The default is @c wxJOIN_ROUND. 
 310     virtual void SetJoin(wxPenJoin join_style
); 
 313         Sets the bitmap for stippling. 
 317     virtual void SetStipple(const wxBitmap
& stipple
); 
 324     virtual void SetStyle(wxPenStyle style
); 
 331     virtual void SetWidth(int width
); 
 336         See @ref overview_refcount_equality "reference-counted object comparison" for 
 339     bool operator!=(const wxPen
& pen
) const; 
 342         Assignment operator, using @ref overview_refcount. 
 344     wxPen
& operator=(const wxPen
& pen
); 
 349         See @ref overview_refcount_equality "reference-counted object comparison" for 
 352     bool operator==(const wxPen
& pen
) const; 
 388 wxPen
* wxTRANSPARENT_PEN
; 
 393 wxPen
* wxBLACK_DASHED_PEN
; 
 403 wxPen
* wxMEDIUM_GREY_PEN
; 
 408 wxPen
* wxLIGHT_GREY_PEN
; 
 415     There is only one instance of this class: ::wxThePenList. 
 416     Use this object to search for a previously created pen of the desired 
 417     type and create it if not already found. In some windowing systems, 
 418     the pen may be a scarce resource, so it can pay to reuse old 
 419     resources if possible. When an application finishes, all pens will 
 420     be deleted and their resources freed, eliminating the possibility of 
 421     'memory leaks'. However, it is best not to rely on this automatic 
 422     cleanup because it can lead to double deletion in some circumstances. 
 424     There are two mechanisms in recent versions of wxWidgets which make the 
 425     pen list less useful than it once was. Under Windows, scarce resources 
 426     are cleaned up internally if they are not being used. Also, a referencing 
 427     counting mechanism applied to all GDI objects means that some sharing 
 428     of underlying resources is possible. You don't have to keep track of pointers, 
 429     working out when it is safe delete a pen, because the referencing counting does 
 430     it for you. For example, you can set a pen in a device context, and then 
 431     immediately delete the pen you passed, because the pen is 'copied'. 
 433     So you may find it easier to ignore the pen list, and instead create 
 434     and copy pens as you see fit. If your Windows resource meter suggests 
 435     your application is using too many resources, you can resort to using 
 436     GDI lists to share objects explicitly. 
 438     The only compelling use for the pen list is for wxWidgets to keep 
 439     track of pens in order to clean them up on exit. It is also kept for 
 440     backward compatibility with earlier versions of wxWidgets. 
 454         Constructor. The application should not construct its own pen list: 
 455         use the object pointer ::wxThePenList. 
 460         Finds a pen with the specified attributes and returns it, else creates a 
 461         new pen, adds it to the pen list, and returns it. 
 468             Pen style. See ::wxPenStyle for a list of styles. 
 470     wxPen
* FindOrCreatePen(const wxColour
& colour
, 
 472                            wxPenStyle style 
= wxPENSTYLE_SOLID
); 
 476     The global list of wxPen objects ready to be re-used (for better performances). 
 478 wxPenList
* wxThePenList
;