rofi 1.7.8
widget.c
Go to the documentation of this file.
1/*
2 * rofi
3 *
4 * MIT/X11 License
5 * Copyright © 2013-2023 Qball Cow <qball@gmpclient.org>
6 *
7 * Permission is hereby granted, free of charge, to any person obtaining
8 * a copy of this software and associated documentation files (the
9 * "Software"), to deal in the Software without restriction, including
10 * without limitation the rights to use, copy, modify, merge, publish,
11 * distribute, sublicense, and/or sell copies of the Software, and to
12 * permit persons to whom the Software is furnished to do so, subject to
13 * the following conditions:
14 *
15 * The above copyright notice and this permission notice shall be
16 * included in all copies or substantial portions of the Software.
17 *
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
21 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
22 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25 *
26 */
27#include "config.h"
28
29#include "theme.h"
31#include "widgets/widget.h"
32#include <glib.h>
33#include <math.h>
34
35void widget_init(widget *wid, widget *parent, WidgetType type,
36 const char *name) {
37 wid->type = type;
38 wid->parent = parent;
39 wid->name = g_strdup(name);
44
45 wid->padding = rofi_theme_get_padding(wid, "padding", wid->def_padding);
46 wid->border = rofi_theme_get_padding(wid, "border", wid->def_border);
47 wid->border_radius =
48 rofi_theme_get_padding(wid, "border-radius", wid->def_border_radius);
49 wid->margin = rofi_theme_get_padding(wid, "margin", wid->def_margin);
50
51 wid->cursor_type =
53
54 // enabled by default
55 wid->enabled = rofi_theme_get_boolean(wid, "enabled", TRUE);
56}
57
58void widget_set_state(widget *wid, const char *state) {
59 if (wid == NULL) {
60 return;
61 }
62 if (g_strcmp0(wid->state, state)) {
63 wid->state = state;
64 // Update border.
65 wid->border = rofi_theme_get_padding(wid, "border", wid->def_border);
66 wid->border_radius =
67 rofi_theme_get_padding(wid, "border-radius", wid->def_border_radius);
68 if (wid->set_state != NULL) {
69 wid->set_state(wid, state);
70 }
72 }
73}
74
75int widget_intersect(const widget *wid, int x, int y) {
76 if (wid == NULL) {
77 return FALSE;
78 }
79
80 if (x >= (wid->x) && x < (wid->x + wid->w) && y >= (wid->y) &&
81 y < (wid->y + wid->h)) {
82 return TRUE;
83 }
84 return FALSE;
85}
86
87void widget_resize(widget *wid, short w, short h) {
88 if (wid == NULL) {
89 return;
90 }
91 if (wid->resize != NULL) {
92 if (wid->w != w || wid->h != h) {
93 wid->resize(wid, w, h);
94 }
95 } else {
96 wid->w = w;
97 wid->h = h;
98 }
99 // On a resize we always want to update.
101}
102void widget_move(widget *wid, short x, short y) {
103 if (wid == NULL) {
104 return;
105 }
106 wid->x = x;
107 wid->y = y;
108}
110 if (wid == NULL) {
111 return;
112 }
113 wid->type = type;
114}
115
116gboolean widget_enabled(widget *wid) {
117 if (wid == NULL) {
118 return FALSE;
119 }
120 return wid->enabled;
121}
122
123void widget_set_enabled(widget *wid, gboolean enabled) {
124 if (wid == NULL) {
125 return;
126 }
127 if (wid->enabled != enabled) {
128 wid->enabled = enabled;
129 widget_update(wid);
130 widget_update(wid->parent);
132 }
133}
134
135void widget_draw(widget *wid, cairo_t *d) {
136 if (wid == NULL) {
137 return;
138 }
139 // Check if enabled and if draw is implemented.
140 if (wid->enabled && wid->draw) {
141 // Don't draw if there is no space.
142 if (wid->h < 1 || wid->w < 1) {
143 wid->need_redraw = FALSE;
144 return;
145 }
146 // Store current state.
147 cairo_save(d);
148 const int margin_left =
150 const int margin_top =
152 const int margin_right =
154 const int margin_bottom =
156 const int left =
158 const int right =
160 const int top =
162 const int bottom =
164 int radius_bl = distance_get_pixel(wid->border_radius.left,
166 int radius_tr = distance_get_pixel(wid->border_radius.right,
168 int radius_tl =
170 int radius_br = distance_get_pixel(wid->border_radius.bottom,
172
173 double vspace =
174 wid->h - margin_top - margin_bottom - top / 2.0 - bottom / 2.0;
175 double hspace =
176 wid->w - margin_left - margin_right - left / 2.0 - right / 2.0;
177 if ((radius_bl + radius_tl) > (vspace)) {
178 int j = ((vspace) / 2.0);
179 radius_bl = MIN(radius_bl, j);
180 radius_tl = MIN(radius_tl, j);
181 }
182 if ((radius_br + radius_tr) > (vspace)) {
183 int j = ((vspace) / 2.0);
184 radius_br = MIN(radius_br, j);
185 radius_tr = MIN(radius_tr, j);
186 }
187 if ((radius_tl + radius_tr) > (hspace)) {
188 int j = ((hspace) / 2.0);
189 radius_tr = MIN(radius_tr, j);
190 radius_tl = MIN(radius_tl, j);
191 }
192 if ((radius_bl + radius_br) > (hspace)) {
193 int j = ((hspace) / 2.0);
194 radius_br = MIN(radius_br, j);
195 radius_bl = MIN(radius_bl, j);
196 }
197
198 // Background painting.
199 // Set new x/y position.
200 cairo_translate(d, wid->x, wid->y);
201 cairo_set_line_width(d, 0);
202
203 // Outer outline outlines
204 double x1, y1, x2, y2;
205 x1 = margin_left + left / 2.0, y1 = margin_top + top / 2.0,
206 x2 = wid->w - margin_right - right / 2.0,
207 y2 = wid->h - margin_bottom - bottom / 2.0;
208
209 if (radius_tl > 0) {
210 cairo_move_to(d, x1, y1 + radius_tl);
211 cairo_arc(d, x1 + radius_tl, y1 + radius_tl, radius_tl, -1.0 * G_PI,
212 -G_PI_2);
213 } else {
214 cairo_move_to(d, x1, y1);
215 }
216 if (radius_tr > 0) {
217 cairo_line_to(d, x2 - radius_tr, y1);
218 cairo_arc(d, x2 - radius_tr, y1 + radius_tr, radius_tr, -G_PI_2,
219 0 * G_PI);
220 } else {
221 cairo_line_to(d, x2, y1);
222 }
223 if (radius_br > 0) {
224 cairo_line_to(d, x2, y2 - radius_br);
225 cairo_arc(d, x2 - radius_br, y2 - radius_br, radius_br, 0.0 * G_PI,
226 G_PI_2);
227 } else {
228 cairo_line_to(d, x2, y2);
229 }
230 if (radius_bl > 0) {
231 cairo_line_to(d, x1 + radius_bl, y2);
232 cairo_arc(d, x1 + radius_bl, y2 - radius_bl, radius_bl, G_PI_2,
233 1.0 * G_PI);
234 } else {
235 cairo_line_to(d, x1, y2);
236 }
237 cairo_close_path(d);
238
239 cairo_set_source_rgba(d, 1.0, 1.0, 1.0, 1.0);
240 rofi_theme_get_color(wid, "background-color", d);
241 cairo_fill_preserve(d);
242 if (rofi_theme_get_image(wid, "background-image", d)) {
243 cairo_fill_preserve(d);
244 }
245 cairo_clip(d);
246
247 wid->draw(wid, d);
248 wid->need_redraw = FALSE;
249
250 cairo_restore(d);
251
252 if (left != 0 || top != 0 || right != 0 || bottom != 0) {
253 cairo_save(d);
254 // cairo_set_operator(d, CAIRO_OPERATOR_ADD);
255 cairo_translate(d, wid->x, wid->y);
256 cairo_new_path(d);
257 rofi_theme_get_color(wid, "border-color", d);
258
259 // Calculate the different offsets for the corners.
260 double minof_tr = MIN(right / 2.0, top / 2.0);
261 double minof_tl = MIN(left / 2.0, top / 2.0);
262 double minof_br = MIN(right / 2.0, bottom / 2.0);
263 double minof_bl = MIN(left / 2.0, bottom / 2.0);
264 // Inner radius
265 double radius_inner_tl = radius_tl - minof_tl;
266 double radius_inner_tr = radius_tr - minof_tr;
267 double radius_inner_bl = radius_bl - minof_bl;
268 double radius_inner_br = radius_br - minof_br;
269
270 // Offsets of the different lines in each corner.
271 //
272 // | |
273 // ttl ttr
274 // | |
275 // -ltl-###############-rtr-
276 // $ $
277 // $ $
278 // -lbl-###############-rbr-
279 // | |
280 // bbl bbr
281 // | |
282 //
283 // The left and right part ($) start at thinkness top bottom when no
284 // radius
285 double offset_ltl =
286 (radius_inner_tl > 0) ? (left) + radius_inner_tl : left;
287 double offset_rtr =
288 (radius_inner_tr > 0) ? (right) + radius_inner_tr : right;
289 double offset_lbl =
290 (radius_inner_bl > 0) ? (left) + radius_inner_bl : left;
291 double offset_rbr =
292 (radius_inner_br > 0) ? (right) + radius_inner_br : right;
293 // The top and bottom part (#) go into the corner when no radius
294 double offset_ttl = (radius_inner_tl > 0) ? (top) + radius_inner_tl
295 : (radius_tl > 0) ? top
296 : 0;
297 double offset_ttr = (radius_inner_tr > 0) ? (top) + radius_inner_tr
298 : (radius_tr > 0) ? top
299 : 0;
300 double offset_bbl = (radius_inner_bl > 0) ? (bottom) + radius_inner_bl
301 : (radius_bl > 0) ? bottom
302 : 0;
303 double offset_bbr = (radius_inner_br > 0) ? (bottom) + radius_inner_br
304 : (radius_br > 0) ? bottom
305 : 0;
306
307 if (left > 0) {
308 cairo_set_line_width(d, left);
310 cairo_move_to(d, x1, margin_top + offset_ttl);
311 cairo_line_to(d, x1, wid->h - margin_bottom - offset_bbl);
312 cairo_stroke(d);
313 }
314 if (right > 0) {
315 cairo_set_line_width(d, right);
317 cairo_move_to(d, x2, margin_top + offset_ttr);
318 cairo_line_to(d, x2, wid->h - margin_bottom - offset_bbr);
319 cairo_stroke(d);
320 }
321 if (top > 0) {
322 cairo_set_line_width(d, top);
324 cairo_move_to(d, margin_left + offset_ltl, y1);
325 cairo_line_to(d, wid->w - margin_right - offset_rtr, y1);
326 cairo_stroke(d);
327 }
328 if (bottom > 0) {
329 cairo_set_line_width(d, bottom);
331 cairo_move_to(d, margin_left + offset_lbl, y2);
332 cairo_line_to(d, wid->w - margin_right - offset_rbr, y2);
333 cairo_stroke(d);
334 }
335 if (radius_tl > 0) {
336 double radius_outer = radius_tl + minof_tl;
337 cairo_arc(d, margin_left + radius_outer, margin_top + radius_outer,
338 radius_outer, -G_PI, -G_PI_2);
339 cairo_line_to(d, margin_left + offset_ltl, margin_top);
340 cairo_line_to(d, margin_left + offset_ltl, margin_top + top);
341 if (radius_inner_tl > 0) {
342 cairo_arc_negative(d, margin_left + left + radius_inner_tl,
343 margin_top + top + radius_inner_tl,
344 radius_inner_tl, -G_PI_2, G_PI);
345 cairo_line_to(d, margin_left + left, margin_top + offset_ttl);
346 }
347 cairo_line_to(d, margin_left, margin_top + offset_ttl);
348 cairo_close_path(d);
349 cairo_fill(d);
350 }
351 if (radius_tr > 0) {
352 double radius_outer = radius_tr + minof_tr;
353 cairo_arc(d, wid->w - margin_right - radius_outer,
354 margin_top + radius_outer, radius_outer, -G_PI_2, 0);
355 cairo_line_to(d, wid->w - margin_right, margin_top + offset_ttr);
356 cairo_line_to(d, wid->w - margin_right - right,
357 margin_top + offset_ttr);
358 if (radius_inner_tr > 0) {
359 cairo_arc_negative(d, wid->w - margin_right - right - radius_inner_tr,
360 margin_top + top + radius_inner_tr,
361 radius_inner_tr, 0, -G_PI_2);
362 cairo_line_to(d, wid->w - margin_right - offset_rtr,
363 margin_top + top);
364 }
365 cairo_line_to(d, wid->w - margin_right - offset_rtr, margin_top);
366 cairo_close_path(d);
367 cairo_fill(d);
368 }
369 if (radius_br > 0) {
370 double radius_outer = radius_br + minof_br;
371 cairo_arc(d, wid->w - margin_right - radius_outer,
372 wid->h - margin_bottom - radius_outer, radius_outer, 0.0,
373 G_PI_2);
374 cairo_line_to(d, wid->w - margin_right - offset_rbr,
375 wid->h - margin_bottom);
376 cairo_line_to(d, wid->w - margin_right - offset_rbr,
377 wid->h - margin_bottom - bottom);
378 if (radius_inner_br > 0) {
379 cairo_arc_negative(d, wid->w - margin_right - right - radius_inner_br,
380 wid->h - margin_bottom - bottom - radius_inner_br,
381 radius_inner_br, G_PI_2, 0.0);
382 cairo_line_to(d, wid->w - margin_right - right,
383 wid->h - margin_bottom - offset_bbr);
384 }
385 cairo_line_to(d, wid->w - margin_right,
386 wid->h - margin_bottom - offset_bbr);
387 cairo_close_path(d);
388 cairo_fill(d);
389 }
390 if (radius_bl > 0) {
391 double radius_outer = radius_bl + minof_bl;
392 cairo_arc(d, margin_left + radius_outer,
393 wid->h - margin_bottom - radius_outer, radius_outer, G_PI_2,
394 G_PI);
395 cairo_line_to(d, margin_left, wid->h - margin_bottom - offset_bbl);
396 cairo_line_to(d, margin_left + left,
397 wid->h - margin_bottom - offset_bbl);
398 if (radius_inner_bl > 0) {
399 cairo_arc_negative(d, margin_left + left + radius_inner_bl,
400 wid->h - margin_bottom - bottom - radius_inner_bl,
401 radius_inner_bl, G_PI, G_PI_2);
402 cairo_line_to(d, margin_left + offset_lbl,
403 wid->h - margin_bottom - bottom);
404 }
405 cairo_line_to(d, margin_left + offset_lbl, wid->h - margin_bottom);
406 cairo_close_path(d);
407
408 cairo_fill(d);
409 }
410 cairo_restore(d);
411 }
412 }
413}
414
415void widget_free(widget *wid) {
416 if (wid == NULL) {
417 return;
418 }
419 if (wid->name != NULL) {
420 g_free(wid->name);
421 }
422 if (wid->free != NULL) {
423 wid->free(wid);
424 }
425}
426
428 if (wid == NULL) {
429 return 0;
430 }
431 if (wid->get_height == NULL) {
432 return wid->h;
433 }
434 return wid->get_height(wid);
435}
437 if (wid == NULL) {
438 return 0;
439 }
440 if (wid->get_width == NULL) {
441 return wid->w;
442 }
443 return wid->get_width(wid);
444}
446 if (wid == NULL) {
447 return 0;
448 }
449 return wid->x;
450}
452 if (wid == NULL) {
453 return 0;
454 }
455 return wid->y;
456}
457
458void widget_xy_to_relative(widget *wid, gint *x, gint *y) {
459 *x -= wid->x;
460 *y -= wid->y;
461 if (wid->parent == NULL) {
462 return;
463 }
464 widget_xy_to_relative(wid->parent, x, y);
465}
466
468 if (wid == NULL) {
469 return;
470 }
471 // When (desired )size of wid changes.
472 if (wid->update != NULL) {
473 wid->update(wid);
474 }
475}
476
478 if (wid == NULL) {
479 return;
480 }
481 widget *iter = wid;
482 // Find toplevel widget.
483 while (iter->parent != NULL) {
484 iter->need_redraw = TRUE;
485 iter = iter->parent;
486 }
487 iter->need_redraw = TRUE;
488}
489
491 if (wid == NULL) {
492 return FALSE;
493 }
494 if (!wid->enabled) {
495 return FALSE;
496 }
497 return wid->need_redraw;
498}
499
500widget *widget_find_mouse_target(widget *wid, WidgetType type, gint x, gint y) {
501 if (wid == NULL) {
502 return NULL;
503 }
504
505 if (wid->find_mouse_target != NULL) {
506 widget *target = wid->find_mouse_target(wid, type, x, y);
507 if (target != NULL) {
508 return target;
509 }
510 }
511
512 if (wid->type == type || type == WIDGET_TYPE_UNKNOWN) {
513 return wid;
514 }
515
516 return NULL;
517}
518
520 G_GNUC_UNUSED guint action,
521 G_GNUC_UNUSED gint x,
522 G_GNUC_UNUSED gint y) {
523 if (wid == NULL) {
524 return FALSE;
525 }
526 if (wid->trigger_action == NULL) {
527 return FALSE;
528 }
529 /*
530 * TODO: We should probably add a check_action callback to the widgets
531 * to do extra checks
532 */
534}
535
537 gint x, gint y) {
538 if (wid == NULL) {
539 return FALSE;
540 }
541 if (wid->trigger_action == NULL) {
542 return FALSE;
543 }
544 return wid->trigger_action(wid, action, x, y, wid->trigger_action_cb_data);
545}
546
548 void *cb_data) {
549 if (wid == NULL) {
550 return;
551 }
552 wid->trigger_action = cb;
553 wid->trigger_action_cb_data = cb_data;
554}
555
556gboolean widget_motion_notify(widget *wid, gint x, gint y) {
557 if (wid == NULL) {
558 return FALSE;
559 }
560 if (wid->motion_notify == NULL) {
561 return FALSE;
562 }
563 return wid->motion_notify(wid, x, y);
564}
565
567 if (wid == NULL) {
568 return 0;
569 }
570 int distance =
574 return distance;
575}
577 if (wid == NULL) {
578 return 0;
579 }
580 int distance =
582 distance +=
584 distance +=
586 return distance;
587}
589 if (wid == NULL) {
590 return 0;
591 }
592 int distance =
596 return distance;
597}
599 if (wid == NULL) {
600 return 0;
601 }
602 int distance =
606 return distance;
607}
608
610 int width = wid->w;
611 width -= widget_padding_get_left(wid);
612 width -= widget_padding_get_right(wid);
613 return width;
614}
616 int height = wid->h;
617 height -= widget_padding_get_top(wid);
618 height -= widget_padding_get_bottom(wid);
619 return height;
620}
622 int height = 0;
623 height += widget_padding_get_top(wid);
624 height += widget_padding_get_bottom(wid);
625 return height;
626}
628 int width = 0;
629 width += widget_padding_get_left(wid);
630 width += widget_padding_get_right(wid);
631 return width;
632}
633
634int widget_get_desired_height(widget *wid, const int width) {
635 if (wid == NULL) {
636 return 0;
637 }
638 if (wid->get_desired_height == NULL) {
639 return wid->h;
640 }
641 return wid->get_desired_height(wid, width);
642}
643int widget_get_desired_width(widget *wid, const int height) {
644 if (wid == NULL) {
645 return 0;
646 }
647 if (wid->get_desired_width == NULL) {
648 return wid->w;
649 }
650 return wid->get_desired_width(wid, height);
651}
652
654 if (wid == NULL) {
655 return 0;
656 }
657 int retv = wid->x;
658 if (wid->parent != NULL) {
659 retv += widget_get_absolute_xpos(wid->parent);
660 }
661 return retv;
662}
664 if (wid == NULL) {
665 return 0;
666 }
667 int retv = wid->y;
668 if (wid->parent != NULL) {
669 retv += widget_get_absolute_ypos(wid->parent);
670 }
671 return retv;
672}
WidgetTriggerActionResult widget_trigger_action(widget *wid, guint action, gint x, gint y)
Definition widget.c:536
void widget_queue_redraw(widget *wid)
Definition widget.c:477
void widget_move(widget *wid, short x, short y)
Definition widget.c:102
void widget_free(widget *wid)
Definition widget.c:415
void widget_draw(widget *wid, cairo_t *d)
Definition widget.c:135
int widget_get_width(widget *wid)
Definition widget.c:436
int widget_get_height(widget *wid)
Definition widget.c:427
int widget_get_y_pos(widget *wid)
Definition widget.c:451
void widget_update(widget *wid)
Definition widget.c:467
void widget_set_type(widget *wid, WidgetType type)
Definition widget.c:109
WidgetType
Definition widget.h:56
void widget_set_enabled(widget *wid, gboolean enabled)
Definition widget.c:123
int widget_get_desired_width(widget *wid, const int height)
Definition widget.c:643
int widget_get_absolute_ypos(widget *wid)
Definition widget.c:663
int widget_get_x_pos(widget *wid)
Definition widget.c:445
WidgetTriggerActionResult(* widget_trigger_action_cb)(widget *wid, guint action, gint x, gint y, void *user_data)
Definition widget.h:113
int widget_get_absolute_xpos(widget *wid)
Definition widget.c:653
void widget_resize(widget *wid, short w, short h)
Definition widget.c:87
WidgetTriggerActionResult
Definition widget.h:76
WidgetTriggerActionResult widget_check_action(widget *wid, G_GNUC_UNUSED guint action, G_GNUC_UNUSED gint x, G_GNUC_UNUSED gint y)
Definition widget.c:519
void widget_set_trigger_action_handler(widget *wid, widget_trigger_action_cb cb, void *cb_data)
Definition widget.c:547
int widget_get_desired_height(widget *wid, const int width)
Definition widget.c:634
gboolean widget_motion_notify(widget *wid, gint x, gint y)
Definition widget.c:556
void widget_xy_to_relative(widget *wid, gint *x, gint *y)
Definition widget.c:458
gboolean widget_need_redraw(widget *wid)
Definition widget.c:490
gboolean widget_enabled(widget *wid)
Definition widget.c:116
int widget_intersect(const widget *wid, int x, int y)
Definition widget.c:75
widget * widget_find_mouse_target(widget *wid, WidgetType type, gint x, gint y)
Definition widget.c:500
@ WIDGET_TYPE_UNKNOWN
Definition widget.h:58
@ WIDGET_TRIGGER_ACTION_RESULT_HANDLED
Definition widget.h:80
@ ROFI_ORIENTATION_HORIZONTAL
Definition rofi-types.h:141
@ ROFI_ORIENTATION_VERTICAL
Definition rofi-types.h:140
@ ROFI_CURSOR_DEFAULT
Definition rofi-types.h:148
RofiDistance bottom
Definition rofi-types.h:210
RofiDistance top
Definition rofi-types.h:208
RofiDistance right
Definition rofi-types.h:209
RofiDistance left
Definition rofi-types.h:211
void(* free)(struct _widget *widget)
void(* set_state)(struct _widget *, const char *)
const char * state
RofiPadding border
widget_find_mouse_target_cb find_mouse_target
gboolean enabled
gboolean need_redraw
widget_trigger_action_cb trigger_action
void * trigger_action_cb_data
RofiPadding padding
int(* get_desired_width)(struct _widget *, const int height)
int(* get_width)(struct _widget *)
RofiPadding margin
RofiPadding border_radius
RofiPadding def_border_radius
int(* get_height)(struct _widget *)
int(* get_desired_height)(struct _widget *, const int width)
RofiPadding def_margin
RofiCursorType cursor_type
RofiPadding def_border
struct _widget * parent
void(* update)(struct _widget *)
RofiPadding def_padding
void(* draw)(struct _widget *widget, cairo_t *draw)
gboolean(* motion_notify)(struct _widget *, gint x, gint y)
void(* resize)(struct _widget *, short, short)
WidgetType type
int distance_get_pixel(RofiDistance d, RofiOrientation ori)
Definition theme.c:1405
gboolean rofi_theme_get_image(const widget *wid, const char *property, cairo_t *d)
Definition theme.c:1173
int rofi_theme_get_boolean(const widget *wid, const char *property, int def)
Definition theme.c:901
RofiCursorType rofi_theme_get_cursor_type(const widget *wid, const char *property, RofiCursorType def)
Definition theme.c:960
RofiPadding rofi_theme_get_padding(const widget *wid, const char *property, RofiPadding pad)
Definition theme.c:1207
void rofi_theme_get_color(const widget *wid, const char *property, cairo_t *d)
Definition theme.c:1065
void distance_get_linestyle(RofiDistance d, cairo_t *draw)
Definition theme.c:1409
#define WIDGET_PADDING_INIT
int widget_padding_get_remaining_width(const widget *wid)
Definition widget.c:609
void widget_set_state(widget *wid, const char *state)
Definition widget.c:58
void widget_init(widget *wid, widget *parent, WidgetType type, const char *name)
Definition widget.c:35
int widget_padding_get_padding_width(const widget *wid)
Definition widget.c:627
int widget_padding_get_left(const widget *wid)
Definition widget.c:566
int widget_padding_get_right(const widget *wid)
Definition widget.c:576
int widget_padding_get_padding_height(const widget *wid)
Definition widget.c:621
int widget_padding_get_top(const widget *wid)
Definition widget.c:588
int widget_padding_get_bottom(const widget *wid)
Definition widget.c:598
int widget_padding_get_remaining_height(const widget *wid)
Definition widget.c:615