Vuo  2.4.0
VuoAnchor.c
Go to the documentation of this file.
1
10#include <stdio.h>
11#include <stdlib.h>
12#include <string.h>
13#include "type.h"
14
16#ifdef VUO_COMPILER
18 "title" : "Anchor",
19 "description" : "Horizontal + Vertical alignment.",
20 "keywords" : [ ],
21 "version" : "1.0.0",
22 "dependencies" : [
23 "VuoList_VuoAnchor",
24 "VuoHorizontalAlignment",
25 "VuoText",
26 "VuoVerticalAlignment"
27 ]
28 });
29#endif
31
47{
48 if (json_object_is_type(js, json_type_string))
49 {
50 char h[7];
51 char v[7];
52 sscanf(json_object_get_string(js), "%6[a-z]-%6[a-z]", h, v);
53 return VuoAnchor_make(VuoHorizontalAlignment_makeFromJson(json_object_new_string(h)),
54 VuoVerticalAlignment_makeFromJson(json_object_new_string(v)));
55 }
56
57 json_object *o = NULL;
58
59 VuoHorizontalAlignment horizontal = VuoHorizontalAlignment_Center;
60 if (json_object_object_get_ex(js, "horizontalAlignment", &o))
62
63 VuoVerticalAlignment vertical = VuoVerticalAlignment_Center;
64 if (json_object_object_get_ex(js, "verticalAlignment", &o))
66
67 return VuoAnchor_make(horizontal, vertical);
68}
69
75{
78 char *combined = VuoText_format("%s-%s", json_object_get_string(horizontal), json_object_get_string(vertical));
79 json_object_put(horizontal);
80 json_object_put(vertical);
81 json_object *js = json_object_new_string(combined);
82 free(combined);
83 return js;
84}
85
91{
92 if(VuoAnchor_areEqual(value, VuoAnchor_make(VuoHorizontalAlignment_Center, VuoVerticalAlignment_Center)))
93 return strdup("Center");
94
97
98 char* sum = (char*) malloc( sizeof(char) * (strlen(h) + strlen(v) + 2) );
99 sprintf(sum, "%s %s", v, h);
100
101 free(h);
102 free(v);
103
104 return sum;
105}
106
111{
113 VuoListAppendValue_VuoAnchor(l, VuoAnchor_make(VuoHorizontalAlignment_Left, VuoVerticalAlignment_Top ));
114 VuoListAppendValue_VuoAnchor(l, VuoAnchor_make(VuoHorizontalAlignment_Center, VuoVerticalAlignment_Top ));
115 VuoListAppendValue_VuoAnchor(l, VuoAnchor_make(VuoHorizontalAlignment_Right, VuoVerticalAlignment_Top ));
116 VuoListAppendValue_VuoAnchor(l, VuoAnchor_make(VuoHorizontalAlignment_Left, VuoVerticalAlignment_Center));
117 VuoListAppendValue_VuoAnchor(l, VuoAnchor_make(VuoHorizontalAlignment_Center, VuoVerticalAlignment_Center));
118 VuoListAppendValue_VuoAnchor(l, VuoAnchor_make(VuoHorizontalAlignment_Right, VuoVerticalAlignment_Center));
119 VuoListAppendValue_VuoAnchor(l, VuoAnchor_make(VuoHorizontalAlignment_Left, VuoVerticalAlignment_Bottom));
120 VuoListAppendValue_VuoAnchor(l, VuoAnchor_make(VuoHorizontalAlignment_Center, VuoVerticalAlignment_Bottom));
121 VuoListAppendValue_VuoAnchor(l, VuoAnchor_make(VuoHorizontalAlignment_Right, VuoVerticalAlignment_Bottom));
122 return l;
123}
124
130{
133 return (VuoPoint2d){
134 h == VuoHorizontalAlignment_Left ? .5 : (h == VuoHorizontalAlignment_Center ? 0 : -.5),
135 v == VuoVerticalAlignment_Top ? -.5 : (v == VuoVerticalAlignment_Center ? 0 : .5)
136 };
137}
138
142bool VuoAnchor_areEqual(const VuoAnchor value1, const VuoAnchor value2)
143{
144 return VuoAnchor_getHorizontal(value1) == VuoAnchor_getHorizontal(value2)
145 && VuoAnchor_getVertical(value1) == VuoAnchor_getVertical(value2);
146}
147
151bool VuoAnchor_isLessThan(const VuoAnchor value1, const VuoAnchor value2)
152{
155}