35 #define WIDGET_DEFAULT_PADDING 0
41 wid->
name = g_strdup ( name );
45 wid->
def_border = (
RofiPadding){ { 0,
ROFI_PU_PX,
ROFI_HL_SOLID }, { 0,
ROFI_PU_PX,
ROFI_HL_SOLID }, { 0,
ROFI_PU_PX,
ROFI_HL_SOLID }, { 0,
ROFI_PU_PX,
ROFI_HL_SOLID } };
46 wid->
def_border_radius = (
RofiPadding){ { 0,
ROFI_PU_PX,
ROFI_HL_SOLID }, { 0,
ROFI_PU_PX,
ROFI_HL_SOLID }, { 0,
ROFI_PU_PX,
ROFI_HL_SOLID }, { 0,
ROFI_PU_PX,
ROFI_HL_SOLID } };
47 wid->
def_margin = (
RofiPadding){ { 0,
ROFI_PU_PX,
ROFI_HL_SOLID }, { 0,
ROFI_PU_PX,
ROFI_HL_SOLID }, { 0,
ROFI_PU_PX,
ROFI_HL_SOLID }, { 0,
ROFI_PU_PX,
ROFI_HL_SOLID } };
166 double vspace =
widget->
h - margin_top - margin_bottom - top / 2.0 - bottom / 2.0;
167 double hspace =
widget->
w - margin_left - margin_right - left / 2.0 - right / 2.0;
168 if ( ( radius_bl + radius_tl ) > ( vspace ) ) {
169 int j = ( ( vspace ) / 2.0 );
170 radius_bl = MIN ( radius_bl, j );
171 radius_tl = MIN ( radius_tl, j );
173 if ( ( radius_br + radius_tr ) > ( vspace ) ) {
174 int j = ( ( vspace ) / 2.0 );
175 radius_br = MIN ( radius_br, j );
176 radius_tr = MIN ( radius_tr, j );
178 if ( ( radius_tl + radius_tr ) > ( hspace ) ) {
179 int j = ( ( hspace ) / 2.0 );
180 radius_tr = MIN ( radius_tr, j );
181 radius_tl = MIN ( radius_tl, j );
183 if ( ( radius_bl + radius_br ) > ( hspace ) ) {
184 int j = ( ( hspace ) / 2.0 );
185 radius_br = MIN ( radius_br, j );
186 radius_bl = MIN ( radius_bl, j );
192 cairo_set_line_width ( d, 0 );
194 cairo_move_to ( d, margin_left + radius_tl + left / 2.0, margin_top + radius_tl + top / 2.0 );
196 cairo_arc ( d, margin_left + radius_tl + left / 2.0, margin_top + radius_tl + top / 2.0, radius_tl, -1.0 * G_PI, -G_PI_2 );
198 cairo_line_to ( d,
widget->
w - margin_right - radius_tr - right / 2.0, margin_top + top / 2.0 );
200 cairo_arc ( d,
widget->
w - margin_right - radius_tr - right / 2.0, margin_top + radius_tr + top / 2.0, radius_tr, -G_PI_2, 0 * G_PI );
202 cairo_line_to ( d,
widget->
w - margin_right - right / 2.0,
widget->
h - margin_bottom - radius_br - bottom / 2.0 );
204 cairo_arc ( d,
widget->
w - margin_right - radius_br - right / 2.0,
widget->
h - margin_bottom - radius_br - bottom / 2.0, radius_br, 0.0 * G_PI, G_PI_2 );
206 cairo_line_to ( d, margin_left + radius_bl + left / 2.0,
widget->
h - margin_bottom - bottom / 2.0 );
208 cairo_arc ( d, margin_left + radius_bl + left / 2.0,
widget->
h - margin_bottom - radius_bl - bottom / 2.0, radius_bl, G_PI_2, 1.0 * G_PI );
210 cairo_line_to ( d, margin_left + left / 2.0, margin_top + radius_tl + top / 2.0 );
211 cairo_close_path ( d );
213 cairo_set_source_rgba ( d, 1.0, 1.0, 1.0, 1.0 );
215 cairo_fill_preserve ( d );
223 if ( left || top || right || bottom ) {
226 cairo_new_path ( d );
229 double minof_tr = MIN ( right / 2.0, top / 2.0 );
230 double minof_tl = MIN ( left / 2.0, top / 2.0 );
231 double minof_br = MIN ( right / 2.0, bottom / 2.0 );
232 double minof_bl = MIN ( left / 2.0, bottom / 2.0 );
234 double radius_inner_tl = radius_tl - minof_tl;
235 double radius_inner_tr = radius_tr - minof_tr;
236 double radius_inner_bl = radius_bl - minof_bl;
237 double radius_inner_br = radius_br - minof_br;
253 double offset_ltl = ( radius_inner_tl > 0 ) ? ( left ) + radius_inner_tl : left;
254 double offset_rtr = ( radius_inner_tr > 0 ) ? ( right ) + radius_inner_tr : right;
255 double offset_lbl = ( radius_inner_bl > 0 ) ? ( left ) + radius_inner_bl : left;
256 double offset_rbr = ( radius_inner_br > 0 ) ? ( right ) + radius_inner_br : right;
258 double offset_ttl = ( radius_inner_tl > 0 ) ? ( top ) + radius_inner_tl : ( radius_tl > 0 ) ? top : 0;
259 double offset_ttr = ( radius_inner_tr > 0 ) ? ( top ) + radius_inner_tr : ( radius_tr > 0 ) ? top : 0;
260 double offset_bbl = ( radius_inner_bl > 0 ) ? ( bottom ) + radius_inner_bl : ( radius_bl > 0 ) ? bottom : 0;
261 double offset_bbr = ( radius_inner_br > 0 ) ? ( bottom ) + radius_inner_br : ( radius_br > 0 ) ? bottom : 0;
264 cairo_set_line_width ( d, left );
266 cairo_move_to ( d, margin_left + ( left / 2.0 ), margin_top + offset_ttl );
267 cairo_line_to ( d, margin_left + left / 2.0,
widget->
h - margin_bottom - offset_bbl );
271 cairo_set_line_width ( d, right );
273 cairo_move_to ( d,
widget->
w - margin_right - right / 2.0, margin_top + offset_ttr );
274 cairo_line_to ( d,
widget->
w - margin_right - right / 2.0,
widget->
h - margin_bottom - offset_bbr );
278 cairo_set_line_width ( d, top );
280 cairo_move_to ( d, margin_left + offset_ltl, margin_top + top / 2.0 );
281 cairo_line_to ( d,
widget->
w - margin_right - offset_rtr, margin_top + top / 2.0 );
285 cairo_set_line_width ( d, bottom );
287 cairo_move_to ( d, margin_left + offset_lbl,
widget->
h - ( bottom / 2.0 ) - margin_bottom );
288 cairo_line_to ( d,
widget->
w - margin_right - offset_rbr,
widget->
h - bottom / 2.0 - margin_bottom );
291 if ( radius_tl > 0 ) {
293 cairo_set_line_width ( d, 0 );
294 double radius_outer = radius_tl + minof_tl;
295 cairo_arc ( d, margin_left + radius_outer, margin_top + radius_outer, radius_outer, -G_PI, -G_PI_2 );
296 cairo_line_to ( d, margin_left + offset_ltl, margin_top );
297 cairo_line_to ( d, margin_left + offset_ltl, margin_top + top );
298 if ( radius_inner_tl > 0 ) {
299 cairo_arc_negative ( d,
300 margin_left + left + radius_inner_tl,
301 margin_top + top + radius_inner_tl,
302 radius_inner_tl, -G_PI_2, G_PI );
303 cairo_line_to ( d, margin_left + left, margin_top + offset_ttl );
305 cairo_line_to ( d, margin_left, margin_top + offset_ttl );
306 cairo_close_path ( d );
309 if ( radius_tr > 0 ) {
311 cairo_set_line_width ( d, 0 );
312 double radius_outer = radius_tr + minof_tr;
313 cairo_arc ( d,
widget->
w - margin_right - radius_outer, margin_top + radius_outer, radius_outer, -G_PI_2, 0 );
314 cairo_line_to ( d,
widget->
w - margin_right, margin_top + offset_ttr );
315 cairo_line_to ( d,
widget->
w - margin_right - right, margin_top + offset_ttr );
316 if ( radius_inner_tr > 0 ) {
317 cairo_arc_negative ( d,
widget->
w - margin_right - right - radius_inner_tr,
318 margin_top + top + radius_inner_tr,
319 radius_inner_tr, 0, -G_PI_2 );
320 cairo_line_to ( d,
widget->
w - margin_right - offset_rtr, margin_top + top );
322 cairo_line_to ( d,
widget->
w - margin_right - offset_rtr, margin_top );
323 cairo_close_path ( d );
326 if ( radius_br > 0 ) {
328 cairo_set_line_width ( d, 1 );
329 double radius_outer = radius_br + minof_br;
330 cairo_arc ( d,
widget->
w - margin_right - radius_outer,
widget->
h - margin_bottom - radius_outer, radius_outer, 0.0, G_PI_2 );
331 cairo_line_to ( d,
widget->
w - margin_right - offset_rbr,
widget->
h - margin_bottom );
332 cairo_line_to ( d,
widget->
w - margin_right - offset_rbr,
widget->
h - margin_bottom - bottom );
333 if ( radius_inner_br > 0 ) {
334 cairo_arc_negative ( d,
widget->
w - margin_right - right - radius_inner_br,
335 widget->
h - margin_bottom - bottom - radius_inner_br,
336 radius_inner_br, G_PI_2, 0.0 );
337 cairo_line_to ( d,
widget->
w - margin_right - right,
widget->
h - margin_bottom - offset_bbr );
339 cairo_line_to ( d,
widget->
w - margin_right,
widget->
h - margin_bottom - offset_bbr );
340 cairo_close_path ( d );
343 if ( radius_bl > 0 ) {
345 cairo_set_line_width ( d, 1.0 );
346 double radius_outer = radius_bl + minof_bl;
347 cairo_arc ( d, margin_left + radius_outer,
widget->
h - margin_bottom - radius_outer, radius_outer, G_PI_2, G_PI );
348 cairo_line_to ( d, margin_left,
widget->
h - margin_bottom - offset_bbl );
349 cairo_line_to ( d, margin_left + left,
widget->
h - margin_bottom - offset_bbl );
350 if ( radius_inner_bl > 0 ) {
351 cairo_arc_negative ( d, margin_left + left + radius_inner_bl,
352 widget->
h - margin_bottom - bottom - radius_inner_bl,
353 radius_inner_bl, G_PI, G_PI_2 );
354 cairo_line_to ( d, margin_left + offset_lbl,
widget->
h - margin_bottom - bottom );
356 cairo_line_to ( d, margin_left + offset_lbl,
widget->
h - margin_bottom );
357 cairo_close_path ( d );
369 g_free ( wid->
name );
437 while ( iter->
parent != NULL ) {
461 if ( target != NULL ) {
465 if ( wid->
type == type ) {