X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2b030203c5926bd6af8bc310469c911f2143f7e1..3b49331b7441e091fc5997b830801d76a1243f28:/include/wx/cocoa/font.h diff --git a/include/wx/cocoa/font.h b/include/wx/cocoa/font.h index f2075fe537..1b6698e89e 100644 --- a/include/wx/cocoa/font.h +++ b/include/wx/cocoa/font.h @@ -12,101 +12,34 @@ #ifndef _WX_FONT_H_ #define _WX_FONT_H_ -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) - #pragma interface "font.h" -#endif - -class WXDLLEXPORT wxFontRefData: public wxGDIRefData -{ - friend class WXDLLEXPORT wxFont; -public: - wxFontRefData() - : m_fontId(0) - , m_pointSize(10) - , m_family(wxDEFAULT) - , m_style(wxNORMAL) - , m_weight(wxNORMAL) - , m_underlined(FALSE) - , m_faceName(wxT("Geneva")) - , m_encoding(wxFONTENCODING_DEFAULT) - { - Init(10, wxDEFAULT, wxNORMAL, wxNORMAL, FALSE, - wxT("Geneva"), wxFONTENCODING_DEFAULT); - } - - wxFontRefData(const wxFontRefData& data) - : wxGDIRefData() - , m_fontId(data.m_fontId) - , m_pointSize(data.m_pointSize) - , m_family(data.m_family) - , m_style(data.m_style) - , m_weight(data.m_weight) - , m_underlined(data.m_underlined) - , m_faceName(data.m_faceName) - , m_encoding(data.m_encoding) - { - Init(data.m_pointSize, data.m_family, data.m_style, data.m_weight, - data.m_underlined, data.m_faceName, data.m_encoding); - } - - wxFontRefData(int size, - int family, - int style, - int weight, - bool underlined, - const wxString& faceName, - wxFontEncoding encoding) - : m_fontId(0) - , m_pointSize(size) - , m_family(family) - , m_style(style) - , m_weight(weight) - , m_underlined(underlined) - , m_faceName(faceName) - , m_encoding(encoding) - { - Init(size, family, style, weight, underlined, faceName, encoding); - } - - virtual ~wxFontRefData(); -protected: - // common part of all ctors - void Init(int size, - int family, - int style, - int weight, - bool underlined, - const wxString& faceName, - wxFontEncoding encoding); - - // font characterstics - int m_fontId; - int m_pointSize; - int m_family; - int m_style; - int m_weight; - bool m_underlined; - wxString m_faceName; - wxFontEncoding m_encoding; - -public: -}; // ---------------------------------------------------------------------------- // wxFont // ---------------------------------------------------------------------------- +DECLARE_WXCOCOA_OBJC_CLASS(NSFont); + +// Internal class that bridges us with code like wxSystemSettings +class wxCocoaFontFactory; +// We have c-tors/methods taking pointers of these +class wxFontRefData; + +/*! @discussion + wxCocoa's implementation of wxFont is very incomplete. In particular, + a lot of work needs to be done on wxNativeFontInfo which is currently + using the totally generic implementation. + + See the documentation in src/cocoa/font.mm for more implementatoin details. + */ class WXDLLEXPORT wxFont : public wxFontBase { + friend class wxCocoaFontFactory; public: - // ctors and such - wxFont() { Init(); } - wxFont(const wxFont& font) - : wxFontBase() - { - Init(); - Ref(font); - } + /*! @abstract Default construction of invalid font for 2-step construct then Create process. + */ + wxFont() { } + /*! @abstract Platform-independent construction with individual properties + */ wxFont(int size, int family, int style, @@ -115,20 +48,23 @@ public: const wxString& face = wxEmptyString, wxFontEncoding encoding = wxFONTENCODING_DEFAULT) { - Init(); - (void)Create(size, family, style, weight, underlined, face, encoding); } + /*! @abstract Construction with opaque wxNativeFontInfo + */ wxFont(const wxNativeFontInfo& info) { - Init(); - (void)Create(info); } + /*! @abstract Construction with platform-dependent font descriptor string. + @param fontDesc Usually the result of wxNativeFontInfo::ToUserString() + */ wxFont(const wxString& fontDesc); + // NOTE: Copy c-tor and assignment from wxObject is fine + bool Create(int size, int family, int style, @@ -141,9 +77,6 @@ public: virtual ~wxFont(); - // assignment - wxFont& operator=(const wxFont& font); - // implement base class pure virtuals virtual int GetPointSize() const; virtual int GetFamily() const; @@ -158,21 +91,43 @@ public: virtual void SetFamily(int family); virtual void SetStyle(int style); virtual void SetWeight(int weight); - virtual void SetFaceName(const wxString& faceName); + virtual bool SetFaceName(const wxString& faceName); virtual void SetUnderlined(bool underlined); virtual void SetEncoding(wxFontEncoding encoding); // implementation only from now on // ------------------------------- + /*! @abstract Defined on some ports (not including this one) in wxGDIObject + @discussion + The intention here I suppose is to allow one to create a wxFont without yet + creating the underlying native object. There's no point not to create the + NSFont immediately in wxCocoa so this is useless. + This method came from the stub code copied in the early days of wxCocoa. + FIXME(1): Remove this in trunk. FIXME(2): Is it really a good idea for this to + be part of the public API for wxGDIObject? + */ virtual bool RealizeResource(); protected: - // common part of all ctors - void Init(); - + /*! @abstract Helper method for COW. + @discussion + wxFont can be considered a mutable holder of an immutable opaque implementation object. + All methods that mutate the font should first call Unshare() to ensure that mutating + the implementation object does not cause another wxFont that happened to share the + same ref data to mutate. + */ void Unshare(); + /*! @abstract Internal constructor with ref data + @discussion + Takes ownership of @a refData. That is, it is assumed that refData has either just been + created using new (which initializes its m_refCount to 1) or if you are sharing a ref that + you have called IncRef on it before passing it to this method. + */ + explicit wxFont(wxFontRefData *refData) + { Create(refData); } + bool Create(wxFontRefData *refData); private: DECLARE_DYNAMIC_CLASS(wxFont) };