|
Packit |
908522 |
|
|
Packit |
908522 |
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
Packit |
908522 |
<head>
|
|
Packit |
908522 |
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
Packit |
908522 |
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
|
Packit |
908522 |
<meta name="generator" content="Doxygen 1.8.9.1"/>
|
|
Packit |
908522 |
<title>cairomm: user-font.cc</title>
|
|
Packit |
908522 |
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
|
Packit |
908522 |
<script type="text/javascript" src="jquery.js"></script>
|
|
Packit |
908522 |
<script type="text/javascript" src="dynsections.js"></script>
|
|
Packit |
908522 |
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
|
Packit |
908522 |
</head>
|
|
Packit |
908522 |
<body>
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
cairomm
|
|
Packit |
908522 |
1.0
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
Main Page
|
|
Packit |
908522 |
Related Pages
|
|
Packit |
908522 |
Namespaces
|
|
Packit |
908522 |
Classes
|
|
Packit |
908522 |
Examples
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
user-font.cc
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
A relatively simple example of using Cairo::UserFontFace
|
|
Packit |
908522 |
#include <cairomm/cairomm.h>
|
|
Packit |
908522 |
#include <iostream>
|
|
Packit |
908522 |
#include <map>
|
|
Packit |
908522 |
|
|
Packit |
908522 |
const double HEIGHT = 200.0;
|
|
Packit |
908522 |
const double WIDTH = 400.0;
|
|
Packit |
908522 |
const double FONT_SIZE = 64.0;
|
|
Packit |
908522 |
const double TEXT_ORIGIN_Y = (HEIGHT / 2.0) + (FONT_SIZE / 2.0);
|
|
Packit |
908522 |
const double TEXT_ORIGIN_X = 50.0;
|
|
Packit |
908522 |
const double GLYPH_SPACING = 0.1;
|
|
Packit |
908522 |
|
|
Packit |
908522 |
struct GlyphBounds
|
|
Packit |
908522 |
{
|
|
Packit |
908522 |
unsigned long glyph;
|
|
Packit |
908522 |
double width;
|
|
Packit |
908522 |
double height;
|
|
Packit |
908522 |
};
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
static const GlyphBounds glyphs[] =
|
|
Packit |
908522 |
{
|
|
Packit |
908522 |
{ 'c', 0.45, 0.5 },
|
|
Packit |
908522 |
{ 'a', 0.45, 0.5 },
|
|
Packit |
908522 |
{ 'i', 0.2, 0.75 },
|
|
Packit |
908522 |
{ 'r', 0.4, 0.5 },
|
|
Packit |
908522 |
{ 'o', 0.44, 0.5 },
|
|
Packit |
908522 |
{ 'm', 0.75, 0.5 },
|
|
Packit |
908522 |
{ '!', 0.2, 0.75 }
|
|
Packit |
908522 |
};
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
{
|
|
Packit |
908522 |
public:
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
{
|
|
Packit |
908522 |
|
|
Packit |
908522 |
}
|
|
Packit |
908522 |
|
|
Packit |
908522 |
Cairo::ErrorStatus
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
{
|
|
Packit |
908522 |
|
|
Packit |
908522 |
for (unsigned int i = 0; i < sizeof (glyphs) / sizeof (GlyphBounds); ++i) {
|
|
Packit |
908522 |
if (glyphs[i].width > max)
|
|
Packit |
908522 |
max = glyphs[i].width;
|
|
Packit |
908522 |
}
|
|
Packit |
908522 |
|
|
Packit |
908522 |
max += GLYPH_SPACING;
|
|
Packit |
908522 |
extents.max_x_advance = max;
|
|
Packit |
908522 |
return CAIRO_STATUS_SUCCESS;
|
|
Packit |
908522 |
}
|
|
Packit |
908522 |
|
|
Packit |
908522 |
Cairo::ErrorStatus
|
|
Packit |
908522 |
|
|
Packit |
908522 |
unsigned long unicode, unsigned long& glyph) override
|
|
Packit |
908522 |
{
|
|
Packit |
908522 |
glyph = 0;
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
for (unsigned int i = 0; i < sizeof (glyphs) / sizeof (GlyphBounds); ++i) {
|
|
Packit |
908522 |
if (glyphs[i].glyph == unicode) {
|
|
Packit |
908522 |
|
|
Packit |
908522 |
glyph = i+1;
|
|
Packit |
908522 |
break;
|
|
Packit |
908522 |
}
|
|
Packit |
908522 |
}
|
|
Packit |
908522 |
return CAIRO_STATUS_SUCCESS;
|
|
Packit |
908522 |
}
|
|
Packit |
908522 |
|
|
Packit |
908522 |
Cairo::ErrorStatus
|
|
Packit |
908522 |
|
|
Packit |
908522 |
unsigned long glyph,
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
{
|
|
Packit |
908522 |
|
|
Packit |
908522 |
if (glyph >= 1 && glyph <= sizeof(glyphs)/sizeof(GlyphBounds)) {
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
cr-> rectangle(0.0, 0.0, glyphs[glyph-1].width, -glyphs[glyph-1].height);
|
|
Packit |
908522 |
|
|
Packit |
908522 |
metrics.x_advance = glyphs[glyph-1].width + GLYPH_SPACING;
|
|
Packit |
908522 |
}
|
|
Packit |
908522 |
return CAIRO_STATUS_SUCCESS;
|
|
Packit |
908522 |
}
|
|
Packit |
908522 |
|
|
Packit |
908522 |
protected:
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
BoxFontFace() : UserFontFace() { }
|
|
Packit |
908522 |
};
|
|
Packit |
908522 |
|
|
Packit |
908522 |
int main(int, char**)
|
|
Packit |
908522 |
{
|
|
Packit |
908522 |
auto surface =
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
cr-> arc(TEXT_ORIGIN_X, TEXT_ORIGIN_Y, FONT_SIZE / 4.0, 0, 2*M_PI);
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
cr-> move_to(TEXT_ORIGIN_X, TEXT_ORIGIN_Y);
|
|
Packit |
908522 |
|
|
Packit |
908522 |
auto font = BoxFontFace::create();
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
cr-> move_to(TEXT_ORIGIN_X, TEXT_ORIGIN_Y);
|
|
Packit |
908522 |
|
|
Packit |
908522 |
auto toy_font =
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
const char* filename = "user-font.png";
|
|
Packit |
908522 |
try {
|
|
Packit |
908522 |
surface->write_to_png(filename);
|
|
Packit |
908522 |
std::cout << "Wrote Image " << filename << std::endl;
|
|
Packit |
908522 |
return 0;
|
|
Packit |
908522 |
|
|
Packit |
908522 |
{
|
|
Packit |
908522 |
std::cout << "** Unable to write Image " << filename << std::endl;
|
|
Packit |
908522 |
return 1;
|
|
Packit |
908522 |
}
|
|
Packit |
908522 |
}
|
|
Packit |
908522 |
|
|
Packit |
908522 |
|
|
Packit |
908522 |
<address class="footer"><small>
|
|
Packit |
908522 |
Generated on Mon Sep 21 2015 21:56:36 for cairomm by
|
|
Packit |
908522 |
|
|
Packit |
908522 |
1.8.9.1
|
|
Packit |
908522 |
</small></address>
|
|
Packit |
908522 |
</body>
|
|
Packit |
908522 |
</html>
|