Fix text extent computation in wxMSW wxGraphicsContext.
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 20 Jun 2012 17:54:46 +0000 (17:54 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 20 Jun 2012 17:54:46 +0000 (17:54 +0000)
The results were incorrect for italic or bold fonts as we hardcoded
FontStyleRegular instead of using the real font style.

Closes #14421.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71821 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
src/msw/graphics.cpp

index 27c00e708c7063c30b68a59de27fb197ca2ef971..f3b5245289a4f404ab2031c23dd18f290af4d616 100644 (file)
@@ -592,6 +592,7 @@ MSW:
 - Fix code compilation with wxUSE_UNICODE_UTF8 (Kolya Kosenko).
 - Fix crash in wxTreeCtrl when calling GetSelection() from selection changed
   event handler under Vista and later (sbrowne).
+- Fix text extent computation in wxGraphicsContext (juria90).
 
 OSX:
 
index 54f0c33e676fb3b6eb91f5ee92bdff58fcd4df29..112e2d43f9d721aee3e28f1c109da2a0cd9eb9a9 100644 (file)
@@ -1770,12 +1770,15 @@ void wxGDIPlusContext::GetTextExtent( const wxString &str, wxDouble *width, wxDo
 
     REAL factorY = m_fontScaleRatio;
 
-    REAL rDescent = ffamily.GetCellDescent(FontStyleRegular) *
-        f->GetSize() / ffamily.GetEmHeight(FontStyleRegular);
-    REAL rAscent = ffamily.GetCellAscent(FontStyleRegular) *
-        f->GetSize() / ffamily.GetEmHeight(FontStyleRegular);
-    REAL rHeight = ffamily.GetLineSpacing(FontStyleRegular) *
-        f->GetSize() / ffamily.GetEmHeight(FontStyleRegular);
+    // Notice that we must use the real font style or the results would be
+    // incorrect for italic/bold fonts.
+    const INT style = f->GetStyle();
+    REAL rDescent = ffamily.GetCellDescent(style) *
+        f->GetSize() / ffamily.GetEmHeight(style);
+    REAL rAscent = ffamily.GetCellAscent(style) *
+        f->GetSize() / ffamily.GetEmHeight(style);
+    REAL rHeight = ffamily.GetLineSpacing(style) *
+        f->GetSize() / ffamily.GetEmHeight(style);
 
     if ( height )
         *height = rHeight * factorY;