Ensure there is valid context for DrawRectangle
[wxWidgets.git] / src / msw / font.cpp
index 376b8b3b870865afb7fd5eba664763d96417f6c1..060139df72fa3407a8f952a7d7cbfdf5c24ed737 100644 (file)
@@ -63,7 +63,7 @@ public:
     wxFontRefData()
     {
         Init(-1, wxSize(0,0), false, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL,
     wxFontRefData()
     {
         Init(-1, wxSize(0,0), false, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL,
-             wxFONTWEIGHT_NORMAL, false, wxEmptyString,
+             wxFONTWEIGHT_NORMAL, false, false, wxEmptyString,
              wxFONTENCODING_DEFAULT);
     }
 
              wxFONTENCODING_DEFAULT);
     }
 
@@ -74,11 +74,12 @@ public:
                   wxFontStyle style,
                   wxFontWeight weight,
                   bool underlined,
                   wxFontStyle style,
                   wxFontWeight weight,
                   bool underlined,
+                  bool strikethrough,
                   const wxString& faceName,
                   wxFontEncoding encoding)
     {
         Init(size, pixelSize, sizeUsingPixels, family, style, weight,
                   const wxString& faceName,
                   wxFontEncoding encoding)
     {
         Init(size, pixelSize, sizeUsingPixels, family, style, weight,
-             underlined, faceName, encoding);
+             underlined, strikethrough, faceName, encoding);
     }
 
     wxFontRefData(const wxNativeFontInfo& info, WXHFONT hFont = 0)
     }
 
     wxFontRefData(const wxNativeFontInfo& info, WXHFONT hFont = 0)
@@ -134,6 +135,11 @@ public:
         return m_nativeFontInfo.GetUnderlined();
     }
 
         return m_nativeFontInfo.GetUnderlined();
     }
 
+    bool GetStrikethrough() const
+    {
+        return m_nativeFontInfo.GetStrikethrough();
+    }
+
     wxString GetFaceName() const
     {
         wxString facename = m_nativeFontInfo.GetFaceName();
     wxString GetFaceName() const
     {
         wxString facename = m_nativeFontInfo.GetFaceName();
@@ -225,6 +231,13 @@ public:
         m_nativeFontInfo.SetUnderlined(underlined);
     }
 
         m_nativeFontInfo.SetUnderlined(underlined);
     }
 
+    void SetStrikethrough(bool strikethrough)
+    {
+        Free();
+
+        m_nativeFontInfo.SetStrikethrough(strikethrough);
+    }
+
     void SetEncoding(wxFontEncoding encoding)
     {
         Free();
     void SetEncoding(wxFontEncoding encoding)
     {
         Free();
@@ -262,6 +275,7 @@ protected:
               wxFontStyle style,
               wxFontWeight weight,
               bool underlined,
               wxFontStyle style,
               wxFontWeight weight,
               bool underlined,
+              bool strikethrough,
               const wxString& faceName,
               wxFontEncoding encoding);
 
               const wxString& faceName,
               wxFontEncoding encoding);
 
@@ -336,6 +350,7 @@ void wxFontRefData::Init(int pointSize,
                          wxFontStyle style,
                          wxFontWeight weight,
                          bool underlined,
                          wxFontStyle style,
                          wxFontWeight weight,
                          bool underlined,
+                         bool strikethrough,
                          const wxString& faceName,
                          wxFontEncoding encoding)
 {
                          const wxString& faceName,
                          wxFontEncoding encoding)
 {
@@ -350,6 +365,7 @@ void wxFontRefData::Init(int pointSize,
     SetStyle(style);
     SetWeight(weight);
     SetUnderlined(underlined);
     SetStyle(style);
     SetWeight(weight);
     SetUnderlined(underlined);
+    SetStrikethrough(strikethrough);
 
     // set the family/facename
     SetFamily(family);
 
     // set the family/facename
     SetFamily(family);
@@ -463,6 +479,11 @@ bool wxNativeFontInfo::GetUnderlined() const
     return lf.lfUnderline != 0;
 }
 
     return lf.lfUnderline != 0;
 }
 
