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