mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-30 15:31:34 +00:00
roundedbox: Use a graphene_size_t for the corners
Obviously, I'm trying to port GtkRoundedBox to GskRoundedRect. This is the second step on that path.
This commit is contained in:
parent
6d012fb4ea
commit
c04bece131
@ -665,15 +665,15 @@ draw_shadow (const GtkCssValue *shadow,
|
||||
|
||||
typedef struct {
|
||||
double radius;
|
||||
GtkRoundedBoxCorner corner;
|
||||
graphene_size_t corner;
|
||||
} CornerMask;
|
||||
|
||||
static guint
|
||||
corner_mask_hash (CornerMask *mask)
|
||||
{
|
||||
return ((guint)mask->radius << 24) ^
|
||||
((guint)(mask->corner.horizontal*4)) << 12 ^
|
||||
((guint)(mask->corner.vertical*4)) << 0;
|
||||
((guint)(mask->corner.width*4)) << 12 ^
|
||||
((guint)(mask->corner.height*4)) << 0;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@ -682,8 +682,8 @@ corner_mask_equal (CornerMask *mask1,
|
||||
{
|
||||
return
|
||||
mask1->radius == mask2->radius &&
|
||||
mask1->corner.horizontal == mask2->corner.horizontal &&
|
||||
mask1->corner.vertical == mask2->corner.vertical;
|
||||
mask1->corner.width == mask2->corner.width &&
|
||||
mask1->corner.height == mask2->corner.height;
|
||||
}
|
||||
|
||||
static void
|
||||
@ -714,21 +714,21 @@ draw_shadow_corner (const GtkCssValue *shadow,
|
||||
if (corner == GSK_CORNER_TOP_LEFT || corner == GSK_CORNER_BOTTOM_LEFT)
|
||||
{
|
||||
x1 = floor (box->box.x - clip_radius);
|
||||
x2 = ceil (box->box.x + box->corner[corner].horizontal + clip_radius);
|
||||
x2 = ceil (box->box.x + box->corner[corner].width + clip_radius);
|
||||
x = x1;
|
||||
sx = 1;
|
||||
max_other = MAX(box->corner[GSK_CORNER_TOP_RIGHT].horizontal, box->corner[GSK_CORNER_BOTTOM_RIGHT].horizontal);
|
||||
max_other = MAX(box->corner[GSK_CORNER_TOP_RIGHT].width, box->corner[GSK_CORNER_BOTTOM_RIGHT].width);
|
||||
x3 = floor (box->box.x + box->box.width - max_other - clip_radius);
|
||||
if (x2 > x3)
|
||||
overlapped = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
x1 = floor (box->box.x + box->box.width - box->corner[corner].horizontal - clip_radius);
|
||||
x1 = floor (box->box.x + box->box.width - box->corner[corner].width - clip_radius);
|
||||
x2 = ceil (box->box.x + box->box.width + clip_radius);
|
||||
x = x2;
|
||||
sx = -1;
|
||||
max_other = MAX(box->corner[GSK_CORNER_TOP_LEFT].horizontal, box->corner[GSK_CORNER_BOTTOM_LEFT].horizontal);
|
||||
max_other = MAX(box->corner[GSK_CORNER_TOP_LEFT].width, box->corner[GSK_CORNER_BOTTOM_LEFT].width);
|
||||
x3 = ceil (box->box.x + max_other + clip_radius);
|
||||
if (x3 > x1)
|
||||
overlapped = TRUE;
|
||||
@ -737,21 +737,21 @@ draw_shadow_corner (const GtkCssValue *shadow,
|
||||
if (corner == GSK_CORNER_TOP_LEFT || corner == GSK_CORNER_TOP_RIGHT)
|
||||
{
|
||||
y1 = floor (box->box.y - clip_radius);
|
||||
y2 = ceil (box->box.y + box->corner[corner].vertical + clip_radius);
|
||||
y2 = ceil (box->box.y + box->corner[corner].height + clip_radius);
|
||||
y = y1;
|
||||
sy = 1;
|
||||
max_other = MAX(box->corner[GSK_CORNER_BOTTOM_LEFT].vertical, box->corner[GSK_CORNER_BOTTOM_RIGHT].vertical);
|
||||
max_other = MAX(box->corner[GSK_CORNER_BOTTOM_LEFT].height, box->corner[GSK_CORNER_BOTTOM_RIGHT].height);
|
||||
y3 = floor (box->box.y + box->box.height - max_other - clip_radius);
|
||||
if (y2 > y3)
|
||||
overlapped = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
y1 = floor (box->box.y + box->box.height - box->corner[corner].vertical - clip_radius);
|
||||
y1 = floor (box->box.y + box->box.height - box->corner[corner].height - clip_radius);
|
||||
y2 = ceil (box->box.y + box->box.height + clip_radius);
|
||||
y = y2;
|
||||
sy = -1;
|
||||
max_other = MAX(box->corner[GSK_CORNER_TOP_LEFT].vertical, box->corner[GSK_CORNER_TOP_RIGHT].vertical);
|
||||
max_other = MAX(box->corner[GSK_CORNER_TOP_LEFT].height, box->corner[GSK_CORNER_TOP_RIGHT].height);
|
||||
y3 = ceil (box->box.y + max_other + clip_radius);
|
||||
if (y3 > y1)
|
||||
overlapped = TRUE;
|
||||
|
@ -58,30 +58,30 @@ gtk_rounded_box_clamp_border_radius (GtkRoundedBox *box)
|
||||
gdouble factor = 1.0;
|
||||
gdouble corners;
|
||||
|
||||
corners = box->corner[GSK_CORNER_TOP_LEFT].horizontal + box->corner[GSK_CORNER_TOP_RIGHT].horizontal;
|
||||
corners = box->corner[GSK_CORNER_TOP_LEFT].width + box->corner[GSK_CORNER_TOP_RIGHT].width;
|
||||
if (corners != 0)
|
||||
factor = MIN (factor, box->box.width / corners);
|
||||
|
||||
corners = box->corner[GSK_CORNER_TOP_RIGHT].vertical + box->corner[GSK_CORNER_BOTTOM_RIGHT].vertical;
|
||||
corners = box->corner[GSK_CORNER_TOP_RIGHT].height + box->corner[GSK_CORNER_BOTTOM_RIGHT].height;
|
||||
if (corners != 0)
|
||||
factor = MIN (factor, box->box.height / corners);
|
||||
|
||||
corners = box->corner[GSK_CORNER_BOTTOM_RIGHT].horizontal + box->corner[GSK_CORNER_BOTTOM_LEFT].horizontal;
|
||||
corners = box->corner[GSK_CORNER_BOTTOM_RIGHT].width + box->corner[GSK_CORNER_BOTTOM_LEFT].width;
|
||||
if (corners != 0)
|
||||
factor = MIN (factor, box->box.width / corners);
|
||||
|
||||
corners = box->corner[GSK_CORNER_TOP_LEFT].vertical + box->corner[GSK_CORNER_BOTTOM_LEFT].vertical;
|
||||
corners = box->corner[GSK_CORNER_TOP_LEFT].height + box->corner[GSK_CORNER_BOTTOM_LEFT].height;
|
||||
if (corners != 0)
|
||||
factor = MIN (factor, box->box.height / corners);
|
||||
|
||||
box->corner[GSK_CORNER_TOP_LEFT].horizontal *= factor;
|
||||
box->corner[GSK_CORNER_TOP_LEFT].vertical *= factor;
|
||||
box->corner[GSK_CORNER_TOP_RIGHT].horizontal *= factor;
|
||||
box->corner[GSK_CORNER_TOP_RIGHT].vertical *= factor;
|
||||
box->corner[GSK_CORNER_BOTTOM_RIGHT].horizontal *= factor;
|
||||
box->corner[GSK_CORNER_BOTTOM_RIGHT].vertical *= factor;
|
||||
box->corner[GSK_CORNER_BOTTOM_LEFT].horizontal *= factor;
|
||||
box->corner[GSK_CORNER_BOTTOM_LEFT].vertical *= factor;
|
||||
box->corner[GSK_CORNER_TOP_LEFT].width *= factor;
|
||||
box->corner[GSK_CORNER_TOP_LEFT].height *= factor;
|
||||
box->corner[GSK_CORNER_TOP_RIGHT].width *= factor;
|
||||
box->corner[GSK_CORNER_TOP_RIGHT].height *= factor;
|
||||
box->corner[GSK_CORNER_BOTTOM_RIGHT].width *= factor;
|
||||
box->corner[GSK_CORNER_BOTTOM_RIGHT].height *= factor;
|
||||
box->corner[GSK_CORNER_BOTTOM_LEFT].width *= factor;
|
||||
box->corner[GSK_CORNER_BOTTOM_LEFT].height *= factor;
|
||||
}
|
||||
|
||||
static void
|
||||
@ -91,30 +91,30 @@ _gtk_rounded_box_apply_border_radius (GtkRoundedBox *box,
|
||||
{
|
||||
if (corner[GSK_CORNER_TOP_LEFT] && (junction & GTK_JUNCTION_CORNER_TOPLEFT) == 0)
|
||||
{
|
||||
box->corner[GSK_CORNER_TOP_LEFT].horizontal = _gtk_css_corner_value_get_x (corner[GSK_CORNER_TOP_LEFT],
|
||||
box->corner[GSK_CORNER_TOP_LEFT].width = _gtk_css_corner_value_get_x (corner[GSK_CORNER_TOP_LEFT],
|
||||
box->box.width);
|
||||
box->corner[GSK_CORNER_TOP_LEFT].vertical = _gtk_css_corner_value_get_y (corner[GSK_CORNER_TOP_LEFT],
|
||||
box->corner[GSK_CORNER_TOP_LEFT].height = _gtk_css_corner_value_get_y (corner[GSK_CORNER_TOP_LEFT],
|
||||
box->box.height);
|
||||
}
|
||||
if (corner[GSK_CORNER_TOP_RIGHT] && (junction & GTK_JUNCTION_CORNER_TOPRIGHT) == 0)
|
||||
{
|
||||
box->corner[GSK_CORNER_TOP_RIGHT].horizontal = _gtk_css_corner_value_get_x (corner[GSK_CORNER_TOP_RIGHT],
|
||||
box->corner[GSK_CORNER_TOP_RIGHT].width = _gtk_css_corner_value_get_x (corner[GSK_CORNER_TOP_RIGHT],
|
||||
box->box.width);
|
||||
box->corner[GSK_CORNER_TOP_RIGHT].vertical = _gtk_css_corner_value_get_y (corner[GSK_CORNER_TOP_RIGHT],
|
||||
box->corner[GSK_CORNER_TOP_RIGHT].height = _gtk_css_corner_value_get_y (corner[GSK_CORNER_TOP_RIGHT],
|
||||
box->box.height);
|
||||
}
|
||||
if (corner[GSK_CORNER_BOTTOM_RIGHT] && (junction & GTK_JUNCTION_CORNER_BOTTOMRIGHT) == 0)
|
||||
{
|
||||
box->corner[GSK_CORNER_BOTTOM_RIGHT].horizontal = _gtk_css_corner_value_get_x (corner[GSK_CORNER_BOTTOM_RIGHT],
|
||||
box->corner[GSK_CORNER_BOTTOM_RIGHT].width = _gtk_css_corner_value_get_x (corner[GSK_CORNER_BOTTOM_RIGHT],
|
||||
box->box.width);
|
||||
box->corner[GSK_CORNER_BOTTOM_RIGHT].vertical = _gtk_css_corner_value_get_y (corner[GSK_CORNER_BOTTOM_RIGHT],
|
||||
box->corner[GSK_CORNER_BOTTOM_RIGHT].height = _gtk_css_corner_value_get_y (corner[GSK_CORNER_BOTTOM_RIGHT],
|
||||
box->box.height);
|
||||
}
|
||||
if (corner[GSK_CORNER_BOTTOM_LEFT] && (junction & GTK_JUNCTION_CORNER_BOTTOMLEFT) == 0)
|
||||
{
|
||||
box->corner[GSK_CORNER_BOTTOM_LEFT].horizontal = _gtk_css_corner_value_get_x (corner[GSK_CORNER_BOTTOM_LEFT],
|
||||
box->corner[GSK_CORNER_BOTTOM_LEFT].width = _gtk_css_corner_value_get_x (corner[GSK_CORNER_BOTTOM_LEFT],
|
||||
box->box.width);
|
||||
box->corner[GSK_CORNER_BOTTOM_LEFT].vertical = _gtk_css_corner_value_get_y (corner[GSK_CORNER_BOTTOM_LEFT],
|
||||
box->corner[GSK_CORNER_BOTTOM_LEFT].height = _gtk_css_corner_value_get_y (corner[GSK_CORNER_BOTTOM_LEFT],
|
||||
box->box.height);
|
||||
}
|
||||
|
||||
@ -152,19 +152,19 @@ _gtk_rounded_box_apply_outline_radius_for_style (GtkRoundedBox *box,
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_css_border_radius_grow (GtkRoundedBoxCorner *corner,
|
||||
double horizontal,
|
||||
double vertical)
|
||||
gtk_css_border_radius_grow (graphene_size_t *corner,
|
||||
double width,
|
||||
double height)
|
||||
{
|
||||
if (corner->horizontal)
|
||||
corner->horizontal += horizontal;
|
||||
if (corner->vertical)
|
||||
corner->vertical += vertical;
|
||||
if (corner->width)
|
||||
corner->width += width;
|
||||
if (corner->height)
|
||||
corner->height += height;
|
||||
|
||||
if (corner->horizontal <= 0 || corner->vertical <= 0)
|
||||
if (corner->width <= 0 || corner->height <= 0)
|
||||
{
|
||||
corner->horizontal = 0;
|
||||
corner->vertical = 0;
|
||||
corner->width = 0;
|
||||
corner->height = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -361,28 +361,28 @@ _gtk_rounded_box_path (const GtkRoundedBox *box,
|
||||
cairo_new_sub_path (cr);
|
||||
|
||||
_cairo_ellipsis (cr,
|
||||
box->box.x + box->corner[GSK_CORNER_TOP_LEFT].horizontal,
|
||||
box->box.y + box->corner[GSK_CORNER_TOP_LEFT].vertical,
|
||||
box->corner[GSK_CORNER_TOP_LEFT].horizontal,
|
||||
box->corner[GSK_CORNER_TOP_LEFT].vertical,
|
||||
box->box.x + box->corner[GSK_CORNER_TOP_LEFT].width,
|
||||
box->box.y + box->corner[GSK_CORNER_TOP_LEFT].height,
|
||||
box->corner[GSK_CORNER_TOP_LEFT].width,
|
||||
box->corner[GSK_CORNER_TOP_LEFT].height,
|
||||
G_PI, 3 * G_PI_2);
|
||||
_cairo_ellipsis (cr,
|
||||
box->box.x + box->box.width - box->corner[GSK_CORNER_TOP_RIGHT].horizontal,
|
||||
box->box.y + box->corner[GSK_CORNER_TOP_RIGHT].vertical,
|
||||
box->corner[GSK_CORNER_TOP_RIGHT].horizontal,
|
||||
box->corner[GSK_CORNER_TOP_RIGHT].vertical,
|
||||
box->box.x + box->box.width - box->corner[GSK_CORNER_TOP_RIGHT].width,
|
||||
box->box.y + box->corner[GSK_CORNER_TOP_RIGHT].height,
|
||||
box->corner[GSK_CORNER_TOP_RIGHT].width,
|
||||
box->corner[GSK_CORNER_TOP_RIGHT].height,
|
||||
- G_PI_2, 0);
|
||||
_cairo_ellipsis (cr,
|
||||
box->box.x + box->box.width - box->corner[GSK_CORNER_BOTTOM_RIGHT].horizontal,
|
||||
box->box.y + box->box.height - box->corner[GSK_CORNER_BOTTOM_RIGHT].vertical,
|
||||
box->corner[GSK_CORNER_BOTTOM_RIGHT].horizontal,
|
||||
box->corner[GSK_CORNER_BOTTOM_RIGHT].vertical,
|
||||
box->box.x + box->box.width - box->corner[GSK_CORNER_BOTTOM_RIGHT].width,
|
||||
box->box.y + box->box.height - box->corner[GSK_CORNER_BOTTOM_RIGHT].height,
|
||||
box->corner[GSK_CORNER_BOTTOM_RIGHT].width,
|
||||
box->corner[GSK_CORNER_BOTTOM_RIGHT].height,
|
||||
0, G_PI_2);
|
||||
_cairo_ellipsis (cr,
|
||||
box->box.x + box->corner[GSK_CORNER_BOTTOM_LEFT].horizontal,
|
||||
box->box.y + box->box.height - box->corner[GSK_CORNER_BOTTOM_LEFT].vertical,
|
||||
box->corner[GSK_CORNER_BOTTOM_LEFT].horizontal,
|
||||
box->corner[GSK_CORNER_BOTTOM_LEFT].vertical,
|
||||
box->box.x + box->corner[GSK_CORNER_BOTTOM_LEFT].width,
|
||||
box->box.y + box->box.height - box->corner[GSK_CORNER_BOTTOM_LEFT].height,
|
||||
box->corner[GSK_CORNER_BOTTOM_LEFT].width,
|
||||
box->corner[GSK_CORNER_BOTTOM_LEFT].height,
|
||||
G_PI_2, G_PI);
|
||||
|
||||
cairo_close_path (cr);
|
||||
@ -400,17 +400,17 @@ _gtk_rounded_box_guess_length (const GtkRoundedBox *box,
|
||||
|
||||
if (side & 1)
|
||||
length = box->box.height
|
||||
- box->corner[before].vertical
|
||||
- box->corner[after].vertical;
|
||||
- box->corner[before].height
|
||||
- box->corner[after].height;
|
||||
else
|
||||
length = box->box.width
|
||||
- box->corner[before].horizontal
|
||||
- box->corner[after].horizontal;
|
||||
- box->corner[before].width
|
||||
- box->corner[after].width;
|
||||
|
||||
length += G_PI * 0.125 * (box->corner[before].horizontal
|
||||
+ box->corner[before].vertical
|
||||
+ box->corner[after].horizontal
|
||||
+ box->corner[after].vertical);
|
||||
length += G_PI * 0.125 * (box->corner[before].width
|
||||
+ box->corner[before].height
|
||||
+ box->corner[after].width
|
||||
+ box->corner[after].height);
|
||||
|
||||
return length;
|
||||
}
|
||||
@ -424,58 +424,58 @@ _gtk_rounded_box_path_side (const GtkRoundedBox *box,
|
||||
{
|
||||
case GTK_CSS_TOP:
|
||||
_cairo_ellipsis (cr,
|
||||
box->box.x + box->corner[GSK_CORNER_TOP_LEFT].horizontal,
|
||||
box->box.y + box->corner[GSK_CORNER_TOP_LEFT].vertical,
|
||||
box->corner[GSK_CORNER_TOP_LEFT].horizontal,
|
||||
box->corner[GSK_CORNER_TOP_LEFT].vertical,
|
||||
box->box.x + box->corner[GSK_CORNER_TOP_LEFT].width,
|
||||
box->box.y + box->corner[GSK_CORNER_TOP_LEFT].height,
|
||||
box->corner[GSK_CORNER_TOP_LEFT].width,
|
||||
box->corner[GSK_CORNER_TOP_LEFT].height,
|
||||
5 * G_PI_4, 3 * G_PI_2);
|
||||
_cairo_ellipsis (cr,
|
||||
box->box.x + box->box.width - box->corner[GSK_CORNER_TOP_RIGHT].horizontal,
|
||||
box->box.y + box->corner[GSK_CORNER_TOP_RIGHT].vertical,
|
||||
box->corner[GSK_CORNER_TOP_RIGHT].horizontal,
|
||||
box->corner[GSK_CORNER_TOP_RIGHT].vertical,
|
||||
box->box.x + box->box.width - box->corner[GSK_CORNER_TOP_RIGHT].width,
|
||||
box->box.y + box->corner[GSK_CORNER_TOP_RIGHT].height,
|
||||
box->corner[GSK_CORNER_TOP_RIGHT].width,
|
||||
box->corner[GSK_CORNER_TOP_RIGHT].height,
|
||||
- G_PI_2, -G_PI_4);
|
||||
break;
|
||||
case GTK_CSS_RIGHT:
|
||||
_cairo_ellipsis (cr,
|
||||
box->box.x + box->box.width - box->corner[GSK_CORNER_TOP_RIGHT].horizontal,
|
||||
box->box.y + box->corner[GSK_CORNER_TOP_RIGHT].vertical,
|
||||
box->corner[GSK_CORNER_TOP_RIGHT].horizontal,
|
||||
box->corner[GSK_CORNER_TOP_RIGHT].vertical,
|
||||
box->box.x + box->box.width - box->corner[GSK_CORNER_TOP_RIGHT].width,
|
||||
box->box.y + box->corner[GSK_CORNER_TOP_RIGHT].height,
|
||||
box->corner[GSK_CORNER_TOP_RIGHT].width,
|
||||
box->corner[GSK_CORNER_TOP_RIGHT].height,
|
||||
- G_PI_4, 0);
|
||||
_cairo_ellipsis (cr,
|
||||
box->box.x + box->box.width - box->corner[GSK_CORNER_BOTTOM_RIGHT].horizontal,
|
||||
box->box.y + box->box.height - box->corner[GSK_CORNER_BOTTOM_RIGHT].vertical,
|
||||
box->corner[GSK_CORNER_BOTTOM_RIGHT].horizontal,
|
||||
box->corner[GSK_CORNER_BOTTOM_RIGHT].vertical,
|
||||
box->box.x + box->box.width - box->corner[GSK_CORNER_BOTTOM_RIGHT].width,
|
||||
box->box.y + box->box.height - box->corner[GSK_CORNER_BOTTOM_RIGHT].height,
|
||||
box->corner[GSK_CORNER_BOTTOM_RIGHT].width,
|
||||
box->corner[GSK_CORNER_BOTTOM_RIGHT].height,
|
||||
0, G_PI_4);
|
||||
break;
|
||||
case GTK_CSS_BOTTOM:
|
||||
_cairo_ellipsis (cr,
|
||||
box->box.x + box->box.width - box->corner[GSK_CORNER_BOTTOM_RIGHT].horizontal,
|
||||
box->box.y + box->box.height - box->corner[GSK_CORNER_BOTTOM_RIGHT].vertical,
|
||||
box->corner[GSK_CORNER_BOTTOM_RIGHT].horizontal,
|
||||
box->corner[GSK_CORNER_BOTTOM_RIGHT].vertical,
|
||||
box->box.x + box->box.width - box->corner[GSK_CORNER_BOTTOM_RIGHT].width,
|
||||
box->box.y + box->box.height - box->corner[GSK_CORNER_BOTTOM_RIGHT].height,
|
||||
box->corner[GSK_CORNER_BOTTOM_RIGHT].width,
|
||||
box->corner[GSK_CORNER_BOTTOM_RIGHT].height,
|
||||
G_PI_4, G_PI_2);
|
||||
_cairo_ellipsis (cr,
|
||||
box->box.x + box->corner[GSK_CORNER_BOTTOM_LEFT].horizontal,
|
||||
box->box.y + box->box.height - box->corner[GSK_CORNER_BOTTOM_LEFT].vertical,
|
||||
box->corner[GSK_CORNER_BOTTOM_LEFT].horizontal,
|
||||
box->corner[GSK_CORNER_BOTTOM_LEFT].vertical,
|
||||
box->box.x + box->corner[GSK_CORNER_BOTTOM_LEFT].width,
|
||||
box->box.y + box->box.height - box->corner[GSK_CORNER_BOTTOM_LEFT].height,
|
||||
box->corner[GSK_CORNER_BOTTOM_LEFT].width,
|
||||
box->corner[GSK_CORNER_BOTTOM_LEFT].height,
|
||||
G_PI_2, 3 * G_PI_4);
|
||||
break;
|
||||
case GTK_CSS_LEFT:
|
||||
_cairo_ellipsis (cr,
|
||||
box->box.x + box->corner[GSK_CORNER_BOTTOM_LEFT].horizontal,
|
||||
box->box.y + box->box.height - box->corner[GSK_CORNER_BOTTOM_LEFT].vertical,
|
||||
box->corner[GSK_CORNER_BOTTOM_LEFT].horizontal,
|
||||
box->corner[GSK_CORNER_BOTTOM_LEFT].vertical,
|
||||
box->box.x + box->corner[GSK_CORNER_BOTTOM_LEFT].width,
|
||||
box->box.y + box->box.height - box->corner[GSK_CORNER_BOTTOM_LEFT].height,
|
||||
box->corner[GSK_CORNER_BOTTOM_LEFT].width,
|
||||
box->corner[GSK_CORNER_BOTTOM_LEFT].height,
|
||||
3 * G_PI_4, G_PI);
|
||||
_cairo_ellipsis (cr,
|
||||
box->box.x + box->corner[GSK_CORNER_TOP_LEFT].horizontal,
|
||||
box->box.y + box->corner[GSK_CORNER_TOP_LEFT].vertical,
|
||||
box->corner[GSK_CORNER_TOP_LEFT].horizontal,
|
||||
box->corner[GSK_CORNER_TOP_LEFT].vertical,
|
||||
box->box.x + box->corner[GSK_CORNER_TOP_LEFT].width,
|
||||
box->box.y + box->corner[GSK_CORNER_TOP_LEFT].height,
|
||||
box->corner[GSK_CORNER_TOP_LEFT].width,
|
||||
box->corner[GSK_CORNER_TOP_LEFT].height,
|
||||
G_PI, 5 * G_PI_4);
|
||||
break;
|
||||
default:
|
||||
@ -507,29 +507,29 @@ _gtk_rounded_box_path_top (const GtkRoundedBox *outer,
|
||||
cairo_new_sub_path (cr);
|
||||
|
||||
_cairo_ellipsis (cr,
|
||||
outer->box.x + outer->corner[GSK_CORNER_TOP_LEFT].horizontal,
|
||||
outer->box.y + outer->corner[GSK_CORNER_TOP_LEFT].vertical,
|
||||
outer->corner[GSK_CORNER_TOP_LEFT].horizontal,
|
||||
outer->corner[GSK_CORNER_TOP_LEFT].vertical,
|
||||
outer->box.x + outer->corner[GSK_CORNER_TOP_LEFT].width,
|
||||
outer->box.y + outer->corner[GSK_CORNER_TOP_LEFT].height,
|
||||
outer->corner[GSK_CORNER_TOP_LEFT].width,
|
||||
outer->corner[GSK_CORNER_TOP_LEFT].height,
|
||||
start_angle, middle_angle);
|
||||
_cairo_ellipsis (cr,
|
||||
outer->box.x + outer->box.width - outer->corner[GSK_CORNER_TOP_RIGHT].horizontal,
|
||||
outer->box.y + outer->corner[GSK_CORNER_TOP_RIGHT].vertical,
|
||||
outer->corner[GSK_CORNER_TOP_RIGHT].horizontal,
|
||||
outer->corner[GSK_CORNER_TOP_RIGHT].vertical,
|
||||
outer->box.x + outer->box.width - outer->corner[GSK_CORNER_TOP_RIGHT].width,
|
||||
outer->box.y + outer->corner[GSK_CORNER_TOP_RIGHT].height,
|
||||
outer->corner[GSK_CORNER_TOP_RIGHT].width,
|
||||
outer->corner[GSK_CORNER_TOP_RIGHT].height,
|
||||
middle_angle, end_angle);
|
||||
|
||||
_cairo_ellipsis_negative (cr,
|
||||
inner->box.x + inner->box.width - inner->corner[GSK_CORNER_TOP_RIGHT].horizontal,
|
||||
inner->box.y + inner->corner[GSK_CORNER_TOP_RIGHT].vertical,
|
||||
inner->corner[GSK_CORNER_TOP_RIGHT].horizontal,
|
||||
inner->corner[GSK_CORNER_TOP_RIGHT].vertical,
|
||||
inner->box.x + inner->box.width - inner->corner[GSK_CORNER_TOP_RIGHT].width,
|
||||
inner->box.y + inner->corner[GSK_CORNER_TOP_RIGHT].height,
|
||||
inner->corner[GSK_CORNER_TOP_RIGHT].width,
|
||||
inner->corner[GSK_CORNER_TOP_RIGHT].height,
|
||||
end_angle, middle_angle);
|
||||
_cairo_ellipsis_negative (cr,
|
||||
inner->box.x + inner->corner[GSK_CORNER_TOP_LEFT].horizontal,
|
||||
inner->box.y + inner->corner[GSK_CORNER_TOP_LEFT].vertical,
|
||||
inner->corner[GSK_CORNER_TOP_LEFT].horizontal,
|
||||
inner->corner[GSK_CORNER_TOP_LEFT].vertical,
|
||||
inner->box.x + inner->corner[GSK_CORNER_TOP_LEFT].width,
|
||||
inner->box.y + inner->corner[GSK_CORNER_TOP_LEFT].height,
|
||||
inner->corner[GSK_CORNER_TOP_LEFT].width,
|
||||
inner->corner[GSK_CORNER_TOP_LEFT].height,
|
||||
middle_angle, start_angle);
|
||||
|
||||
cairo_close_path (cr);
|
||||
@ -558,29 +558,29 @@ _gtk_rounded_box_path_right (const GtkRoundedBox *outer,
|
||||
cairo_new_sub_path (cr);
|
||||
|
||||
_cairo_ellipsis (cr,
|
||||
outer->box.x + outer->box.width - outer->corner[GSK_CORNER_TOP_RIGHT].horizontal,
|
||||
outer->box.y + outer->corner[GSK_CORNER_TOP_RIGHT].vertical,
|
||||
outer->corner[GSK_CORNER_TOP_RIGHT].horizontal,
|
||||
outer->corner[GSK_CORNER_TOP_RIGHT].vertical,
|
||||
outer->box.x + outer->box.width - outer->corner[GSK_CORNER_TOP_RIGHT].width,
|
||||
outer->box.y + outer->corner[GSK_CORNER_TOP_RIGHT].height,
|
||||
outer->corner[GSK_CORNER_TOP_RIGHT].width,
|
||||
outer->corner[GSK_CORNER_TOP_RIGHT].height,
|
||||
start_angle, middle_angle);
|
||||
_cairo_ellipsis (cr,
|
||||
outer->box.x + outer->box.width - outer->corner[GSK_CORNER_BOTTOM_RIGHT].horizontal,
|
||||
outer->box.y + outer->box.height - outer->corner[GSK_CORNER_BOTTOM_RIGHT].vertical,
|
||||
outer->corner[GSK_CORNER_BOTTOM_RIGHT].horizontal,
|
||||
outer->corner[GSK_CORNER_BOTTOM_RIGHT].vertical,
|
||||
outer->box.x + outer->box.width - outer->corner[GSK_CORNER_BOTTOM_RIGHT].width,
|
||||
outer->box.y + outer->box.height - outer->corner[GSK_CORNER_BOTTOM_RIGHT].height,
|
||||
outer->corner[GSK_CORNER_BOTTOM_RIGHT].width,
|
||||
outer->corner[GSK_CORNER_BOTTOM_RIGHT].height,
|
||||
middle_angle, end_angle);
|
||||
|
||||
_cairo_ellipsis_negative (cr,
|
||||
inner->box.x + inner->box.width - inner->corner[GSK_CORNER_BOTTOM_RIGHT].horizontal,
|
||||
inner->box.y + inner->box.height - inner->corner[GSK_CORNER_BOTTOM_RIGHT].vertical,
|
||||
inner->corner[GSK_CORNER_BOTTOM_RIGHT].horizontal,
|
||||
inner->corner[GSK_CORNER_BOTTOM_RIGHT].vertical,
|
||||
inner->box.x + inner->box.width - inner->corner[GSK_CORNER_BOTTOM_RIGHT].width,
|
||||
inner->box.y + inner->box.height - inner->corner[GSK_CORNER_BOTTOM_RIGHT].height,
|
||||
inner->corner[GSK_CORNER_BOTTOM_RIGHT].width,
|
||||
inner->corner[GSK_CORNER_BOTTOM_RIGHT].height,
|
||||
end_angle, middle_angle);
|
||||
_cairo_ellipsis_negative (cr,
|
||||
inner->box.x + inner->box.width - inner->corner[GSK_CORNER_TOP_RIGHT].horizontal,
|
||||
inner->box.y + inner->corner[GSK_CORNER_TOP_RIGHT].vertical,
|
||||
inner->corner[GSK_CORNER_TOP_RIGHT].horizontal,
|
||||
inner->corner[GSK_CORNER_TOP_RIGHT].vertical,
|
||||
inner->box.x + inner->box.width - inner->corner[GSK_CORNER_TOP_RIGHT].width,
|
||||
inner->box.y + inner->corner[GSK_CORNER_TOP_RIGHT].height,
|
||||
inner->corner[GSK_CORNER_TOP_RIGHT].width,
|
||||
inner->corner[GSK_CORNER_TOP_RIGHT].height,
|
||||
middle_angle, start_angle);
|
||||
|
||||
cairo_close_path (cr);
|
||||
@ -609,29 +609,29 @@ _gtk_rounded_box_path_bottom (const GtkRoundedBox *outer,
|
||||
cairo_new_sub_path (cr);
|
||||
|
||||
_cairo_ellipsis (cr,
|
||||
outer->box.x + outer->box.width - outer->corner[GSK_CORNER_BOTTOM_RIGHT].horizontal,
|
||||
outer->box.y + outer->box.height - outer->corner[GSK_CORNER_BOTTOM_RIGHT].vertical,
|
||||
outer->corner[GSK_CORNER_BOTTOM_RIGHT].horizontal,
|
||||
outer->corner[GSK_CORNER_BOTTOM_RIGHT].vertical,
|
||||
outer->box.x + outer->box.width - outer->corner[GSK_CORNER_BOTTOM_RIGHT].width,
|
||||
outer->box.y + outer->box.height - outer->corner[GSK_CORNER_BOTTOM_RIGHT].height,
|
||||
outer->corner[GSK_CORNER_BOTTOM_RIGHT].width,
|
||||
outer->corner[GSK_CORNER_BOTTOM_RIGHT].height,
|
||||
start_angle, middle_angle);
|
||||
_cairo_ellipsis (cr,
|
||||
outer->box.x + outer->corner[GSK_CORNER_BOTTOM_LEFT].horizontal,
|
||||
outer->box.y + outer->box.height - outer->corner[GSK_CORNER_BOTTOM_LEFT].vertical,
|
||||
outer->corner[GSK_CORNER_BOTTOM_LEFT].horizontal,
|
||||
outer->corner[GSK_CORNER_BOTTOM_LEFT].vertical,
|
||||
outer->box.x + outer->corner[GSK_CORNER_BOTTOM_LEFT].width,
|
||||
outer->box.y + outer->box.height - outer->corner[GSK_CORNER_BOTTOM_LEFT].height,
|
||||
outer->corner[GSK_CORNER_BOTTOM_LEFT].width,
|
||||
outer->corner[GSK_CORNER_BOTTOM_LEFT].height,
|
||||
middle_angle, end_angle);
|
||||
|
||||
_cairo_ellipsis_negative (cr,
|
||||
inner->box.x + inner->corner[GSK_CORNER_BOTTOM_LEFT].horizontal,
|
||||
inner->box.y + inner->box.height - inner->corner[GSK_CORNER_BOTTOM_LEFT].vertical,
|
||||
inner->corner[GSK_CORNER_BOTTOM_LEFT].horizontal,
|
||||
inner->corner[GSK_CORNER_BOTTOM_LEFT].vertical,
|
||||
inner->box.x + inner->corner[GSK_CORNER_BOTTOM_LEFT].width,
|
||||
inner->box.y + inner->box.height - inner->corner[GSK_CORNER_BOTTOM_LEFT].height,
|
||||
inner->corner[GSK_CORNER_BOTTOM_LEFT].width,
|
||||
inner->corner[GSK_CORNER_BOTTOM_LEFT].height,
|
||||
end_angle, middle_angle);
|
||||
_cairo_ellipsis_negative (cr,
|
||||
inner->box.x + inner->box.width - inner->corner[GSK_CORNER_BOTTOM_RIGHT].horizontal,
|
||||
inner->box.y + inner->box.height - inner->corner[GSK_CORNER_BOTTOM_RIGHT].vertical,
|
||||
inner->corner[GSK_CORNER_BOTTOM_RIGHT].horizontal,
|
||||
inner->corner[GSK_CORNER_BOTTOM_RIGHT].vertical,
|
||||
inner->box.x + inner->box.width - inner->corner[GSK_CORNER_BOTTOM_RIGHT].width,
|
||||
inner->box.y + inner->box.height - inner->corner[GSK_CORNER_BOTTOM_RIGHT].height,
|
||||
inner->corner[GSK_CORNER_BOTTOM_RIGHT].width,
|
||||
inner->corner[GSK_CORNER_BOTTOM_RIGHT].height,
|
||||
middle_angle, start_angle);
|
||||
|
||||
cairo_close_path (cr);
|
||||
@ -660,29 +660,29 @@ _gtk_rounded_box_path_left (const GtkRoundedBox *outer,
|
||||
cairo_new_sub_path (cr);
|
||||
|
||||
_cairo_ellipsis (cr,
|
||||
outer->box.x + outer->corner[GSK_CORNER_BOTTOM_LEFT].horizontal,
|
||||
outer->box.y + outer->box.height - outer->corner[GSK_CORNER_BOTTOM_LEFT].vertical,
|
||||
outer->corner[GSK_CORNER_BOTTOM_LEFT].horizontal,
|
||||
outer->corner[GSK_CORNER_BOTTOM_LEFT].vertical,
|
||||
outer->box.x + outer->corner[GSK_CORNER_BOTTOM_LEFT].width,
|
||||
outer->box.y + outer->box.height - outer->corner[GSK_CORNER_BOTTOM_LEFT].height,
|
||||
outer->corner[GSK_CORNER_BOTTOM_LEFT].width,
|
||||
outer->corner[GSK_CORNER_BOTTOM_LEFT].height,
|
||||
start_angle, middle_angle);
|
||||
_cairo_ellipsis (cr,
|
||||
outer->box.x + outer->corner[GSK_CORNER_TOP_LEFT].horizontal,
|
||||
outer->box.y + outer->corner[GSK_CORNER_TOP_LEFT].vertical,
|
||||
outer->corner[GSK_CORNER_TOP_LEFT].horizontal,
|
||||
outer->corner[GSK_CORNER_TOP_LEFT].vertical,
|
||||
outer->box.x + outer->corner[GSK_CORNER_TOP_LEFT].width,
|
||||
outer->box.y + outer->corner[GSK_CORNER_TOP_LEFT].height,
|
||||
outer->corner[GSK_CORNER_TOP_LEFT].width,
|
||||
outer->corner[GSK_CORNER_TOP_LEFT].height,
|
||||
middle_angle, end_angle);
|
||||
|
||||
_cairo_ellipsis_negative (cr,
|
||||
inner->box.x + inner->corner[GSK_CORNER_TOP_LEFT].horizontal,
|
||||
inner->box.y + inner->corner[GSK_CORNER_TOP_LEFT].vertical,
|
||||
inner->corner[GSK_CORNER_TOP_LEFT].horizontal,
|
||||
inner->corner[GSK_CORNER_TOP_LEFT].vertical,
|
||||
inner->box.x + inner->corner[GSK_CORNER_TOP_LEFT].width,
|
||||
inner->box.y + inner->corner[GSK_CORNER_TOP_LEFT].height,
|
||||
inner->corner[GSK_CORNER_TOP_LEFT].width,
|
||||
inner->corner[GSK_CORNER_TOP_LEFT].height,
|
||||
end_angle, middle_angle);
|
||||
_cairo_ellipsis_negative (cr,
|
||||
inner->box.x + inner->corner[GSK_CORNER_BOTTOM_LEFT].horizontal,
|
||||
inner->box.y + inner->box.height - inner->corner[GSK_CORNER_BOTTOM_LEFT].vertical,
|
||||
inner->corner[GSK_CORNER_BOTTOM_LEFT].horizontal,
|
||||
inner->corner[GSK_CORNER_BOTTOM_LEFT].vertical,
|
||||
inner->box.x + inner->corner[GSK_CORNER_BOTTOM_LEFT].width,
|
||||
inner->box.y + inner->box.height - inner->corner[GSK_CORNER_BOTTOM_LEFT].height,
|
||||
inner->corner[GSK_CORNER_BOTTOM_LEFT].width,
|
||||
inner->corner[GSK_CORNER_BOTTOM_LEFT].height,
|
||||
middle_angle, start_angle);
|
||||
|
||||
cairo_close_path (cr);
|
||||
@ -726,20 +726,20 @@ _gtk_rounded_box_contains_rectangle (const GtkRoundedBox *box,
|
||||
y2 > box->box.y + box->box.height)
|
||||
return FALSE;
|
||||
|
||||
if (x1 < box->box.x + box->corner[GSK_CORNER_TOP_LEFT].horizontal &&
|
||||
y1 < box->box.y + box->corner[GSK_CORNER_TOP_LEFT].vertical)
|
||||
if (x1 < box->box.x + box->corner[GSK_CORNER_TOP_LEFT].width &&
|
||||
y1 < box->box.y + box->corner[GSK_CORNER_TOP_LEFT].height)
|
||||
return FALSE;
|
||||
|
||||
if (x2 > box->box.x + box->box.width - box->corner[GSK_CORNER_TOP_RIGHT].horizontal &&
|
||||
y1 < box->box.y + box->corner[GSK_CORNER_TOP_RIGHT].vertical)
|
||||
if (x2 > box->box.x + box->box.width - box->corner[GSK_CORNER_TOP_RIGHT].width &&
|
||||
y1 < box->box.y + box->corner[GSK_CORNER_TOP_RIGHT].height)
|
||||
return FALSE;
|
||||
|
||||
if (x2 > box->box.x + box->box.width - box->corner[GSK_CORNER_BOTTOM_RIGHT].horizontal &&
|
||||
y2 > box->box.y + box->box.height - box->corner[GSK_CORNER_BOTTOM_RIGHT].vertical)
|
||||
if (x2 > box->box.x + box->box.width - box->corner[GSK_CORNER_BOTTOM_RIGHT].width &&
|
||||
y2 > box->box.y + box->box.height - box->corner[GSK_CORNER_BOTTOM_RIGHT].height)
|
||||
return FALSE;
|
||||
|
||||
if (x1 < box->box.x + box->corner[GSK_CORNER_BOTTOM_LEFT].horizontal &&
|
||||
y2 > box->box.y + box->box.height - box->corner[GSK_CORNER_BOTTOM_LEFT].vertical)
|
||||
if (x1 < box->box.x + box->corner[GSK_CORNER_BOTTOM_LEFT].width &&
|
||||
y2 > box->box.y + box->box.height - box->corner[GSK_CORNER_BOTTOM_LEFT].height)
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
|
@ -29,17 +29,11 @@
|
||||
G_BEGIN_DECLS
|
||||
|
||||
typedef struct _GtkRoundedBox GtkRoundedBox;
|
||||
typedef struct _GtkRoundedBoxCorner GtkRoundedBoxCorner;
|
||||
|
||||
struct _GtkRoundedBoxCorner {
|
||||
double horizontal;
|
||||
double vertical;
|
||||
};
|
||||
|
||||
struct _GtkRoundedBox {
|
||||
/*< private >*/
|
||||
cairo_rectangle_t box;
|
||||
GtkRoundedBoxCorner corner[4];
|
||||
graphene_size_t corner[4];
|
||||
};
|
||||
|
||||
void _gtk_rounded_box_init_rect (GtkRoundedBox *box,
|
||||
|
Loading…
Reference in New Issue
Block a user