gimp r24964 - in trunk: . plug-ins/print
- From: neo svn gnome org
- To: svn-commits-list gnome org
- Subject: gimp r24964 - in trunk: . plug-ins/print
- Date: Tue, 26 Feb 2008 08:26:32 +0000 (GMT)
Author: neo
Date: Tue Feb 26 08:26:32 2008
New Revision: 24964
URL: http://svn.gnome.org/viewvc/gimp?rev=24964&view=rev
Log:
2008-02-26 Sven Neumann <sven gimp org>
* plug-ins/print/print-preview.[ch]: derive from GtkEventBox and
draw on the parent window.
* plug-ins/print/print-page-layout.c: tweaked dialog layout.
Modified:
trunk/ChangeLog
trunk/plug-ins/print/print-page-layout.c
trunk/plug-ins/print/print-preview.c
trunk/plug-ins/print/print-preview.h
Modified: trunk/plug-ins/print/print-page-layout.c
==============================================================================
--- trunk/plug-ins/print/print-page-layout.c (original)
+++ trunk/plug-ins/print/print-page-layout.c Tue Feb 26 08:26:32 2008
@@ -96,13 +96,9 @@
GtkWidget *
print_page_layout_gui (PrintData *data)
{
- GtkWidget *layout;
GtkWidget *main_hbox;
GtkWidget *main_vbox;
- GtkWidget *hbox;
- GtkWidget *vbox;
GtkWidget *button;
- GtkWidget *label;
GtkWidget *frame;
GtkPageSetup *setup;
GtkSizeGroup *label_group;
@@ -121,43 +117,15 @@
gtk_print_operation_set_default_page_setup (data->operation, setup);
}
- layout = gtk_vbox_new (FALSE, 6);
- gtk_container_set_border_width (GTK_CONTAINER (layout), 12);
-
- hbox = gtk_hbox_new (FALSE, 6);
- gtk_box_pack_start (GTK_BOX (layout), hbox, FALSE, FALSE, 0);
- gtk_widget_show (hbox);
-
- /* label for the printable area */
-
- label = gtk_label_new (_("Printable area:"));
- gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
- gtk_widget_show (label);
-
- label = gtk_label_new (NULL);
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gimp_label_set_attributes (GTK_LABEL (label),
- PANGO_ATTR_STYLE, PANGO_STYLE_ITALIC,
- -1);
- info.area_label = label;
-
- gtk_box_pack_start (GTK_BOX (hbox), info.area_label, TRUE, TRUE, 0);
- gtk_widget_show (info.area_label);
-
/* main hbox */
main_hbox = gtk_hbox_new (FALSE, 12);
- gtk_box_pack_start (GTK_BOX (layout), main_hbox, TRUE, TRUE, 0);
- gtk_widget_show (main_hbox);
+ gtk_container_set_border_width (GTK_CONTAINER (main_hbox), 12);
/* main vbox */
main_vbox = gtk_vbox_new (FALSE, 12);
gtk_box_pack_start (GTK_BOX (main_hbox), main_vbox, FALSE, FALSE, 0);
gtk_widget_show (main_vbox);
- vbox = gtk_vbox_new (FALSE, 6);
- gtk_box_pack_start (GTK_BOX (main_vbox), vbox, FALSE, FALSE, 0);
- gtk_widget_show (vbox);
-
label_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
entry_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
@@ -186,10 +154,16 @@
NULL);
gtk_widget_show (button);
- info.preview = gimp_print_preview_new (setup, data->drawable_id);
- gimp_print_preview_set_use_full_page (GIMP_PRINT_PREVIEW(info.preview),
- data->use_full_page);
- gtk_box_pack_start (GTK_BOX (main_hbox), info.preview, TRUE, TRUE, 0);
+ /* preview */
+ frame = gimp_frame_new (_("Preview"));
+ gtk_box_pack_start (GTK_BOX (main_hbox), frame, TRUE, TRUE, 0);
+ gtk_widget_show (frame);
+
+ info.preview = print_preview_new (setup, data->drawable_id);
+ print_preview_set_use_full_page (PRINT_PREVIEW (info.preview),
+ data->use_full_page);
+ gtk_widget_set_size_request (info.preview, 200, -1);
+ gtk_container_add (GTK_CONTAINER (frame), info.preview);
gtk_widget_show (info.preview);
g_signal_connect (info.preview, "offsets-changed",
@@ -200,9 +174,9 @@
g_signal_connect_object (data->operation, "notify::default-page-setup",
G_CALLBACK (print_page_setup_notify),
- layout, 0);
+ main_hbox, 0);
- return layout;
+ return main_hbox;
}
#define SB_WIDTH 8
@@ -214,8 +188,7 @@
setup = gtk_print_operation_get_default_page_setup (operation);
- gimp_print_preview_set_page_setup (GIMP_PRINT_PREVIEW (info.preview),
- setup);
+ print_preview_set_page_setup (PRINT_PREVIEW (info.preview), setup);
print_size_info_set_page_setup (&info);
}
@@ -639,9 +612,9 @@
print_size_info_update_offsets ();
if (info.preview)
- gimp_print_preview_set_image_offsets (GIMP_PRINT_PREVIEW (info.preview),
- info.data->offset_x,
- info.data->offset_y);
+ print_preview_set_image_offsets (PRINT_PREVIEW (info.preview),
+ info.data->offset_x,
+ info.data->offset_y);
}
}
@@ -704,9 +677,9 @@
info.data->offset_x = gimp_size_entry_get_refval (info.size_entry, LEFT);
info.data->offset_y = gimp_size_entry_get_refval (info.size_entry, TOP);
- gimp_print_preview_set_image_offsets (GIMP_PRINT_PREVIEW (info.preview),
- info.data->offset_x,
- info.data->offset_y);
+ print_preview_set_image_offsets (PRINT_PREVIEW (info.preview),
+ info.data->offset_x,
+ info.data->offset_y);
}
static void
@@ -747,8 +720,7 @@
print_size_info_set_page_setup (&info);
- gimp_print_preview_set_use_full_page (GIMP_PRINT_PREVIEW(info.preview),
- active);
+ print_preview_set_use_full_page (PRINT_PREVIEW(info.preview), active);
}
static void
@@ -820,12 +792,12 @@
print_size_info_update_offsets ();
- gimp_print_preview_set_image_dpi (GIMP_PRINT_PREVIEW (info->preview),
- data->xres, data->yres);
- gimp_print_preview_set_image_offsets (GIMP_PRINT_PREVIEW (info->preview),
- data->offset_x, data->offset_y);
- gimp_print_preview_set_image_offsets_max (GIMP_PRINT_PREVIEW (info->preview),
- offset_x_max, offset_y_max);
+ print_preview_set_image_dpi (PRINT_PREVIEW (info->preview),
+ data->xres, data->yres);
+ print_preview_set_image_offsets (PRINT_PREVIEW (info->preview),
+ data->offset_x, data->offset_y);
+ print_preview_set_image_offsets_max (PRINT_PREVIEW (info->preview),
+ offset_x_max, offset_y_max);
}
static void
@@ -833,8 +805,6 @@
{
GtkPageSetup *setup;
PrintData *data = info->data;
- gchar *format;
- gchar *text;
gdouble page_width;
gdouble page_height;
gdouble x;
@@ -849,15 +819,21 @@
page_width *= gimp_unit_get_factor (data->unit);
page_height *= gimp_unit_get_factor (data->unit);
- format = g_strdup_printf ("%%.%df x %%.%df %s",
- gimp_unit_get_digits (data->unit),
- gimp_unit_get_digits (data->unit),
- gimp_unit_get_plural (data->unit));
- text = g_strdup_printf (format, page_width, page_height);
- g_free (format);
+ if (info->area_label)
+ {
+ gchar *format;
+ gchar *text;
+
+ format = g_strdup_printf ("%%.%df x %%.%df %s",
+ gimp_unit_get_digits (data->unit),
+ gimp_unit_get_digits (data->unit),
+ gimp_unit_get_plural (data->unit));
+ text = g_strdup_printf (format, page_width, page_height);
+ g_free (format);
- gtk_label_set_text (GTK_LABEL (info->area_label), text);
- g_free (text);
+ gtk_label_set_text (GTK_LABEL (info->area_label), text);
+ g_free (text);
+ }
x = page_width;
y = page_height;
Modified: trunk/plug-ins/print/print-preview.c
==============================================================================
--- trunk/plug-ins/print/print-preview.c (original)
+++ trunk/plug-ins/print/print-preview.c Tue Feb 26 08:26:32 2008
@@ -24,9 +24,6 @@
#include "print-preview.h"
-#define DRAWING_AREA_SIZE 200
-
-
enum
{
OFFSETS_CHANGED,
@@ -34,11 +31,12 @@
};
-struct _GimpPrintPreview
+struct _PrintPreview
{
- GtkAspectFrame parent_instance;
+ GtkEventBox parent_instance;
+
+ GdkCursor *cursor;
- GtkWidget *area;
GtkPageSetup *page;
GdkPixbuf *pixbuf;
gboolean dragging;
@@ -54,51 +52,62 @@
gdouble image_height;
gboolean use_full_page;
+
+ /* for mouse drags */
+ gdouble orig_offset_x;
+ gdouble orig_offset_y;
+ gint start_x;
+ gint start_y;
};
-struct _GimpPrintPreviewClass
+struct _PrintPreviewClass
{
- GtkAspectFrameClass parent_class;
+ GtkEventBoxClass parent_class;
- void (* offsets_changed) (GimpPrintPreview *print_preview,
- gint offset_x,
- gint offset_y);
+ void (* offsets_changed) (PrintPreview *print_preview,
+ gint offset_x,
+ gint offset_y);
};
-static void gimp_print_preview_finalize (GObject *object);
-
-static void gimp_print_preview_size_allocate (GtkWidget *widget,
- GtkAllocation *allocation,
- GimpPrintPreview *preview);
-static void gimp_print_preview_realize (GtkWidget *widget);
-static gboolean gimp_print_preview_event (GtkWidget *widget,
- GdkEvent *event,
- GimpPrintPreview *preview);
-
-static gboolean gimp_print_preview_expose_event (GtkWidget *widget,
- GdkEventExpose *eevent,
- GimpPrintPreview *preview);
-
-static gdouble gimp_print_preview_get_scale (GimpPrintPreview *preview);
-
-static void gimp_print_preview_get_page_size (GimpPrintPreview *preview,
- gdouble *paper_width,
- gdouble *paper_height);
-static void gimp_print_preview_get_page_margins (GimpPrintPreview *preview,
- gdouble *left_margin,
- gdouble *right_margin,
- gdouble *top_margin,
- gdouble *bottom_margin);
+static void print_preview_finalize (GObject *object);
-static void print_preview_queue_draw (GimpPrintPreview *preview);
+static void print_preview_realize (GtkWidget *widget);
+static void print_preview_unrealize (GtkWidget *widget);
+static void print_preview_size_allocate (GtkWidget *widget,
+ GtkAllocation *allocation);
+static gboolean print_preview_expose_event (GtkWidget *widget,
+ GdkEventExpose *event);
+static gboolean print_preview_button_press_event (GtkWidget *widget,
+ GdkEventButton *event);
+static gboolean print_preview_button_release_event (GtkWidget *widget,
+ GdkEventButton *event);
+static gboolean print_preview_motion_notify_event (GtkWidget *widget,
+ GdkEventMotion *event);
+
+static gboolean print_preview_is_inside (PrintPreview *preview,
+ gdouble x,
+ gdouble y);
+static void print_preview_set_inside (PrintPreview *preview,
+ gboolean inside);
+
+static gdouble print_preview_get_scale (PrintPreview *preview);
+
+static void print_preview_get_page_size (PrintPreview *preview,
+ gdouble *paper_width,
+ gdouble *paper_height);
+static void print_preview_get_page_margins (PrintPreview *preview,
+ gdouble *left_margin,
+ gdouble *right_margin,
+ gdouble *top_margin,
+ gdouble *bottom_margin);
-G_DEFINE_TYPE (GimpPrintPreview, gimp_print_preview, GTK_TYPE_ASPECT_FRAME)
+G_DEFINE_TYPE (PrintPreview, print_preview, GTK_TYPE_EVENT_BOX)
-#define parent_class gimp_print_preview_parent_class
+#define parent_class print_preview_parent_class
-static guint gimp_print_preview_signals[LAST_SIGNAL] = { 0 };
+static guint print_preview_signals[LAST_SIGNAL] = { 0 };
#define g_marshal_value_peek_double(v) (v)->data[0].v_double
@@ -142,69 +151,51 @@
}
static void
-gimp_print_preview_class_init (GimpPrintPreviewClass *klass)
+print_preview_class_init (PrintPreviewClass *klass)
{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
- gimp_print_preview_signals[OFFSETS_CHANGED] =
+ print_preview_signals[OFFSETS_CHANGED] =
g_signal_new ("offsets-changed",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (GimpPrintPreviewClass, offsets_changed),
+ G_STRUCT_OFFSET (PrintPreviewClass, offsets_changed),
NULL, NULL,
marshal_VOID__DOUBLE_DOUBLE,
G_TYPE_NONE, 2,
G_TYPE_DOUBLE,
G_TYPE_DOUBLE);
- object_class->finalize = gimp_print_preview_finalize;
+ object_class->finalize = print_preview_finalize;
+
+ widget_class->realize = print_preview_realize;
+ widget_class->unrealize = print_preview_unrealize;
+ widget_class->size_allocate = print_preview_size_allocate;
+ widget_class->expose_event = print_preview_expose_event;
+ widget_class->button_press_event = print_preview_button_press_event;
+ widget_class->button_release_event = print_preview_button_release_event;
+ widget_class->motion_notify_event = print_preview_motion_notify_event;
klass->offsets_changed = NULL;
}
static void
-gimp_print_preview_init (GimpPrintPreview *preview)
+print_preview_init (PrintPreview *preview)
{
- preview->page = NULL;
- preview->pixbuf = NULL;
- preview->dragging = FALSE;
- preview->inside = FALSE;
- preview->image_offset_x = 0.0;
- preview->image_offset_y = 0.0;
- preview->image_offset_x_max = 0.0;
- preview->image_offset_y_max = 0.0;
- preview->image_width = 0.0;
- preview->image_height = 0.0;
- preview->use_full_page = FALSE;
-
- preview->area = gtk_drawing_area_new();
- gtk_container_add (GTK_CONTAINER (preview), preview->area);
- gtk_widget_show (preview->area);
+ gtk_event_box_set_visible_window (GTK_EVENT_BOX (preview), FALSE);
- gtk_widget_add_events (GTK_WIDGET (preview->area),
+ gtk_widget_add_events (GTK_WIDGET (preview),
GDK_BUTTON_PRESS_MASK |
- GDK_POINTER_MOTION_MASK |
- GDK_LEAVE_NOTIFY_MASK);
-
- g_signal_connect (preview->area, "size-allocate",
- G_CALLBACK (gimp_print_preview_size_allocate),
- preview);
- g_signal_connect (preview->area, "realize",
- G_CALLBACK (gimp_print_preview_realize),
- NULL);
- g_signal_connect (preview->area, "event",
- G_CALLBACK (gimp_print_preview_event),
- preview);
- g_signal_connect (preview->area, "expose-event",
- G_CALLBACK (gimp_print_preview_expose_event),
- preview);
+ GDK_BUTTON_RELEASE_MASK |
+ GDK_POINTER_MOTION_MASK);
}
static void
-gimp_print_preview_finalize (GObject *object)
+print_preview_finalize (GObject *object)
{
- GimpPrintPreview *preview = GIMP_PRINT_PREVIEW (object);
+ PrintPreview *preview = PRINT_PREVIEW (object);
if (preview->drawable)
{
@@ -224,63 +215,269 @@
preview->page = NULL;
}
- G_OBJECT_CLASS (gimp_print_preview_parent_class)->finalize (object);
+ G_OBJECT_CLASS (print_preview_parent_class)->finalize (object);
+}
+
+static void
+print_preview_realize (GtkWidget *widget)
+{
+ PrintPreview *preview = PRINT_PREVIEW (widget);
+
+ GTK_WIDGET_CLASS (print_preview_parent_class)->realize (widget);
+
+ preview->cursor = gdk_cursor_new_for_display (gtk_widget_get_display (widget),
+ GDK_FLEUR);
+}
+
+static void
+print_preview_unrealize (GtkWidget *widget)
+{
+ PrintPreview *preview = PRINT_PREVIEW (widget);
+
+ if (preview->cursor)
+ gdk_cursor_unref (preview->cursor);
+
+ GTK_WIDGET_CLASS (print_preview_parent_class)->unrealize (widget);
+}
+
+static void
+print_preview_size_allocate (GtkWidget *widget,
+ GtkAllocation *allocation)
+{
+ PrintPreview *preview = PRINT_PREVIEW (widget);
+
+ GTK_WIDGET_CLASS (print_preview_parent_class)->size_allocate (widget,
+ allocation);
+
+ if (preview->pixbuf != NULL)
+ {
+ g_object_unref (preview->pixbuf);
+ preview->pixbuf = NULL;
+ }
+}
+
+static gboolean
+print_preview_button_press_event (GtkWidget *widget,
+ GdkEventButton *event)
+{
+ PrintPreview *preview = PRINT_PREVIEW (widget);
+
+ if (event->type == GDK_BUTTON_PRESS && event->button == 1 && preview->inside)
+ {
+ gdk_pointer_grab (event->window, FALSE,
+ (GDK_BUTTON1_MOTION_MASK |
+ GDK_BUTTON_RELEASE_MASK),
+ NULL, NULL, event->time);
+
+ preview->orig_offset_x = preview->image_offset_x;
+ preview->orig_offset_y = preview->image_offset_y;
+
+ preview->start_x = event->x;
+ preview->start_y = event->y;
+
+ preview->dragging = TRUE;
+ }
+
+ return FALSE;
+}
+
+static gboolean
+print_preview_button_release_event (GtkWidget *widget,
+ GdkEventButton *event)
+{
+ PrintPreview *preview = PRINT_PREVIEW (widget);
+
+ if (preview->dragging)
+ {
+ gdk_display_pointer_ungrab (gtk_widget_get_display (widget),
+ event->time);
+ preview->dragging = FALSE;
+
+ print_preview_set_inside (preview,
+ print_preview_is_inside (preview,
+ event->x, event->y));
+ }
+
+ return FALSE;
+}
+
+static gboolean
+print_preview_motion_notify_event (GtkWidget *widget,
+ GdkEventMotion *event)
+{
+ PrintPreview *preview = PRINT_PREVIEW (widget);
+
+ if (preview->dragging)
+ {
+ gdouble scale = print_preview_get_scale (preview);
+ gdouble offset_x;
+ gdouble offset_y;
+
+ offset_x = (preview->orig_offset_x +
+ (event->x - preview->start_x) / scale);
+ offset_y = (preview->orig_offset_y +
+ (event->y - preview->start_y) / scale);
+
+ offset_x = CLAMP (offset_x, 0, preview->image_offset_x_max);
+ offset_y = CLAMP (offset_y, 0, preview->image_offset_y_max);
+
+ if (preview->image_offset_x != offset_x ||
+ preview->image_offset_y != offset_y)
+ {
+ print_preview_set_image_offsets (preview,
+ offset_x, offset_y);
+
+ g_signal_emit (preview,
+ print_preview_signals[OFFSETS_CHANGED], 0,
+ preview->image_offset_x,
+ preview->image_offset_y);
+ }
+ }
+ else
+ {
+ print_preview_set_inside (preview,
+ print_preview_is_inside (preview,
+ event->x, event->y));
+ }
+
+ return FALSE;
+}
+
+static gboolean
+print_preview_expose_event (GtkWidget *widget,
+ GdkEventExpose *event)
+{
+ PrintPreview *preview = PRINT_PREVIEW (widget);
+ cairo_t *cr;
+ gdouble paper_width;
+ gdouble paper_height;
+ gdouble left_margin;
+ gdouble right_margin;
+ gdouble top_margin;
+ gdouble bottom_margin;
+ gdouble scale;
+
+ print_preview_get_page_size (preview, &paper_width, &paper_height);
+ print_preview_get_page_margins (preview,
+ &left_margin, &right_margin,
+ &top_margin, &bottom_margin);
+
+ scale = print_preview_get_scale (preview);
+
+ cr = gdk_cairo_create (widget->window);
+
+ cairo_translate (cr, widget->allocation.x, widget->allocation.y);
+ cairo_set_line_width (cr, 1.0);
+
+ /* draw page background */
+ cairo_rectangle (cr, 0, 0, scale * paper_width, scale * paper_height);
+
+ gdk_cairo_set_source_color (cr, &widget->style->black);
+ cairo_stroke_preserve (cr);
+
+ gdk_cairo_set_source_color (cr, &widget->style->white);
+ cairo_fill (cr);
+
+ /* draw page_margins */
+ cairo_rectangle (cr,
+ scale * left_margin,
+ scale * top_margin,
+ scale * (paper_width - left_margin - right_margin),
+ scale * (paper_height - top_margin - bottom_margin));
+
+ gdk_cairo_set_source_color (cr, &widget->style->mid[widget->state]);
+ cairo_stroke (cr);
+
+ cairo_translate (cr,
+ scale * (left_margin + preview->image_offset_x),
+ scale * (top_margin + preview->image_offset_y));
+
+ if (preview->dragging || preview->inside)
+ {
+ cairo_rectangle (cr,
+ 0, 0,
+ scale * preview->image_width,
+ scale * preview->image_height);
+
+ gdk_cairo_set_source_color (cr, &widget->style->black);
+ cairo_stroke (cr);
+ }
+
+ if (preview->pixbuf == NULL &&
+ gimp_drawable_is_valid (preview->drawable->drawable_id))
+ {
+ preview->pixbuf =
+ gimp_drawable_get_thumbnail (preview->drawable->drawable_id,
+ MIN (widget->allocation.width, 1024),
+ MIN (widget->allocation.height, 1024),
+ GIMP_PIXBUF_KEEP_ALPHA);
+ }
+
+ if (preview->pixbuf != NULL)
+ {
+ gdouble scale_x;
+ gdouble scale_y;
+
+ scale_x = preview->image_width / gdk_pixbuf_get_width (preview->pixbuf);
+ scale_y = preview->image_height / gdk_pixbuf_get_height (preview->pixbuf);
+
+ cairo_rectangle (cr, 0, 0, preview->image_width, preview->image_height);
+
+ cairo_scale (cr, scale_x * scale, scale_y * scale);
+
+ gdk_cairo_set_source_pixbuf (cr, preview->pixbuf, 0, 0);
+ cairo_fill (cr);
+ }
+
+ cairo_destroy (cr);
+
+ return FALSE;
}
/**
- * gimp_print_preview_new:
+ * print_preview_new:
* @page: page setup
* @drawable_id: the drawable to print
*
- * Creates a new #GimpPrintPreview widget.
+ * Creates a new #PrintPreview widget.
*
- * Return value: the new #GimpPrintPreview widget.
+ * Return value: the new #PrintPreview widget.
**/
GtkWidget *
-gimp_print_preview_new (GtkPageSetup *page,
- gint32 drawable_id)
+print_preview_new (GtkPageSetup *page,
+ gint32 drawable_id)
{
- GimpPrintPreview *preview;
- gfloat ratio;
-
- preview = g_object_new (GIMP_TYPE_PRINT_PREVIEW, NULL);
-
- preview->drawable = gimp_drawable_get (drawable_id);
+ PrintPreview *preview;
- if (page != NULL)
- preview->page = gtk_page_setup_copy (page);
- else
- preview->page = gtk_page_setup_new ();
+ g_return_val_if_fail (GTK_IS_PAGE_SETUP (page), NULL);
- ratio = (gtk_page_setup_get_paper_width (preview->page, GTK_UNIT_POINTS) /
- gtk_page_setup_get_paper_height (preview->page, GTK_UNIT_POINTS));
+ preview = g_object_new (PRINT_TYPE_PREVIEW, NULL);
- gtk_aspect_frame_set (GTK_ASPECT_FRAME (preview), 0.5, 0.5, ratio, FALSE);
+ preview->drawable = gimp_drawable_get (drawable_id);
- gtk_widget_set_size_request (preview->area,
- DRAWING_AREA_SIZE, DRAWING_AREA_SIZE);
+ print_preview_set_page_setup (preview, page);
return GTK_WIDGET (preview);
}
/**
- * gimp_print_preview_set_image_dpi:
- * @preview: a #GimpPrintPreview.
+ * print_preview_set_image_dpi:
+ * @preview: a #PrintPreview.
* @xres: the X resolution
* @yres: the Y resolution
*
* Sets the resolution of the image/drawable displayed by the
- * #GimpPrintPreview.
+ * #PrintPreview.
**/
void
-gimp_print_preview_set_image_dpi (GimpPrintPreview *preview,
- gdouble xres,
- gdouble yres)
+print_preview_set_image_dpi (PrintPreview *preview,
+ gdouble xres,
+ gdouble yres)
{
gdouble width;
gdouble height;
- g_return_if_fail (GIMP_IS_PRINT_PREVIEW (preview));
+ g_return_if_fail (PRINT_IS_PREVIEW (preview));
width = preview->drawable->width * 72.0 / xres;
height = preview->drawable->height * 72.0 / yres;
@@ -290,114 +487,96 @@
preview->image_width = width;
preview->image_height = height;
- print_preview_queue_draw (preview);
+ gtk_widget_queue_draw (GTK_WIDGET (preview));
}
}
/**
- * gimp_print_preview_set_page_setup:
- * @preview: a #GimpPrintPreview.
+ * print_preview_set_page_setup:
+ * @preview: a #PrintPreview.
* @page: the page setup to use
*
- * Sets the page setup to use by the #GimpPrintPreview.
+ * Sets the page setup to use by the #PrintPreview.
**/
void
-gimp_print_preview_set_page_setup (GimpPrintPreview *preview,
- GtkPageSetup *page)
+print_preview_set_page_setup (PrintPreview *preview,
+ GtkPageSetup *page)
{
- gfloat ratio;
-
if (preview->page)
g_object_unref (preview->page);
preview->page = gtk_page_setup_copy (page);
- ratio = (gtk_page_setup_get_paper_width (page, GTK_UNIT_POINTS) /
- gtk_page_setup_get_paper_height (page, GTK_UNIT_POINTS));
-
- gtk_aspect_frame_set (GTK_ASPECT_FRAME (preview), 0.5, 0.5, ratio, FALSE);
-
- print_preview_queue_draw (preview);
+ gtk_widget_queue_draw (GTK_WIDGET (preview));
}
/**
- * gimp_print_preview_set_image_offsets:
- * @preview: a #GimpPrintPreview.
+ * print_preview_set_image_offsets:
+ * @preview: a #PrintPreview.
* @offset_x: the X offset
* @offset_y: the Y offset
*
- * Sets the offsets of the image/drawable displayed by the #GimpPrintPreview.
+ * Sets the offsets of the image/drawable displayed by the #PrintPreview.
* It does not emit the "offsets-changed" signal.
**/
void
-gimp_print_preview_set_image_offsets (GimpPrintPreview *preview,
- gdouble offset_x,
- gdouble offset_y)
+print_preview_set_image_offsets (PrintPreview *preview,
+ gdouble offset_x,
+ gdouble offset_y)
{
- g_return_if_fail (GIMP_IS_PRINT_PREVIEW (preview));
+ g_return_if_fail (PRINT_IS_PREVIEW (preview));
preview->image_offset_x = offset_x;
preview->image_offset_y = offset_y;
- print_preview_queue_draw (preview);
+ gtk_widget_queue_draw (GTK_WIDGET (preview));
}
/**
- * gimp_print_preview_set_image_offsets_max:
- * @preview: a #GimpPrintPreview.
+ * print_preview_set_image_offsets_max:
+ * @preview: a #PrintPreview.
* @offset_x_max: the maximum X offset allowed
* @offset_y_max: the maximum Y offset allowed
*
* Sets the maximum offsets of the image/drawable displayed by the
- * #GimpPrintPreview. It does not emit the "offsets-changed" signal.
+ * #PrintPreview. It does not emit the "offsets-changed" signal.
**/
void
-gimp_print_preview_set_image_offsets_max (GimpPrintPreview *preview,
- gdouble offset_x_max,
- gdouble offset_y_max)
+print_preview_set_image_offsets_max (PrintPreview *preview,
+ gdouble offset_x_max,
+ gdouble offset_y_max)
{
- g_return_if_fail (GIMP_IS_PRINT_PREVIEW (preview));
+ g_return_if_fail (PRINT_IS_PREVIEW (preview));
preview->image_offset_x_max = offset_x_max;
preview->image_offset_y_max = offset_y_max;
- print_preview_queue_draw (preview);
+ gtk_widget_queue_draw (GTK_WIDGET (preview));
}
/**
- * gimp_print_preview_set_use_full_page:
- * @preview: a #GimpPrintPreview.
+ * print_preview_set_use_full_page:
+ * @preview: a #PrintPreview.
* @full_page: TRUE to ignore the page margins
*
* If @full_page is TRUE, the page margins are ignored and the full page
* can be used to setup printing.
**/
void
-gimp_print_preview_set_use_full_page (GimpPrintPreview *preview,
- gboolean full_page)
+print_preview_set_use_full_page (PrintPreview *preview,
+ gboolean full_page)
{
- g_return_if_fail (GIMP_IS_PRINT_PREVIEW (preview));
+ g_return_if_fail (PRINT_IS_PREVIEW (preview));
preview->use_full_page = full_page;
- print_preview_queue_draw (preview);
-}
-
-static void
-gimp_print_preview_realize (GtkWidget *widget)
-{
- GdkCursor *cursor;
-
- cursor = gdk_cursor_new_for_display (gtk_widget_get_display (widget),
- GDK_FLEUR);
- gdk_window_set_cursor (widget->window, cursor);
- gdk_cursor_unref (cursor);
+ gtk_widget_queue_draw (GTK_WIDGET (preview));
}
static gboolean
-gimp_print_preview_is_inside (GimpPrintPreview *preview,
- gdouble x,
- gdouble y)
+print_preview_is_inside (PrintPreview *preview,
+ gdouble x,
+ gdouble y)
{
gdouble left_margin;
gdouble right_margin;
@@ -405,11 +584,11 @@
gdouble bottom_margin;
gdouble scale;
- gimp_print_preview_get_page_margins (preview,
- &left_margin, &right_margin,
- &top_margin, &bottom_margin);
+ print_preview_get_page_margins (preview,
+ &left_margin, &right_margin,
+ &top_margin, &bottom_margin);
- scale = gimp_print_preview_get_scale (preview);
+ scale = print_preview_get_scale (preview);
x = x / scale - left_margin;
y = y / scale - top_margin;
@@ -421,216 +600,43 @@
}
static void
-print_preview_set_inside (GimpPrintPreview *preview,
- gboolean inside)
+print_preview_set_inside (PrintPreview *preview,
+ gboolean inside)
{
if (inside != preview->inside)
{
- preview->inside = inside;
- print_preview_queue_draw (preview);
- }
-}
-
-static gboolean
-gimp_print_preview_event (GtkWidget *widget,
- GdkEvent *event,
- GimpPrintPreview *preview)
-{
- static gdouble orig_offset_x = 0.0;
- static gdouble orig_offset_y = 0.0;
- static gint start_x = 0;
- static gint start_y = 0;
-
- switch (event->type)
- {
- case GDK_BUTTON_PRESS:
- gdk_pointer_grab (widget->window, FALSE,
- (GDK_BUTTON1_MOTION_MASK |
- GDK_BUTTON_RELEASE_MASK),
- NULL, NULL, event->button.time);
-
- orig_offset_x = preview->image_offset_x;
- orig_offset_y = preview->image_offset_y;
-
- start_x = event->button.x;
- start_y = event->button.y;
-
- preview->dragging = TRUE;
- break;
-
- case GDK_MOTION_NOTIFY:
- {
- if (preview->dragging)
- {
- gdouble scale = gimp_print_preview_get_scale (preview);
- gdouble offset_x;
- gdouble offset_y;
-
- offset_x = (orig_offset_x + (event->motion.x - start_x) / scale);
- offset_y = (orig_offset_y + (event->motion.y - start_y) / scale);
-
- offset_x = CLAMP (offset_x, 0, preview->image_offset_x_max);
- offset_y = CLAMP (offset_y, 0, preview->image_offset_y_max);
-
- if (preview->image_offset_x != offset_x ||
- preview->image_offset_y != offset_y)
- {
- gimp_print_preview_set_image_offsets (preview,
- offset_x, offset_y);
-
- g_signal_emit (preview,
- gimp_print_preview_signals[OFFSETS_CHANGED], 0,
- preview->image_offset_x,
- preview->image_offset_y);
- }
- }
- else
- {
- print_preview_set_inside (preview,
- gimp_print_preview_is_inside (preview,
- event->motion.x,
- event->motion.y));
- }
- }
- break;
-
- case GDK_BUTTON_RELEASE:
- gdk_display_pointer_ungrab (gtk_widget_get_display (widget),
- event->button.time);
- start_x = start_y = 0;
- preview->dragging = FALSE;
-
- print_preview_set_inside (preview,
- gimp_print_preview_is_inside (preview,
- event->button.x,
- event->button.y));
- print_preview_queue_draw (preview);
- break;
-
- case GDK_LEAVE_NOTIFY:
- print_preview_set_inside (preview, FALSE);
- break;
-
- default:
- break;
- }
-
- return FALSE;
-}
-
-static gboolean
-gimp_print_preview_expose_event (GtkWidget *widget,
- GdkEventExpose *eevent,
- GimpPrintPreview *preview)
-{
- cairo_t *cr;
- gdouble paper_width;
- gdouble paper_height;
- gdouble left_margin;
- gdouble right_margin;
- gdouble top_margin;
- gdouble bottom_margin;
- gdouble scale;
-
- gimp_print_preview_get_page_size (preview, &paper_width, &paper_height);
- gimp_print_preview_get_page_margins (preview,
- &left_margin, &right_margin,
- &top_margin, &bottom_margin);
-
- scale = gimp_print_preview_get_scale (preview);
-
- cr = gdk_cairo_create (widget->window);
-
- /* draw background */
- gdk_cairo_set_source_color (cr, &widget->style->white);
- cairo_paint (cr);
+ GtkWidget *widget = GTK_WIDGET (preview);
- /* draw page_margins */
- gdk_cairo_set_source_color (cr, &widget->style->black);
- cairo_set_line_width (cr, 1.0);
- cairo_rectangle (cr,
- scale * left_margin,
- scale * top_margin,
- scale * (paper_width - left_margin - right_margin),
- scale * (paper_height - top_margin - bottom_margin));
- cairo_stroke (cr);
-
- cairo_translate (cr,
- scale * (left_margin + preview->image_offset_x),
- scale * (top_margin + preview->image_offset_y));
-
- if (preview->dragging || preview->inside)
- {
- cairo_rectangle (cr,
- 0, 0,
- scale * preview->image_width,
- scale * preview->image_height);
- cairo_stroke (cr);
- }
-
- if (preview->pixbuf == NULL &&
- gimp_drawable_is_valid (preview->drawable->drawable_id))
- {
- preview->pixbuf =
- gimp_drawable_get_thumbnail (preview->drawable->drawable_id,
- MIN (widget->allocation.width, 1024),
- MIN (widget->allocation.height, 1024),
- GIMP_PIXBUF_KEEP_ALPHA);
- }
-
- if (preview->pixbuf != NULL)
- {
- gdouble scale_x;
- gdouble scale_y;
-
- scale_x = preview->image_width / gdk_pixbuf_get_width (preview->pixbuf);
- scale_y = preview->image_height / gdk_pixbuf_get_height (preview->pixbuf);
-
- cairo_rectangle (cr, 0, 0, preview->image_width, preview->image_height);
+ preview->inside = inside;
- cairo_scale (cr, scale_x * scale, scale_y * scale);
+ if (GTK_WIDGET_DRAWABLE (widget))
+ gdk_window_set_cursor (widget->window,
+ inside ? preview->cursor : NULL);
- gdk_cairo_set_source_pixbuf (cr, preview->pixbuf, 0, 0);
- cairo_fill (cr);
+ gtk_widget_queue_draw (widget);
}
-
- cairo_destroy (cr);
-
- return FALSE;
}
static gdouble
-gimp_print_preview_get_scale (GimpPrintPreview* preview)
+print_preview_get_scale (PrintPreview *preview)
{
gdouble paper_width;
gdouble paper_height;
gdouble scale_x;
gdouble scale_y;
- gimp_print_preview_get_page_size (preview, &paper_width, &paper_height);
+ print_preview_get_page_size (preview, &paper_width, &paper_height);
- scale_x = ((gdouble) preview->area->allocation.width / paper_width);
- scale_y = ((gdouble) preview->area->allocation.height / paper_height);
+ scale_x = ((gdouble) GTK_WIDGET (preview)->allocation.width / paper_width);
+ scale_y = ((gdouble) GTK_WIDGET (preview)->allocation.height / paper_height);
return MIN (scale_x, scale_y);
}
static void
-gimp_print_preview_size_allocate (GtkWidget *widget,
- GtkAllocation *allocation,
- GimpPrintPreview *preview)
-{
- if (preview->pixbuf != NULL)
- {
- g_object_unref (preview->pixbuf);
- preview->pixbuf = NULL;
- }
-}
-
-static void
-gimp_print_preview_get_page_size (GimpPrintPreview *preview,
- gdouble *paper_width,
- gdouble *paper_height)
+print_preview_get_page_size (PrintPreview *preview,
+ gdouble *paper_width,
+ gdouble *paper_height)
{
*paper_width = gtk_page_setup_get_paper_width (preview->page,
GTK_UNIT_POINTS);
@@ -639,11 +645,11 @@
}
static void
-gimp_print_preview_get_page_margins (GimpPrintPreview *preview,
- gdouble *left_margin,
- gdouble *right_margin,
- gdouble *top_margin,
- gdouble *bottom_margin)
+print_preview_get_page_margins (PrintPreview *preview,
+ gdouble *left_margin,
+ gdouble *right_margin,
+ gdouble *top_margin,
+ gdouble *bottom_margin)
{
if (preview->use_full_page)
{
@@ -664,9 +670,3 @@
GTK_UNIT_POINTS);
}
}
-
-static void
-print_preview_queue_draw (GimpPrintPreview *preview)
-{
- gtk_widget_queue_draw (GTK_WIDGET (preview->area));
-}
Modified: trunk/plug-ins/print/print-preview.h
==============================================================================
--- trunk/plug-ins/print/print-preview.h (original)
+++ trunk/plug-ins/print/print-preview.h Tue Feb 26 08:26:32 2008
@@ -16,46 +16,46 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#ifndef __GIMP_PRINT_PREVIEW_H__
-#define __GIMP_PRINT_PREVIEW_H__
+#ifndef __PRINT_PREVIEW_H__
+#define __PRINT_PREVIEW_H__
G_BEGIN_DECLS
-#define GIMP_TYPE_PRINT_PREVIEW (gimp_print_preview_get_type ())
-#define GIMP_PRINT_PREVIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_PRINT_PREVIEW, GimpPrintPreview))
-#define GIMP_PRINT_PREVIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_PRINT_PREVIEW, GimpPrintPreviewClass))
-#define GIMP_IS_PRINT_PREVIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_PRINT_PREVIEW))
-#define GIMP_IS_PRINT_PREVIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_PRINT_PREVIEW))
-#define GIMP_PRINT_PREVIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_PRINT_PREVIEW, GimpPrintPreviewClass))
+#define PRINT_TYPE_PREVIEW (print_preview_get_type ())
+#define PRINT_PREVIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PRINT_TYPE_PREVIEW, PrintPreview))
+#define PRINT_PREVIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PRINT_TYPE_PREVIEW, PrintPreviewClass))
+#define PRINT_IS_PREVIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PRINT_TYPE_PREVIEW))
+#define PRINT_IS_PREVIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PRINT_TYPE_PREVIEW))
+#define PRINT_PREVIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PRINT_TYPE_PREVIEW, PrintPreviewClass))
-typedef struct _GimpPrintPreview GimpPrintPreview;
-typedef struct _GimpPrintPreviewClass GimpPrintPreviewClass;
+typedef struct _PrintPreview PrintPreview;
+typedef struct _PrintPreviewClass PrintPreviewClass;
-GType gimp_print_preview_get_type (void) G_GNUC_CONST;
+GType print_preview_get_type (void) G_GNUC_CONST;
-GtkWidget * gimp_print_preview_new (GtkPageSetup *page,
- gint32 drawable_id);
+GtkWidget * print_preview_new (GtkPageSetup *page,
+ gint32 drawable_id);
-void gimp_print_preview_set_image_dpi (GimpPrintPreview *preview,
- gdouble xres,
- gdouble yres);
+void print_preview_set_image_dpi (PrintPreview *preview,
+ gdouble xres,
+ gdouble yres);
-void gimp_print_preview_set_page_setup (GimpPrintPreview *preview,
- GtkPageSetup *page);
+void print_preview_set_page_setup (PrintPreview *preview,
+ GtkPageSetup *page);
-void gimp_print_preview_set_image_offsets (GimpPrintPreview *preview,
- gdouble offset_x,
- gdouble offset_y);
+void print_preview_set_image_offsets (PrintPreview *preview,
+ gdouble offset_x,
+ gdouble offset_y);
-void gimp_print_preview_set_image_offsets_max (GimpPrintPreview *preview,
- gdouble offset_x_max,
- gdouble offset_y_max);
+void print_preview_set_image_offsets_max (PrintPreview *preview,
+ gdouble offset_x_max,
+ gdouble offset_y_max);
-void gimp_print_preview_set_use_full_page (GimpPrintPreview *preview,
- gboolean full_page);
+void print_preview_set_use_full_page (PrintPreview *preview,
+ gboolean full_page);
G_END_DECLS
-#endif /* __GIMP_PRINT_PREVIEW_H__ */
+#endif /* __PRINT_PREVIEW_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]