Photon 1.0.0
Loading...
Searching...
No Matches
RenderSystem+OpenStep.hpp
Go to the documentation of this file.
1/*
2 * =====================================================================
3 *
4 * Photon
5 * Copyright Amlal EL Mahrouss, all rights reserved.
6 *
7 * =====================================================================
8 */
9
10#pragma once
11
12#include <core/Core.hpp>
13
14namespace Photon
15{
16 inline NSRect PTMakeRect(NSInteger x, NSInteger y, NSInteger w, NSInteger h)
17 {
18 NSRect rect{};
19 rect.origin.x = x;
20 rect.origin.y = y;
21 rect.size.width = w;
22 rect.size.height = h;
23
24 return rect;
25 }
26
28 {
29 public:
30 explicit RenderSystemDOM() = default;
31 virtual ~RenderSystemDOM() = default;
32
35
36 virtual bool insert_element(NSWindow* window) = 0;
37 virtual bool remove_element() = 0;
38
39 virtual bool insert_child_element(RenderSystemDOM* dom_elem) = 0;
40 virtual bool remove_child_element(RenderSystemDOM* dom_elem) = 0;
41
42 public:
43 virtual void set_content_text(NSString* text)
44 {
45 h_markup_content = text;
46 }
47
48 virtual void set_position(CGFloat x, CGFloat y)
49 {
50 h_x = x;
51 h_y = y;
52 }
53
54 public:
55 enum
56 {
58 kHeading1 = 100,
67 };
68
69 void set_heading(int32_t text)
70 {
71 switch (text)
72 {
73 case kHeading1:
74 h_font_sz = 32.0;
75 break;
76 case kHeading2:
77 h_font_sz = 24.0;
78 break;
79 case kHeading3:
80 h_font_sz = 17.8;
81 break;
82 case kHeading4:
83 case kHeading5:
84 h_font_sz = 13.28;
85 break;
86 case kHeading6:
87 h_font_sz = 12;
88 break;
90 h_font_sz = 16;
91 break;
92 default:
93 break;
94 }
95 }
96
97 virtual bool is_text_node()
98 {
99 return false;
100 }
101
102 protected:
103 std::vector<RenderSystemDOM*> h_child_element;
104 bool h_renderable{true};
105 CGFloat h_x{0};
106 CGFloat h_y{0};
107
108 protected:
109#ifndef __PHOTON_APPLE__
110 NSString* h_font{@"FreeMono"};
111 NSString* h_font_bold{@"FreeMonoBold"};
112#else
113 NSString* h_font{@"Times New Roman"};
114 NSString* h_font_bold{@"Times New Roman Bold"};
115#endif
116
117 NSString* h_markup_content{@""};
118 CGFloat h_font_sz{16.0f};
119 };
120
122 {
123 protected:
124 NSTextView* h_content{nullptr};
125
126 public:
127 explicit RenderSystemTextDOM() = default;
128 virtual ~RenderSystemTextDOM() = default;
129
132
133 public:
134 bool insert_child_element(RenderSystemDOM* dom_elem) override
135 {
136 if (!dom_elem)
137 return false;
138
139 this->h_child_element.push_back(dom_elem);
140 return true;
141 }
142
143 bool is_text_node() override
144 {
145 return true;
146 }
147
148 bool remove_child_element(RenderSystemDOM* dom_elem) override
149 {
150 if (!dom_elem)
151 return false;
152
153 auto elem = std::find(this->h_child_element.begin(), this->h_child_element.end(), dom_elem);
154
155 if (elem != this->h_child_element.end())
156 {
157 this->h_child_element.erase(elem);
158 return true;
159 }
160
161 return false;
162 }
163
164 bool remove_element() override
165 {
166 if (h_content)
167 {
168 [h_content removeFromSuperview];
169
170 for (auto& elem : h_child_element)
171 {
172 elem->remove_element();
173 }
174
175 return true;
176 }
177
178 return false;
179 }
180
181 bool insert_element(NSWindow* window) override
182 {
183 if (!h_renderable || !window || h_content)
184 return false;
185
186 h_content = [[NSTextView alloc]
187 initWithFrame:NSMakeRect(this->h_x, this->h_y, this->h_font_sz * [this->h_markup_content length],
188 this->h_font_sz)];
189
190 [h_content setTextColor:[NSColor blackColor]];
191 [h_content setBackgroundColor:[NSColor clearColor]];
192 [h_content setString:h_markup_content];
193
194 if (h_font_sz <= 13.28)
195 {
196 [h_content setFont:[NSFont fontWithName:this->h_font_bold size:this->h_font_sz]];
197 }
198 else
199 {
200 [h_content setFont:[NSFont fontWithName:this->h_font size:this->h_font_sz]];
201 }
202
203 [[window contentView] addSubview:h_content];
204
205 for (auto& elem : h_child_element)
206 {
207 elem->insert_element(window);
208 }
209
210 return true;
211 }
212 };
213
215 {
216 protected:
217 NSTextView* h_placeholder_content{nullptr};
218 NSURL* h_image_path{nullptr};
219 NSImage* h_image_content{nullptr};
220 NSImageView* h_image_view{nullptr};
221
222 public:
223 explicit RenderSystemImageDOM() = default;
224 virtual ~RenderSystemImageDOM() = default;
225
228
229 bool set_image_url(NSURL* url_img)
230 {
231 if (!url_img)
232 return false;
233
234 h_image_path = url_img;
235
236 if (h_image_content)
237 {
238 [h_image_content release];
239 }
240
241 h_image_content = [[NSImage alloc] initWithContentsOfURL:h_image_path];
242
243 return true;
244 }
245
246 bool insert_child_element(RenderSystemDOM* dom_elem) override
247 {
248 if (!dom_elem)
249 return false;
250
251 this->h_child_element.push_back(dom_elem);
252
253 return true;
254 }
255
256 bool is_text_node() override
257 {
258 return false;
259 }
260
261 size_t width()
262 {
263 return h_image_content.size.width;
264 }
265
266 size_t height()
267 {
268 return h_image_content.size.height;
269 }
270
271 bool remove_child_element(RenderSystemDOM* dom_elem) override
272 {
273 if (!dom_elem)
274 return false;
275
276 auto elem = std::find(this->h_child_element.begin(), this->h_child_element.end(), dom_elem);
277
278 if (elem != this->h_child_element.end())
279 {
280 this->h_child_element.erase(elem);
281 return true;
282 }
283
284 return false;
285 }
286
287 bool remove_element() override
288 {
289 if (h_image_content)
290 {
291 [h_image_view removeFromSuperview];
292
293 for (auto& elem : h_child_element)
294 {
295 elem->remove_element();
296 }
297
298 return true;
299 }
300
301 return false;
302 }
303
304 bool insert_element(NSWindow* window) override
305 {
306 if (!h_renderable || !window)
307 return false;
308
309 if (!h_image_content)
310 {
311 h_placeholder_content = [[NSTextView alloc]
312 initWithFrame:NSMakeRect(this->h_x, this->h_y, this->h_font_sz * [this->h_markup_content length],
313 this->h_font_sz)];
314
315 [h_placeholder_content setTextColor:[NSColor blackColor]];
316 [h_placeholder_content setBackgroundColor:[NSColor clearColor]];
318
319 if (h_font_sz <= 13.28)
320 {
321 [h_placeholder_content setFont:[NSFont fontWithName:this->h_font_bold size:this->h_font_sz]];
322 }
323 else
324 {
325 [h_placeholder_content setFont:[NSFont fontWithName:this->h_font size:this->h_font_sz]];
326 }
327
328 [[window contentView] addSubview:h_placeholder_content];
329 }
330 else
331 {
333 [[NSImageView alloc] initWithFrame:NSMakeRect(this->h_x, this->h_y, [h_image_content size].width,
334 [h_image_content size].height)];
335
336 [h_image_view setImage:h_image_content];
337
338 [[window contentView] addSubview:h_image_view];
339 }
340
341 for (auto& elem : h_child_element)
342 {
343 elem->insert_element(window);
344 }
345
346 return true;
347 }
348 };
349
351 {
352 protected:
353 NSButton* h_button_content{nullptr};
354
355 public:
356 explicit RenderSystemButtonDOM() = default;
357 virtual ~RenderSystemButtonDOM() = default;
358
361
362 bool insert_child_element(RenderSystemDOM* dom_elem) override
363 {
364 if (!dom_elem)
365 return false;
366
367 this->h_child_element.push_back(dom_elem);
368 return true;
369 }
370
371 bool is_text_node() override
372 {
373 return false;
374 }
375
376 bool remove_child_element(RenderSystemDOM* dom_elem) override
377 {
378 if (!dom_elem)
379 return false;
380
381 auto elem = std::find(this->h_child_element.begin(), this->h_child_element.end(), dom_elem);
382
383 if (elem != this->h_child_element.end())
384 {
385 this->h_child_element.erase(elem);
386 return true;
387 }
388
389 return false;
390 }
391
392 bool remove_element() override
393 {
395 {
396 [h_button_content removeFromSuperview];
397
398 for (auto& elem : h_child_element)
399 {
400 elem->remove_element();
401 }
402
403 return true;
404 }
405
406 return false;
407 }
408
409 bool insert_element(NSWindow* window) override
410 {
411 if (!h_renderable || !window || h_button_content)
412 return false;
413
414 h_button_content = [[NSButton alloc] initWithFrame:NSMakeRect(this->h_x, this->h_y, 200, 50)];
415
416 [h_button_content setTarget:[window contentView]];
417 [h_button_content setEnabled:YES];
418 [h_button_content setTransparent:NO];
419
420 NSMutableParagraphStyle* style = [[NSMutableParagraphStyle alloc] init];
421 [style setAlignment:NSTextAlignmentCenter];
422
423 NSDictionary* attrsDictionary =
424 [NSDictionary dictionaryWithObjectsAndKeys:[NSColor blackColor], NSForegroundColorAttributeName, style,
425 NSParagraphStyleAttributeName, nil];
426
427 NSAttributedString* attrString =
428 [[NSAttributedString alloc] initWithString:h_markup_content attributes:attrsDictionary];
429 [h_button_content setAttributedTitle:attrString];
430
431 if (h_font_sz <= 13.28)
432 {
433 [h_button_content setFont:[NSFont fontWithName:this->h_font_bold size:this->h_font_sz]];
434 }
435 else
436 {
437 [h_button_content setFont:[NSFont fontWithName:this->h_font size:this->h_font_sz]];
438 }
439
440 [[window contentView] addSubview:h_button_content];
441
442 for (auto& elem : h_child_element)
443 {
444 elem->insert_element(window);
445 }
446
447 return true;
448 }
449 };
450} // namespace Photon
position rect
Definition Bitmap.h:4
Definition RenderSystem+OpenStep.hpp:351
bool remove_element() override
Definition RenderSystem+OpenStep.hpp:392
virtual ~RenderSystemButtonDOM()=default
bool is_text_node() override
Definition RenderSystem+OpenStep.hpp:371
NSButton * h_button_content
Definition RenderSystem+OpenStep.hpp:353
bool remove_child_element(RenderSystemDOM *dom_elem) override
Definition RenderSystem+OpenStep.hpp:376
RenderSystemButtonDOM & operator=(const RenderSystemButtonDOM &)=default
RenderSystemButtonDOM(const RenderSystemButtonDOM &)=default
bool insert_child_element(RenderSystemDOM *dom_elem) override
Definition RenderSystem+OpenStep.hpp:362
bool insert_element(NSWindow *window) override
Definition RenderSystem+OpenStep.hpp:409
Definition RenderSystem+OpenStep.hpp:28
virtual void set_position(CGFloat x, CGFloat y)
Definition RenderSystem+OpenStep.hpp:48
virtual bool is_text_node()
Definition RenderSystem+OpenStep.hpp:97
void set_heading(int32_t text)
Definition RenderSystem+OpenStep.hpp:69
virtual bool insert_element(NSWindow *window)=0
virtual bool remove_element()=0
CGFloat h_font_sz
Definition RenderSystem+OpenStep.hpp:118
RenderSystemDOM & operator=(const RenderSystemDOM &)=default
NSString * h_font_bold
Definition RenderSystem+OpenStep.hpp:111
virtual bool remove_child_element(RenderSystemDOM *dom_elem)=0
NSString * h_markup_content
Definition RenderSystem+OpenStep.hpp:117
NSString * h_font
Definition RenderSystem+OpenStep.hpp:110
virtual bool insert_child_element(RenderSystemDOM *dom_elem)=0
CGFloat h_y
Definition RenderSystem+OpenStep.hpp:106
bool h_renderable
Definition RenderSystem+OpenStep.hpp:104
std::vector< RenderSystemDOM * > h_child_element
Definition RenderSystem+OpenStep.hpp:103
CGFloat h_x
Definition RenderSystem+OpenStep.hpp:105
@ kHeading3
Definition RenderSystem+OpenStep.hpp:60
@ kHeading6
Definition RenderSystem+OpenStep.hpp:63
@ kHeading1
Definition RenderSystem+OpenStep.hpp:58
@ kHeading4
Definition RenderSystem+OpenStep.hpp:61
@ kHeadingInvalid
Definition RenderSystem+OpenStep.hpp:57
@ kHeadingParagraph
Definition RenderSystem+OpenStep.hpp:64
@ kHeading2
Definition RenderSystem+OpenStep.hpp:59
@ kHeadingItalic
Definition RenderSystem+OpenStep.hpp:66
@ kHeading5
Definition RenderSystem+OpenStep.hpp:62
@ kHeadingBold
Definition RenderSystem+OpenStep.hpp:65
virtual void set_content_text(NSString *text)
Definition RenderSystem+OpenStep.hpp:43
virtual ~RenderSystemDOM()=default
RenderSystemDOM(const RenderSystemDOM &)=default
Definition RenderSystem+OpenStep.hpp:215
NSTextView * h_placeholder_content
Definition RenderSystem+OpenStep.hpp:217
virtual ~RenderSystemImageDOM()=default
NSURL * h_image_path
Definition RenderSystem+OpenStep.hpp:218
RenderSystemImageDOM(const RenderSystemImageDOM &)=default
NSImageView * h_image_view
Definition RenderSystem+OpenStep.hpp:220
RenderSystemImageDOM & operator=(const RenderSystemImageDOM &)=default
bool set_image_url(NSURL *url_img)
Definition RenderSystem+OpenStep.hpp:229
bool remove_child_element(RenderSystemDOM *dom_elem) override
Definition RenderSystem+OpenStep.hpp:271
bool is_text_node() override
Definition RenderSystem+OpenStep.hpp:256
size_t height()
Definition RenderSystem+OpenStep.hpp:266
bool insert_element(NSWindow *window) override
Definition RenderSystem+OpenStep.hpp:304
bool insert_child_element(RenderSystemDOM *dom_elem) override
Definition RenderSystem+OpenStep.hpp:246
bool remove_element() override
Definition RenderSystem+OpenStep.hpp:287
size_t width()
Definition RenderSystem+OpenStep.hpp:261
NSImage * h_image_content
Definition RenderSystem+OpenStep.hpp:219
Definition RenderSystem+OpenStep.hpp:122
bool insert_element(NSWindow *window) override
Definition RenderSystem+OpenStep.hpp:181
bool insert_child_element(RenderSystemDOM *dom_elem) override
Definition RenderSystem+OpenStep.hpp:134
RenderSystemTextDOM & operator=(const RenderSystemTextDOM &)=default
bool remove_element() override
Definition RenderSystem+OpenStep.hpp:164
virtual ~RenderSystemTextDOM()=default
bool remove_child_element(RenderSystemDOM *dom_elem) override
Definition RenderSystem+OpenStep.hpp:148
NSTextView * h_content
Definition RenderSystem+OpenStep.hpp:124
RenderSystemTextDOM(const RenderSystemTextDOM &)=default
bool is_text_node() override
Definition RenderSystem+OpenStep.hpp:143
This file is also about defining core js concepts.
Definition BasePhotonWindow.hpp:22
NSRect PTMakeRect(NSInteger x, NSInteger y, NSInteger w, NSInteger h)
Definition RenderSystem+OpenStep.hpp:16
Definition types.h:103
int x
Definition types.h:106
int y
Definition types.h:107
int height
Definition types.h:109
int width
Definition types.h:108
style
Definition tag_strings.h:10