app: port to the new size request API

This commit is contained in:
Michael Natterer 2010-10-28 13:27:46 +02:00
parent 694e5ac9f6
commit 20627342ac
7 changed files with 409 additions and 279 deletions

View File

@ -49,33 +49,37 @@ enum
};
static void gimp_dash_editor_finalize (GObject *object);
static void gimp_dash_editor_set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec);
static void gimp_dash_editor_get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec);
static void gimp_dash_editor_finalize (GObject *object);
static void gimp_dash_editor_set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec);
static void gimp_dash_editor_get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec);
static void gimp_dash_editor_size_request (GtkWidget *widget,
GtkRequisition *requisition);
static gboolean gimp_dash_editor_draw (GtkWidget *widget,
cairo_t *cr);
static gboolean gimp_dash_editor_button_press (GtkWidget *widget,
GdkEventButton *bevent);
static gboolean gimp_dash_editor_button_release (GtkWidget *widget,
GdkEventButton *bevent);
static gboolean gimp_dash_editor_motion_notify (GtkWidget *widget,
GdkEventMotion *bevent);
static void gimp_dash_editor_get_preferred_width (GtkWidget *widget,
gint *minimum_width,
gint *natural_width);
static void gimp_dash_editor_get_preferred_height (GtkWidget *widget,
gint *minimum_height,
gint *natural_height);
static gboolean gimp_dash_editor_draw (GtkWidget *widget,
cairo_t *cr);
static gboolean gimp_dash_editor_button_press (GtkWidget *widget,
GdkEventButton *bevent);
static gboolean gimp_dash_editor_button_release (GtkWidget *widget,
GdkEventButton *bevent);
static gboolean gimp_dash_editor_motion_notify (GtkWidget *widget,
GdkEventMotion *bevent);
/* helper function */
static void update_segments_from_options (GimpDashEditor *editor);
static void update_options_from_segments (GimpDashEditor *editor);
static void update_blocksize (GimpDashEditor *editor);
static gint dash_x_to_index (GimpDashEditor *editor,
gint x);
static void update_segments_from_options (GimpDashEditor *editor);
static void update_options_from_segments (GimpDashEditor *editor);
static void update_blocksize (GimpDashEditor *editor);
static gint dash_x_to_index (GimpDashEditor *editor,
gint x);
G_DEFINE_TYPE (GimpDashEditor, gimp_dash_editor, GTK_TYPE_DRAWING_AREA)
@ -93,7 +97,8 @@ gimp_dash_editor_class_init (GimpDashEditorClass *klass)
object_class->get_property = gimp_dash_editor_get_property;
object_class->set_property = gimp_dash_editor_set_property;
widget_class->size_request = gimp_dash_editor_size_request;
widget_class->get_preferred_width = gimp_dash_editor_get_preferred_width;
widget_class->get_preferred_height = gimp_dash_editor_get_preferred_height;
widget_class->draw = gimp_dash_editor_draw;
widget_class->button_press_event = gimp_dash_editor_button_press;
widget_class->button_release_event = gimp_dash_editor_button_release;
@ -214,14 +219,26 @@ gimp_dash_editor_get_property (GObject *object,
}
static void
gimp_dash_editor_size_request (GtkWidget *widget,
GtkRequisition *requisition)
gimp_dash_editor_get_preferred_width (GtkWidget *widget,
gint *minimum_width,
gint *natural_width)
{
GimpDashEditor *editor = GIMP_DASH_EDITOR (widget);
requisition->width = MAX (editor->block_width * editor->n_segments + 20,
MIN_WIDTH);
requisition->height = MAX (editor->block_height + 10, MIN_HEIGHT);
*minimum_width = *natural_width = MAX (editor->block_width *
editor->n_segments + 20,
MIN_WIDTH);
}
static void
gimp_dash_editor_get_preferred_height (GtkWidget *widget,
gint *minimum_height,
gint *natural_height)
{
GimpDashEditor *editor = GIMP_DASH_EDITOR (widget);
*minimum_height = *natural_height = MAX (editor->block_height + 10,
MIN_HEIGHT);
}
static gboolean

View File

