142 if (wid->
h < 1 || wid->
w < 1) {
148 const int margin_left =
150 const int margin_top =
152 const int margin_right =
154 const int margin_bottom =
174 wid->
h - margin_top - margin_bottom - top / 2.0 - bottom / 2.0;
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);
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);
200 cairo_translate(d, wid->
x, wid->
y);
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 = wid->
w - margin_right - right / 2.0,
207 y2 = wid->
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) {
255 cairo_translate(d, wid->
x, wid->
y);
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);
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;
286 (radius_inner_tl > 0) ? (left) + radius_inner_tl : left;
288 (radius_inner_tr > 0) ? (right) + radius_inner_tr : right;
290 (radius_inner_bl > 0) ? (left) + radius_inner_bl : left;
292 (radius_inner_br > 0) ? (right) + radius_inner_br : right;
294 double offset_ttl = (radius_inner_tl > 0) ? (top) + radius_inner_tl
295 : (radius_tl > 0) ? top
297 double offset_ttr = (radius_inner_tr > 0) ? (top) + radius_inner_tr
298 : (radius_tr > 0) ? top
300 double offset_bbl = (radius_inner_bl > 0) ? (bottom) + radius_inner_bl
301 : (radius_bl > 0) ? bottom
303 double offset_bbr = (radius_inner_br > 0) ? (bottom) + radius_inner_br
304 : (radius_br > 0) ? bottom
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);
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);
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);
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);
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);
347 cairo_line_to(d, margin_left, margin_top + offset_ttl);
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,
365 cairo_line_to(d, wid->
w - margin_right - offset_rtr, margin_top);
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,
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);
385 cairo_line_to(d, wid->
w - margin_right,
386 wid->
h - margin_bottom - offset_bbr);
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,
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);
405 cairo_line_to(d, margin_left + offset_lbl, wid->
h - margin_bottom);