Vuo  2.0.2
VuoFont.c
Go to the documentation of this file.
1 
10 #include <math.h>
11 #include <stdlib.h>
12 #include <string.h>
13 #include "type.h"
14 
16 #ifdef VUO_COMPILER
18  "title" : "Font",
19  "description" : "A font description: family, style, point size, underline.",
20  "keywords" : [ "text", "style", "bold", "italic", "sans", "serif", "monospace", "kerning", "spacing", "double-space", "alignment", "left", "center", "right" ],
21  "version" : "1.0.0",
22  "dependencies" : [
23  "VuoBoolean",
24  "VuoColor",
25  "VuoHorizontalAlignment",
26  "VuoInteger",
27  "VuoReal",
28  "VuoText"
29  ]
30  });
31 #endif
32 
37 VuoFont VuoFont_make(VuoText fontName, VuoReal pointSize, VuoBoolean underline, VuoColor color, VuoHorizontalAlignment alignment, VuoReal characterSpacing, VuoReal lineSpacing)
38 {
39  VuoFont f;
40  f.fontName = fontName;
41  f.pointSize = pointSize;
42  f.underline = underline;
43  f.color = color;
44  f.alignment = alignment;
45  f.characterSpacing = characterSpacing;
46  f.lineSpacing = lineSpacing;
47  return f;
48 }
49 
56 {
57  return (VuoFont) { NULL, 18, false, (VuoColor){1,1,1,1}, VuoHorizontalAlignment_Center, 1, 1 };
58 }
59 
65 {
66  return (VuoFont){
67  VuoJson_getObjectValue(VuoText, js, "fontName", NULL),
68  VuoJson_getObjectValue(VuoReal, js, "pointSize", 0),
69  VuoJson_getObjectValue(VuoBoolean, js, "underline", false),
70  VuoJson_getObjectValue(VuoColor, js, "color", (VuoColor){1,1,1,1}),
71  VuoJson_getObjectValue(VuoHorizontalAlignment, js, "alignment", VuoHorizontalAlignment_Left),
72  VuoJson_getObjectValue(VuoReal, js, "characterSpacing", 1),
73  VuoJson_getObjectValue(VuoReal, js, "lineSpacing", 1)
74  };
75 }
76 
82 {
83  json_object *js = json_object_new_object();
84  json_object_object_add(js, "fontName", VuoText_getJson(value.fontName));
85  json_object_object_add(js, "pointSize", VuoReal_getJson(value.pointSize));
86  json_object_object_add(js, "underline", VuoBoolean_getJson(value.underline));
87  json_object_object_add(js, "color", VuoColor_getJson(value.color));
88  json_object_object_add(js, "alignment", VuoHorizontalAlignment_getJson(value.alignment));
89  json_object_object_add(js, "characterSpacing", VuoReal_getJson(value.characterSpacing));
90  json_object_object_add(js, "lineSpacing", VuoReal_getJson(value.lineSpacing));
91  return js;
92 }
93 
98 char * VuoFont_getSummary(const VuoFont value)
99 {
100  const char *fontName = value.fontName ? value.fontName : "No font";
101  const char *underline = value.underline ? "<li>underlined</li>" : "";
102  char *color = VuoColor_getShortSummary(value.color);
103  char *alignment = VuoHorizontalAlignment_getSummary(value.alignment);
104 
105  char *summary = VuoText_format("%s %gpt<ul><li>color %s</li>%s<li>%s-aligned</li><li>character spacing: %g</li><li>line spacing: %g</li></ul>",
106  fontName, value.pointSize, color, underline, alignment, value.characterSpacing, value.lineSpacing);
107 
108  free(color);
109  free(alignment);
110  return summary;
111 }
112 
116 bool VuoFont_areEqual(const VuoFont value1, const VuoFont value2)
117 {
118  return VuoText_areEqual(value1.fontName, value2.fontName)
119  && VuoReal_areEqual(value1.pointSize, value2.pointSize)
120  && (value1.underline == value2.underline)
121  && VuoColor_areEqual(value1.color, value2.color)
122  && (value1.alignment == value2.alignment)
124  && VuoReal_areEqual(value1.lineSpacing, value2.lineSpacing);
125 }
126 
130 bool VuoFont_isLessThan(const VuoFont a, const VuoFont b)
131 {
133  VuoType_returnInequality(VuoReal, a.pointSize, b.pointSize);
134  VuoType_returnInequality(VuoBoolean, a.underline, b.underline);
135  VuoType_returnInequality(VuoColor, a.color, b.color);
136  VuoType_returnInequality(VuoHorizontalAlignment, a.alignment, b.alignment);
139  return false;
140 }