35 #define WIDGET_DEFAULT_PADDING 0
37 #define WIDGET_PADDING_INIT \
39 {WIDGET_DEFAULT_PADDING, ROFI_PU_PX, ROFI_DISTANCE_MODIFIER_NONE, NULL, \
48 wid->
name = g_strdup(name);
170 const int margin_left =
172 const int margin_top =
174 const int margin_right =
176 const int margin_bottom =
196 widget->
h - margin_top - margin_bottom - top / 2.0 - bottom / 2.0;
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);
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);
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);
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);
223 cairo_set_line_width(d, 0);
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;
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,
236 cairo_move_to(d, x1, y1);
239 cairo_line_to(d, x2 - radius_tr, y1);
240 cairo_arc(d, x2 - radius_tr, y1 + radius_tr, radius_tr, -G_PI_2,
243 cairo_line_to(d, x2, y1);
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,
250 cairo_line_to(d, x2, y2);
253 cairo_line_to(d, x1 + radius_bl, y2);
254 cairo_arc(d, x1 + radius_bl, y2 - radius_bl, radius_bl, G_PI_2,
257 cairo_line_to(d, x1, y2);
261 cairo_set_source_rgba(d, 1.0, 1.0, 1.0, 1.0);
263 cairo_fill_preserve(d);
265 cairo_fill_preserve(d);
274 if (left != 0 || top != 0 || right != 0 || bottom != 0) {
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);
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;
307 (radius_inner_tl > 0) ? (left) + radius_inner_tl : left;
309 (radius_inner_tr > 0) ? (right) + radius_inner_tr : right;
311 (radius_inner_bl > 0) ? (left) + radius_inner_bl : left;
313 (radius_inner_br > 0) ? (right) + radius_inner_br : right;
315 double offset_ttl = (radius_inner_tl > 0) ? (top) + radius_inner_tl
316 : (radius_tl > 0) ? top
318 double offset_ttr = (radius_inner_tr > 0) ? (top) + radius_inner_tr
319 : (radius_tr > 0) ? top
321 double offset_bbl = (radius_inner_bl > 0) ? (bottom) + radius_inner_bl
322 : (radius_bl > 0) ? bottom
324 double offset_bbr = (radius_inner_br > 0) ? (bottom) + radius_inner_br
325 : (radius_br > 0) ? bottom
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);
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);
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);
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);
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);
370 cairo_line_to(d, margin_left, margin_top + offset_ttl);
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) {
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,
390 cairo_line_to(d,
widget->
w - margin_right - offset_rtr, margin_top);
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,
401 cairo_line_to(d,
widget->
w - margin_right - offset_rbr,
403 cairo_line_to(d,
widget->
w - margin_right - offset_rbr,
404 widget->
h - margin_bottom - bottom);
405 if (radius_inner_br > 0) {
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);
413 cairo_line_to(d,
widget->
w - margin_right,
414 widget->
h - margin_bottom - offset_bbr);
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,
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 -
432 radius_inner_bl, G_PI, G_PI_2);
433 cairo_line_to(d, margin_left + offset_lbl,
434 widget->
h - margin_bottom - bottom);
436 cairo_line_to(d, margin_left + offset_lbl,
widget->
h - margin_bottom);
451 if (wid->
name != NULL) {
454 if (wid->
free != NULL) {
515 while (iter->
parent != NULL) {
539 if (target != NULL) {
673 if (wid->
parent != NULL) {
683 if (wid->
parent != NULL) {
@ ROFI_ORIENTATION_HORIZONTAL
@ ROFI_ORIENTATION_VERTICAL
RofiPadding rofi_theme_get_padding(const widget *widget, const char *property, RofiPadding pad)
gboolean rofi_theme_get_image(const widget *widget, const char *property, cairo_t *d)
int rofi_theme_get_boolean(const widget *widget, const char *property, int def)
int distance_get_pixel(RofiDistance d, RofiOrientation ori)
RofiCursorType rofi_theme_get_cursor_type(const widget *widget, const char *property, RofiCursorType def)
void rofi_theme_get_color(const widget *widget, const char *property, cairo_t *d)
void distance_get_linestyle(RofiDistance d, cairo_t *draw)