8cd79b7af0
Add a new private wxTextMeasure class implementing methods for measuring text and move the often duplicated (but not always identically) code for doing the same from wxDC and wxWindow into it. Currently this class is only really implemented in wxMSW and wxGTK. Also extend the test for text measuring functions and rename it to MeasuringTextTestCase from MeasuringContextTestCase as it's not wxGC-specific any more. Closes #14705. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72699 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
139 lines
4.0 KiB
C++
139 lines
4.0 KiB
C++
///////////////////////////////////////////////////////////////////////////////
|
|
// Name: tests/graphics/measuring.cpp
|
|
// Purpose: Tests for wxGraphicsRenderer::CreateMeasuringContext
|
|
// Author: Kevin Ollivier, Vadim Zeitlin (non wxGC parts)
|
|
// Created: 2008-02-12
|
|
// RCS-ID: $Id$
|
|
// Copyright: (c) 2008 Kevin Ollivier <kevino@theolliviers.com>
|
|
// (c) 2012 Vadim Zeitlin <vadim@wxwidgets.org>
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// headers
|
|
// ----------------------------------------------------------------------------
|
|
|
|
#include "testprec.h"
|
|
|
|
#ifdef __BORLANDC__
|
|
#pragma hdrstop
|
|
#endif
|
|
|
|
#ifndef WX_PRECOMP
|
|
#include "wx/app.h"
|
|
#include "wx/font.h"
|
|
#include "wx/window.h"
|
|
#endif // WX_PRECOMP
|
|
|
|
// wxCairoRenderer::CreateMeasuringContext() is not implement for wxX11
|
|
#if wxUSE_GRAPHICS_CONTEXT && !defined(__WXX11__)
|
|
#include "wx/graphics.h"
|
|
#define TEST_GC
|
|
#endif
|
|
|
|
#include "wx/dcclient.h"
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// test class
|
|
// ----------------------------------------------------------------------------
|
|
|
|
class MeasuringTextTestCase : public CppUnit::TestCase
|
|
{
|
|
public:
|
|
MeasuringTextTestCase() { }
|
|
|
|
private:
|
|
CPPUNIT_TEST_SUITE( MeasuringTextTestCase );
|
|
CPPUNIT_TEST( DCGetTextExtent );
|
|
CPPUNIT_TEST( WindowGetTextExtent );
|
|
CPPUNIT_TEST( GetPartialTextExtent );
|
|
#ifdef TEST_GC
|
|
CPPUNIT_TEST( GraphicsGetTextExtent );
|
|
#endif // TEST_GC
|
|
CPPUNIT_TEST_SUITE_END();
|
|
|
|
template <typename T>
|
|
void DoTestGetTextExtent(const T& obj);
|
|
|
|
void DCGetTextExtent();
|
|
void WindowGetTextExtent();
|
|
|
|
void GetPartialTextExtent();
|
|
|
|
#ifdef TEST_GC
|
|
void GraphicsGetTextExtent();
|
|
#endif // TEST_GC
|
|
|
|
DECLARE_NO_COPY_CLASS(MeasuringTextTestCase)
|
|
};
|
|
|
|
// register in the unnamed registry so that these tests are run by default
|
|
CPPUNIT_TEST_SUITE_REGISTRATION( MeasuringTextTestCase );
|
|
|
|
// also include in its own registry so that these tests can be run alone
|
|
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( MeasuringTextTestCase, "MeasuringTextTestCase" );
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// tests themselves
|
|
// ----------------------------------------------------------------------------
|
|
|
|
template <typename T>
|
|
void MeasuringTextTestCase::DoTestGetTextExtent(const T& obj)
|
|
{
|
|
// Test that getting the height only doesn't crash.
|
|
int y;
|
|
obj.GetTextExtent("H", NULL, &y);
|
|
|
|
CPPUNIT_ASSERT( y > 1 );
|
|
|
|
wxSize size = obj.GetTextExtent("Hello");
|
|
CPPUNIT_ASSERT( size.x > 1 );
|
|
CPPUNIT_ASSERT_EQUAL( y, size.y );
|
|
}
|
|
|
|
void MeasuringTextTestCase::DCGetTextExtent()
|
|
{
|
|
wxClientDC dc(wxTheApp->GetTopWindow());
|
|
|
|
DoTestGetTextExtent(dc);
|
|
}
|
|
|
|
void MeasuringTextTestCase::WindowGetTextExtent()
|
|
{
|
|
wxWindow* const win = wxTheApp->GetTopWindow();
|
|
|
|
DoTestGetTextExtent(*win);
|
|
}
|
|
|
|
void MeasuringTextTestCase::GetPartialTextExtent()
|
|
{
|
|
wxClientDC dc(wxTheApp->GetTopWindow());
|
|
|
|
wxArrayInt widths;
|
|
CPPUNIT_ASSERT( dc.GetPartialTextExtents("Hello", widths) );
|
|
CPPUNIT_ASSERT_EQUAL( 5, widths.size() );
|
|
CPPUNIT_ASSERT_EQUAL( widths[0], dc.GetTextExtent("H").x );
|
|
CPPUNIT_ASSERT_EQUAL( widths[4], dc.GetTextExtent("Hello").x );
|
|
}
|
|
|
|
#ifdef TEST_GC
|
|
|
|
void MeasuringTextTestCase::GraphicsGetTextExtent()
|
|
{
|
|
wxGraphicsRenderer* renderer = wxGraphicsRenderer::GetDefaultRenderer();
|
|
CPPUNIT_ASSERT(renderer);
|
|
wxGraphicsContext* context = renderer->CreateMeasuringContext();
|
|
CPPUNIT_ASSERT(context);
|
|
wxFont font(12, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);
|
|
CPPUNIT_ASSERT(font.IsOk());
|
|
context->SetFont(font, *wxBLACK);
|
|
double width, height, descent, externalLeading = 0.0;
|
|
context->GetTextExtent("x", &width, &height, &descent, &externalLeading);
|
|
|
|
// TODO: Determine a way to make these tests more robust.
|
|
CPPUNIT_ASSERT(width > 0.0);
|
|
CPPUNIT_ASSERT(height > 0.0);
|
|
|
|
}
|
|
|
|
#endif // TEST_GC
|