@ -78,51 +78,54 @@ struct _GimpDockablePrivate
static void gimp_dockable_session_managed_iface_init
(GimpSessionManagedInterface
*iface);
static void gimp_dockable_dispose (GObject *object);
static void gimp_dockable_set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec);
static void gimp_dockable_get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec);
(GimpSessionManagedInterface
*iface);
static void gimp_dockable_dispose (GObject *object);
static void gimp_dockable_set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec);
static void gimp_dockable_get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec);
static void gimp_dockable_size_request (GtkWidget *widget,
GtkRequisition *requisition);
static void gimp_dockable_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static void gimp_dockable_drag_leave (GtkWidget *widget,
GdkDragContext *context,
guint time);
static gboolean gimp_dockable_drag_motion (GtkWidget *widget,
GdkDragContext *context,
gint x,
gint y,
guint time);
static gboolean gimp_dockable_drag_drop (GtkWidget *widget,
GdkDragContext *context,
gint x,
gint y,
guint time);
static void gimp_dockable_get_preferred_width (GtkWidget *widget,
gint *minimum_width,
gint *natural_width);
static void gimp_dockable_get_preferred_height (GtkWidget *widget,
gint *minimum_height,
gint *natural_height);
static void gimp_dockable_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static void gimp_dockable_drag_leave (GtkWidget *widget,
GdkDragContext *context,
guint time);
static gboolean gimp_dockable_drag_motion (GtkWidget *widget,
GdkDragContext *context,
gint x,
gint y,
guint time);
static gboolean gimp_dockable_drag_drop (GtkWidget *widget,
GdkDragContext *context,
gint x,
gint y,
guint time);
static void gimp_dockable_style_set (GtkWidget *widget,
GtkStyle *prev_style);
static void gimp_dockable_add (GtkContainer *container,
GtkWidget *widget);
static GType gimp_dockable_child_type (GtkContainer *container);
static GList * gimp_dockable_get_aux_info (GimpSessionManaged
*session_managed);
static void gimp_dockable_set_aux_info (GimpSessionManaged
*session_managed,
GList *aux_info);
static void gimp_dockable_style_set (GtkWidget *widget,
GtkStyle *prev_style);
static void gimp_dockable_add (GtkContainer *container,
GtkWidget *widget);
static GType gimp_dockable_child_type (GtkContainer *container);
static GList * gimp_dockable_get_aux_info (GimpSessionManaged
*session_managed);
static void gimp_dockable_set_aux_info (GimpSessionManaged
*session_managed,
GList *aux_info);
static GimpTabStyle
gimp_dockable_convert_tab_style (GimpDockable *dockable,
GimpTabStyle tab_style);
gimp_dockable_convert_tab_style (GimpDockable *dockable,
GimpTabStyle tab_style);
G_DEFINE_TYPE_WITH_CODE (GimpDockable, gimp_dockable, GTK_TYPE_BIN,
@ -141,19 +144,22 @@ gimp_dockable_class_init (GimpDockableClass *klass)
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
GtkContainerClass *container_class = GTK_CONTAINER_CLASS (klass);
object_class->dispose = gimp_dockable_dispose;
object_class->set_property = gimp_dockable_set_property;
object_class->get_property = gimp_dockable_get_property;
object_class->dispose = gimp_dockable_dispose;
object_class->set_property = gimp_dockable_set_property;
object_class->get_property = gimp_dockable_get_property;
widget_class->size_request = gimp_dockable_size_request;
widget_class->size_allocate = gimp_dockable_size_allocate;
widget_class->style_set = gimp_dockable_style_set;
widget_class->drag_leave = gimp_dockable_drag_leave;
widget_class->drag_motion = gimp_dockable_drag_motion;
widget_class->drag_drop = gimp_dockable_drag_drop;
widget_class->get_preferred_width = gimp_dockable_get_preferred_width;
widget_class->get_preferred_height = gimp_dockable_get_preferred_height;
widget_class->size_allocate = gimp_dockable_size_allocate;
widget_class->style_set = gimp_dockable_style_set;
widget_class->drag_leave = gimp_dockable_drag_leave;
widget_class->drag_motion = gimp_dockable_drag_motion;
widget_class->drag_drop = gimp_dockable_drag_drop;
container_class->add = gimp_dockable_add;
container_class->child_type = gimp_dockable_child_type;
container_class->add = gimp_dockable_add;
container_class->child_type = gimp_dockable_child_type;
gtk_container_class_handle_border_width (container_class);
g_object_class_install_property (object_class, PROP_LOCKED,
g_param_spec_boolean ("locked", NULL, NULL,
@ -274,18 +280,15 @@ static void
gimp_dockable_size_request (GtkWidget *widget,
GtkRequisition *requisition)
{
GtkContainer *container = GTK_CONTAINER (widget);
GtkWidget *child = gtk_bin_get_child (GTK_BIN (widget));
GtkRequisition child_requisition;
gint border_width;
GtkWidget *child = gtk_bin_get_child (GTK_BIN (widget));
border_width = gtk_container_get_border_width (container);
requisition->width = border_width * 2;
requisition->height = border_width * 2;
requisition->width = 0;
requisition->height = 0;
if (child && gtk_widget_get_visible (child))
{
GtkRequisition child_requisition;
gtk_widget_get_preferred_size (child, &child_requisition, NULL);
requisition->width += child_requisition.width;
@ -293,35 +296,46 @@ gimp_dockable_size_request (GtkWidget *widget,
}
}
static void
gimp_dockable_get_preferred_width (GtkWidget *widget,
gint *minimum_width,
gint *natural_width)
{
GtkRequisition requisition;
gimp_dockable_size_request (widget, &requisition);
*minimum_width = *natural_width = requisition.width;
}
static void
gimp_dockable_get_preferred_height (GtkWidget *widget,
gint *minimum_height,
gint *natural_height)
{
GtkRequisition requisition;
gimp_dockable_size_request (widget, &requisition);
*minimum_height = *natural_height = requisition.height;
}
static void
gimp_dockable_size_allocate (GtkWidget *widget,
GtkAllocation *allocation)
{
GtkContainer *container = GTK_CONTAINER (widget);
GtkWidget *child = gtk_bin_get_child (GTK_BIN (widget));
GtkRequisition button_requisition = { 0, };
GtkAllocation child_allocation;
gint border_width;
GtkWidget *child = gtk_bin_get_child (GTK_BIN (widget));
gtk_widget_set_allocation (widget, allocation);
border_width = gtk_container_get_border_width (container);
if (child && gtk_widget_get_visible (child))
{
child_allocation.x = allocation->x + border_width;
child_allocation.y = allocation->y + border_width;
child_allocation.width = MAX (allocation->width -
border_width * 2,
0);
child_allocation.height = MAX (allocation->height -
border_width * 2 -
button_requisition.height,
0);
GtkAllocation child_allocation;
child_allocation.y += button_requisition.height;
child_allocation.x = allocation->x;
child_allocation.y = allocation->y;
child_allocation.width = allocation->width;
child_allocation.height = allocation->height;
gtk_widget_size_allocate (child, &child_allocation);
}

View File

@ -51,26 +51,30 @@ enum
};
static void gimp_histogram_view_dispose (GObject *object);
static void gimp_histogram_view_set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec);
static void gimp_histogram_view_get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec);
static void gimp_histogram_view_dispose (GObject *object);
static void gimp_histogram_view_set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec);
static void gimp_histogram_view_get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec);
static void gimp_histogram_view_size_request (GtkWidget *widget,
GtkRequisition *requisition);
static gboolean gimp_histogram_view_draw (GtkWidget *widget,
cairo_t *cr);
static gboolean gimp_histogram_view_button_press (GtkWidget *widget,
GdkEventButton *bevent);
static gboolean gimp_histogram_view_button_release (GtkWidget *widget,
GdkEventButton *bevent);
static gboolean gimp_histogram_view_motion_notify (GtkWidget *widget,
GdkEventMotion *bevent);
static void gimp_histogram_view_get_preferred_width (GtkWidget *widget,
gint *minimum_width,
gint *natural_width);
static void gimp_histogram_view_get_preferred_height (GtkWidget *widget,
gint *minimum_height,
gint *natural_height);
static gboolean gimp_histogram_view_draw (GtkWidget *widget,
cairo_t *cr);
static gboolean gimp_histogram_view_button_press (GtkWidget *widget,
GdkEventButton *bevent);
static gboolean gimp_histogram_view_button_release (GtkWidget *widget,
GdkEventButton *bevent);
static gboolean gimp_histogram_view_motion_notify (GtkWidget *widget,
GdkEventMotion *bevent);
static void gimp_histogram_view_notify (GimpHistogram *histogram,
const GParamSpec *pspec,
@ -121,7 +125,8 @@ gimp_histogram_view_class_init (GimpHistogramViewClass *klass)
object_class->get_property = gimp_histogram_view_get_property;
object_class->set_property = gimp_histogram_view_set_property;
widget_class->size_request = gimp_histogram_view_size_request;
widget_class->get_preferred_width = gimp_histogram_view_get_preferred_width;
widget_class->get_preferred_height = gimp_histogram_view_get_preferred_height;
widget_class->draw = gimp_histogram_view_draw;
widget_class->button_press_event = gimp_histogram_view_button_press;
widget_class->button_release_event = gimp_histogram_view_button_release;
@ -243,13 +248,23 @@ gimp_histogram_view_get_property (GObject *object,
}
static void
gimp_histogram_view_size_request (GtkWidget *widget,
GtkRequisition *requisition)
gimp_histogram_view_get_preferred_width (GtkWidget *widget,
gint *minimum_width,
gint *natural_width)
{
GimpHistogramView *view = GIMP_HISTOGRAM_VIEW (widget);
requisition->width = MIN_WIDTH + 2 * view->border_width;
requisition->height = MIN_HEIGHT + 2 * view->border_width;
*minimum_width = *natural_width = MIN_WIDTH + 2 * view->border_width;
}
static void
gimp_histogram_view_get_preferred_height (GtkWidget *widget,
gint *minimum_height,
gint *natural_height)
{
GimpHistogramView *view = GIMP_HISTOGRAM_VIEW (widget);
*minimum_height = *natural_height = MIN_HEIGHT + 2 * view->border_width;
}
static gdouble

View File

@ -42,36 +42,39 @@ enum
};
static void gimp_message_box_constructed (GObject *object);
static void gimp_message_box_dispose (GObject *object);
static void gimp_message_box_finalize (GObject *object);
static void gimp_message_box_set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec);
static void gimp_message_box_get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec);
static void gimp_message_box_constructed (GObject *object);
static void gimp_message_box_dispose (GObject *object);
static void gimp_message_box_finalize (GObject *object);
static void gimp_message_box_set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec);
static void gimp_message_box_get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec);
static void gimp_message_box_forall (GtkContainer *container,
gboolean include_internals,
GtkCallback callback,
gpointer callback_data);
static void gimp_message_box_get_preferred_width (GtkWidget *widget,
gint *minimum_width,
gint *natural_width);
static void gimp_message_box_get_preferred_height (GtkWidget *widget,
gint *minimum_height,
gint *natural_height);
static void gimp_message_box_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static void gimp_message_box_size_request (GtkWidget *widget,
GtkRequisition *requisition);
static void gimp_message_box_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static void gimp_message_box_set_label_text (GimpMessageBox *box,
gint n,
const gchar *format,
va_list args) G_GNUC_PRINTF (3, 0);
static void gimp_message_box_set_label_markup (GimpMessageBox *box,
gint n,
const gchar *format,
va_list args) G_GNUC_PRINTF (3, 0);
static void gimp_message_box_forall (GtkContainer *container,
gboolean include_internals,
GtkCallback callback,
gpointer callback_data);
static void gimp_message_box_set_label_text (GimpMessageBox *box,
gint n,
const gchar *format,
va_list args) G_GNUC_PRINTF (3, 0);
static void gimp_message_box_set_label_markup (GimpMessageBox *box,
gint n,
const gchar *format,
va_list args) G_GNUC_PRINTF (3, 0);
static gboolean gimp_message_box_update (gpointer data);
@ -87,17 +90,19 @@ gimp_message_box_class_init (GimpMessageBoxClass *klass)
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
GtkContainerClass *container_class = GTK_CONTAINER_CLASS (klass);
object_class->constructed = gimp_message_box_constructed;
object_class->dispose = gimp_message_box_dispose;
object_class->finalize = gimp_message_box_finalize;
object_class->set_property = gimp_message_box_set_property;
object_class->get_property = gimp_message_box_get_property;
object_class->constructed = gimp_message_box_constructed;
object_class->dispose = gimp_message_box_dispose;
object_class->finalize = gimp_message_box_finalize;
object_class->set_property = gimp_message_box_set_property;
object_class->get_property = gimp_message_box_get_property;
widget_class->get_preferred_width = gimp_message_box_get_preferred_width;
widget_class->get_preferred_height = gimp_message_box_get_preferred_height;
widget_class->size_allocate = gimp_message_box_size_allocate;
widget_class->size_request = gimp_message_box_size_request;
widget_class->size_allocate = gimp_message_box_size_allocate;
container_class->forall = gimp_message_box_forall;
container_class->forall = gimp_message_box_forall;
gtk_container_class_handle_border_width (container_class);
g_object_class_install_property (object_class, PROP_ICON_NAME,
g_param_spec_string ("icon-name", NULL, NULL,
@ -239,26 +244,50 @@ gimp_message_box_get_property (GObject *object,
}
static void
gimp_message_box_size_request (GtkWidget *widget,
GtkRequisition *requisition)
gimp_message_box_get_preferred_width (GtkWidget *widget,
gint *minimum_width,
gint *natural_width)
{
GimpMessageBox *box = GIMP_MESSAGE_BOX (widget);
GTK_WIDGET_CLASS (parent_class)->size_request (widget, requisition);
GTK_WIDGET_CLASS (parent_class)->get_preferred_width (widget,
minimum_width,
natural_width);
if (box->image && gtk_widget_get_visible (box->image))
{
GtkRequisition child_requisition;
gint border_width;
gint image_minimum;
gint image_natural;
gtk_widget_get_preferred_size (box->image, &child_requisition, NULL);
gtk_widget_get_preferred_width (box->image,
&image_minimum, &image_natural);
border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
*minimum_width += image_minimum + GIMP_MESSAGE_BOX_SPACING;
*natural_width += image_natural + GIMP_MESSAGE_BOX_SPACING;
}
}
requisition->width += child_requisition.width + GIMP_MESSAGE_BOX_SPACING;
requisition->height = MAX (requisition->height,
child_requisition.height +
2 * border_width);
static void
gimp_message_box_get_preferred_height (GtkWidget *widget,
gint *minimum_height,
gint *natural_height)
{
GimpMessageBox *box = GIMP_MESSAGE_BOX (widget);
GTK_WIDGET_CLASS (parent_class)->get_preferred_height (widget,
minimum_height,
natural_height);
if (box->image && gtk_widget_get_visible (box->image))
{
gint image_minimum;
gint image_natural;
gtk_widget_get_preferred_height (box->image,
&image_minimum, &image_natural);
*minimum_height = MAX (*minimum_height, image_minimum);
*natural_height = MAX (*natural_height, image_natural);
}
}
@ -266,39 +295,32 @@ static void
gimp_message_box_size_allocate (GtkWidget *widget,
GtkAllocation *allocation)
{
GimpMessageBox *box = GIMP_MESSAGE_BOX (widget);
GtkContainer *container = GTK_CONTAINER (widget);
gint width = 0;
GimpMessageBox *box = GIMP_MESSAGE_BOX (widget);
gint width = 0;
gboolean rtl;
rtl = (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL);
if (box->image && gtk_widget_get_visible (box->image))
{
GtkRequisition child_requisition;
GtkAllocation child_allocation;
gint border_width;
gint height;
GtkRequisition child_requisition;
GtkAllocation child_allocation;
gint height;
gtk_widget_get_preferred_size (box->image, &child_requisition, NULL);
border_width = gtk_container_get_border_width (container);
width = MIN (allocation->width - 2 * border_width,
width = MIN (allocation->width,
child_requisition.width + GIMP_MESSAGE_BOX_SPACING);
width = MAX (1, width);
height = allocation->height - 2 * border_width;
height = MAX (1, height);
height = allocation->height;
if (rtl)
child_allocation.x = (allocation->width -
border_width -
child_requisition.width);
child_allocation.x = allocation->width - child_requisition.width;
else
child_allocation.x = allocation->x + border_width;
child_allocation.x = allocation->x;
child_allocation.y = allocation->y + border_width;
child_allocation.y = allocation->y;
child_allocation.width = width;
child_allocation.height = height;

View File

@ -72,15 +72,19 @@ static void gimp_overlay_dialog_get_property (GObject *object,
GValue *value,
GParamSpec *pspec);
static void gimp_overlay_dialog_size_request (GtkWidget *widget,
GtkRequisition *requisition);
static void gimp_overlay_dialog_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static void gimp_overlay_dialog_get_preferred_width (GtkWidget *widget,
gint *minimum_width,
gint *natural_width);
static void gimp_overlay_dialog_get_preferred_height (GtkWidget *widget,
gint *minimum_height,
gint *natural_height);
static void gimp_overlay_dialog_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static void gimp_overlay_dialog_forall (GtkContainer *container,
gboolean include_internals,
GtkCallback callback,
gpointer callback_data);
static void gimp_overlay_dialog_forall (GtkContainer *container,
gboolean include_internals,
GtkCallback callback,
gpointer callback_data);
static void gimp_overlay_dialog_detach (GimpOverlayDialog *dialog);
static void gimp_overlay_dialog_real_detach (GimpOverlayDialog *dialog);
@ -88,8 +92,8 @@ static void gimp_overlay_dialog_real_detach (GimpOverlayDialog *dialog);
static void gimp_overlay_dialog_close (GimpOverlayDialog *dialog);
static void gimp_overlay_dialog_real_close (GimpOverlayDialog *dialog);
static ResponseData * get_response_data (GtkWidget *widget,
gboolean create);
static ResponseData * get_response_data (GtkWidget *widget,
gboolean create);
G_DEFINE_TYPE (GimpOverlayDialog, gimp_overlay_dialog,
@ -113,10 +117,11 @@ gimp_overlay_dialog_class_init (GimpOverlayDialogClass *klass)
object_class->get_property = gimp_overlay_dialog_get_property;
object_class->set_property = gimp_overlay_dialog_set_property;
widget_class->size_request = gimp_overlay_dialog_size_request;
widget_class->size_allocate = gimp_overlay_dialog_size_allocate;
widget_class->get_preferred_width = gimp_overlay_dialog_get_preferred_width;
widget_class->get_preferred_height = gimp_overlay_dialog_get_preferred_height;
widget_class->size_allocate = gimp_overlay_dialog_size_allocate;
container_class->forall = gimp_overlay_dialog_forall;
container_class->forall = gimp_overlay_dialog_forall;
klass->detach = gimp_overlay_dialog_real_detach;
klass->close = gimp_overlay_dialog_real_close;
@ -336,42 +341,61 @@ gimp_overlay_dialog_get_property (GObject *object,
}
static void
gimp_overlay_dialog_size_request (GtkWidget *widget,
GtkRequisition *requisition)
gimp_overlay_dialog_get_preferred_width (GtkWidget *widget,
gint *minimum_width,
gint *natural_width)
{
GtkContainer *container = GTK_CONTAINER (widget);
GimpOverlayDialog *dialog = GIMP_OVERLAY_DIALOG (widget);
GtkWidget *child = gtk_bin_get_child (GTK_BIN (widget));
GtkRequisition child_requisition;
GtkRequisition header_requisition;
GtkRequisition action_requisition;
GimpOverlayDialog *dialog = GIMP_OVERLAY_DIALOG (widget);
GtkWidget *child = gtk_bin_get_child (GTK_BIN (widget));
gint border_width;
gint header_minimum;
gint header_natural;
gint action_minimum;
gint action_natural;
border_width = gtk_container_get_border_width (container);
requisition->width = border_width * 2;
requisition->height = border_width * 2;
border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
if (child && gtk_widget_get_visible (child))
{
gtk_widget_get_preferred_size (child, &child_requisition, NULL);
}
gtk_widget_get_preferred_width (child, minimum_width, natural_width);
else
{
child_requisition.width = 0;
child_requisition.height = 0;
}
*minimum_width = *natural_width = 0;
gtk_widget_get_preferred_size (dialog->header, &header_requisition, NULL);
gtk_widget_get_preferred_size (dialog->action_area, &action_requisition, NULL);
gtk_widget_get_preferred_width (dialog->header,
&header_minimum, &header_natural);
gtk_widget_get_preferred_width (dialog->action_area,
&action_minimum, &action_natural);
requisition->width += MAX (MAX (child_requisition.width,
action_requisition.width),
header_requisition.width);
requisition->height += (child_requisition.height +
2 * border_width +
header_requisition.height +
action_requisition.height);
*minimum_width = MAX (MAX (*minimum_width, action_minimum), header_minimum) + 2 * border_width;
*natural_width = MAX (MAX (*natural_width, action_natural), header_natural) + 2 * border_width;
}
static void
gimp_overlay_dialog_get_preferred_height (GtkWidget *widget,
gint *minimum_height,
gint *natural_height)
{
GimpOverlayDialog *dialog = GIMP_OVERLAY_DIALOG (widget);
GtkWidget *child = gtk_bin_get_child (GTK_BIN (widget));
gint border_width;
gint header_minimum;
gint header_natural;
gint action_minimum;
gint action_natural;
border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
if (child && gtk_widget_get_visible (child))
gtk_widget_get_preferred_height (child, minimum_height, natural_height);
else
*minimum_height = *natural_height = 0;
gtk_widget_get_preferred_height (dialog->header,
&header_minimum, &header_natural);
gtk_widget_get_preferred_height (dialog->action_area,
&action_minimum, &action_natural);
*minimum_height += header_minimum + action_minimum + 4 * border_width;
*natural_height += header_natural + action_natural + 4 * border_width;
}
static void

View File

@ -32,12 +32,16 @@
#include "gimpwidgets-utils.h"
static void gimp_overlay_frame_size_request (GtkWidget *widget,
GtkRequisition *requisition);
static void gimp_overlay_frame_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static gboolean gimp_overlay_frame_draw (GtkWidget *widget,
cairo_t *cr);
static void gimp_overlay_frame_get_preferred_width (GtkWidget *widget,
gint *minimum_width,
gint *natural_width);
static void gimp_overlay_frame_get_preferred_height (GtkWidget *widget,
gint *minimum_height,
gint *natural_height);
static void gimp_overlay_frame_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static gboolean gimp_overlay_frame_draw (GtkWidget *widget,
cairo_t *cr);
G_DEFINE_TYPE (GimpOverlayFrame, gimp_overlay_frame, GTK_TYPE_BIN)
@ -50,9 +54,10 @@ gimp_overlay_frame_class_init (GimpOverlayFrameClass *klass)
{
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
widget_class->size_request = gimp_overlay_frame_size_request;
widget_class->size_allocate = gimp_overlay_frame_size_allocate;
widget_class->draw = gimp_overlay_frame_draw;
widget_class->get_preferred_width = gimp_overlay_frame_get_preferred_width;
widget_class->get_preferred_height = gimp_overlay_frame_get_preferred_height;
widget_class->size_allocate = gimp_overlay_frame_size_allocate;
widget_class->draw = gimp_overlay_frame_draw;
}
static void
@ -62,46 +67,58 @@ gimp_overlay_frame_init (GimpOverlayFrame *frame)
}
static void
gimp_overlay_frame_size_request (GtkWidget *widget,
GtkRequisition *requisition)
gimp_overlay_frame_get_preferred_width (GtkWidget *widget,
gint *minimum_width,
gint *natural_width)
{
GtkWidget *child = gtk_bin_get_child (GTK_BIN (widget));
GtkRequisition child_requisition;
gint border_width;
GtkWidget *child = gtk_bin_get_child (GTK_BIN (widget));
gint border_width;
border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
requisition->width = border_width * 2;
requisition->height = border_width * 2;
if (child && gtk_widget_get_visible (child))
gtk_widget_get_preferred_width (child, minimum_width, natural_width);
else
*minimum_width = *natural_width = 0;
*minimum_width += 2 * border_width;
*natural_width += 2 * border_width;
}
static void
gimp_overlay_frame_get_preferred_height (GtkWidget *widget,
gint *minimum_height,
gint *natural_height)
{
GtkWidget *child = gtk_bin_get_child (GTK_BIN (widget));
gint border_width;
border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
if (child && gtk_widget_get_visible (child))
{
gtk_widget_get_preferred_size (child, &child_requisition, NULL);
}
gtk_widget_get_preferred_height (child, minimum_height, natural_height);
else
{
child_requisition.width = 0;
child_requisition.height = 0;
}
*minimum_height = *natural_height = 0;
requisition->width += child_requisition.width;
requisition->height += child_requisition.height;
*minimum_height += 2 * border_width;
*natural_height += 2 * border_width;
}
static void
gimp_overlay_frame_size_allocate (GtkWidget *widget,
GtkAllocation *allocation)
{
GtkWidget *child = gtk_bin_get_child (GTK_BIN (widget));
GtkAllocation child_allocation;
gint border_width;
GtkWidget *child = gtk_bin_get_child (GTK_BIN (widget));
gtk_widget_set_allocation (widget, allocation);
border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
if (child && gtk_widget_get_visible (child))
{
GtkAllocation child_allocation;
gint border_width;
border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
child_allocation.x = allocation->x + border_width;
child_allocation.y = allocation->y + border_width;
child_allocation.width = MAX (allocation->width - 2 * border_width, 0);

View File

@ -59,8 +59,12 @@ static void gimp_view_realize (GtkWidget *widget);
static void gimp_view_unrealize (GtkWidget *widget);
static void gimp_view_map (GtkWidget *widget);
static void gimp_view_unmap (GtkWidget *widget);
static void gimp_view_size_request (GtkWidget *widget,
GtkRequisition *requisition);
static void gimp_view_get_preferred_width (GtkWidget *widget,
gint *minimum_width,
gint *natural_width);
static void gimp_view_get_preferred_height (GtkWidget *widget,
gint *minimum_height,
gint *natural_height);
static void gimp_view_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static void gimp_view_style_updated (GtkWidget *widget);
@ -149,7 +153,8 @@ gimp_view_class_init (GimpViewClass *klass)
widget_class->unrealize = gimp_view_unrealize;
widget_class->map = gimp_view_map;
widget_class->unmap = gimp_view_unmap;
widget_class->size_request = gimp_view_size_request;
widget_class->get_preferred_width = gimp_view_get_preferred_width;
widget_class->get_preferred_height = gimp_view_get_preferred_height;
widget_class->size_allocate = gimp_view_size_allocate;
widget_class->style_updated = gimp_view_style_updated;
widget_class->draw = gimp_view_draw;
@ -272,22 +277,38 @@ gimp_view_unmap (GtkWidget *widget)
}
static void
gimp_view_size_request (GtkWidget *widget,
GtkRequisition *requisition)
gimp_view_get_preferred_width (GtkWidget *widget,
gint *minimum_width,
gint *natural_width)
{
GimpView *view = GIMP_VIEW (widget);
if (view->expand)
{
requisition->width = 2 * view->renderer->border_width + 1;
requisition->height = 2 * view->renderer->border_width + 1;
*minimum_width = *natural_width = 2 * view->renderer->border_width + 1;
}
else
{
requisition->width = (view->renderer->width +
2 * view->renderer->border_width);
requisition->height = (view->renderer->height +
2 * view->renderer->border_width);
*minimum_width = *natural_width = (view->renderer->width +
2 * view->renderer->border_width);
}
}
static void
gimp_view_get_preferred_height (GtkWidget *widget,
gint *minimum_height,
gint *natural_height)
{
GimpView *view = GIMP_VIEW (widget);
if (view->expand)
{
*minimum_height = *natural_height = 2 * view->renderer->border_width + 1;
}
else
{
*minimum_height = *natural_height = (view->renderer->height +
2 * view->renderer->border_width);
}
}