1 /*
2 * Distributed under the Boost Software License, Version 1.0.
3 * (See accompanying file LICENSE_1_0.txt or copy at
4 * http://www.boost.org/LICENSE_1_0.txt)
5 */
6 module pango.fontset;
7
8 import pango.utils;
9 import pango.font;
10 import pango.c.font;
11 import pango.c.fontset;
12
13 import gobject;
14 import glib;
15
16
17 /**
18 * PangoFontset:
19 *
20 * A #PangoFontset represents a set of #PangoFont to use
21 * when rendering text. It is the result of resolving a
22 * #PangoFontDescription against a particular #PangoContext.
23 * It has operations for finding the component font for
24 * a particular Unicode character, and for finding a composite
25 * set of metrics for the entire fontset.
26 */
27 class FontSet : D_GObject
28 {
29 mixin GObjectHolder!PangoFontset;
30 mixin FontFactoryHolder;
31
32 package this(PangoFontset *ptr, Transfer transfer)
33 {
34 super(cast(GObject*)ptr, transfer);
35 fontFactory = defaultFontFactory;
36 }
37
38 Font font(uint wc) {
39 return fontFactory.getFont(pango_fontset_get_font(nativePtr, wc), Transfer.Full);
40 }
41
42 @property FontMetrics metrics() {
43 return getDObject!FontMetrics(pango_fontset_get_metrics(nativePtr), Transfer.Full);
44 }
45
46
47 int opApply(int delegate(ref Font font) dg)
48 {
49 auto fd = ForeachData(dg, fontFactory);
50 pango_fontset_foreach(nativePtr, &foreachApplyCb, &fd);
51 return fd.res;
52 }
53
54 }
55
56
57 private
58 {
59 alias ForeachDelegate = int delegate(ref Font font);
60
61 struct ForeachData
62 {
63 int res = 0;
64 ForeachDelegate dg;
65 FontFactory fontFactory;
66
67 @disable this();
68
69 this (ForeachDelegate dg, FontFactory fontFactory) {
70 this.dg = dg;
71 this.fontFactory = fontFactory;
72 }
73 }
74
75 extern (C)
76 private gboolean foreachApplyCb(PangoFontset* fontset, PangoFont *font, gpointer userData)
77 {
78 ForeachData *fd = cast(ForeachData*)userData;
79 auto dg = fd.dg;
80 auto f = fd.fontFactory.getFont(font, Transfer.None);
81 fd.res = dg(f);
82 if (fd.res) return TRUE;
83 else return FALSE;
84 }
85
86 }