Vuo  2.4.0
VuoScreen.c
Go to the documentation of this file.
1
10#include <string.h>
11#include "type.h"
12#include "VuoScreen.h"
13#include "VuoScreenCommon.h"
14
16#ifdef VUO_COMPILER
18 "title" : "Screen",
19 "description" : "Information about a display screen.",
20 "keywords" : [ ],
21 "version" : "1.0.0",
22 "dependencies" : [
23 "VuoBoolean",
24 "VuoInteger",
25 "VuoPoint2d",
26 "VuoScreenCommon",
27 "VuoText"
28 ]
29 });
30#endif
32
44{
45 VuoScreen value = {VuoScreenType_Active,-1,-1,"",false,{0,0},0,0,0,0};
46 json_object *o = NULL;
47
48 if (json_object_object_get_ex(js, "type", &o))
49 value.type = VuoScreen_typeFromCString(json_object_get_string(o));
50
51 if (json_object_object_get_ex(js, "id", &o))
52 value.id = VuoInteger_makeFromJson(o);
53
54 if (json_object_object_get_ex(js, "name", &o))
55 value.name = VuoText_makeFromJson(o);
56 else
57 value.name = VuoText_make("");
58
59 return value;
60}
61
66{
67 json_object *js = json_object_new_object();
68
69 json_object_object_add(js, "type", json_object_new_string(VuoScreen_cStringForType(value.type)));
70
71 if (value.type == VuoScreenType_MatchName)
72 {
73 json_object *nameObject = VuoText_getJson(value.name);
74 json_object_object_add(js, "name", nameObject);
75 }
76 else if (value.type == VuoScreenType_MatchId)
77 {
78 json_object *idObject = VuoInteger_getJson(value.id);
79 json_object_object_add(js, "id", idObject);
80 }
81
82 return js;
83}
84
89{
90 if (value.isRealized)
91 return VuoText_format("<div>Screen \"%s\"</div>\n<div>%lld x %lld points</div>\n<div>%lld x %lld DPI</div>", value.name, value.width, value.height, value.dpiHorizontal, value.dpiVertical);
92
93 if (value.type == VuoScreenType_Active)
94 return strdup("The screen with the active window.");
95 if (value.type == VuoScreenType_Primary)
96 return strdup("The primary screen (with the menu bar).");
97 else if (value.type == VuoScreenType_Secondary)
98 return strdup("A secondary screen.");
99 else if (value.type == VuoScreenType_MatchName)
100 return VuoText_format("The first screen whose name contains \"%s\"", value.name);
101 else if (value.type == VuoScreenType_MatchId)
102 return VuoText_format("Screen #%lld", value.id);
103 else
104 return strdup("Unknown");
105}
106
111{
112 return value1.id == value2.id
113 && VuoText_areEqual(value1.name, value2.name)
114 && value1.isRealized == value2.isRealized
115 && VuoPoint2d_areEqual(value1.topLeft, value2.topLeft)
116 && value1.width == value2.width
117 && value1.height == value2.height
118 && value1.dpiHorizontal == value2.dpiVertical
119 && value1.dpiVertical == value2.dpiVertical;
120}
121
128{
129 return a.id < b.id;
130}
131
139bool VuoScreen_realize(VuoScreen screen, VuoScreen *realizedScreen)
140{
141 // Already realized nothing to do.
142 if (screen.isRealized)
143 {
144 *realizedScreen = screen;
145 realizedScreen->name = VuoText_make(screen.name);
146 return true;
147 }
148
149 // Otherwise, try to find a matching screen.
150
151 if (screen.type == VuoScreenType_Active)
152 {
153 *realizedScreen = VuoScreen_getActive();
154 return true;
155 }
156 else if (screen.type == VuoScreenType_Primary)
157 {
158 *realizedScreen = VuoScreen_getPrimary();
159 return true;
160 }
161 else if (screen.type == VuoScreenType_Secondary)
162 {
163 *realizedScreen = VuoScreen_getSecondary();
164 return true;
165 }
166 else if (screen.type == VuoScreenType_MatchName
167 || screen.type == VuoScreenType_MatchId)
168 {
170 VuoRetain(screens);
171 unsigned long screenCount = VuoListGetCount_VuoScreen(screens);
172
173 bool found = false;
174 for (unsigned long i = 1; i <= screenCount; ++i)
175 {
176 VuoScreen s = VuoListGetValue_VuoScreen(screens, i);
177 if ( (screen.type == VuoScreenType_MatchName && strstr(s.name, screen.name))
178 || (screen.type == VuoScreenType_MatchId && s.id == screen.id) )
179 {
180 *realizedScreen = s;
181 realizedScreen->type = VuoScreenType_MatchId;
182 realizedScreen->name = VuoText_make(s.name); // Copy, since we're releasing `screens` below.
183 found = true;
184 break;
185 }
186 }
187
188 VuoRelease(screens);
189 return found;
190 }
191
192 return false;
193}