summaryrefslogtreecommitdiff
path: root/libnautilus-extensions/nautilus-icon-canvas-item.c
diff options
context:
space:
mode:
Diffstat (limited to 'libnautilus-extensions/nautilus-icon-canvas-item.c')
-rw-r--r--libnautilus-extensions/nautilus-icon-canvas-item.c38
1 files changed, 29 insertions, 9 deletions
diff --git a/libnautilus-extensions/nautilus-icon-canvas-item.c b/libnautilus-extensions/nautilus-icon-canvas-item.c
index 081faf2ba..151a9d608 100644
--- a/libnautilus-extensions/nautilus-icon-canvas-item.c
+++ b/libnautilus-extensions/nautilus-icon-canvas-item.c
@@ -356,6 +356,15 @@ nautilus_icon_canvas_item_invalidate_label_size (NautilusIconCanvasItem *item)
static int
nautilus_icon_canvas_item_get_icon_width (NautilusIconCanvasItem *item)
{
+ GtkRequisition size_requisition;
+ double scale_factor = GNOME_CANVAS_ITEM (item)->canvas->pixels_per_unit;
+
+ gtk_widget_size_request (item->details->control, &size_requisition);
+
+ if (item->details->control != NULL) {
+ return size_requisition.width * scale_factor;
+ }
+
if (item->details->pixbuf == NULL) {
return NAUTILUS_ICON_SIZE_STANDARD;
}
@@ -366,6 +375,14 @@ nautilus_icon_canvas_item_get_icon_width (NautilusIconCanvasItem *item)
static int
nautilus_icon_canvas_item_get_icon_height (NautilusIconCanvasItem *item)
{
+ GtkRequisition size_requisition;
+ double scale_factor = GNOME_CANVAS_ITEM (item)->canvas->pixels_per_unit;
+
+ gtk_widget_size_request (item->details->control, &size_requisition);
+
+ if (item->details->control != NULL) {
+ return size_requisition.height * scale_factor;
+ }
if (item->details->pixbuf == NULL) {
return NAUTILUS_ICON_SIZE_STANDARD;
}
@@ -663,11 +680,14 @@ recompute_bounding_box (NautilusIconCanvasItem *icon_item)
}
+
void
nautilus_icon_canvas_item_update_bounds (NautilusIconCanvasItem *item)
{
ArtIRect before, after;
-
+ GtkRequisition size_requisition;
+ int item_width, item_height;
+
/* Compute new bounds. */
nautilus_gnome_canvas_item_get_current_canvas_bounds
(GNOME_CANVAS_ITEM (item), &before);
@@ -680,14 +700,14 @@ nautilus_icon_canvas_item_update_bounds (NautilusIconCanvasItem *item)
return;
}
- /* if there is an embedded control, resize it appropriately */
- if (item->details->control) {
- /* for now, size it the same as the underlying image */
- int image_width = nautilus_icon_canvas_item_get_icon_width (item);
- int image_height = nautilus_icon_canvas_item_get_icon_height (item);
-
- gtk_widget_set_usize (item->details->control,
- image_width, image_height);
+ /* if there is an embedded control, make a size request and size accordingly */
+ if (item->details->control) {
+ /* size the control appropriately */
+ gtk_widget_size_request (item->details->control, &size_requisition);
+ item_width = size_requisition.width * GNOME_CANVAS_ITEM (item)->canvas->pixels_per_unit;
+ item_height = size_requisition.height * GNOME_CANVAS_ITEM (item)->canvas->pixels_per_unit;
+
+ gtk_widget_set_usize (item->details->control, item_width, item_height);
}
/* Send out the bounds_changed signal and queue a redraw. */