Photon 1.0.0
Loading...
Searching...
No Matches
cairo_font.h
Go to the documentation of this file.
1#pragma once
2
3#ifndef NOMINMAX
4#define NOMINMAX
5#endif
6#include <windows.h>
7#include <stdlib.h>
8#include <malloc.h>
9#include <memory.h>
10#include <tchar.h>
11#include <mlang.h>
12#include <vector>
13#include <cairo.h>
14#include <cairo-win32.h>
15#include <litehtml.h>
16
18{
19 typedef std::vector<linked_font*> vector;
20
24};
25
27{
28 typedef std::vector<text_chunk*> vector;
29
30 char* text;
32
34 {
35 if(text)
36 {
37 delete text;
38 }
39 }
40};
41
43{
44 int height;
45 int ascent;
48};
49
50
51class cairo_font
52{
53 HFONT m_hFont;
54 cairo_font_face_t* m_font_face;
55 IMLangFontLink2* m_font_link;
58 int m_size;
62public:
63 // fonts are not thread safe :(
64 // you have to declare and initialize cairo_font::m_sync before the first using.
65 static CRITICAL_SECTION m_sync;
66
67 cairo_font(IMLangFontLink2* fl, HFONT hFont, int size);
68 cairo_font(IMLangFontLink2* fl, LPCWSTR facename, int size, int weight, BOOL italic, BOOL strikeout, BOOL underline);
69
70 void init();
72
73 void show_text(cairo_t* cr, int x, int y, const char*);
74 int text_width(cairo_t* cr, const char* str);
75 void load_metrics(cairo_t* cr);
77 static std::wstring utf8_to_wchar(const std::string& src);
78 static std::string wchar_to_utf8(const std::wstring& src);
79private:
80 void split_text(const char* str, text_chunk::vector& chunks);
82 cairo_font_face_t* create_font_face(HFONT fnt);
83 void set_font(HFONT hFont);
84 void clear();
85 int text_width(cairo_t* cr, text_chunk::vector& chunks);
86 void lock();
87 void unlock();
88 int round_d(double val);
89 void get_metrics(cairo_t* cr, cairo_font_metrics* fm);
90};
91
92inline void cairo_font::lock()
93{
94 EnterCriticalSection(&m_sync);
95}
96
97inline void cairo_font::unlock()
98{
99 LeaveCriticalSection(&m_sync);
100}
101
102inline int cairo_font::round_d(double val)
103{
104 int int_val = (int) val;
105 if(val - int_val >= 0.5)
106 {
107 int_val++;
108 }
109 return int_val;
110}
111
113{
114 return m_metrics;
115}
116
117inline void cairo_font::load_metrics(cairo_t* cr)
118{
120}
Definition cairo_font.h:43
int x_height
Definition cairo_font.h:47
int descent
Definition cairo_font.h:46
int ascent
Definition cairo_font.h:45
int height
Definition cairo_font.h:44
Definition container_cairo_pango.h:12
cairo_font_metrics & metrics()
Definition cairo_font.h:112
bool underline
Definition container_cairo_pango.h:15
DWORD m_font_code_pages
Definition cairo_font.h:56
int text_width(cairo_t *cr, const char *str)
Definition cairo_font.cpp:242
void get_metrics(cairo_t *cr, cairo_font_metrics *fm)
Definition cairo_font.cpp:277
BOOL m_bUnderline
Definition cairo_font.h:59
int round_d(double val)
Definition cairo_font.h:102
bool strikeout
Definition container_cairo_pango.h:16
int m_size
Definition cairo_font.h:58
void load_metrics(cairo_t *cr)
Definition cairo_font.h:117
static std::string wchar_to_utf8(const std::wstring &src)
Definition cairo_font.cpp:364
void unlock()
Definition cairo_font.h:97
void clear()
Definition cairo_font.cpp:315
int size
Definition container_cairo_pango.h:14
static CRITICAL_SECTION m_sync
Definition cairo_font.h:65
void free_text_chunks(text_chunk::vector &chunks)
Definition cairo_font.cpp:226
linked_font::vector m_linked_fonts
Definition cairo_font.h:57
cairo_font_face_t * create_font_face(HFONT fnt)
Definition cairo_font.cpp:235
HFONT m_hFont
Definition cairo_font.h:53
BOOL m_bStrikeOut
Definition cairo_font.h:60
void split_text(const char *str, text_chunk::vector &chunks)
Definition cairo_font.cpp:140
void set_font(HFONT hFont)
Definition cairo_font.cpp:295
void init()
Definition cairo_font.cpp:341
cairo_font_face_t * m_font_face
Definition cairo_font.h:54
cairo_font_metrics m_metrics
Definition cairo_font.h:61
IMLangFontLink2 * m_font_link
Definition cairo_font.h:55
void lock()
Definition cairo_font.h:92
static std::wstring utf8_to_wchar(const std::string &src)
Definition cairo_font.cpp:352
~cairo_font()
Definition cairo_font.cpp:61
void show_text(cairo_t *cr, int x, int y, const char *)
Definition cairo_font.cpp:89
Definition cairo_font.h:18
cairo_font_face_t * font_face
Definition cairo_font.h:23
DWORD code_pages
Definition cairo_font.h:21
HFONT hFont
Definition cairo_font.h:22
std::vector< linked_font * > vector
Definition cairo_font.h:19
Definition cairo_font.h:27
std::vector< text_chunk * > vector
Definition cairo_font.h:28
char * text
Definition cairo_font.h:30
~text_chunk()
Definition cairo_font.h:33
linked_font * font
Definition cairo_font.h:31