Allow retrieving the descent and external leading of empty strings.
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
This commit is contained in:
parent
50d2908480
commit
0646084eb2
@ -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;
|
||||
|
@ -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"));
|
||||
|
@ -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();
|
||||
|
Loading…
Reference in New Issue
Block a user