Vuo  2.0.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
30 
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 
90 char * VuoAnchor_getSummary(const VuoAnchor value)
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 
129 VuoPoint2d VuoAnchor_getOffset(VuoAnchor anchor)
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 
142 bool 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 
151 bool VuoAnchor_isLessThan(const VuoAnchor value1, const VuoAnchor value2)
152 {
155 }