forked from AuroraMiddleware/gtk
Fixed get_size() for GtkCellRendererText to clip to the input area
For ellipsize cells it's important to clip the result of get_size() so that the returned required rectangle is indeed less than or equal to the input rectangle... this is done so that GtkCellArea can accurately paint focus on cells by calling gtk_cell_renderer_get_aligned_area(). Patch also adds assertions to gtk_cell_renderer_get_aligned_area() to ensure this keeps working correctly.
This commit is contained in:
parent
e41fb7703c
commit
9a80100e9a
@ -1657,4 +1657,9 @@ gtk_cell_renderer_get_aligned_area (GtkCellRenderer *cell,
|
||||
|
||||
klass = GTK_CELL_RENDERER_GET_CLASS (cell);
|
||||
klass->get_aligned_area (cell, widget, flags, cell_area, aligned_area);
|
||||
|
||||
g_assert (aligned_area->x >= cell_area->x && aligned_area->x < cell_area->x + cell_area->width);
|
||||
g_assert (aligned_area->y >= cell_area->y && aligned_area->y < cell_area->y + cell_area->height);
|
||||
g_assert ((aligned_area->x - cell_area->x) + aligned_area->width <= cell_area->width);
|
||||
g_assert ((aligned_area->y - cell_area->y) + aligned_area->height <= cell_area->height);
|
||||
}
|
||||
|
@ -1736,18 +1736,15 @@ get_size (GtkCellRenderer *cell,
|
||||
|
||||
pango_layout_get_pixel_extents (layout, NULL, &rect);
|
||||
|
||||
if (height)
|
||||
*height = ypad * 2 + rect.height;
|
||||
|
||||
if (width)
|
||||
*width = xpad * 2 + rect.x + rect.width;
|
||||
|
||||
if (cell_area)
|
||||
{
|
||||
gfloat xalign, yalign;
|
||||
|
||||
gtk_cell_renderer_get_alignment (cell, &xalign, &yalign);
|
||||
|
||||
rect.height = MIN (rect.height, cell_area->height - 2 * ypad);
|
||||
rect.width = MIN (rect.width, cell_area->width - (2 * xpad) - rect.x);
|
||||
|
||||
if (x_offset)
|
||||
{
|
||||
if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL)
|
||||
@ -1770,6 +1767,12 @@ get_size (GtkCellRenderer *cell,
|
||||
if (y_offset) *y_offset = 0;
|
||||
}
|
||||
|
||||
if (height)
|
||||
*height = ypad * 2 + rect.height;
|
||||
|
||||
if (width)
|
||||
*width = xpad * 2 + rect.x + rect.width;
|
||||
|
||||
g_object_unref (layout);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user