]> git.saurik.com Git - wxWidgets.git/commitdiff
Allow retrieving the descent and external leading of empty strings.
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 10 Jul 2013 01:28:18 +0000 (01:28 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 10 Jul 2013 01:28:18 +0000 (01:28 +0000)
This used to work before wxTextMeasure changes so make it work again instead
of optimizing the case of empty string away and not returning anything in the
descent and externalLeading output parameters in this case.

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

src/common/textmeasurecmn.cpp
src/gtk/textmeasure.cpp
tests/graphics/measuring.cpp

index 6381059dd8799cfa59485a9a5c2fe9d16d77dd7a..f583662cd14d27b418d385a88656a1ae1c69902e 100644 (file)
@@ -86,7 +86,9 @@ void wxTextMeasureBase::GetTextExtent(const wxString& string,
     if ( !height )
         height = &unusedHeight;
 
-    if ( string.empty() )
+    // Avoid even setting up the DC for measuring if we don't actually need to
+    // measure anything.
+    if ( string.empty() && !descent && !externalLeading )
     {
         *width =
         *height = 0;
index eafd06848d132d9c7aedea70543768f5a164ea94..87bc7c90d5b0e6310d85c927fb22d5c4c82126d5 100644 (file)
@@ -126,7 +126,7 @@ void wxTextMeasure::DoGetTextExtent(const wxString& string,
 
     // Set layout's text
     const wxCharBuffer dataUTF8 = wxGTK_CONV_FONT(string, GetFont());
-    if ( !dataUTF8 )
+    if ( !dataUTF8 && !string.empty() )
     {
         // hardly ideal, but what else can we do if conversion failed?
         wxLogLastError(wxT("GetTextExtent"));
index ae02d272391012d5ea67a67d513ca3f028edc502..bc83433dbbaf94a907785d450289442ec58c2650 100644 (file)
@@ -46,6 +46,7 @@ public:
 private:
     CPPUNIT_TEST_SUITE( MeasuringTextTestCase );
         CPPUNIT_TEST( DCGetTextExtent );
+        CPPUNIT_TEST( LeadingAndDescent );
         CPPUNIT_TEST( WindowGetTextExtent );
         CPPUNIT_TEST( GetPartialTextExtent );
 #ifdef TEST_GC
@@ -54,6 +55,7 @@ private:
     CPPUNIT_TEST_SUITE_END();
 
     void DCGetTextExtent();
+    void LeadingAndDescent();
     void WindowGetTextExtent();
 
     void GetPartialTextExtent();
@@ -127,6 +129,30 @@ void MeasuringTextTestCase::DCGetTextExtent()
 #endif
 }
 
+void MeasuringTextTestCase::LeadingAndDescent()
+{
+    wxClientDC dc(wxTheApp->GetTopWindow());
+
+    // Retrieving just the descent should work.
+    int descent = -17;
+    dc.GetTextExtent("foo", NULL, NULL, &descent);
+    CPPUNIT_ASSERT( descent != -17 );
+
+    // Same for external leading.
+    int leading = -289;
+    dc.GetTextExtent("foo", NULL, NULL, NULL, &leading);
+    CPPUNIT_ASSERT( leading != -289 );
+
+    // And both should also work for the empty string as they retrieve the
+    // values valid for the entire font and not just this string.
+    int descent2,
+        leading2;
+    dc.GetTextExtent("", NULL, NULL, &descent2, &leading2);
+
+    CPPUNIT_ASSERT_EQUAL( descent, descent2 );
+    CPPUNIT_ASSERT_EQUAL( leading, leading2 );
+}
+
 void MeasuringTextTestCase::WindowGetTextExtent()
 {
     wxWindow* const win = wxTheApp->GetTopWindow();