+bool wxNativeFontInfo::GetStrikethrough() const
+{
+    return lf.lfStrikeOut != 0;
+}
+
 wxString wxNativeFontInfo::GetFaceName() const
 {
     return lf.lfFaceName;
 wxString wxNativeFontInfo::GetFaceName() const
 {
     return lf.lfFaceName;
@@ -583,6 +604,11 @@ void wxNativeFontInfo::SetUnderlined(bool underlined)
     lf.lfUnderline = underlined;
 }
 
     lf.lfUnderline = underlined;
 }
 
+void wxNativeFontInfo::SetStrikethrough(bool strikethrough)
+{
+    lf.lfStrikeOut = strikethrough;
+}
+
 bool wxNativeFontInfo::SetFaceName(const wxString& facename)
 {
     wxStrlcpy(lf.lfFaceName, facename.c_str(), WXSIZEOF(lf.lfFaceName));
 bool wxNativeFontInfo::SetFaceName(const wxString& facename)
 {
     wxStrlcpy(lf.lfFaceName, facename.c_str(), WXSIZEOF(lf.lfFaceName));
@@ -778,6 +804,20 @@ wxFont::wxFont(const wxString& fontdesc)
         (void)Create(info);
 }
 
         (void)Create(info);
 }
 
+wxFont::wxFont(int pointSize,
+               wxFontFamily family,
+               int flags,
+               const wxString& face,
+               wxFontEncoding encoding)
+{
+    m_refData = new wxFontRefData(pointSize, wxDefaultSize, false,
+                                  family,
+                                  GetStyleFromFlags(flags),
+                                  GetWeightFromFlags(flags),
+                                  GetUnderlinedFromFlags(flags),
+                                  false, face, encoding);
+}
+
 bool wxFont::Create(const wxNativeFontInfo& info, WXHFONT hFont)
 {
     UnRef();
 bool wxFont::Create(const wxNativeFontInfo& info, WXHFONT hFont)
 {
     UnRef();
@@ -801,14 +841,14 @@ bool wxFont::DoCreate(int pointSize,
 
     // wxDEFAULT is a valid value for the font size too so we must treat it
     // specially here (otherwise the size would be 70 == wxDEFAULT value)
 
     // wxDEFAULT is a valid value for the font size too so we must treat it
     // specially here (otherwise the size would be 70 == wxDEFAULT value)
-    if ( pointSize == wxDEFAULT )
+    if ( pointSize == wxDEFAULT || pointSize == -1 )
     {
         pointSize = wxNORMAL_FONT->GetPointSize();
     }
 
     m_refData = new wxFontRefData(pointSize, pixelSize, sizeUsingPixels,
                                   family, style, weight,
     {
         pointSize = wxNORMAL_FONT->GetPointSize();
     }
 
     m_refData = new wxFontRefData(pointSize, pixelSize, sizeUsingPixels,
                                   family, style, weight,
-                                  underlined, faceName, encoding);
+                                  underlined, false, faceName, encoding);
 
     return RealizeResource();
 }
 
     return RealizeResource();
 }
@@ -930,6 +970,13 @@ void wxFont::SetUnderlined(bool underlined)
     M_FONTDATA->SetUnderlined(underlined);
 }
 
     M_FONTDATA->SetUnderlined(underlined);
 }
 
+void wxFont::SetStrikethrough(bool strikethrough)
+{
+    AllocExclusive();
+
+    M_FONTDATA->SetStrikethrough(strikethrough);
+}
+
 void wxFont::SetEncoding(wxFontEncoding encoding)
 {
     AllocExclusive();
 void wxFont::SetEncoding(wxFontEncoding encoding)
 {
     AllocExclusive();
@@ -995,6 +1042,13 @@ bool wxFont::GetUnderlined() const
     return M_FONTDATA->GetUnderlined();
 }
 
     return M_FONTDATA->GetUnderlined();
 }
 
+bool wxFont::GetStrikethrough() const
+{
+    wxCHECK_MSG( IsOk(), false, wxT("invalid font") );
+
+    return M_FONTDATA->GetStrikethrough();
+}
+
 wxString wxFont::GetFaceName() const
 {
     wxCHECK_MSG( IsOk(), wxEmptyString, wxT("invalid font") );
 wxString wxFont::GetFaceName() const
 {
     wxCHECK_MSG( IsOk(), wxEmptyString, wxT("invalid font") );