source: mainline/uspace/lib/ui/src/resource.c@ 26c90dd

ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 26c90dd was 1026cc4, checked in by Jiri Svoboda <jiri@…>, 3 years ago

Clicking scrollbar through to generate page up / page down

  • Property mode set to 100644
File size: 19.5 KB
Line 
1/*
2 * Copyright (c) 2022 Jiri Svoboda
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29/** @addtogroup libui
30 * @{
31 */
32/**
33 * @file UI resources
34 */
35
36#include <errno.h>
37#include <gfx/color.h>
38#include <gfx/context.h>
39#include <gfx/font.h>
40#include <gfx/render.h>
41#include <gfx/typeface.h>
42#include <stdlib.h>
43#include <str.h>
44#include <ui/resource.h>
45#include "../private/resource.h"
46
47static const char *ui_typeface_path = "/data/font/helena.tpf";
48
49/** Create new UI resource in graphics mode.
50 *
51 * @param gc Graphic context
52 * @param rresource Place to store pointer to new UI resource
53 * @return EOK on success, ENOMEM if out of memory
54 */
55static errno_t ui_resource_create_gfx(gfx_context_t *gc,
56 ui_resource_t **rresource)
57{
58 ui_resource_t *resource;
59 gfx_typeface_t *tface = NULL;
60 gfx_font_t *font = NULL;
61 gfx_font_info_t *finfo;
62 gfx_color_t *btn_frame_color = NULL;
63 gfx_color_t *btn_face_color = NULL;
64 gfx_color_t *btn_text_color = NULL;
65 gfx_color_t *btn_highlight_color = NULL;
66 gfx_color_t *btn_shadow_color = NULL;
67 gfx_color_t *wnd_face_color = NULL;
68 gfx_color_t *wnd_text_color = NULL;
69 gfx_color_t *wnd_text_hgl_color = NULL;
70 gfx_color_t *wnd_sel_text_color = NULL;
71 gfx_color_t *wnd_sel_text_hgl_color = NULL;
72 gfx_color_t *wnd_sel_text_bg_color = NULL;
73 gfx_color_t *wnd_frame_hi_color = NULL;
74 gfx_color_t *wnd_frame_sh_color = NULL;
75 gfx_color_t *wnd_highlight_color = NULL;
76 gfx_color_t *wnd_shadow_color = NULL;
77 gfx_color_t *tbar_act_bg_color = NULL;
78 gfx_color_t *tbar_inact_bg_color = NULL;
79 gfx_color_t *tbar_act_text_color = NULL;
80 gfx_color_t *tbar_inact_text_color = NULL;
81 gfx_color_t *entry_fg_color = NULL;
82 gfx_color_t *entry_bg_color = NULL;
83 gfx_color_t *entry_act_bg_color = NULL;
84 gfx_color_t *entry_sel_text_fg_color = NULL;
85 gfx_color_t *entry_sel_text_bg_color = NULL;
86 gfx_color_t *sbar_through_color = NULL;
87 gfx_color_t *sbar_act_through_color = NULL;
88 errno_t rc;
89
90 resource = calloc(1, sizeof(ui_resource_t));
91 if (resource == NULL)
92 return ENOMEM;
93
94 rc = gfx_typeface_open(gc, ui_typeface_path, &tface);
95 if (rc != EOK)
96 goto error;
97
98 finfo = gfx_typeface_first_font(tface);
99 if (finfo == NULL) {
100 rc = EIO;
101 goto error;
102 }
103
104 rc = gfx_font_open(finfo, &font);
105 if (rc != EOK)
106 goto error;
107
108 rc = gfx_color_new_rgb_i16(0, 0, 0, &btn_frame_color);
109 if (rc != EOK)
110 goto error;
111
112 rc = gfx_color_new_rgb_i16(0xc8c8, 0xc8c8, 0xc8c8, &btn_face_color);
113 if (rc != EOK)
114 goto error;
115
116 rc = gfx_color_new_rgb_i16(0, 0, 0, &btn_text_color);
117 if (rc != EOK)
118 goto error;
119
120 rc = gfx_color_new_rgb_i16(0xffff, 0xffff, 0xffff,
121 &btn_highlight_color);
122 if (rc != EOK)
123 goto error;
124
125 rc = gfx_color_new_rgb_i16(0x8888, 0x8888, 0x8888, &btn_shadow_color);
126 if (rc != EOK)
127 goto error;
128
129 rc = gfx_color_new_rgb_i16(0xc8c8, 0xc8c8, 0xc8c8, &wnd_face_color);
130 if (rc != EOK)
131 goto error;
132
133 rc = gfx_color_new_rgb_i16(0, 0, 0, &wnd_text_color);
134 if (rc != EOK)
135 goto error;
136
137 rc = gfx_color_new_rgb_i16(0, 0, 0, &wnd_text_hgl_color);
138 if (rc != EOK)
139 goto error;
140
141 rc = gfx_color_new_rgb_i16(0xffff, 0xffff, 0xffff, &wnd_sel_text_color);
142 if (rc != EOK)
143 goto error;
144
145 rc = gfx_color_new_rgb_i16(0xffff, 0xffff, 0xffff,
146 &wnd_sel_text_hgl_color);
147 if (rc != EOK)
148 goto error;
149
150 rc = gfx_color_new_rgb_i16(0x5858, 0x6a6a, 0xc4c4,
151 &wnd_sel_text_bg_color);
152 if (rc != EOK)
153 goto error;
154
155 rc = gfx_color_new_rgb_i16(0x8888, 0x8888, 0x8888, &wnd_frame_hi_color);
156 if (rc != EOK)
157 goto error;
158
159 rc = gfx_color_new_rgb_i16(0x4444, 0x4444, 0x4444, &wnd_frame_sh_color);
160 if (rc != EOK)
161 goto error;
162
163 rc = gfx_color_new_rgb_i16(0xffff, 0xffff, 0xffff,
164 &wnd_highlight_color);
165 if (rc != EOK)
166 goto error;
167
168 rc = gfx_color_new_rgb_i16(0x8888, 0x8888, 0x8888, &wnd_shadow_color);
169 if (rc != EOK)
170 goto error;
171
172 rc = gfx_color_new_rgb_i16(0x5858, 0x6a6a, 0xc4c4, &tbar_act_bg_color);
173 if (rc != EOK)
174 goto error;
175
176 rc = gfx_color_new_rgb_i16(0xffff, 0xffff, 0xffff,
177 &tbar_act_text_color);
178 if (rc != EOK)
179 goto error;
180
181 rc = gfx_color_new_rgb_i16(0xdddd, 0xdddd, 0xdddd,
182 &tbar_inact_bg_color);
183 if (rc != EOK)
184 goto error;
185
186 rc = gfx_color_new_rgb_i16(0x5858, 0x5858, 0x5858,
187 &tbar_inact_text_color);
188 if (rc != EOK)
189 goto error;
190
191 rc = gfx_color_new_rgb_i16(0, 0, 0, &entry_fg_color);
192 if (rc != EOK)
193 goto error;
194
195 rc = gfx_color_new_rgb_i16(0xffff, 0xffff, 0xffff, &entry_bg_color);
196 if (rc != EOK)
197 goto error;
198
199 rc = gfx_color_new_rgb_i16(0xc8c8, 0xc8c8, 0xc8c8, &entry_act_bg_color);
200 if (rc != EOK)
201 goto error;
202
203 rc = gfx_color_new_rgb_i16(0xffff, 0xffff, 0xffff,
204 &entry_sel_text_fg_color);
205 if (rc != EOK)
206 goto error;
207
208 rc = gfx_color_new_rgb_i16(0, 0, 0xffff, &entry_sel_text_bg_color);
209 if (rc != EOK)
210 goto error;
211
212 rc = gfx_color_new_rgb_i16(0xe4e4, 0xe4e4, 0xe4e4,
213 &sbar_through_color);
214 if (rc != EOK)
215 goto error;
216
217 rc = gfx_color_new_rgb_i16(0x5858, 0x5858, 0x5858,
218 &sbar_act_through_color);
219 if (rc != EOK)
220 goto error;
221
222 resource->gc = gc;
223 resource->tface = tface;
224 resource->font = font;
225 resource->textmode = false;
226
227 resource->btn_frame_color = btn_frame_color;
228 resource->btn_face_color = btn_face_color;
229 resource->btn_text_color = btn_text_color;
230 resource->btn_highlight_color = btn_highlight_color;
231 resource->btn_shadow_color = btn_shadow_color;
232
233 resource->wnd_face_color = wnd_face_color;
234 resource->wnd_text_color = wnd_text_color;
235 resource->wnd_text_hgl_color = wnd_text_hgl_color;
236 resource->wnd_sel_text_color = wnd_sel_text_color;
237 resource->wnd_sel_text_hgl_color = wnd_sel_text_hgl_color;
238 resource->wnd_sel_text_bg_color = wnd_sel_text_bg_color;
239 resource->wnd_frame_hi_color = wnd_frame_hi_color;
240 resource->wnd_frame_sh_color = wnd_frame_sh_color;
241 resource->wnd_highlight_color = wnd_highlight_color;
242 resource->wnd_shadow_color = wnd_shadow_color;
243
244 resource->tbar_act_bg_color = tbar_act_bg_color;
245 resource->tbar_act_text_color = tbar_act_text_color;
246 resource->tbar_inact_bg_color = tbar_inact_bg_color;
247 resource->tbar_inact_text_color = tbar_inact_text_color;
248
249 resource->entry_fg_color = entry_fg_color;
250 resource->entry_bg_color = entry_bg_color;
251 resource->entry_act_bg_color = entry_act_bg_color;
252 resource->entry_sel_text_fg_color = entry_sel_text_fg_color;
253 resource->entry_sel_text_bg_color = entry_sel_text_bg_color;
254
255 resource->sbar_through_color = sbar_through_color;
256 resource->sbar_act_through_color = sbar_act_through_color;
257
258 *rresource = resource;
259 return EOK;
260error:
261 if (btn_frame_color != NULL)
262 gfx_color_delete(btn_frame_color);
263 if (btn_face_color != NULL)
264 gfx_color_delete(btn_face_color);
265 if (btn_text_color != NULL)
266 gfx_color_delete(btn_text_color);
267 if (btn_highlight_color != NULL)
268 gfx_color_delete(btn_highlight_color);
269 if (btn_shadow_color != NULL)
270 gfx_color_delete(btn_shadow_color);
271
272 if (wnd_face_color != NULL)
273 gfx_color_delete(wnd_face_color);
274 if (wnd_text_color != NULL)
275 gfx_color_delete(wnd_text_color);
276 if (wnd_text_hgl_color != NULL)
277 gfx_color_delete(wnd_text_hgl_color);
278 if (wnd_sel_text_color != NULL)
279 gfx_color_delete(wnd_sel_text_color);
280 if (wnd_sel_text_hgl_color != NULL)
281 gfx_color_delete(wnd_sel_text_hgl_color);
282 if (wnd_sel_text_bg_color != NULL)
283 gfx_color_delete(wnd_sel_text_bg_color);
284 if (wnd_frame_hi_color != NULL)
285 gfx_color_delete(wnd_frame_hi_color);
286 if (wnd_frame_sh_color != NULL)
287 gfx_color_delete(wnd_frame_sh_color);
288 if (wnd_highlight_color != NULL)
289 gfx_color_delete(wnd_highlight_color);
290 if (wnd_shadow_color != NULL)
291 gfx_color_delete(wnd_shadow_color);
292
293 if (tbar_act_bg_color != NULL)
294 gfx_color_delete(tbar_act_bg_color);
295 if (tbar_act_text_color != NULL)
296 gfx_color_delete(tbar_act_text_color);
297 if (tbar_inact_bg_color != NULL)
298 gfx_color_delete(tbar_inact_bg_color);
299 if (tbar_inact_text_color != NULL)
300 gfx_color_delete(tbar_inact_text_color);
301
302 if (entry_fg_color != NULL)
303 gfx_color_delete(entry_fg_color);
304 if (entry_bg_color != NULL)
305 gfx_color_delete(entry_bg_color);
306 if (entry_sel_text_fg_color != NULL)
307 gfx_color_delete(entry_sel_text_fg_color);
308 if (entry_sel_text_bg_color != NULL)
309 gfx_color_delete(entry_sel_text_bg_color);
310 if (entry_act_bg_color != NULL)
311 gfx_color_delete(entry_act_bg_color);
312
313 if (sbar_through_color != NULL)
314 gfx_color_delete(sbar_through_color);
315 if (sbar_act_through_color != NULL)
316 gfx_color_delete(sbar_act_through_color);
317
318 if (tface != NULL)
319 gfx_typeface_destroy(tface);
320 free(resource);
321 return rc;
322}
323
324/** Create new UI resource in text mode.
325 *
326 * @param gc Graphic context
327 * @param rresource Place to store pointer to new UI resource
328 * @return EOK on success, ENOMEM if out of memory
329 */
330static errno_t ui_resource_create_text(gfx_context_t *gc,
331 ui_resource_t **rresource)
332{
333 ui_resource_t *resource;
334 gfx_typeface_t *tface = NULL;
335 gfx_font_t *font = NULL;
336 gfx_color_t *btn_frame_color = NULL;
337 gfx_color_t *btn_face_color = NULL;
338 gfx_color_t *btn_text_color = NULL;
339 gfx_color_t *btn_highlight_color = NULL;
340 gfx_color_t *btn_shadow_color = NULL;
341 gfx_color_t *wnd_face_color = NULL;
342 gfx_color_t *wnd_text_color = NULL;
343 gfx_color_t *wnd_text_hgl_color = NULL;
344 gfx_color_t *wnd_sel_text_color = NULL;
345 gfx_color_t *wnd_sel_text_hgl_color = NULL;
346 gfx_color_t *wnd_sel_text_bg_color = NULL;
347 gfx_color_t *wnd_frame_hi_color = NULL;
348 gfx_color_t *wnd_frame_sh_color = NULL;
349 gfx_color_t *wnd_highlight_color = NULL;
350 gfx_color_t *wnd_shadow_color = NULL;
351 gfx_color_t *tbar_act_bg_color = NULL;
352 gfx_color_t *tbar_inact_bg_color = NULL;
353 gfx_color_t *tbar_act_text_color = NULL;
354 gfx_color_t *tbar_inact_text_color = NULL;
355 gfx_color_t *entry_fg_color = NULL;
356 gfx_color_t *entry_bg_color = NULL;
357 gfx_color_t *entry_sel_text_fg_color = NULL;
358 gfx_color_t *entry_sel_text_bg_color = NULL;
359 gfx_color_t *entry_act_bg_color = NULL;
360 gfx_color_t *sbar_through_color = NULL;
361 gfx_color_t *sbar_act_through_color = NULL;
362 errno_t rc;
363
364 resource = calloc(1, sizeof(ui_resource_t));
365 if (resource == NULL)
366 return ENOMEM;
367
368 /* Create dummy font for text mode */
369 rc = gfx_typeface_create(gc, &tface);
370 if (rc != EOK)
371 goto error;
372
373 rc = gfx_font_create_textmode(tface, &font);
374 if (rc != EOK)
375 goto error;
376
377 rc = gfx_color_new_ega(0x07, &btn_frame_color);
378 if (rc != EOK)
379 goto error;
380
381 rc = gfx_color_new_ega(0x20, &btn_face_color);
382 if (rc != EOK)
383 goto error;
384
385 rc = gfx_color_new_ega(0x20, &btn_text_color);
386 if (rc != EOK)
387 goto error;
388
389 rc = gfx_color_new_ega(0x20, &btn_highlight_color);
390 if (rc != EOK)
391 goto error;
392
393 rc = gfx_color_new_ega(0x01, &btn_shadow_color);
394 if (rc != EOK)
395 goto error;
396
397 rc = gfx_color_new_ega(0x70, &wnd_face_color);
398 if (rc != EOK)
399 goto error;
400
401 rc = gfx_color_new_ega(0x70, &wnd_text_color);
402 if (rc != EOK)
403 goto error;
404
405 rc = gfx_color_new_ega(0x74, &wnd_text_hgl_color);
406 if (rc != EOK)
407 goto error;
408
409 rc = gfx_color_new_ega(0x07, &wnd_sel_text_color);
410 if (rc != EOK)
411 goto error;
412
413 rc = gfx_color_new_ega(0x04, &wnd_sel_text_hgl_color);
414 if (rc != EOK)
415 goto error;
416
417 rc = gfx_color_new_ega(0x07, &wnd_sel_text_bg_color);
418 if (rc != EOK)
419 goto error;
420
421 rc = gfx_color_new_ega(0x70, &wnd_frame_hi_color);
422 if (rc != EOK)
423 goto error;
424
425 rc = gfx_color_new_ega(0x01, &wnd_frame_sh_color);
426 if (rc != EOK)
427 goto error;
428
429 rc = gfx_color_new_ega(0x70, &wnd_highlight_color);
430 if (rc != EOK)
431 goto error;
432
433 rc = gfx_color_new_ega(0x01, &wnd_shadow_color);
434 if (rc != EOK)
435 goto error;
436
437 rc = gfx_color_new_ega(0x70, &tbar_act_bg_color);
438 if (rc != EOK)
439 goto error;
440
441 rc = gfx_color_new_ega(0x70, &tbar_act_text_color);
442 if (rc != EOK)
443 goto error;
444
445 rc = gfx_color_new_ega(0x07, &tbar_inact_bg_color);
446 if (rc != EOK)
447 goto error;
448
449 rc = gfx_color_new_ega(0x07, &tbar_inact_text_color);
450 if (rc != EOK)
451 goto error;
452
453 rc = gfx_color_new_ega(0x1b, &entry_fg_color);
454 if (rc != EOK)
455 goto error;
456
457 rc = gfx_color_new_ega(0x1b, &entry_bg_color);
458 if (rc != EOK)
459 goto error;
460
461 rc = gfx_color_new_ega(0x20, &entry_sel_text_fg_color);
462 if (rc != EOK)
463 goto error;
464
465 rc = gfx_color_new_ega(0x20, &entry_sel_text_bg_color);
466 if (rc != EOK)
467 goto error;
468
469 rc = gfx_color_new_ega(0x37, &entry_act_bg_color);
470 if (rc != EOK)
471 goto error;
472
473 rc = gfx_color_new_ega(0x07, &sbar_through_color);
474 if (rc != EOK)
475 goto error;
476
477 rc = gfx_color_new_ega(0x07, &sbar_act_through_color);
478 if (rc != EOK)
479 goto error;
480
481 resource->gc = gc;
482 resource->tface = tface;
483 resource->font = font;
484 resource->textmode = true;
485
486 resource->btn_frame_color = btn_frame_color;
487 resource->btn_face_color = btn_face_color;
488 resource->btn_text_color = btn_text_color;
489 resource->btn_highlight_color = btn_highlight_color;
490 resource->btn_shadow_color = btn_shadow_color;
491
492 resource->wnd_face_color = wnd_face_color;
493 resource->wnd_text_color = wnd_text_color;
494 resource->wnd_text_hgl_color = wnd_text_hgl_color;
495 resource->wnd_sel_text_color = wnd_sel_text_color;
496 resource->wnd_sel_text_hgl_color = wnd_sel_text_hgl_color;
497 resource->wnd_sel_text_bg_color = wnd_sel_text_bg_color;
498 resource->wnd_frame_hi_color = wnd_frame_hi_color;
499 resource->wnd_frame_sh_color = wnd_frame_sh_color;
500 resource->wnd_highlight_color = wnd_highlight_color;
501 resource->wnd_shadow_color = wnd_shadow_color;
502
503 resource->tbar_act_bg_color = tbar_act_bg_color;
504 resource->tbar_act_text_color = tbar_act_text_color;
505 resource->tbar_inact_bg_color = tbar_inact_bg_color;
506 resource->tbar_inact_text_color = tbar_inact_text_color;
507
508 resource->entry_fg_color = entry_fg_color;
509 resource->entry_bg_color = entry_bg_color;
510 resource->entry_act_bg_color = entry_act_bg_color;
511 resource->entry_sel_text_fg_color = entry_sel_text_fg_color;
512 resource->entry_sel_text_bg_color = entry_sel_text_bg_color;
513
514 resource->sbar_through_color = sbar_through_color;
515 resource->sbar_act_through_color = sbar_act_through_color;
516
517 *rresource = resource;
518 return EOK;
519error:
520 if (btn_frame_color != NULL)
521 gfx_color_delete(btn_frame_color);
522 if (btn_face_color != NULL)
523 gfx_color_delete(btn_face_color);
524 if (btn_text_color != NULL)
525 gfx_color_delete(btn_text_color);
526 if (btn_highlight_color != NULL)
527 gfx_color_delete(btn_highlight_color);
528 if (btn_shadow_color != NULL)
529 gfx_color_delete(btn_shadow_color);
530
531 if (wnd_face_color != NULL)
532 gfx_color_delete(wnd_face_color);
533 if (wnd_text_color != NULL)
534 gfx_color_delete(wnd_text_color);
535 if (wnd_text_hgl_color != NULL)
536 gfx_color_delete(wnd_text_hgl_color);
537 if (wnd_sel_text_color != NULL)
538 gfx_color_delete(wnd_sel_text_color);
539 if (wnd_sel_text_hgl_color != NULL)
540 gfx_color_delete(wnd_sel_text_hgl_color);
541 if (wnd_sel_text_bg_color != NULL)
542 gfx_color_delete(wnd_sel_text_bg_color);
543 if (wnd_frame_hi_color != NULL)
544 gfx_color_delete(wnd_frame_hi_color);
545 if (wnd_frame_sh_color != NULL)
546 gfx_color_delete(wnd_frame_sh_color);
547 if (wnd_highlight_color != NULL)
548 gfx_color_delete(wnd_highlight_color);
549 if (wnd_shadow_color != NULL)
550 gfx_color_delete(wnd_shadow_color);
551
552 if (tbar_act_bg_color != NULL)
553 gfx_color_delete(tbar_act_bg_color);
554 if (tbar_act_text_color != NULL)
555 gfx_color_delete(tbar_act_text_color);
556 if (tbar_inact_bg_color != NULL)
557 gfx_color_delete(tbar_inact_bg_color);
558 if (tbar_inact_text_color != NULL)
559 gfx_color_delete(tbar_inact_text_color);
560
561 if (entry_fg_color != NULL)
562 gfx_color_delete(entry_fg_color);
563 if (entry_bg_color != NULL)
564 gfx_color_delete(entry_bg_color);
565 if (entry_act_bg_color != NULL)
566 gfx_color_delete(entry_act_bg_color);
567 if (entry_sel_text_fg_color != NULL)
568 gfx_color_delete(entry_sel_text_fg_color);
569 if (entry_sel_text_bg_color != NULL)
570 gfx_color_delete(entry_sel_text_bg_color);
571 if (sbar_through_color != NULL)
572 gfx_color_delete(sbar_through_color);
573 if (sbar_act_through_color != NULL)
574 gfx_color_delete(sbar_act_through_color);
575
576 if (tface != NULL)
577 gfx_typeface_destroy(tface);
578 free(resource);
579 return rc;
580}
581
582/** Create new UI resource.
583 *
584 * @param gc Graphic context
585 * @param textmode @c true if running in text mode
586 * @param rresource Place to store pointer to new UI resource
587 * @return EOK on success, ENOMEM if out of memory
588 */
589errno_t ui_resource_create(gfx_context_t *gc, bool textmode,
590 ui_resource_t **rresource)
591{
592 if (textmode)
593 return ui_resource_create_text(gc, rresource);
594 else
595 return ui_resource_create_gfx(gc, rresource);
596}
597
598/** Destroy UI resource.
599 *
600 * @param resource UI resource or @c NULL
601 */
602void ui_resource_destroy(ui_resource_t *resource)
603{
604 if (resource == NULL)
605 return;
606
607 gfx_color_delete(resource->btn_frame_color);
608 gfx_color_delete(resource->btn_face_color);
609 gfx_color_delete(resource->btn_text_color);
610 gfx_color_delete(resource->btn_highlight_color);
611 gfx_color_delete(resource->btn_shadow_color);
612
613 gfx_color_delete(resource->wnd_face_color);
614 gfx_color_delete(resource->wnd_text_color);
615 gfx_color_delete(resource->wnd_sel_text_color);
616 gfx_color_delete(resource->wnd_sel_text_bg_color);
617 gfx_color_delete(resource->wnd_frame_hi_color);
618 gfx_color_delete(resource->wnd_frame_sh_color);
619 gfx_color_delete(resource->wnd_highlight_color);
620 gfx_color_delete(resource->wnd_shadow_color);
621
622 gfx_color_delete(resource->tbar_act_bg_color);
623 gfx_color_delete(resource->tbar_act_text_color);
624 gfx_color_delete(resource->tbar_inact_bg_color);
625 gfx_color_delete(resource->tbar_inact_text_color);
626
627 gfx_color_delete(resource->entry_fg_color);
628 gfx_color_delete(resource->entry_bg_color);
629 gfx_color_delete(resource->entry_act_bg_color);
630 gfx_color_delete(resource->entry_sel_text_fg_color);
631 gfx_color_delete(resource->entry_sel_text_bg_color);
632
633 gfx_color_delete(resource->sbar_through_color);
634 gfx_color_delete(resource->sbar_act_through_color);
635
636 gfx_font_close(resource->font);
637 gfx_typeface_destroy(resource->tface);
638 free(resource);
639}
640
641/** Set UI resource expose callback.
642 *
643 * @param resource Resource
644 * @param cb Callback
645 * @param arg Callback argument
646 */
647void ui_resource_set_expose_cb(ui_resource_t *resource,
648 ui_expose_cb_t cb, void *arg)
649{
650 resource->expose_cb = cb;
651 resource->expose_arg = arg;
652}
653
654/** Force UI repaint after an area has been exposed.
655 *
656 * This is called when a popup disappears, which could have exposed some
657 * other UI elements. It causes complete repaint of the UI.
658 *
659 * NOTE Ideally we could specify the exposed rectangle and then limit
660 * the repaint to just that. That would, however, require means of
661 * actually clipping the repaint operation.
662 */
663void ui_resource_expose(ui_resource_t *resource)
664{
665 if (resource->expose_cb != NULL)
666 resource->expose_cb(resource->expose_arg);
667}
668
669/** Get the UI font.
670 *
671 * @param resource UI resource
672 * @return UI font
673 */
674gfx_font_t *ui_resource_get_font(ui_resource_t *resource)
675{
676 return resource->font;
677}
678
679/** @}
680 */
Note: See TracBrowser for help on using the repository browser.