summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathon Jongsma <jonathon.jongsma@collabora.co.uk>2008-08-22 23:40:00 -0500
committerJonathon Jongsma <jonathon.jongsma@collabora.co.uk>2008-08-27 10:13:50 -0500
commit3c45166a1c7482fa7fd367f1ca25c9e69cfab2a8 (patch)
tree46b8e392c125770bda443181f4f4130f0686bae4
parentb78fb2e7adea01b390509553c1a1755840f0f402 (diff)
Add Context::get/set_scaled_font()
-rw-r--r--ChangeLog5
-rw-r--r--cairomm/context.cc14
-rw-r--r--cairomm/context.h11
-rw-r--r--tests/test-context.cc23
4 files changed, 53 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index c1dab10..52ad9bd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,6 +5,11 @@
compilation with the freely available Visual Studio Express compiler.
Bug #17322.
+2008-08-22 Jonathon Jongsma <jjongsma@gnome.org>
+
+ * cairomm/context.cc:
+ * cairomm/context.h: add get/set_scaled_font() that was missed previously
+
2008-08-21 Jonathon Jongsma <jjongsma@gnome.org>
* tests/test-surface.cc: fix the image surface tests that create a file from a
diff --git a/cairomm/context.cc b/cairomm/context.cc
index f5f17f6..909ce5e 100644
--- a/cairomm/context.cc
+++ b/cairomm/context.cc
@@ -21,6 +21,7 @@
#include <cairomm/context_private.h>
#include <cairomm/private.h>
#include <cairomm/surface.h>
+#include <cairomm/scaledfont.h>
/* M_PI is defined in math.h in the case of Microsoft Visual C++ */
#if defined(_MSC_VER)
@@ -478,6 +479,19 @@ void Context::set_font_options(const FontOptions& options)
check_object_status_and_throw_exception(*this);
}
+void Context::set_scaled_font(const RefPtr<const ScaledFont>& scaled_font)
+{
+ cairo_set_scaled_font(cobj(), scaled_font->cobj());
+ check_object_status_and_throw_exception(*this);
+}
+
+RefPtr<ScaledFont> Context::get_scaled_font()
+{
+ cairo_scaled_font_t* font = cairo_get_scaled_font(cobj());
+ check_object_status_and_throw_exception(*this);
+ return RefPtr<ScaledFont>(new ScaledFont(font, false /* does not have reference */));
+}
+
void Context::show_text(const std::string& utf8)
{
cairo_show_text(m_cobject, utf8.c_str());
diff --git a/cairomm/context.h b/cairomm/context.h
index 2371152..886ecec 100644
--- a/cairomm/context.h
+++ b/cairomm/context.h
@@ -33,6 +33,9 @@
namespace Cairo
{
+// forward declaration
+class ScaledFont;
+
typedef cairo_glyph_t Glyph; //A simple struct.
typedef cairo_matrix_t Matrix; //A simple struct. //TODO: Derive and add operator[] and operator. matrix multiplication?
typedef cairo_rectangle_t Rectangle;
@@ -703,6 +706,14 @@ public:
void set_font_matrix(const Matrix& matrix);
void get_font_matrix(Matrix& matrix) const;
void set_font_options(const FontOptions& options);
+ /**
+ * @since 1.8
+ */
+ void set_scaled_font(const RefPtr<const ScaledFont>& scaled_font);
+ /**
+ * @since 1.8
+ */
+ RefPtr<ScaledFont> get_scaled_font();
void show_text(const std::string& utf8);
void show_glyphs(const std::vector<Glyph>& glyphs);
RefPtr<FontFace> get_font_face();
diff --git a/tests/test-context.cc b/tests/test-context.cc
index 9cfaec2..6c3e73f 100644
--- a/tests/test-context.cc
+++ b/tests/test-context.cc
@@ -12,6 +12,7 @@
#include <boost/test/floating_point_comparison.hpp>
using namespace boost::unit_test;
#include <cairomm/context.h>
+#include <cairomm/scaledfont.h>
#define CREATE_CONTEXT(varname) \
Cairo::RefPtr<Cairo::Surface> surf = Cairo::ImageSurface::create(Cairo::FORMAT_ARGB32, 10, 10); \
@@ -316,7 +317,28 @@ test_target ()
Cairo::RefPtr<const Cairo::PdfSurface>::cast_dynamic(cr2->get_target ());
BOOST_CHECK (target_surface2);
BOOST_CHECK (!bad_surface2);
+}
+void test_scaled_font()
+{
+ CREATE_CONTEXT (cr);
+ Cairo::RefPtr<Cairo::ToyFontFace> face = Cairo::ToyFontFace::create("sans",
+ Cairo::FONT_SLANT_NORMAL,
+ Cairo::FONT_WEIGHT_NORMAL);
+ Cairo::Matrix identity;
+ cairo_matrix_init_identity(&identity);
+ Cairo::RefPtr<Cairo::ScaledFont> font = Cairo::ScaledFont::create(face,
+ identity,
+ identity,
+ Cairo::FontOptions());
+ BOOST_CHECK_NO_THROW(cr->set_scaled_font(font));
+ // There's no operator== for ScaledFont, so I'm not sure if there's a way to
+ // compare whether the font we get form get() is the same as the one we set
+ // The following test fails
+ //BOOST_CHECK_EQUAL(font, cr->get_scaled_font());
+
+ //just put in a pseudo-test for now to excercise the API
+ BOOST_CHECK(cr->get_scaled_font());
}
test_suite*
@@ -344,6 +366,7 @@ init_unit_test_suite(int argc, char* argv[])
test->add (BOOST_TEST_CASE (&test_clip));
test->add (BOOST_TEST_CASE (&test_current_point));
test->add (BOOST_TEST_CASE (&test_target));
+ test->add (BOOST_TEST_CASE (&test_scaled_font));
return test;
}