35 #define WIDGET_DEFAULT_PADDING 0 41 wid->
name = g_strdup ( name );
42 wid->
def_padding = (
RofiPadding){ {
WIDGET_DEFAULT_PADDING,
ROFI_PU_PX,
ROFI_HL_SOLID }, {
WIDGET_DEFAULT_PADDING,
ROFI_PU_PX,
ROFI_HL_SOLID }, {
WIDGET_DEFAULT_PADDING,
ROFI_PU_PX,
ROFI_HL_SOLID }, {
WIDGET_DEFAULT_PADDING,
ROFI_PU_PX,
ROFI_HL_SOLID } };
43 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 } };
44 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 } };
45 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 } };
164 double vspace =
widget->
h - margin_top - margin_bottom - top / 2.0 - bottom / 2.0;
165 double hspace =
widget->
w - margin_left - margin_right - left / 2.0 - right / 2.0;
166 if ( ( radius_bl + radius_tl ) > ( vspace ) ) {
167 int j = floor ( ( vspace ) / 2.0 );
168 radius_bl = MIN ( radius_bl, j );
169 radius_tl = MIN ( radius_tl, j );
171 if ( ( radius_br + radius_tr ) > ( vspace ) ) {
172 int j = floor ( ( vspace ) / 2.0 );
173 radius_br = MIN ( radius_br, j );
174 radius_tr = MIN ( radius_tr, j );
176 if ( ( radius_tl + radius_tr ) > ( hspace ) ) {
177 int j = floor ( ( hspace ) / 2.0 );
178 radius_tr = MIN ( radius_tr, j );
179 radius_tl = MIN ( radius_tl, j );
181 if ( ( radius_bl + radius_br ) > ( hspace ) ) {
182 int j = floor ( ( hspace ) / 2.0 );
183 radius_br = MIN ( radius_br, j );
184 radius_bl = MIN ( radius_bl, j );
190 cairo_set_line_width ( d, 0 );
192 cairo_move_to ( d, margin_left + radius_tl + left / 2.0, margin_top + radius_tl + top / 2.0 );
194 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 );
196 cairo_line_to ( d,
widget->
w - margin_right - radius_tr - right / 2.0, margin_top + top / 2.0 );
198 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 );
200 cairo_line_to ( d,
widget->
w - margin_right - right / 2.0,
widget->
h - margin_bottom - radius_br - bottom / 2.0 );
202 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 );
204 cairo_line_to ( d, margin_left + radius_bl + left / 2.0,
widget->
h - margin_bottom - bottom / 2.0 );
206 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 );
208 cairo_line_to ( d, margin_left + left / 2.0, margin_top + radius_tl + top / 2.0 );
209 cairo_close_path ( d );
211 cairo_set_source_rgba ( d, 1.0, 1.0, 1.0, 1.0 );
213 cairo_fill_preserve ( d );
221 if ( left || top || right || bottom ) {
224 cairo_new_path ( d );
227 double offset = ( radius_tl > 0 ) ? floor ( top / 2.0 ) : 0;
228 cairo_set_line_width ( d, left );
230 cairo_move_to ( d, margin_left + left / 2.0, margin_top + radius_tl + offset );
231 offset = ( radius_bl > 0 ) ? floor ( bottom / 2.0 ) : 0;
232 cairo_line_to ( d, margin_left + left / 2.0,
widget->
h - margin_bottom - radius_bl - offset );
235 if ( radius_tl > 0 ) {
238 cairo_set_line_width ( d, left );
240 margin_left + left / 2.0 + radius_tl, margin_top + radius_tl + top / 2.0, radius_tl, -G_PI, -G_PI_2 );
244 cairo_set_line_width ( d, 0 );
245 double minof = ceil ( MIN ( left / 2.0, top / 2.0 ) );
246 double radius_outer = radius_tl + minof;
247 double radius_inner = radius_tl - minof;
248 cairo_arc ( d, margin_left + radius_outer, margin_top + radius_outer, radius_outer, -G_PI, -G_PI_2 );
249 cairo_line_to ( d, margin_left + radius_tl + ceil ( left / 2.0 ), margin_top );
250 cairo_line_to ( d, margin_left + radius_tl + ceil ( left / 2.0 ), margin_top + top );
251 cairo_arc_negative ( d, margin_left + left + radius_inner, margin_top + top + radius_inner, radius_inner, -G_PI_2, G_PI );
252 cairo_line_to ( d, margin_left + left, margin_top + radius_tl + ceil ( top / 2.0 ) );
253 cairo_line_to ( d, margin_left, margin_top + radius_tl + ceil ( top / 2.0 ) );
254 cairo_close_path ( d );
259 double offset = ( radius_tl > 0 ) ? floor ( left / 2.0 ) : 0;
260 cairo_set_line_width ( d, top );
262 cairo_move_to ( d, margin_left + radius_tl + offset, margin_top + top / 2.0 );
263 offset = ( radius_tr > 0 ) ? floor ( right / 2.0 ) : 0;
264 cairo_line_to ( d,
widget->
w - margin_right - radius_tr - offset, margin_top + top / 2.0 );
267 if ( radius_tr > 0 ) {
269 if ( top == right ) {
270 cairo_set_line_width ( d, right );
271 cairo_arc ( d,
widget->
w - margin_right - right / 2.0 - radius_tr, margin_top + radius_tr + right / 2.0, radius_tr, -G_PI_2, 0 * G_PI );
275 cairo_set_line_width ( d, 0 );
276 double minof = ceil ( MIN ( right / 2.0, top / 2.0 ) );
277 double radius_outer = radius_tr + minof;
278 double radius_inner = radius_tr - minof;
279 cairo_arc ( d,
widget->
w - margin_right - radius_outer, margin_top + radius_outer, radius_outer, -G_PI_2, 0 );
280 cairo_line_to ( d,
widget->
w - margin_right, margin_top + radius_tr + ceil ( top / 2.0 ) );
281 cairo_line_to ( d,
widget->
w - margin_right - right, margin_top + radius_tr + ceil ( top / 2.0 ) );
282 cairo_arc_negative ( d,
widget->
w - margin_right - right - radius_inner, margin_top + top + radius_inner, radius_inner, 0, -G_PI_2 );
283 cairo_line_to ( d,
widget->
w - margin_right - radius_tr - ceil ( right / 2.0 ), margin_top + top );
284 cairo_line_to ( d,
widget->
w - margin_right - radius_tr - ceil ( right / 2.0 ), margin_top );
285 cairo_close_path ( d );
290 double offset = ( radius_tr > 0 ) ? floor ( top / 2.0 ) : 0;
291 cairo_set_line_width ( d, right );
293 cairo_move_to ( d,
widget->
w - margin_right - right / 2.0, margin_top + radius_tr + offset );
294 offset = ( radius_br > 0 ) ? floor ( bottom / 2.0 ) : 0;
295 cairo_line_to ( d,
widget->
w - margin_right - right / 2.0,
widget->
h - margin_bottom - radius_br - offset );
298 if ( radius_br > 0 ) {
300 if ( bottom == right ) {
301 cairo_set_line_width ( d, right );
302 cairo_arc ( d,
widget->
w - margin_right - right / 2.0 - radius_br,
widget->
h - margin_bottom - radius_br - right / 2.0, radius_br, 0.0, G_PI_2 );
306 cairo_set_line_width ( d, 0 );
307 double minof = ceil ( MIN ( right / 2.0, bottom / 2.0 ) );
308 double radius_outer = radius_br + minof;
309 double radius_inner = radius_br - minof;
310 cairo_arc ( d,
widget->
w - margin_right - radius_outer,
widget->
h - margin_bottom - radius_outer, radius_outer, 0.0, G_PI_2 );
311 cairo_line_to ( d,
widget->
w - margin_right - radius_br - ceil ( right / 2.0 ),
widget->
h - margin_bottom );
312 cairo_line_to ( d,
widget->
w - margin_right - radius_br - ceil ( right / 2.0 ),
widget->
h - margin_bottom - bottom );
313 cairo_arc_negative ( d,
widget->
w - margin_right - right - radius_inner,
widget->
h - margin_bottom - bottom - radius_inner, radius_inner, G_PI_2, 0.0 );
314 cairo_line_to ( d,
widget->
w - margin_right - right,
widget->
h - margin_bottom - radius_br - ceil ( bottom / 2.0 ) );
315 cairo_line_to ( d,
widget->
w - margin_right,
widget->
h - margin_bottom - radius_br - ceil ( bottom / 2.0 ) );
316 cairo_close_path ( d );
321 double offset = ( radius_bl > 0 ) ? floor ( left / 2.0 ) : 0;
322 cairo_set_line_width ( d, bottom );
324 cairo_move_to ( d, margin_left + radius_bl + offset,
widget->
h - bottom / 2.0 - margin_bottom );
325 offset = ( radius_br > 0 ) ? floor ( right / 2.0 ) : 0;
326 cairo_line_to ( d,
widget->
w - margin_right - radius_br - offset,
widget->
h - bottom / 2.0 - margin_bottom );
329 if ( radius_bl > 0 ) {
331 if ( bottom == left ) {
332 cairo_set_line_width ( d, left );
333 cairo_arc ( d, margin_left + left / 2.0 + radius_bl,
widget->
h - margin_bottom - radius_bl - left / 2.0, radius_bl, G_PI_2, G_PI );
337 cairo_set_line_width ( d, 0 );
338 double minof = ceil ( MIN ( left / 2.0, bottom / 2.0 ) );
339 double radius_outer = radius_bl + minof;
340 double radius_inner = radius_bl - minof;
341 cairo_arc ( d, margin_left + radius_outer,
widget->
h - margin_bottom - radius_outer, radius_outer, G_PI_2, G_PI );
342 cairo_line_to ( d, margin_left,
widget->
h - margin_bottom - radius_bl - ceil ( bottom / 2.0 ) );
343 cairo_line_to ( d, margin_left + left,
widget->
h - margin_bottom - radius_bl - ceil ( bottom / 2.0 ) );
344 cairo_arc_negative ( d, margin_left + left + radius_inner,
widget->
h - margin_bottom - bottom - radius_inner, radius_inner, G_PI, G_PI_2 );
345 cairo_line_to ( d, margin_left + radius_bl + ceil ( left / 2.0 ),
widget->
h - margin_bottom - bottom );
346 cairo_line_to ( d, margin_left + radius_bl + ceil ( left / 2.0 ),
widget->
h - margin_bottom );
347 cairo_close_path ( d );
359 g_free ( wid->
name );
426 while ( iter->
parent != NULL ) {
450 if ( target != NULL ) {
454 if ( wid->
type == type ) {
void rofi_theme_get_color(const widget *widget, const char *property, cairo_t *d)
RofiPadding rofi_theme_get_padding(const widget *widget, const char *property, RofiPadding pad)
int rofi_theme_get_boolean(const widget *widget, const char *property, int def)
int distance_get_pixel(RofiDistance d, RofiOrientation ori)
void distance_get_linestyle(RofiDistance d, cairo_t *draw)