148 const int margin_left =
150 const int margin_top =
152 const int margin_right =
154 const int margin_bottom =
174 widget->
h - margin_top - margin_bottom - top / 2.0 - bottom / 2.0;
176 widget->
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);
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);
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);
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);
201 cairo_set_line_width(d, 0);
204 double x1, y1, x2, y2;
205 x1 = margin_left + left / 2.0, y1 = margin_top + top / 2.0,
206 x2 =
widget->
w - margin_right - right / 2.0,
207 y2 =
widget->
h - margin_bottom - bottom / 2.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,
214 cairo_move_to(d, x1, y1);
217 cairo_line_to(d, x2 - radius_tr, y1);
218 cairo_arc(d, x2 - radius_tr, y1 + radius_tr, radius_tr, -G_PI_2,
221 cairo_line_to(d, x2, y1);
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,
228 cairo_line_to(d, x2, y2);
231 cairo_line_to(d, x1 + radius_bl, y2);
232 cairo_arc(d, x1 + radius_bl, y2 - radius_bl, radius_bl, G_PI_2,
235 cairo_line_to(d, x1, y2);
239 cairo_set_source_rgba(d, 1.0, 1.0, 1.0, 1.0);
241 cairo_fill_preserve(d);
243 cairo_fill_preserve(d);
252 if (left != 0 || top != 0 || right != 0 || bottom != 0) {
259 double minof_tr = MIN(right / 2.0, top / 2.0);
260 double minof_tl = MIN(left / 2.0, top / 2.0);
261 double minof_br = MIN(right / 2.0, bottom / 2.0);
262 double minof_bl = MIN(left / 2.0, bottom / 2.0);
264 double radius_inner_tl = radius_tl - minof_tl;
265 double radius_inner_tr = radius_tr - minof_tr;
266 double radius_inner_bl = radius_bl - minof_bl;
267 double radius_inner_br = radius_br - minof_br;
285 (radius_inner_tl > 0) ? (left) + radius_inner_tl : left;
287 (radius_inner_tr > 0) ? (right) + radius_inner_tr : right;
289 (radius_inner_bl > 0) ? (left) + radius_inner_bl : left;
291 (radius_inner_br > 0) ? (right) + radius_inner_br : right;
293 double offset_ttl = (radius_inner_tl > 0) ? (top) + radius_inner_tl
294 : (radius_tl > 0) ? top
296 double offset_ttr = (radius_inner_tr > 0) ? (top) + radius_inner_tr
297 : (radius_tr > 0) ? top
299 double offset_bbl = (radius_inner_bl > 0) ? (bottom) + radius_inner_bl
300 : (radius_bl > 0) ? bottom
302 double offset_bbr = (radius_inner_br > 0) ? (bottom) + radius_inner_br
303 : (radius_br > 0) ? bottom
307 cairo_set_line_width(d, left);
309 cairo_move_to(d, x1, margin_top + offset_ttl);
310 cairo_line_to(d, x1,
widget->
h - margin_bottom - offset_bbl);
314 cairo_set_line_width(d, right);
316 cairo_move_to(d, x2, margin_top + offset_ttr);
317 cairo_line_to(d, x2,
widget->
h - margin_bottom - offset_bbr);
321 cairo_set_line_width(d, top);
323 cairo_move_to(d, margin_left + offset_ltl, y1);
324 cairo_line_to(d,
widget->
w - margin_right - offset_rtr, y1);
328 cairo_set_line_width(d, bottom);
330 cairo_move_to(d, margin_left + offset_lbl, y2);
331 cairo_line_to(d,
widget->
w - margin_right - offset_rbr, y2);
336 cairo_set_line_width(d, 0);
337 double radius_outer = radius_tl + minof_tl;
338 cairo_arc(d, margin_left + radius_outer, margin_top + radius_outer,
339 radius_outer, -G_PI, -G_PI_2);
340 cairo_line_to(d, margin_left + offset_ltl, margin_top);
341 cairo_line_to(d, margin_left + offset_ltl, margin_top + top);
342 if (radius_inner_tl > 0) {
343 cairo_arc_negative(d, margin_left + left + radius_inner_tl,
344 margin_top + top + radius_inner_tl,
345 radius_inner_tl, -G_PI_2, G_PI);
346 cairo_line_to(d, margin_left + left, margin_top + offset_ttl);
348 cairo_line_to(d, margin_left, margin_top + offset_ttl);
354 cairo_set_line_width(d, 0);
355 double radius_outer = radius_tr + minof_tr;
356 cairo_arc(d,
widget->
w - margin_right - radius_outer,
357 margin_top + radius_outer, radius_outer, -G_PI_2, 0);
358 cairo_line_to(d,
widget->
w - margin_right, margin_top + offset_ttr);
359 cairo_line_to(d,
widget->
w - margin_right - right,
360 margin_top + offset_ttr);
361 if (radius_inner_tr > 0) {
363 d,
widget->
w - margin_right - right - radius_inner_tr,
364 margin_top + top + radius_inner_tr, radius_inner_tr, 0, -G_PI_2);
365 cairo_line_to(d,
widget->
w - margin_right - offset_rtr,
368 cairo_line_to(d,
widget->
w - margin_right - offset_rtr, margin_top);
374 cairo_set_line_width(d, 1);
375 double radius_outer = radius_br + minof_br;
376 cairo_arc(d,
widget->
w - margin_right - radius_outer,
377 widget->
h - margin_bottom - radius_outer, radius_outer, 0.0,
379 cairo_line_to(d,
widget->
w - margin_right - offset_rbr,
381 cairo_line_to(d,
widget->
w - margin_right - offset_rbr,
382 widget->
h - margin_bottom - bottom);
383 if (radius_inner_br > 0) {
385 d,
widget->
w - margin_right - right - radius_inner_br,
386 widget->
h - margin_bottom - bottom - radius_inner_br,
387 radius_inner_br, G_PI_2, 0.0);
388 cairo_line_to(d,
widget->
w - margin_right - right,
389 widget->
h - margin_bottom - offset_bbr);
391 cairo_line_to(d,
widget->
w - margin_right,
392 widget->
h - margin_bottom - offset_bbr);
398 cairo_set_line_width(d, 1.0);
399 double radius_outer = radius_bl + minof_bl;
400 cairo_arc(d, margin_left + radius_outer,
401 widget->
h - margin_bottom - radius_outer, radius_outer,
403 cairo_line_to(d, margin_left,
widget->
h - margin_bottom - offset_bbl);
404 cairo_line_to(d, margin_left + left,
405 widget->
h - margin_bottom - offset_bbl);
406 if (radius_inner_bl > 0) {
407 cairo_arc_negative(d, margin_left + left + radius_inner_bl,
408 widget->
h - margin_bottom - bottom -
410 radius_inner_bl, G_PI, G_PI_2);
411 cairo_line_to(d, margin_left + offset_lbl,
412 widget->
h - margin_bottom - bottom);
414 cairo_line_to(d, margin_left + offset_lbl,
widget->
h - margin_bottom);