rofi  1.7.0
widget.c
Go to the documentation of this file.
1 /*
2  * rofi
3  *
4  * MIT/X11 License
5  * Copyright © 2013-2021 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 
28 #include "widgets/widget.h"
29 #include "theme.h"
31 #include <glib.h>
32 #include <math.h>
33 
35 #define WIDGET_DEFAULT_PADDING 0
37 #define WIDGET_PADDING_INIT \
38  { \
39  {WIDGET_DEFAULT_PADDING, ROFI_PU_PX, ROFI_DISTANCE_MODIFIER_NONE, NULL, \
40  NULL}, \
41  ROFI_HL_SOLID \
42  }
43 
44 void widget_init(widget *wid, widget *parent, WidgetType type,
45  const char *name) {
46  wid->type = type;
47  wid->parent = parent;
48  wid->name = g_strdup(name);
53  wid->def_border_radius =
58 
59  wid->padding = rofi_theme_get_padding(wid, "padding", wid->def_padding);
60  wid->border = rofi_theme_get_padding(wid, "border", wid->def_border);
61  wid->border_radius =
62  rofi_theme_get_padding(wid, "border-radius", wid->def_border_radius);
63  wid->margin = rofi_theme_get_padding(wid, "margin", wid->def_margin);
64 
65  wid->cursor_type =
67 
68  // enabled by default
69  wid->enabled = rofi_theme_get_boolean(wid, "enabled", TRUE);
70 }
71 
72 void widget_set_state(widget *widget, const char *state) {
73  if (widget == NULL) {
74  return;
75  }
76  if (g_strcmp0(widget->state, state)) {
77  widget->state = state;
78  // Update border.
79  widget->border =
83  if (widget->set_state != NULL) {
84  widget->set_state(widget, state);
85  }
87  }
88 }
89 
90 int widget_intersect(const widget *widget, int x, int y) {
91  if (widget == NULL) {
92  return FALSE;
93  }
94 
95  if (x >= (widget->x) && x < (widget->x + widget->w) && y >= (widget->y) &&
96  y < (widget->y + widget->h)) {
97  return TRUE;
98  }
99  return FALSE;
100 }
101 
102 void widget_resize(widget *widget, short w, short h) {
103  if (widget == NULL) {
104  return;
105  }
106  if (widget->resize != NULL) {
107  if (widget->w != w || widget->h != h) {
108  widget->resize(widget, w, h);
109  }
110  } else {
111  widget->w = w;
112  widget->h = h;
113  }
114  // On a resize we always want to update.
116 }
117 void widget_move(widget *widget, short x, short y) {
118  if (widget == NULL) {
119  return;
120  }
121  widget->x = x;
122  widget->y = y;
123 }
125  if (widget == NULL) {
126  return;
127  }
128  widget->type = type;
129 }
130 
132  if (widget == NULL) {
133  return WIDGET_TYPE_UNKNOWN;
134  }
135  return widget->type;
136 }
137 
139  if (widget == NULL) {
140  return FALSE;
141  }
142  return widget->enabled;
143 }
144 
145 void widget_set_enabled(widget *widget, gboolean enabled) {
146  if (widget == NULL) {
147  return;
148  }
149  if (widget->enabled != enabled) {
150  widget->enabled = enabled;
154  }
155 }
156 
157 void widget_draw(widget *widget, cairo_t *d) {
158  if (widget == NULL) {
159  return;
160  }
161  // Check if enabled and if draw is implemented.
162  if (widget->enabled && widget->draw) {
163  // Don't draw if there is no space.
164  if (widget->h < 1 || widget->w < 1) {
165  widget->need_redraw = FALSE;
166  return;
167  }
168  // Store current state.
169  cairo_save(d);
170  const int margin_left =
172  const int margin_top =
174  const int margin_right =
176  const int margin_bottom =
178  const int left =
180  const int right =
182  const int top =
184  const int bottom =
186  int radius_bl = distance_get_pixel(widget->border_radius.left,
188  int radius_tr = distance_get_pixel(widget->border_radius.right,
190  int radius_tl = distance_get_pixel(widget->border_radius.top,
194 
195  double vspace =
196  widget->h - margin_top - margin_bottom - top / 2.0 - bottom / 2.0;
197  double hspace =
198  widget->w - margin_left - margin_right - left / 2.0 - right / 2.0;
199  if ((radius_bl + radius_tl) > (vspace)) {
200  int j = ((vspace) / 2.0);
201  radius_bl = MIN(radius_bl, j);
202  radius_tl = MIN(radius_tl, j);
203  }
204  if ((radius_br + radius_tr) > (vspace)) {
205  int j = ((vspace) / 2.0);
206  radius_br = MIN(radius_br, j);
207  radius_tr = MIN(radius_tr, j);
208  }
209  if ((radius_tl + radius_tr) > (hspace)) {
210  int j = ((hspace) / 2.0);
211  radius_tr = MIN(radius_tr, j);
212  radius_tl = MIN(radius_tl, j);
213  }
214  if ((radius_bl + radius_br) > (hspace)) {
215  int j = ((hspace) / 2.0);
216  radius_br = MIN(radius_br, j);
217  radius_bl = MIN(radius_bl, j);
218  }
219 
220  // Background painting.
221  // Set new x/y position.
222  cairo_translate(d, widget->x, widget->y);
223  cairo_set_line_width(d, 0);
224 
225  // Outer outline outlines
226  double x1, y1, x2, y2;
227  x1 = margin_left + left / 2.0, y1 = margin_top + top / 2.0,
228  x2 = widget->w - margin_right - right / 2.0,
229  y2 = widget->h - margin_bottom - bottom / 2.0;
230 
231  if (radius_tl > 0) {
232  cairo_move_to(d, x1, y1 + radius_tl);
233  cairo_arc(d, x1 + radius_tl, y1 + radius_tl, radius_tl, -1.0 * G_PI,
234  -G_PI_2);
235  } else {
236  cairo_move_to(d, x1, y1);
237  }
238  if (radius_tr > 0) {
239  cairo_line_to(d, x2 - radius_tr, y1);
240  cairo_arc(d, x2 - radius_tr, y1 + radius_tr, radius_tr, -G_PI_2,
241  0 * G_PI);
242  } else {
243  cairo_line_to(d, x2, y1);
244  }
245  if (radius_br > 0) {
246  cairo_line_to(d, x2, y2 - radius_br);
247  cairo_arc(d, x2 - radius_br, y2 - radius_br, radius_br, 0.0 * G_PI,
248  G_PI_2);
249  } else {
250  cairo_line_to(d, x2, y2);
251  }
252  if (radius_bl > 0) {
253  cairo_line_to(d, x1 + radius_bl, y2);
254  cairo_arc(d, x1 + radius_bl, y2 - radius_bl, radius_bl, G_PI_2,
255  1.0 * G_PI);
256  } else {
257  cairo_line_to(d, x1, y2);
258  }
259  cairo_close_path(d);
260 
261  cairo_set_source_rgba(d, 1.0, 1.0, 1.0, 1.0);
262  rofi_theme_get_color(widget, "background-color", d);
263  cairo_fill_preserve(d);
264  if (rofi_theme_get_image(widget, "background-image", d)) {
265  cairo_fill_preserve(d);
266  }
267  cairo_clip(d);
268 
269  widget->draw(widget, d);
270  widget->need_redraw = FALSE;
271 
272  cairo_restore(d);
273 
274  if (left != 0 || top != 0 || right != 0 || bottom != 0) {
275  cairo_save(d);
276  cairo_translate(d, widget->x, widget->y);
277  cairo_new_path(d);
278  rofi_theme_get_color(widget, "border-color", d);
279 
280  // Calculate the different offsets for the corners.
281  double minof_tr = MIN(right / 2.0, top / 2.0);
282  double minof_tl = MIN(left / 2.0, top / 2.0);
283  double minof_br = MIN(right / 2.0, bottom / 2.0);
284  double minof_bl = MIN(left / 2.0, bottom / 2.0);
285  // Inner radius
286  double radius_inner_tl = radius_tl - minof_tl;
287  double radius_inner_tr = radius_tr - minof_tr;
288  double radius_inner_bl = radius_bl - minof_bl;
289  double radius_inner_br = radius_br - minof_br;
290 
291  // Offsets of the different lines in each corner.
292  //
293  // | |
294  // ttl ttr
295  // | |
296  // -ltl-###############-rtr-
297  // $ $
298  // $ $
299  // -lbl-###############-rbr-
300  // | |
301  // bbl bbr
302  // | |
303  //
304  // The left and right part ($) start at thinkness top bottom when no
305  // radius
306  double offset_ltl =
307  (radius_inner_tl > 0) ? (left) + radius_inner_tl : left;
308  double offset_rtr =
309  (radius_inner_tr > 0) ? (right) + radius_inner_tr : right;
310  double offset_lbl =
311  (radius_inner_bl > 0) ? (left) + radius_inner_bl : left;
312  double offset_rbr =
313  (radius_inner_br > 0) ? (right) + radius_inner_br : right;
314  // The top and bottom part (#) go into the corner when no radius
315  double offset_ttl = (radius_inner_tl > 0) ? (top) + radius_inner_tl
316  : (radius_tl > 0) ? top
317  : 0;
318  double offset_ttr = (radius_inner_tr > 0) ? (top) + radius_inner_tr
319  : (radius_tr > 0) ? top
320  : 0;
321  double offset_bbl = (radius_inner_bl > 0) ? (bottom) + radius_inner_bl
322  : (radius_bl > 0) ? bottom
323  : 0;
324  double offset_bbr = (radius_inner_br > 0) ? (bottom) + radius_inner_br
325  : (radius_br > 0) ? bottom
326  : 0;
327 
328  if (left > 0) {
329  cairo_set_line_width(d, left);
331  cairo_move_to(d, x1, margin_top + offset_ttl);
332  cairo_line_to(d, x1, widget->h - margin_bottom - offset_bbl);
333  cairo_stroke(d);
334  }
335  if (right > 0) {
336  cairo_set_line_width(d, right);
338  cairo_move_to(d, x2, margin_top + offset_ttr);
339  cairo_line_to(d, x2, widget->h - margin_bottom - offset_bbr);
340  cairo_stroke(d);
341  }
342  if (top > 0) {
343  cairo_set_line_width(d, top);
345  cairo_move_to(d, margin_left + offset_ltl, y1);
346  cairo_line_to(d, widget->w - margin_right - offset_rtr, y1);
347  cairo_stroke(d);
348  }
349  if (bottom > 0) {
350  cairo_set_line_width(d, bottom);
352  cairo_move_to(d, margin_left + offset_lbl, y2);
353  cairo_line_to(d, widget->w - margin_right - offset_rbr, y2);
354  cairo_stroke(d);
355  }
356  if (radius_tl > 0) {
358  cairo_set_line_width(d, 0);
359  double radius_outer = radius_tl + minof_tl;
360  cairo_arc(d, margin_left + radius_outer, margin_top + radius_outer,
361  radius_outer, -G_PI, -G_PI_2);
362  cairo_line_to(d, margin_left + offset_ltl, margin_top);
363  cairo_line_to(d, margin_left + offset_ltl, margin_top + top);
364  if (radius_inner_tl > 0) {
365  cairo_arc_negative(d, margin_left + left + radius_inner_tl,
366  margin_top + top + radius_inner_tl,
367  radius_inner_tl, -G_PI_2, G_PI);
368  cairo_line_to(d, margin_left + left, margin_top + offset_ttl);
369  }
370  cairo_line_to(d, margin_left, margin_top + offset_ttl);
371  cairo_close_path(d);
372  cairo_fill(d);
373  }
374  if (radius_tr > 0) {
376  cairo_set_line_width(d, 0);
377  double radius_outer = radius_tr + minof_tr;
378  cairo_arc(d, widget->w - margin_right - radius_outer,
379  margin_top + radius_outer, radius_outer, -G_PI_2, 0);
380  cairo_line_to(d, widget->w - margin_right, margin_top + offset_ttr);
381  cairo_line_to(d, widget->w - margin_right - right,
382  margin_top + offset_ttr);
383  if (radius_inner_tr > 0) {
384  cairo_arc_negative(
385  d, widget->w - margin_right - right - radius_inner_tr,
386  margin_top + top + radius_inner_tr, radius_inner_tr, 0, -G_PI_2);
387  cairo_line_to(d, widget->w - margin_right - offset_rtr,
388  margin_top + top);
389  }
390  cairo_line_to(d, widget->w - margin_right - offset_rtr, margin_top);
391  cairo_close_path(d);
392  cairo_fill(d);
393  }
394  if (radius_br > 0) {
396  cairo_set_line_width(d, 1);
397  double radius_outer = radius_br + minof_br;
398  cairo_arc(d, widget->w - margin_right - radius_outer,
399  widget->h - margin_bottom - radius_outer, radius_outer, 0.0,
400  G_PI_2);
401  cairo_line_to(d, widget->w - margin_right - offset_rbr,
402  widget->h - margin_bottom);
403  cairo_line_to(d, widget->w - margin_right - offset_rbr,
404  widget->h - margin_bottom - bottom);
405  if (radius_inner_br > 0) {
406  cairo_arc_negative(
407  d, widget->w - margin_right - right - radius_inner_br,
408  widget->h - margin_bottom - bottom - radius_inner_br,
409  radius_inner_br, G_PI_2, 0.0);
410  cairo_line_to(d, widget->w - margin_right - right,
411  widget->h - margin_bottom - offset_bbr);
412  }
413  cairo_line_to(d, widget->w - margin_right,
414  widget->h - margin_bottom - offset_bbr);
415  cairo_close_path(d);
416  cairo_fill(d);
417  }
418  if (radius_bl > 0) {
420  cairo_set_line_width(d, 1.0);
421  double radius_outer = radius_bl + minof_bl;
422  cairo_arc(d, margin_left + radius_outer,
423  widget->h - margin_bottom - radius_outer, radius_outer,
424  G_PI_2, G_PI);
425  cairo_line_to(d, margin_left, widget->h - margin_bottom - offset_bbl);
426  cairo_line_to(d, margin_left + left,
427  widget->h - margin_bottom - offset_bbl);
428  if (radius_inner_bl > 0) {
429  cairo_arc_negative(d, margin_left + left + radius_inner_bl,
430  widget->h - margin_bottom - bottom -
431  radius_inner_bl,
432  radius_inner_bl, G_PI, G_PI_2);
433  cairo_line_to(d, margin_left + offset_lbl,
434  widget->h - margin_bottom - bottom);
435  }
436  cairo_line_to(d, margin_left + offset_lbl, widget->h - margin_bottom);
437  cairo_close_path(d);
438 
439  cairo_fill(d);
440  }
441 
442  cairo_restore(d);
443  }
444  }
445 }
446 
447 void widget_free(widget *wid) {
448  if (wid == NULL) {
449  return;
450  }
451  if (wid->name != NULL) {
452  g_free(wid->name);
453  }
454  if (wid->free != NULL) {
455  wid->free(wid);
456  }
457 }
458 
460  if (widget == NULL) {
461  return 0;
462  }
463  if (widget->get_height == NULL) {
464  return widget->h;
465  }
466  return widget->get_height(widget);
467 }
469  if (widget == NULL) {
470  return 0;
471  }
472  if (widget->get_width == NULL) {
473  return widget->w;
474  }
475  return widget->get_width(widget);
476 }
478  if (widget == NULL) {
479  return 0;
480  }
481  return widget->x;
482 }
484  if (widget == NULL) {
485  return 0;
486  }
487  return widget->y;
488 }
489 
490 void widget_xy_to_relative(widget *widget, gint *x, gint *y) {
491  *x -= widget->x;
492  *y -= widget->y;
493  if (widget->parent == NULL) {
494  return;
495  }
497 }
498 
500  if (widget == NULL) {
501  return;
502  }
503  // When (desired )size of widget changes.
504  if (widget->update != NULL) {
505  widget->update(widget);
506  }
507 }
508 
510  if (wid == NULL) {
511  return;
512  }
513  widget *iter = wid;
514  // Find toplevel widget.
515  while (iter->parent != NULL) {
516  iter->need_redraw = TRUE;
517  iter = iter->parent;
518  }
519  iter->need_redraw = TRUE;
520 }
521 
522 gboolean widget_need_redraw(widget *wid) {
523  if (wid == NULL) {
524  return FALSE;
525  }
526  if (!wid->enabled) {
527  return FALSE;
528  }
529  return wid->need_redraw;
530 }
531 
532 widget *widget_find_mouse_target(widget *wid, WidgetType type, gint x, gint y) {
533  if (wid == NULL) {
534  return NULL;
535  }
536 
537  if (wid->find_mouse_target != NULL) {
538  widget *target = wid->find_mouse_target(wid, type, x, y);
539  if (target != NULL) {
540  return target;
541  }
542  }
543 
544  if (wid->type == type || type == WIDGET_TYPE_UNKNOWN) {
545  return wid;
546  }
547 
548  return NULL;
549 }
550 
552  gint x, gint y) {
553  if (wid == NULL) {
554  return FALSE;
555  }
556  if (wid->trigger_action == NULL) {
557  return FALSE;
558  }
559  return wid->trigger_action(wid, action, x, y, wid->trigger_action_cb_data);
560 }
561 
563  void *cb_data) {
564  if (wid == NULL) {
565  return;
566  }
567  wid->trigger_action = cb;
568  wid->trigger_action_cb_data = cb_data;
569 }
570 
571 gboolean widget_motion_notify(widget *wid, gint x, gint y) {
572  if (wid == NULL) {
573  return FALSE;
574  }
575  if (wid->motion_notify == NULL) {
576  return FALSE;
577  }
578  return wid->motion_notify(wid, x, y);
579 }
580 
582  if (wid == NULL) {
583  return 0;
584  }
585  int distance =
589  return distance;
590 }
592  if (wid == NULL) {
593  return 0;
594  }
595  int distance =
597  distance +=
599  distance +=
601  return distance;
602 }
604  if (wid == NULL) {
605  return 0;
606  }
607  int distance =
611  return distance;
612 }
614  if (wid == NULL) {
615  return 0;
616  }
617  int distance =
621  return distance;
622 }
623 
625  int width = wid->w;
626  width -= widget_padding_get_left(wid);
627  width -= widget_padding_get_right(wid);
628  return width;
629 }
631  int height = wid->h;
632  height -= widget_padding_get_top(wid);
633  height -= widget_padding_get_bottom(wid);
634  return height;
635 }
637  int height = 0;
638  height += widget_padding_get_top(wid);
639  height += widget_padding_get_bottom(wid);
640  return height;
641 }
643  int width = 0;
644  width += widget_padding_get_left(wid);
645  width += widget_padding_get_right(wid);
646  return width;
647 }
648 
650  if (wid == NULL) {
651  return 0;
652  }
653  if (wid->get_desired_height == NULL) {
654  return wid->h;
655  }
656  return wid->get_desired_height(wid);
657 }
659  if (wid == NULL) {
660  return 0;
661  }
662  if (wid->get_desired_width == NULL) {
663  return wid->w;
664  }
665  return wid->get_desired_width(wid);
666 }
667 
669  if (wid == NULL) {
670  return 0;
671  }
672  int retv = wid->x;
673  if (wid->parent != NULL) {
674  retv += widget_get_absolute_xpos(wid->parent);
675  }
676  return retv;
677 }
679  if (wid == NULL) {
680  return 0;
681  }
682  int retv = wid->y;
683  if (wid->parent != NULL) {
684  retv += widget_get_absolute_ypos(wid->parent);
685  }
686  return retv;
687 }
WidgetTriggerActionResult widget_trigger_action(widget *wid, guint action, gint x, gint y)
Definition: widget.c:551
void widget_queue_redraw(widget *wid)
Definition: widget.c:509
gboolean widget_enabled(widget *widget)
Definition: widget.c:138
int widget_get_width(widget *widget)
Definition: widget.c:468
int widget_get_desired_height(widget *wid)
Definition: widget.c:649
void widget_free(widget *wid)
Definition: widget.c:447
int widget_intersect(const widget *widget, int x, int y)
Definition: widget.c:90
int widget_get_height(widget *widget)
Definition: widget.c:459
void widget_resize(widget *widget, short w, short h)
Definition: widget.c:102
int widget_get_desired_width(widget *wid)
Definition: widget.c:658
WidgetType
Definition: widget.h:56
WidgetType widget_type(widget *widget)
Definition: widget.c:131
void widget_set_enabled(widget *widget, gboolean enabled)
Definition: widget.c:145
void widget_update(widget *widget)
Definition: widget.c:499
int widget_get_absolute_ypos(widget *wid)
Definition: widget.c:678
void widget_move(widget *widget, short x, short y)
Definition: widget.c:117
int widget_get_y_pos(widget *widget)
Definition: widget.c:483
int widget_get_absolute_xpos(widget *wid)
Definition: widget.c:668
void widget_draw(widget *widget, cairo_t *d)
Definition: widget.c:157
void widget_xy_to_relative(widget *widget, gint *x, gint *y)
Definition: widget.c:490
WidgetTriggerActionResult
Definition: widget.h:76
widget * widget_find_mouse_target(widget *wid, WidgetType type, gint x, gint y)
Definition: widget.c:532
void widget_set_type(widget *widget, WidgetType type)
Definition: widget.c:124
void widget_set_trigger_action_handler(widget *wid, widget_trigger_action_cb cb, void *cb_data)
Definition: widget.c:562
gboolean widget_motion_notify(widget *wid, gint x, gint y)
Definition: widget.c:571
WidgetTriggerActionResult(* widget_trigger_action_cb)(widget *widget, guint action, gint x, gint y, void *user_data)
Definition: widget.h:113
gboolean widget_need_redraw(widget *wid)
Definition: widget.c:522
int widget_get_x_pos(widget *widget)
Definition: widget.c:477
@ WIDGET_TYPE_UNKNOWN
Definition: widget.h:58
@ ROFI_ORIENTATION_HORIZONTAL
Definition: rofi-types.h:136
@ ROFI_ORIENTATION_VERTICAL
Definition: rofi-types.h:135
@ ROFI_CURSOR_DEFAULT
Definition: rofi-types.h:143
RofiDistance bottom
Definition: rofi-types.h:205
RofiDistance top
Definition: rofi-types.h:203
RofiDistance right
Definition: rofi-types.h:204
RofiDistance left
Definition: rofi-types.h:206
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_height)(struct _widget *)
int(* get_width)(struct _widget *)
RofiPadding margin
RofiPadding border_radius
RofiPadding def_border_radius
int(* get_height)(struct _widget *)
char * name
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)
int(* get_desired_width)(struct _widget *)
WidgetType type
RofiPadding rofi_theme_get_padding(const widget *widget, const char *property, RofiPadding pad)
Definition: theme.c:1142
gboolean rofi_theme_get_image(const widget *widget, const char *property, cairo_t *d)
Definition: theme.c:1107
int rofi_theme_get_boolean(const widget *widget, const char *property, int def)
Definition: theme.c:856
int distance_get_pixel(RofiDistance d, RofiOrientation ori)
Definition: theme.c:1282
RofiCursorType rofi_theme_get_cursor_type(const widget *widget, const char *property, RofiCursorType def)
Definition: theme.c:913
void rofi_theme_get_color(const widget *widget, const char *property, cairo_t *d)
Definition: theme.c:996
void distance_get_linestyle(RofiDistance d, cairo_t *draw)
Definition: theme.c:1286
int widget_padding_get_remaining_width(const widget *wid)
Definition: widget.c:624
void widget_init(widget *wid, widget *parent, WidgetType type, const char *name)
Definition: widget.c:44
void widget_set_state(widget *widget, const char *state)
Definition: widget.c:72
int widget_padding_get_padding_width(const widget *wid)
Definition: widget.c:642
int widget_padding_get_left(const widget *wid)
Definition: widget.c:581
int widget_padding_get_right(const widget *wid)
Definition: widget.c:591
int widget_padding_get_padding_height(const widget *wid)
Definition: widget.c:636
#define WIDGET_PADDING_INIT
Definition: widget.c:37
int widget_padding_get_top(const widget *wid)
Definition: widget.c:603
int widget_padding_get_bottom(const widget *wid)
Definition: widget.c:613
int widget_padding_get_remaining_height(const widget *wid)
Definition: widget.c:630