Re: [PATCH 1/3] Remove patch conflict files



I have implemented all of the file removals you suggested ... the repository is looking cleaner now :)

Matt

On 05/24/2012 11:45 AM, Lars-Peter Clausen wrote:
These probably got added by mistake to the repository.

Signed-off-by: Lars-Peter Clausen<lars metafoo de>
---
  gtk/gtkdatabox.c.orig | 2285 -------------------------------------------------
  gtk/gtkdatabox.c.rej  |   42 -
  2 files changed, 2327 deletions(-)
  delete mode 100644 gtk/gtkdatabox.c.orig
  delete mode 100644 gtk/gtkdatabox.c.rej

diff --git a/gtk/gtkdatabox.c.orig b/gtk/gtkdatabox.c.orig
deleted file mode 100644
index fd3053b..0000000
--- a/gtk/gtkdatabox.c.orig
+++ /dev/null
@@ -1,2285 +0,0 @@
-/* $Id: gtkdatabox.c 4 2008-06-22 09:19:11Z rbock $ */
-/* GtkDatabox - An extension to the gtk+ library
- * Copyright (C) 1998 - 2008  Dr. Roland Bock
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- */
-
-#include<gtkdatabox.h>
-#include<gtkdatabox_marshal.h>
-#include<gtk/gtkhscrollbar.h>
-#include<gtk/gtkvscrollbar.h>
-#include<gtkdatabox_ruler.h>
-#include<gtk/gtktable.h>
-#include<gtk/gtkgc.h>
-#include<math.h>
-
-
-static gint gtk_databox_button_press (GtkWidget * widget,
-				      GdkEventButton * event);
-static gint gtk_databox_scroll_event (GtkWidget *widget,
-                                     GdkEventScroll *event);
-static gint gtk_databox_button_release (GtkWidget * widget,
-					GdkEventButton * event);
-static gint gtk_databox_motion_notify (GtkWidget * widget,
-				       GdkEventMotion * event);
-static void gtk_databox_realize (GtkWidget * widget);
-static void gtk_databox_unrealize (GtkWidget * widget);
-static void gtk_databox_size_allocate (GtkWidget * widget,
-				       GtkAllocation * allocation);
-static gint gtk_databox_expose (GtkWidget * widget,
-		                GdkEventExpose * event);
-static void gtk_databox_set_property (GObject * object,
-					    guint prop_id,
-					    const GValue * value,
-					    GParamSpec * pspec);
-static void gtk_databox_get_property (GObject * object,
-					    guint prop_id,
-					    GValue * value,
-					    GParamSpec * pspec);
-
-static gfloat gtk_databox_get_offset_x (GtkDatabox* box);
-static gfloat gtk_databox_get_page_size_x (GtkDatabox* box);
-static gfloat gtk_databox_get_offset_y (GtkDatabox* box);
-static gfloat gtk_databox_get_page_size_y (GtkDatabox* box);
-static void gtk_databox_calculate_visible_limits (GtkDatabox * box);
-static void gtk_databox_create_backing_pixmap (GtkDatabox * box);
-static void gtk_databox_calculate_selection_values (GtkDatabox * box);
-static void gtk_databox_selection_cancel (GtkDatabox * box);
-static void gtk_databox_zoomed (GtkDatabox * box);
-static void gtk_databox_draw_selection (GtkDatabox * box,
-					GdkRectangle * pixmapCopyRect);
-static void gtk_databox_adjustment_value_changed (GtkDatabox * box);
-static void gtk_databox_ruler_update (GtkDatabox * box);
-
-/* IDs of signals */
-enum
-{
-   ZOOMED_SIGNAL,
-   SELECTION_STARTED_SIGNAL,
-   SELECTION_CHANGED_SIGNAL,
-   SELECTION_FINALIZED_SIGNAL,
-   SELECTION_CANCELED_SIGNAL,
-   LAST_SIGNAL
-};
-
-/* signals will be configured during class_init */
-static gint gtk_databox_signals[LAST_SIGNAL] = { 0 };
-
-
-/* IDs of properties */
-enum
-{
-   ENABLE_SELECTION = 1,
-   ENABLE_ZOOM,
-   ADJUSTMENT_X,
-   ADJUSTMENT_Y,
-   RULER_X,
-   RULER_Y,
-   SCALE_TYPE_X,
-   SCALE_TYPE_Y,
-   LAST_PROPERTY
-};
-
-struct _GtkDataboxPrivate
-{
-   GdkPixmap *backing_pixmap;
-
-   /* Total and visible limits (values, not pixels) */
-   gfloat total_left;
-   gfloat total_right;
-   gfloat total_top;
-   gfloat total_bottom;
-   gfloat visible_left;
-   gfloat visible_right;
-   gfloat visible_top;
-   gfloat visible_bottom;
-
-   /* Translation information between values and pixels */
-   GtkDataboxScaleType scale_type_x;
-   GtkDataboxScaleType scale_type_y;
-   gfloat translation_factor_x;
-   gfloat translation_factor_y;
-
-   /* Properties */
-   gboolean enable_selection;
-   gboolean enable_zoom;
-   GtkAdjustment *adj_x;
-   GtkAdjustment *adj_y;
-   GtkDataboxRuler *ruler_x;
-   GtkDataboxRuler *ruler_y;
-
-   /* Other private stuff */
-   GList *graphs;
-   GdkGC *select_gc;
-   GdkPoint marked;
-   GdkPoint select;
-   GtkDataboxValueRectangle selectionValues;
-   gfloat zoom_limit;
-
-   /* flags */
-   gboolean selection_active;
-   gboolean selection_finalized;
-};
-
-/**
- * gtk_databox_get_type
- *
- * Determines the #GType of the GtkDatabox widget type.
- *
- * Return value: The #GType of the GtkDatabox widget type.
- *
- */
-G_DEFINE_TYPE (GtkDatabox, gtk_databox, GTK_TYPE_WIDGET)
-
-static void
-gtk_databox_class_init (GtkDataboxClass * class)
-{
-   GObjectClass *gobject_class;
-   GtkWidgetClass *widget_class;
-
-   gobject_class = G_OBJECT_CLASS (class);
-   widget_class = (GtkWidgetClass *) class;
-
-   gobject_class->set_property = gtk_databox_set_property;
-   gobject_class->get_property = gtk_databox_get_property;
-
-   widget_class->realize = gtk_databox_realize;
-   widget_class->unrealize = gtk_databox_unrealize;
-   widget_class->size_allocate = gtk_databox_size_allocate;
-   widget_class->expose_event = gtk_databox_expose;
-   widget_class->motion_notify_event = gtk_databox_motion_notify;
-   widget_class->button_press_event = gtk_databox_button_press;
-   widget_class->button_release_event = gtk_databox_button_release;
-   widget_class->scroll_event = gtk_databox_scroll_event;
-
-   /**
-    * GtkDatabox:enable-selection:
-    *
-    * Defines whether the user can select
-    * rectangular areas with the mouse (#TRUE) or not (#FALSE).
-    *
-    */
-   g_object_class_install_property (gobject_class,
-         ENABLE_SELECTION,
-         g_param_spec_boolean ("enable-selection",
-            "Enable Selection",
-            "Enable selection of areas via mouse (TRUE/FALSE)",
-            TRUE,       /* default value */
-            G_PARAM_CONSTRUCT | G_PARAM_READWRITE));
-
-   /**
-    * GtkDatabox:enable-zoom:
-    *
-    * Defines whether the user can use the mouse to zoom in or out (#TRUE) or not (#FALSE).
-    *
-    */
-   g_object_class_install_property (gobject_class,
-         ENABLE_ZOOM,
-         g_param_spec_boolean ("enable-zoom",
-            "Enable Zoom",
-            "Enable zooming in or out via mouse click (TRUE/FALSE)",
-            TRUE,       /* default value */
-            G_PARAM_CONSTRUCT | G_PARAM_READWRITE));
-
-   /**
-    * GtkDatabox:adjustment_x:
-    *
-    * The #GtkAdjustment associated with the horizontal scrollbar. The #GtkDatabox widget
-    * creates a GtkAdjustment itself. Normally there is no need for you to create another
-    * GtkAdjustment. You could simply use the one you get via gtk_databox_get_adjustment_x().
-    *
-    */
-   g_object_class_install_property (gobject_class,
-         ADJUSTMENT_X,
-         g_param_spec_object ("adjustment-x",
-            "Horizontal Adjustment",
-            "GtkAdjustment for horizontal scrolling",
-            GTK_TYPE_ADJUSTMENT,
-            G_PARAM_CONSTRUCT | G_PARAM_READWRITE));
-
-   /**
-    * GtkDatabox:adjustment_y:
-    *
-    * The #GtkAdjustment associated with the vertical scrollbar. The #GtkDatabox widget
-    * creates a GtkAdjustment itself. Normally there is no need for you to create another
-    * GtkAdjustment. You could simply use the one you get via gtk_databox_get_adjustment_y().
-    *
-    */
-   g_object_class_install_property (gobject_class,
-         ADJUSTMENT_Y,
-         g_param_spec_object ("adjustment-y",
-            "Vertical Adjustment",
-            "GtkAdjustment for vertical scrolling",
-            GTK_TYPE_ADJUSTMENT,
-            G_PARAM_CONSTRUCT | G_PARAM_READWRITE));
-
-   /**
-    * GtkDatabox:ruler_x:
-    *
-    * The horizontal %GtkDataboxRuler (or NULL).
-    *
-    */
-   g_object_class_install_property (gobject_class,
-         RULER_X,
-         g_param_spec_object ("ruler-x",
-            "Horizontal Ruler",
-            "A horizontal GtkDataboxRuler or NULL",
-            GTK_DATABOX_TYPE_RULER,
-            G_PARAM_CONSTRUCT | G_PARAM_READWRITE));
-
-   /**
-    * GtkDatabox:ruler_y:
-    *
-    * The vertical %GtkDataboxRuler (or NULL).
-    *
-    */
-   g_object_class_install_property (gobject_class,
-         RULER_Y,
-         g_param_spec_object ("ruler-y",
-            "Vertical Ruler",
-            "A vertical GtkDataboxRuler or NULL",
-            GTK_DATABOX_TYPE_RULER,
-            G_PARAM_CONSTRUCT | G_PARAM_READWRITE));
-
-   /**
-    * GtkDatabox:scale_type_x:
-    *
-    * The horizontal scale type (linear or lograrithmic).
-    */
-   g_object_class_install_property (gobject_class,
-         SCALE_TYPE_X,
-         g_param_spec_enum ("scale-type-x",
-            "Horizontal scale type",
-            "Horizontal scale type (linear or logarithmic)",
-            gtk_databox_scale_type_get_type (),
-            GTK_DATABOX_SCALE_LINEAR,
-            G_PARAM_CONSTRUCT | G_PARAM_READWRITE));
-
-   /**
-    * GtkDatabox:scale_type_y:
-    *
-    * The vertical scale type (linear or lograrithmic).
-    */
-   g_object_class_install_property (gobject_class,
-         SCALE_TYPE_Y,
-         g_param_spec_enum ("scale-type-y",
-            "Vertical scale type",
-            "Vertical scale type (linear or logarithmic)",
-            gtk_databox_scale_type_get_type (),
-            GTK_DATABOX_SCALE_LINEAR,
-            G_PARAM_CONSTRUCT | G_PARAM_READWRITE));
-
-
-   /**
-    * GtkDatabox::zoomed:
-    * @box: The #GtkDatabox widget which zoomed in or out.
-    *
-    * This signal is emitted each time the zoom of the widget is changed, see for example
-    * gtk_databox_zoom_to_selection(), gtk_databox_set_visible_limits().
-    */
-   gtk_databox_signals[ZOOMED_SIGNAL] =
-      g_signal_new ("zoomed",
-            G_TYPE_FROM_CLASS (gobject_class),
-            G_SIGNAL_RUN_FIRST,
-            G_STRUCT_OFFSET (GtkDataboxClass, zoomed),
-            NULL,	/* accumulator */
-	    NULL,	/* accumulator_data */
-	    gtk_databox_marshal_VOID__VOID,
-	    G_TYPE_NONE, 0);
-
-   /**
-    * GtkDatabox::selection-started:
-    * @box: The #GtkDatabox widget in which the selection has been started.
-    * @selection_values: The corners of the selection rectangle.
-    *
-    * This signal is emitted when the mouse is firstmoved
-    * with the left button pressed after the mouse-down (and the #GtkDatabox:enable-selection property
-    * is set). The corners of the selection rectangle are stored in @selection_values.
-    *
-    * @see_also: #GtkDatabox::selection-changed
-    */
-   gtk_databox_signals[SELECTION_STARTED_SIGNAL] =
-      g_signal_new ("selection-started",
-            G_TYPE_FROM_CLASS (gobject_class),
-            G_SIGNAL_RUN_FIRST,
-            G_STRUCT_OFFSET (GtkDataboxClass, selection_started),
-            NULL,	/* accumulator */
-	    NULL,	/* accumulator_data */
-	    gtk_databox_marshal_VOID__POINTER,
-	    G_TYPE_NONE,
-	    1,
-	    G_TYPE_POINTER);
-
-   /**
-    * GtkDatabox::selection-changed:
-    * @box: The #GtkDatabox widget in which the selection was changed.
-    * @selection_values: The corners of the selection rectangle.
-    *
-    * This signal is emitted when the mouse is moved
-    * with the left button pressed (and the #GtkDatabox:enable-selection property
-    * is set). The corners of the selection rectangle are stored in @selection_values.
-    */
-   gtk_databox_signals[SELECTION_CHANGED_SIGNAL] =
-      g_signal_new ("selection-changed",
-            G_TYPE_FROM_CLASS (gobject_class),
-            G_SIGNAL_RUN_FIRST,
-            G_STRUCT_OFFSET (GtkDataboxClass, selection_changed),
-            NULL,	/* accumulator */
-	    NULL,	/* accumulator_data */
-	    gtk_databox_marshal_VOID__POINTER,
-	    G_TYPE_NONE,
-            1,
-	    G_TYPE_POINTER);
-
-  /**
-    * GtkDatabox::selection-finalized:
-    * @box: The #GtkDatabox widget in which the selection has been stopped.
-    * @selection_values: The corners of the selection rectangle.
-    *
-    * This signal is emitted when the left mouse button
-    * is released after a selection was started before.
-    *
-    * @see_also: #GtkDatabox::selection-changed
-    */
-    gtk_databox_signals[SELECTION_FINALIZED_SIGNAL] =
-       g_signal_new ("selection-finalized",
-             G_TYPE_FROM_CLASS (gobject_class),
-             G_SIGNAL_RUN_FIRST,
-             G_STRUCT_OFFSET (GtkDataboxClass, selection_finalized),
-             NULL,	/* accumulator */
-	     NULL,	/* accumulator_data */
-             gtk_databox_marshal_VOID__POINTER,
-	     G_TYPE_NONE,
-	     1,
-	     G_TYPE_POINTER);
-
-  /**
-    * GtkDatabox::selection-canceled:
-    * @box: The #GtkDatabox widget which zoomed in or out.
-    *
-    * This signal is emitted after a right click outside
-    * a selection rectangle.
-    */
-    gtk_databox_signals[SELECTION_CANCELED_SIGNAL] =
-       g_signal_new ("selection-canceled",
-             G_TYPE_FROM_CLASS (gobject_class),
-             G_SIGNAL_RUN_FIRST,
-             G_STRUCT_OFFSET (GtkDataboxClass, selection_canceled),
-             NULL,	/* accumulator */
-             NULL,	/* accumulator_data */
-	     gtk_databox_marshal_VOID__VOID,
-	     G_TYPE_NONE,
-	     0);
-
-   class->zoomed = NULL;
-   class->selection_started = NULL;
-   class->selection_changed = NULL;
-   class->selection_finalized = NULL;
-   class->selection_canceled = NULL;
-}
-
-static void
-gtk_databox_init (GtkDatabox * box)
-{
-   box->priv = g_new0 (GtkDataboxPrivate, 1);
-   box->priv->backing_pixmap = NULL;
-   box->priv->scale_type_x = GTK_DATABOX_SCALE_LINEAR;
-   box->priv->scale_type_y = GTK_DATABOX_SCALE_LINEAR;
-   box->priv->translation_factor_x = 0;
-   box->priv->translation_factor_y = 0;
-   box->priv->enable_selection = TRUE;
-   box->priv->enable_zoom = TRUE;
-   box->priv->ruler_x = NULL;
-   box->priv->ruler_y = NULL;
-   box->priv->graphs = NULL;
-   box->priv->select_gc = NULL;
-   box->priv->zoom_limit = 0.01;
-   box->priv->selection_active = FALSE;
-   box->priv->selection_finalized = FALSE;
-
-   gtk_databox_set_adjustment_x (box, NULL);
-   gtk_databox_set_adjustment_y (box, NULL);
-   gtk_databox_set_total_limits(box, -1., 1., 1., -1.);
-}
-
-/**
- * gtk_databox_new
- *
- * Creates a new #GtkDatabox widget.
- *
- * Return value: The new #GtkDatabox widget.
- *
- */
-GtkWidget *
-gtk_databox_new (void)
-{
-   return g_object_new (GTK_TYPE_DATABOX, NULL);
-}
-
-static gint
-gtk_databox_motion_notify (GtkWidget * widget, GdkEventMotion * event)
-{
-   GtkDatabox *box;
-   GdkModifierType state;
-   gint x;
-   gint y;
-
-   box = GTK_DATABOX (widget);
-
-   if (event->is_hint)
-   {
-      gdk_window_get_pointer (widget->window,&x,&y,&state);
-   }
-   else
-   {
-      state = event->state;
-      x = event->x;
-      y = event->y;
-   }
-
-   if (state&  GDK_BUTTON1_MASK
-&&  box->priv->enable_selection&&  !box->priv->selection_finalized)
-   {
-      GdkRectangle rect;
-      gint width;
-      gint height;
-
-      gdk_drawable_get_size (widget->window,&width,&height);
-      x = MAX (0, MIN (width - 1, x));
-      y = MAX (0, MIN (height - 1, y));
-
-      if (box->priv->selection_active)
-      {
-	 /* Clear current selection from backing_pixmap */
-	 gtk_databox_draw_selection (box, NULL);
-      }
-      else
-      {
-	 box->priv->selection_active = TRUE;
-	 box->priv->marked.x = x;
-	 box->priv->marked.y = y;
-	 box->priv->select.x = x;
-	 box->priv->select.y = y;
-	 gtk_databox_calculate_selection_values (box);
-	 g_signal_emit (G_OBJECT (box),
-			gtk_databox_signals[SELECTION_STARTED_SIGNAL], 0,
-			&box->priv->selectionValues);
-      }
-
-      /* Determine the exposure rectangle (covering old selection and new) */
-      rect.x = MIN (MIN (box->priv->marked.x, box->priv->select.x), x);
-      rect.y = MIN (MIN (box->priv->marked.y, box->priv->select.y), y);
-      rect.width = MAX (MAX (box->priv->marked.x, box->priv->select.x), x)
-	 - rect.x + 1;
-      rect.height = MAX (MAX (box->priv->marked.y, box->priv->select.y), y)
-	 - rect.y + 1;
-
-      box->priv->select.x = x;
-      box->priv->select.y = y;
-
-      /* Draw new selection */
-      gtk_databox_draw_selection (box,&rect);
-
-      gtk_databox_calculate_selection_values (box);
-      g_signal_emit (G_OBJECT (box),
-		     gtk_databox_signals[SELECTION_CHANGED_SIGNAL],
-		     0,&box->priv->selectionValues);
-   }
-
-   return FALSE;
-}
-
-static void
-gtk_databox_set_property (GObject * object,
-			  guint property_id,
-			  const GValue * value, GParamSpec * pspec)
-{
-   GtkDatabox *box = GTK_DATABOX (object);
-
-   switch (property_id)
-   {
-   case ENABLE_SELECTION:
-      gtk_databox_set_enable_selection (box, g_value_get_boolean (value));
-      break;
-   case ENABLE_ZOOM:
-      gtk_databox_set_enable_zoom (box, g_value_get_boolean (value));
-      break;
-   case ADJUSTMENT_X:
-      gtk_databox_set_adjustment_x (box, g_value_get_object (value));
-      break;
-   case ADJUSTMENT_Y:
-      gtk_databox_set_adjustment_y (box, g_value_get_object (value));
-      break;
-   case RULER_X:
-      gtk_databox_set_ruler_x (box, g_value_get_object (value));
-      break;
-   case RULER_Y:
-      gtk_databox_set_ruler_y (box, g_value_get_object (value));
-      break;
-   case SCALE_TYPE_X:
-      gtk_databox_set_scale_type_x (box, g_value_get_enum (value));
-      break;
-   case SCALE_TYPE_Y:
-      gtk_databox_set_scale_type_y (box, g_value_get_enum (value));
-      break;
-   default:
-      /* We don't have any other property... */
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
-      break;
-   }
-}
-
-static void
-gtk_databox_get_property (GObject * object,
-			  guint property_id,
-			  GValue * value, GParamSpec * pspec)
-{
-   GtkDatabox *box = GTK_DATABOX (object);
-
-   switch (property_id)
-   {
-   case ENABLE_SELECTION:
-      g_value_set_boolean (value, gtk_databox_get_enable_selection (box));
-      break;
-   case ENABLE_ZOOM:
-      g_value_set_boolean (value, gtk_databox_get_enable_zoom (box));
-      break;
-   case ADJUSTMENT_X:
-      g_value_set_object (value, G_OBJECT (gtk_databox_get_adjustment_x (box)));
-      break;
-   case ADJUSTMENT_Y:
-      g_value_set_object (value, G_OBJECT (gtk_databox_get_adjustment_y (box)));
-      break;
-   case RULER_X:
-      g_value_set_object (value, G_OBJECT (gtk_databox_get_ruler_x (box)));
-      break;
-   case RULER_Y:
-      g_value_set_object (value, G_OBJECT (gtk_databox_get_ruler_y (box)));
-      break;
-   case SCALE_TYPE_X:
-      g_value_set_enum (value, gtk_databox_get_scale_type_x (box));
-      break;
-   case SCALE_TYPE_Y:
-      g_value_set_enum (value, gtk_databox_get_scale_type_y (box));
-      break;
-   default:
-      /* We don't have any other property... */
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
-      break;
-   }
-}
-
-
-static void
-gtk_databox_realize (GtkWidget * widget)
-{
-   GtkDatabox *box;
-   GdkWindowAttr attributes;
-   gint attributes_mask;
-
-   box = GTK_DATABOX (widget);
-   GTK_WIDGET_SET_FLAGS (box, GTK_REALIZED);
-
-   attributes.window_type = GDK_WINDOW_CHILD;
-   attributes.x = widget->allocation.x;
-   attributes.y = widget->allocation.y;
-   attributes.width = widget->allocation.width;
-   attributes.height = widget->allocation.height;
-   attributes.wclass = GDK_INPUT_OUTPUT;
-   attributes.visual = gtk_widget_get_visual (widget);
-   attributes.colormap = gtk_widget_get_colormap (widget);
-   attributes.event_mask = gtk_widget_get_events (widget);
-   attributes.event_mask |= (GDK_EXPOSURE_MASK |
-                             GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
-			     GDK_POINTER_MOTION_MASK |
-			     GDK_POINTER_MOTION_HINT_MASK);
-
-   attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
-
-   widget->window =
-      gdk_window_new (gtk_widget_get_parent_window (widget),&attributes,
-		      attributes_mask);
-   gdk_window_set_user_data (widget->window, box);
-
-   widget->style = gtk_style_attach (widget->style, widget->window);
-   gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL);
-
-   gtk_databox_create_backing_pixmap (box);
-}
-
-static void
-gtk_databox_unrealize (GtkWidget * widget)
-{
-   GtkDatabox *box = GTK_DATABOX (widget);
-
-   if (box->priv->backing_pixmap)
-      g_object_unref (box->priv->backing_pixmap);
-   if (box->priv->select_gc)
-      gtk_gc_release (box->priv->select_gc);
-   if (box->priv->adj_x)
-      g_object_unref (box->priv->adj_x);
-   if (box->priv->adj_y)
-      g_object_unref (box->priv->adj_y);
-   if (box->priv->graphs)
-      g_list_free (box->priv->graphs);
-
-   g_free (box->priv);
-
-   if (GTK_WIDGET_CLASS (gtk_databox_parent_class)->unrealize)
-      (*GTK_WIDGET_CLASS (gtk_databox_parent_class)->unrealize) (widget);
-}
-
-
-/**
- * gtk_databox_set_enable_selection
- * @box: A #GtkDatabox widget
- * @enable: Whether selection via mouse is enabled or not.
- *
- * Setter function for the #GtkDatabox:enable-selection property.
- *
- */
-void
-gtk_databox_set_enable_selection (GtkDatabox * box, gboolean enable)
-{
-   g_return_if_fail (GTK_IS_DATABOX (box));
-
-   box->priv->enable_selection = enable;
-   if (box->priv->selection_active)
-   {
-      gtk_databox_selection_cancel (box);
-   }
-
-   g_object_notify (G_OBJECT (box), "enable-selection");
-}
-
-/**
- * gtk_databox_set_enable_zoom
- * @box: A #GtkDatabox widget
- * @enable: Whether zoom via mouse is enabled or not.
- *
- * Setter function for the #GtkDatabox:enable-zoom property.
- *
- */
-void
-gtk_databox_set_enable_zoom (GtkDatabox * box, gboolean enable)
-{
-   g_return_if_fail (GTK_IS_DATABOX (box));
-
-   box->priv->enable_zoom = enable;
-
-   g_object_notify (G_OBJECT (box), "enable-zoom");
-}
-
-/**
- * gtk_databox_set_adjustment_x
- * @box: A #GtkDatabox widget
- * @adj: A #GtkAdjustment object
- *
- * Setter function for the #GtkDatabox:adjustment-x property. Normally, it should not be
- * required to use this function, see property documentation.
- *
- */
-void
-gtk_databox_set_adjustment_x (GtkDatabox * box, GtkAdjustment * adj)
-{
-   if (!adj)
-      adj = GTK_ADJUSTMENT(gtk_adjustment_new (0, 0, 0, 0, 0, 0));
-
-   g_return_if_fail (GTK_IS_DATABOX (box));
-   g_return_if_fail (GTK_IS_ADJUSTMENT (adj));
-
-   if (box->priv->adj_x)
-   {
-      /* @@@ Do we need to disconnect from the signals here? */
-      g_object_unref (box->priv->adj_x);
-      if (g_object_is_floating(G_OBJECT(box->priv->adj_x)))
-         g_object_ref_sink (box->priv->adj_x);
-   }
-
-   box->priv->adj_x = adj;
-   g_object_ref (box->priv->adj_x);
-
-   /* We always scroll from 0 to 1.0 */
-   box->priv->adj_x->lower = 0;
-   box->priv->adj_x->value = gtk_databox_get_offset_x (box);
-   box->priv->adj_x->upper = 1.0;
-   box->priv->adj_x->page_size = gtk_databox_get_page_size_x (box);
-   box->priv->adj_x->step_increment = box->priv->adj_x->page_size / 20;
-   box->priv->adj_x->page_increment = box->priv->adj_x->page_size * 0.9;
-
-   gtk_adjustment_changed (box->priv->adj_x);
-
-   g_signal_connect_swapped (G_OBJECT (box->priv->adj_x), "value_changed",
-			     G_CALLBACK
-			     (gtk_databox_adjustment_value_changed), box);
-
-   g_object_notify (G_OBJECT (box), "adjustment-x");
-}
-
-/**
- * gtk_databox_set_adjustment_y
- * @box: A #GtkDatabox widget
- * @adj: A #GtkAdjustment object
- *
- * Setter function for the #GtkDatabox:adjustment-y property. Normally, it should not be
- * required to use this function, see property documentation.
- *
- */
-void
-gtk_databox_set_adjustment_y (GtkDatabox * box, GtkAdjustment * adj)
-{
-   if (!adj)
-      adj = GTK_ADJUSTMENT(gtk_adjustment_new (0, 0, 0, 0, 0, 0));
-
-   g_return_if_fail (GTK_IS_DATABOX (box));
-   g_return_if_fail (GTK_IS_ADJUSTMENT (adj));
-
-   if (box->priv->adj_y)
-   {
-      /* @@@ Do we need to disconnect from the signals here? */
-      g_object_unref (box->priv->adj_y);
-      if (g_object_is_floating(G_OBJECT(box->priv->adj_y)))
-         g_object_ref_sink (box->priv->adj_y);
-   }
-
-   box->priv->adj_y = adj;
-   g_object_ref (box->priv->adj_y);
-
-   /* We always scroll from 0 to 1.0 */
-   box->priv->adj_y->lower = 0;
-   box->priv->adj_y->value = gtk_databox_get_offset_y (box);
-   box->priv->adj_y->upper = 1.0;
-   box->priv->adj_y->page_size = gtk_databox_get_page_size_y (box);
-   box->priv->adj_y->step_increment = box->priv->adj_y->page_size / 20;
-   box->priv->adj_y->page_increment = box->priv->adj_y->page_size * 0.9;
-
-   gtk_adjustment_changed (box->priv->adj_y);
-
-   g_signal_connect_swapped (G_OBJECT (box->priv->adj_y), "value_changed",
-			     G_CALLBACK
-			     (gtk_databox_adjustment_value_changed), box);
-
-   g_object_notify (G_OBJECT (box), "adjustment-y");
-}
-
-/**
- * gtk_databox_set_ruler_x
- * @box: A #GtkDatabox widget
- * @ruler: A #GtkDataboxRuler object
- *
- * Setter function for the #GtkDatabox:ruler-x property.
- *
- */
-void
-gtk_databox_set_ruler_x (GtkDatabox * box, GtkDataboxRuler * ruler)
-{
-   g_return_if_fail (GTK_IS_DATABOX (box));
-   g_return_if_fail (ruler == NULL || GTK_DATABOX_IS_RULER (ruler));
-   g_return_if_fail (ruler == NULL || gtk_databox_ruler_get_orientation(ruler) == GTK_ORIENTATION_HORIZONTAL);
-
-   if (box->priv->ruler_x)
-   {
-      /* @@@ Do we need to disconnect the signals here? */
-      /* @@@ Do we need to call object_ref and object_unref here and for adjustments? */
-   }
-
-   box->priv->ruler_x = ruler;
-
-   if (GTK_DATABOX_IS_RULER (ruler))
-   {
-      gtk_databox_ruler_set_scale_type (ruler,
-					box->priv->scale_type_x);
-
-      gtk_databox_ruler_update (box);
-      g_signal_connect_swapped (box, "motion_notify_event",
-				G_CALLBACK (GTK_WIDGET_GET_CLASS
-					    (box->priv->ruler_x)->
-					    motion_notify_event),
-				G_OBJECT (box->priv->ruler_x));
-   }
-
-   g_object_notify (G_OBJECT (box), "ruler-x");
-}
-
-/**
- * gtk_databox_set_ruler_y
- * @box: A #GtkDatabox widget
- * @ruler: An #GtkDataboxRuler object
- *
- * Setter function for the #GtkDatabox:ruler-y property.
- *
- */
-void
-gtk_databox_set_ruler_y (GtkDatabox * box, GtkDataboxRuler * ruler)
-{
-   g_return_if_fail (GTK_IS_DATABOX (box));
-   g_return_if_fail (ruler == NULL || GTK_DATABOX_IS_RULER (ruler));
-   g_return_if_fail (ruler == NULL || gtk_databox_ruler_get_orientation(ruler) == GTK_ORIENTATION_VERTICAL);
-
-   if (box->priv->ruler_y)
-   {
-      /* @@@ Do we need to disconnect the signals here? */
-      /* @@@ Do we need to call object_ref and object_unref here and for adjustments? */
-   }
-
-   box->priv->ruler_y = ruler;
-
-   if (GTK_DATABOX_IS_RULER (ruler))
-   {
-      gtk_databox_ruler_set_scale_type (ruler,
-					box->priv->scale_type_y);
-
-      gtk_databox_ruler_update (box);
-      g_signal_connect_swapped (box, "motion_notify_event",
-				G_CALLBACK (GTK_WIDGET_GET_CLASS
-					    (box->priv->ruler_y)->
-					    motion_notify_event),
-				G_OBJECT (box->priv->ruler_y));
-   }
-
-   g_object_notify (G_OBJECT (box), "ruler-y");
-}
-
-/**
- * gtk_databox_set_scale_type_x
- * @box: A #GtkDatabox widget
- * @scale_type: An #GtkDataboxScaleType (linear or logarithmic)
- *
- * Setter function for the #GtkDatabox:scale-type-x property.
- *
- */
-void
-gtk_databox_set_scale_type_x (GtkDatabox * box,
-			      GtkDataboxScaleType scale_type)
-{
-   box->priv->scale_type_x = scale_type;
-
-   if (box->priv->ruler_x)
-      gtk_databox_ruler_set_scale_type (box->priv->ruler_x, scale_type);
-
-   g_object_notify (G_OBJECT (box), "scale-type-x");
-}
-
-/**
- * gtk_databox_set_scale_type_y
- * @box: A #GtkDatabox widget
- * @scale_type: An #GtkDataboxScaleType (linear or logarithmic)
- *
- * Setter function for the #GtkDatabox:scale-type-y property.
- *
- */
-void
-gtk_databox_set_scale_type_y (GtkDatabox * box,
-			      GtkDataboxScaleType scale_type)
-{
-   box->priv->scale_type_y = scale_type;
-
-   if (box->priv->ruler_y)
-      gtk_databox_ruler_set_scale_type (box->priv->ruler_y, scale_type);
-
-   g_object_notify (G_OBJECT (box), "scale-type-y");
-}
-
-/**
- * gtk_databox_get_enable_selection
- * @box: A #GtkDatabox widget.
- *
- * Getter function for the #GtkDatabox:enable-selection property.
- *
- * Return value: The #GtkDatabox:enable-selection property value.
- *
- */
-gboolean
-gtk_databox_get_enable_selection (GtkDatabox * box)
-{
-   g_return_val_if_fail (GTK_IS_DATABOX (box), FALSE);
-
-   return box->priv->enable_selection;
-}
-
-/**
- * gtk_databox_get_enable_zoom
- * @box: A #GtkDatabox widget.
- *
- * Getter function for the #GtkDatabox:enable-zoom property.
- *
- * Return value: The #GtkDatabox:enable-zoom property value.
- *
- */
-gboolean
-gtk_databox_get_enable_zoom (GtkDatabox * box)
-{
-   g_return_val_if_fail (GTK_IS_DATABOX (box), FALSE);
-
-   return box->priv->enable_zoom;
-}
-
-/**
- * gtk_databox_get_adjustment_x
- * @box: A #GtkDatabox widget.
- *
- * Getter function for the #GtkDatabox:adjustment-x property.
- *
- * Return value: The #GtkDatabox:adjustment-x property value.
- *
- */
-GtkAdjustment *
-gtk_databox_get_adjustment_x (GtkDatabox * box)
-{
-   g_return_val_if_fail (GTK_IS_DATABOX (box), NULL);
-
-   return box->priv->adj_x;
-}
-
-/**
- * gtk_databox_get_adjustment_y
- * @box: A #GtkDatabox widget.
- *
- * Getter function for the #GtkDatabox:adjustment-y property.
- *
- * Return value: The #GtkDatabox:adjustment-y property value.
- *
- */
-GtkAdjustment *
-gtk_databox_get_adjustment_y (GtkDatabox * box)
-{
-   g_return_val_if_fail (GTK_IS_DATABOX (box), NULL);
-
-   return box->priv->adj_y;
-}
-
-/**
- * gtk_databox_get_ruler_x
- * @box: A #GtkDatabox widget.
- *
- * Getter function for the #GtkDatabox:ruler-x property.
- *
- * Return value: The #GtkDatabox:ruler-x property value.
- *
- */
-GtkDataboxRuler *
-gtk_databox_get_ruler_x (GtkDatabox * box)
-{
-   g_return_val_if_fail (GTK_IS_DATABOX (box), NULL);
-
-   return box->priv->ruler_x;
-}
-
-/**
- * gtk_databox_get_ruler_y
- * @box: A #GtkDatabox widget.
- *
- * Getter function for the #GtkDatabox:ruler-y property.
- *
- * Return value: The #GtkDatabox:ruler-y property value.
- *
- */
-GtkDataboxRuler *
-gtk_databox_get_ruler_y (GtkDatabox * box)
-{
-   g_return_val_if_fail (GTK_IS_DATABOX (box), NULL);
-
-   return box->priv->ruler_y;
-}
-
-/**
- * gtk_databox_get_scale_type_x
- * @box: A #GtkDatabox widget.
- *
- * Getter function for the #GtkDatabox:scale-type-x property.
- *
- * Return value: The #GtkDatabox:scale-type-x property value.
- *
- */
-GtkDataboxScaleType
-gtk_databox_get_scale_type_x (GtkDatabox * box)
-{
-   return box->priv->scale_type_x;
-}
-
-/**
- * gtk_databox_get_scale_type_y
- * @box: A #GtkDatabox widget.
- *
- * Getter function for the #GtkDatabox:scale-type-y property.
- *
- * Return value: The #GtkDatabox:scale-type-y property value.
- *
- */
-GtkDataboxScaleType
-gtk_databox_get_scale_type_y (GtkDatabox * box)
-{
-   return box->priv->scale_type_y;
-}
-
-static void
-gtk_databox_calculate_translation_factors (GtkDatabox * box)
-{
-   /* @@@ Check for all external functions, if type checks are implemented! */
-   GtkWidget *widget = GTK_WIDGET(box);
-
-   if (box->priv->scale_type_x == GTK_DATABOX_SCALE_LINEAR)
-      box->priv->translation_factor_x =
-	 widget->allocation.width / (box->priv->visible_right -
-				box->priv->visible_left);
-   else if (box->priv->scale_type_x == GTK_DATABOX_SCALE_LOG2)
-      box->priv->translation_factor_x =
-	 widget->allocation.width / log2 (box->priv->visible_right /
-				    box->priv->visible_left);
-   else
-      box->priv->translation_factor_x =
-	 widget->allocation.width / log10 (box->priv->visible_right /
-				    box->priv->visible_left);
-
-   if (box->priv->scale_type_y == GTK_DATABOX_SCALE_LINEAR)
-      box->priv->translation_factor_y =
-	 widget->allocation.height / (box->priv->visible_bottom -
-				 box->priv->visible_top);
-   else if (box->priv->scale_type_y == GTK_DATABOX_SCALE_LOG2)
-      box->priv->translation_factor_y =
-	 widget->allocation.height / log2 (box->priv->visible_bottom /
-				     box->priv->visible_top);
-   else
-      box->priv->translation_factor_y =
-	 widget->allocation.height / log10 (box->priv->visible_bottom /
-				     box->priv->visible_top);
-}
-
-static void
-gtk_databox_create_backing_pixmap(GtkDatabox * box)
-{
-   GtkWidget *widget;
-   gint width;
-   gint height;
-
-   widget = GTK_WIDGET (box);
-
-   if (box->priv->backing_pixmap)
-   {
-      gdk_drawable_get_size (box->priv->backing_pixmap,&width,&height);
-      if ((width == widget->allocation.width)&&
-	  (height == widget->allocation.height))
-	 return;
-
-      g_object_unref (box->priv->backing_pixmap);
-   }
-
-   box->priv->backing_pixmap = gdk_pixmap_new (widget->window,
-					  widget->allocation.width,
-					  widget->allocation.height, -1);
-}
-
-/**
- * gtk_databox_get_backing_pixmap:
- * @box: A #GtkDatabox widget
- *
- * This function returns the pixmap which is used by @box and its #GtkDataboxGraph objects
- * for drawing operations before copying the result to the screen.
- *
- * The function is typically called by the #GtkDataboxGraph objects.
- *
- * Return value: Backing pixmap
- */
-GdkPixmap *
-gtk_databox_get_backing_pixmap(GtkDatabox * box)
-{
-   g_return_val_if_fail (GTK_IS_DATABOX (box), NULL);
-
-   return box->priv->backing_pixmap;
-}
-
-static void
-gtk_databox_size_allocate (GtkWidget * widget, GtkAllocation * allocation)
-{
-   GtkDatabox *box = GTK_DATABOX (widget);
-
-   widget->allocation = *allocation;
-
-   if (gtk_widget_get_realized (widget))
-   {
-      gdk_window_move_resize (widget->window,
-			      allocation->x, allocation->y,
-			      allocation->width, allocation->height);
-
-      gtk_databox_create_backing_pixmap (box);
-   }
-
-   if (box->priv->selection_active)
-   {
-      gtk_databox_selection_cancel (box);
-   }
-
-   gtk_databox_calculate_translation_factors (box);
-}
-
-static gint
-gtk_databox_expose (GtkWidget * widget, GdkEventExpose * event)
-{
-   GtkDatabox *box = GTK_DATABOX (widget);
-   GList *list;
-
-   gdk_draw_rectangle (box->priv->backing_pixmap,
-                       widget->style->bg_gc[0],
-		       TRUE, 0, 0,
-		       widget->allocation.width,
-		       widget->allocation.height);
-
-   list = g_list_last (box->priv->graphs);
-
-   while (list)
-   {
-      if (list->data)
-      {
-	 gtk_databox_graph_draw (GTK_DATABOX_GRAPH (list->data), box);
-      }
-      else
-      {
-	 /* Do nothing if data == NULL */
-      }
-      list = g_list_previous (list);
-   }
-
-   if (box->priv->selection_active)
-   {
-      gtk_databox_draw_selection (box, NULL);
-   }
-
-   gdk_draw_drawable (widget->window,
-		      widget->style->fg_gc[gtk_widget_get_state (widget)],
-		      box->priv->backing_pixmap,
-                      event->area.x, event->area.y,
-		      event->area.x, event->area.y,
-                      event->area.width,
-		      event->area.height);
-
-   return FALSE;
-}
-
-static void
-gtk_databox_calculate_selection_values (GtkDatabox * box)
-{
-   box->priv->selectionValues.x1 =
-      gtk_databox_pixel_to_value_x (box, box->priv->marked.x);
-   box->priv->selectionValues.x2 =
-      gtk_databox_pixel_to_value_x (box, box->priv->select.x);
-   box->priv->selectionValues.y1 =
-      gtk_databox_pixel_to_value_y (box, box->priv->marked.y);
-   box->priv->selectionValues.y2 =
-      gtk_databox_pixel_to_value_y (box, box->priv->select.y);
-}
-
-static gint
-gtk_databox_button_press (GtkWidget * widget, GdkEventButton * event)
-{
-   GtkDatabox *box = GTK_DATABOX (widget);
-
-   if (event->type != GDK_BUTTON_PRESS)
-      return FALSE;
-
-   box->priv->selection_finalized = FALSE;
-
-   if ((event->button == 1 || event->button == 2))
-   {
-      if (box->priv->selection_active)
-      {
-	 if (event->x>  MIN (box->priv->marked.x, box->priv->select.x)
-	&&  event->x<  MAX (box->priv->marked.x, box->priv->select.x)
-	&&  event->y>  MIN (box->priv->marked.y, box->priv->select.y)
-	&&  event->y<  MAX (box->priv->marked.y, box->priv->select.y))
-	 {
-	    gtk_databox_zoom_to_selection (box);
-	 }
-	 else
-	 {
-	    gtk_databox_selection_cancel (box);
-	 }
-	 box->priv->marked.x = box->priv->select.x = event->x;
-	 box->priv->marked.y = box->priv->select.y = event->y;
-	 gtk_databox_calculate_selection_values (box);
-      }
-   }
-
-   if (event->button == 3)
-   {
-      if (event->state&  GDK_SHIFT_MASK)
-      {
-	 gtk_databox_zoom_home (box);
-      }
-      else
-      {
-	 gtk_databox_zoom_out (box);
-      }
-   }
-
-   return FALSE;
-}
-
-static gint
-gtk_databox_button_release (GtkWidget * widget, GdkEventButton * event)
-{
-   GtkDatabox *box = GTK_DATABOX (widget);
-
-   if (event->type != GDK_BUTTON_RELEASE)
-      return FALSE;
-
-   if (box->priv->selection_active)
-   {
-      box->priv->selection_finalized = TRUE;
-
-      g_signal_emit (G_OBJECT (box),
-		     gtk_databox_signals[SELECTION_FINALIZED_SIGNAL],
-		     0,&box->priv->selectionValues);
-   }
-
-   return FALSE;
-}
-
-static gint
-gtk_databox_scroll_event (GtkWidget *widget, GdkEventScroll *event)
-{
-  GtkDatabox  *box = GTK_DATABOX (widget);
-
-  if (event->state&  GDK_CONTROL_MASK&&  box->priv->enable_zoom)
-    {
-      if (event->direction == GDK_SCROLL_DOWN)
-      {
-        gtk_databox_zoom_out(box);
-      }
-      else if (event->direction == GDK_SCROLL_UP&&
-             box->priv->adj_x->page_size / 2>= box->priv->zoom_limit&&
-             box->priv->adj_y->page_size / 2>= box->priv->zoom_limit)
-      {
-        gdouble       x_val, y_val;
-        gdouble       x_proportion, y_proportion;
-
-        x_val = gtk_databox_pixel_to_value_x(box, event->x);
-        y_val = gtk_databox_pixel_to_value_y(box, event->y);
-
-        if (box->priv->scale_type_x == GTK_DATABOX_SCALE_LINEAR)
-          {
-            x_proportion = (x_val - box->priv->total_left) /
-              (box->priv->total_right - box->priv->total_left);
-          }
-        else
-          {
-            x_proportion = log(x_val/box->priv->total_left) /
-              log(box->priv->total_right / box->priv->total_left);
-          }
-
-        if (box->priv->scale_type_y == GTK_DATABOX_SCALE_LINEAR)
-          {
-            y_proportion = (y_val - box->priv->total_top) /
-              (box->priv->total_bottom - box->priv->total_top);
-          }
-        else
-          {
-            y_proportion = log(y_val/box->priv->total_top) /
-              log(box->priv->total_bottom / box->priv->total_top);
-          }
-
-        box->priv->adj_x->page_size = box->priv->adj_x->page_size/2;
-        box->priv->adj_x->value = (x_proportion +
-                                   box->priv->adj_x->value) / 2;
-
-        box->priv->adj_y->page_size = box->priv->adj_y->page_size/2;
-        box->priv->adj_y->value = (y_proportion +
-                                   box->priv->adj_y->value) / 2;
-
-        gtk_databox_calculate_visible_limits(box);
-        gtk_databox_zoomed (box);
-      }
-    }
-  else
-    {
-      GtkAdjustment *adj;
-      gdouble delta, new_value;
-
-      if ((event->direction == GDK_SCROLL_UP ||
-         event->direction == GDK_SCROLL_DOWN)&&
-        !(event->state&  GDK_MOD1_MASK))
-      {
-        adj = box->priv->adj_y;
-      }
-      else
-      {
-        adj = box->priv->adj_x;
-      }
-
-      switch (event->direction)
-      {
-      case GDK_SCROLL_UP:
-      case GDK_SCROLL_LEFT:
-        delta = - adj->step_increment;
-        break;
-      case GDK_SCROLL_DOWN:
-      case GDK_SCROLL_RIGHT:
-        delta = adj->step_increment;
-        break;
-      }
-
-      new_value = CLAMP (adj->value + delta, adj->lower,
-                       adj->upper - adj->page_size);
-      gtk_adjustment_set_value(adj, new_value);
-    }
-
-  return FALSE;
-}
-
-static void
-gtk_databox_selection_cancel (GtkDatabox * box)
-{
-   GdkRectangle rect;
-
-   /* There is no active selection after cancellation */
-   box->priv->selection_active = FALSE;
-
-   /* Only active selections can be stopped */
-   box->priv->selection_finalized = FALSE;
-
-   /* Remove selection box */
-   rect.x = MIN (box->priv->marked.x, box->priv->select.x);
-   rect.y = MIN (box->priv->marked.y, box->priv->select.y);
-   rect.width = ABS (box->priv->marked.x - box->priv->select.x) + 1;
-   rect.height = ABS (box->priv->marked.y - box->priv->select.y) + 1;
-
-   gtk_databox_draw_selection (box,&rect);
-
-   /* Let everyone know that the selection has been canceled */
-   g_signal_emit (G_OBJECT (box),
-		  gtk_databox_signals[SELECTION_CANCELED_SIGNAL], 0);
-}
-
-
-static void
-gtk_databox_zoomed (GtkDatabox * box)
-{
-   box->priv->selection_active = FALSE;
-   box->priv->selection_finalized = FALSE;
-
-   gtk_adjustment_changed (box->priv->adj_x);
-   gtk_adjustment_changed (box->priv->adj_y);
-
-   gtk_widget_queue_draw (GTK_WIDGET(box));
-
-   g_signal_emit (G_OBJECT (box),
-		  gtk_databox_signals[ZOOMED_SIGNAL], 0, NULL);
-}
-
-/**
- * gtk_databox_zoom_to_selection:
- * @box: A #GtkDatabox widget
- *
- * This is equivalent to left-clicking into the selected area.
- *
- * This function works, if the attribute #enable-zoom is set to #TRUE. Calling the function
- * then zooms to the area selected with the mouse.
- *
- * Side effect: The @box emits #GtkDatabox::zoomed.
- */
-void
-gtk_databox_zoom_to_selection (GtkDatabox * box)
-{
-   GtkWidget *widget;
-
-   g_return_if_fail(GTK_IS_DATABOX(box));
-
-   widget = GTK_WIDGET (box);
-
-   if (!box->priv->enable_zoom)
-   {
-      gtk_databox_selection_cancel (box);
-      return;
-   }
-
-   box->priv->adj_x->value += (gfloat) (MIN (box->priv->marked.x,
-					    box->priv->select.x))
-      * box->priv->adj_x->page_size
-      / widget->allocation.width;
-   box->priv->adj_y->value += (gfloat) (MIN (box->priv->marked.y,
-					    box->priv->select.y))
-      * box->priv->adj_y->page_size
-      / widget->allocation.height;
-
-   box->priv->adj_x->page_size *=
-      (gfloat) (ABS (box->priv->marked.x - box->priv->select.x) + 1)
-      / widget->allocation.width;
-
-   box->priv->adj_y->page_size *=
-      (gfloat) (ABS (box->priv->marked.y - box->priv->select.y) + 1)
-      / widget->allocation.height;
-
-   /* If we zoom too far into the data, we will get funny results, because
-    * of overflow effects. Therefore zooming is limited to box->zoom_limit.
-    */
-   if (box->priv->adj_x->page_size<  box->priv->zoom_limit)
-   {
-      box->priv->adj_x->value = (gfloat) MAX (0,
-					     box->priv->adj_x->value
-					     - (box->priv->zoom_limit -
-						box->priv->adj_x->page_size) /
-					     2.0);
-      box->priv->adj_x->page_size = box->priv->zoom_limit;
-   }
-
-   if (box->priv->adj_y->page_size<  box->priv->zoom_limit)
-   {
-      box->priv->adj_y->value = (gfloat) MAX (0,
-					     box->priv->adj_y->value
-					     - (box->priv->zoom_limit -
-						box->priv->adj_y->page_size) /
-					     2.0);
-      box->priv->adj_y->page_size = box->priv->zoom_limit;
-   }
-
-   gtk_databox_calculate_visible_limits(box);
-   gtk_databox_zoomed (box);
-}
-
-/**
- * gtk_databox_zoom_out:
- * @box: A #GtkDatabox widget
- *
- * This is equivalent to right-clicking into the @box.
- *
- * This function works, if the attribute #enable-zoom is set to #TRUE. Calling the function
- * then zooms out by a factor of 2 in both dimensions (the maximum is defined by the total
- * limits, see gtk_databox_set_total_limits()).
- *
- * Side effect: The @box emits #GtkDatabox::zoomed.
- */
-void
-gtk_databox_zoom_out (GtkDatabox * box)
-{
-   if (!box->priv->enable_zoom)
-   {
-      return;
-   }
-
-   box->priv->adj_x->page_size = MIN (1.0, box->priv->adj_x->page_size * 2);
-   box->priv->adj_y->page_size = MIN (1.0, box->priv->adj_y->page_size * 2);
-   box->priv->adj_x->value =
-      (box->priv->adj_x->page_size == 1.0)
-      ? 0
-      : MAX (0, MIN (box->priv->adj_x->value - box->priv->adj_x->page_size / 4,
-		     1.0 - box->priv->adj_x->page_size));
-   box->priv->adj_y->value =
-      (box->priv->adj_y->page_size == 1.0)
-      ? 0
-      : MAX (0, MIN (box->priv->adj_y->value - box->priv->adj_y->page_size / 4,
-		     1.0 - box->priv->adj_y->page_size));
-
-   gtk_databox_calculate_visible_limits(box);
-   gtk_databox_zoomed (box);
-}
-
-/**
- * gtk_databox_zoom_home:
- * @box: A #GtkDatabox widget
- *
- * This is equivalent to shift right-clicking into the @box.
- *
- * This function works, if the attribute #enable-zoom is set to #TRUE. It is equivalent to
- * calling the gtk_databox_set_visible_limits() with the total limits.
- *
- */
-void
-gtk_databox_zoom_home (GtkDatabox * box)
-{
-   if (!box->priv->enable_zoom)
-   {
-      return;
-   }
-
-   gtk_databox_set_visible_limits (box,
-         box->priv->total_left, box->priv->total_right,
-         box->priv->total_top, box->priv->total_bottom);
-}
-
-static void
-gtk_databox_draw_selection (GtkDatabox * box, GdkRectangle * pixmapCopyRect)
-{
-   GtkWidget *widget = GTK_WIDGET (box);
-
-   if (!box->priv->select_gc)
-   {
-      GdkGCValues values;
-
-      values.foreground = widget->style->white;
-      values.function = GDK_XOR;
-      box->priv->select_gc = gtk_gc_get (widget->style->depth,
-					 widget->style->colormap,
-					&values,
-					 GDK_GC_FUNCTION | GDK_GC_FOREGROUND);
-   }
-
-
-   /* Draw a selection box in XOR mode onto the buffer backing_pixmap */
-   gdk_draw_rectangle (box->priv->backing_pixmap,
-                       box->priv->select_gc,
-		       FALSE,
-		       MIN (box->priv->marked.x, box->priv->select.x),
-		       MIN (box->priv->marked.y, box->priv->select.y),
-		       ABS (box->priv->marked.x - box->priv->select.x),
-		       ABS (box->priv->marked.y - box->priv->select.y));
-
-   /* Copy a part of the backing_pixmap to the screen */
-   if (pixmapCopyRect)
-      gdk_draw_drawable (widget->window,
-			 widget->style->fg_gc[gtk_widget_get_state (box)],
-			 box->priv->backing_pixmap,
-			 pixmapCopyRect->x,
-			 pixmapCopyRect->y,
-			 pixmapCopyRect->x,
-			 pixmapCopyRect->y,
-			 pixmapCopyRect->width, pixmapCopyRect->height);
-}
-
-static void
-gtk_databox_adjustment_value_changed (GtkDatabox * box)
-{
-   gtk_databox_calculate_visible_limits (box);
-
-   gtk_widget_queue_draw (GTK_WIDGET(box));
-}
-
-static void
-gtk_databox_ruler_update (GtkDatabox * box)
-{
-   if (box->priv->ruler_x)
-   {
-      gtk_databox_ruler_set_range (
-            GTK_DATABOX_RULER (box->priv->ruler_x),
-               box->priv->visible_left,
-               box->priv->visible_right,
-               0.5 * (box->priv->visible_left + box->priv->visible_right));
-   }
-
-   if (box->priv->ruler_y)
-   {
-      gtk_databox_ruler_set_range (
-            GTK_DATABOX_RULER (box->priv->ruler_y),
-	      box->priv->visible_top,
-	      box->priv->visible_bottom,
-	      0.5 * (box->priv->visible_top + box->priv->visible_bottom));
-   }
-}
-
-/**
- * gtk_databox_auto_rescale:
- * @box: A #GtkDatabox widget
- * @border: Relative border width (e.g. 0.1 means that the border on each side is 10% of the data area).
- *
- * This function is similar to gtk_databox_set_total_limits(). It sets the total limits
- * to match the data extrema (see gtk_databox_calculate_extrema()). If you do not like data pixels exactly at the
- * widget's border, you can add modify the limits using the border parameter: The limits are extended by
- * @border*(max-min) if max!=min. If max==min, they are extended by @border*max (otherwise the data could not be
- * scaled to the pixel realm).
- *
- * After calling this function, x values grow from left to right, y values grow from bottom to top.
- *
- * Return value: 0 on success,
- *          -1 if @box is no GtkDatabox widget,
- *          -2 if no datasets are available
- */
-gint
-gtk_databox_auto_rescale (GtkDatabox * box, gfloat border)
-{
-   gfloat min_x;
-   gfloat max_x;
-   gfloat min_y;
-   gfloat max_y;
-   gint extrema_success = gtk_databox_calculate_extrema (box,&min_x,&max_x,
-&min_y,&max_y);
-   if (extrema_success)
-      return extrema_success;
-   else
-   {
-      gfloat width = max_x - min_x;
-      gfloat height = max_y - min_y;
-
-      if (width == 0) width = max_x;
-      if (height == 0) height = max_y;
-
-      min_x -= border * width;
-      max_x += border * width;
-      min_y -= border * height;
-      max_y += border * height;
-   }
-
-   gtk_databox_set_total_limits (GTK_DATABOX (box), min_x, max_x, max_y,
-				 min_y);
-
-   return 0;
-}
-
-
-/**
- * gtk_databox_calculate_extrema:
- * @box: A #GtkDatabox widget
- * @min_x: Will be filled with the lowest x value of all datasets
- * @max_x: Will be filled with the highest x value of all datasets
- * @min_y: Will be filled with the lowest y value of all datasets
- * @max_y: Will be filled with the highest y value of all datasets
- *
- * Determines the minimum and maximum x and y values of all
- * #GtkDataboxGraph objects which have been added to the #GtkDatabox widget via gtk_databox_graph_add().
- *
- * Return value: 0 on success,
- *          -1 if @box is no GtkDatabox widget,
- *          -2 if no datasets are available
- */
-gint
-gtk_databox_calculate_extrema (GtkDatabox * box,
-			       gfloat * min_x, gfloat * max_x, gfloat * min_y,
-			       gfloat * max_y)
-{
-   GList *list;
-   gint return_val = -2;
-   gboolean first = TRUE;
-
-   g_return_val_if_fail (GTK_IS_DATABOX (box), -1);
-
-   list = g_list_last (box->priv->graphs);
-
-   while (list)
-   {
-      gfloat graph_min_x;
-      gfloat graph_max_x;
-      gfloat graph_min_y;
-      gfloat graph_max_y;
-      gint value = -1;
-
-      if (list->data)
-      {
-	 value =
-	    gtk_databox_graph_calculate_extrema (GTK_DATABOX_GRAPH
-						 (list->data),&graph_min_x,
-						&graph_max_x,&graph_min_y,
-						&graph_max_y);
-      }
-      else
-      {
-	 /* Do nothing if data == NULL */
-      }
-
-      if (value>= 0)
-      {
-	 return_val = 0;
-
-	 if (first)
-	 {
-	    /* The min and max values need to be initialized with the
-	     * first valid values from the graph
-	     */
-	    *min_x = graph_min_x;
-	    *max_x = graph_max_x;
-	    *min_y = graph_min_y;
-	    *max_y = graph_max_y;
-
-	    first = FALSE;
-	 }
-	 else
-	 {
-	    *min_x = MIN (*min_x, graph_min_x);
-	    *min_y = MIN (*min_y, graph_min_y);
-	    *max_x = MAX (*max_x, graph_max_x);
-	    *max_y = MAX (*max_y, graph_max_y);
-	 }
-      }
-
-      list = g_list_previous (list);
-   }
-
-   return return_val;
-}
-
-static gfloat
-gtk_databox_get_offset_x (GtkDatabox* box)
-{
-   if (box->priv->scale_type_x == GTK_DATABOX_SCALE_LINEAR)
-      return (box->priv->visible_left - box->priv->total_left)
-	 / (box->priv->total_right - box->priv->total_left);
-   else if (box->priv->scale_type_x == GTK_DATABOX_SCALE_LOG2)
-      return log2 (box->priv->visible_left / box->priv->total_left)
-	 / log2 (box->priv->total_right / box->priv->total_left);
-   else
-      return log10 (box->priv->visible_left / box->priv->total_left)
-	 / log10 (box->priv->total_right / box->priv->total_left);
-}
-
-static gfloat
-gtk_databox_get_page_size_x (GtkDatabox* box)
-{
-   if (box->priv->scale_type_x == GTK_DATABOX_SCALE_LINEAR)
-      return (box->priv->visible_left - box->priv->visible_right)
-	 / (box->priv->total_left - box->priv->total_right);
-   else if (box->priv->scale_type_x == GTK_DATABOX_SCALE_LOG2)
-      return log2 (box->priv->visible_left / box->priv->visible_right)
-	 / log2 (box->priv->total_left / box->priv->total_right);
-   else
-      return log10 (box->priv->visible_left / box->priv->visible_right)
-	 / log10 (box->priv->total_left / box->priv->total_right);
-}
-
-static gfloat
-gtk_databox_get_offset_y (GtkDatabox* box)
-{
-   if (box->priv->scale_type_y == GTK_DATABOX_SCALE_LINEAR)
-      return (box->priv->visible_top - box->priv->total_top)
-	 / (box->priv->total_bottom - box->priv->total_top);
-   else if (box->priv->scale_type_y == GTK_DATABOX_SCALE_LOG2)
-      return log2 (box->priv->visible_top / box->priv->total_top)
-	 / log2 (box->priv->total_bottom / box->priv->total_top);
-   else
-      return log10 (box->priv->visible_top / box->priv->total_top)
-	 / log10 (box->priv->total_bottom / box->priv->total_top);
-}
-
-static gfloat
-gtk_databox_get_page_size_y (GtkDatabox* box)
-{
-   if (box->priv->scale_type_y == GTK_DATABOX_SCALE_LINEAR)
-      return (box->priv->visible_top - box->priv->visible_bottom)
-	 / (box->priv->total_top - box->priv->total_bottom);
-   else if (box->priv->scale_type_y == GTK_DATABOX_SCALE_LOG2)
-      return log2 (box->priv->visible_top / box->priv->visible_bottom)
-	 / log2 (box->priv->total_top / box->priv->total_bottom);
-   else
-      return log10 (box->priv->visible_top / box->priv->visible_bottom)
-	 / log10 (box->priv->total_top / box->priv->total_bottom);
-}
-
-/**
- * gtk_databox_set_total_limits:
- * @box: A #GtkDatabox widget
- * @left: Left total limit
- * @right: Right total limit
- * @top: Top total limit
- * @bottom: Bottom total limit
- *
- * This function is used to set the limits of the total
- * display area of @box.
- * This function can be used to invert the orientation of the displayed graphs,
- * e.g. @top=-1000 and  @bottom=0.
- *
- * Side effect: The @box also internally calls gtk_databox_set_visible_limits() with the same values.
- *
- */
-void
-gtk_databox_set_total_limits (GtkDatabox * box,
-			      gfloat left, gfloat right,
-			      gfloat top, gfloat bottom)
-{
-   g_return_if_fail (GTK_IS_DATABOX (box));
-   g_return_if_fail (left != right);
-   g_return_if_fail (top != bottom);
-
-   box->priv->total_left = left;
-   box->priv->total_right = right;
-   box->priv->total_top = top;
-   box->priv->total_bottom = bottom;
-
-   gtk_databox_set_visible_limits(box, left, right, top, bottom);
-}
-
-/**
- * gtk_databox_set_visible_limits:
- * @box: A #GtkDatabox widget
- * @left: Left visible limit
- * @right: Right visible limit
- * @top: Top visible limit
- * @bottom: Bottom visible limit
- *
- * This function is used to set the limits of the visible
- * display area of @box. The visible display area can be section of the total
- * area, i.e. the @box zooms in, showing only a part of the complete picture.
- *
- * The orientation of the values have to be the same as in gtk_databox_set_total_limits() and
- * the visible limits have to be within the total limits. The
- * values will not be used otherwise.
- *
- * Side effect: The @box emits #GtkDatabox::zoomed.
- *
- */
-void
-gtk_databox_set_visible_limits (GtkDatabox * box,
-				gfloat left, gfloat right,
-				gfloat top, gfloat bottom)
-{
-   gboolean visible_inside_total = FALSE;
-
-   g_return_if_fail (GTK_IS_DATABOX (box));
-
-   visible_inside_total =
-      ((box->priv->total_left<= left&&  left<  right
-	&&  right<= box->priv->total_right)
-       || (box->priv->total_left>= left&&  left>  right
-	&&  right>= box->priv->total_right))
-&&
-      ((box->priv->total_bottom<= bottom&&  bottom<  top
-	&&  top<= box->priv->total_top)
-       || (box->priv->total_bottom>= bottom&&  bottom>  top
-	&&  top>= box->priv->total_top));
-
-   g_return_if_fail (visible_inside_total);
-
-   box->priv->visible_left = left;
-   box->priv->visible_right = right;
-   box->priv->visible_top = top;
-   box->priv->visible_bottom = bottom;
-
-   gtk_databox_calculate_translation_factors (box);
-
-   box->priv->adj_x->value = gtk_databox_get_offset_x (box);
-   box->priv->adj_x->page_size = gtk_databox_get_page_size_x (box);
-   box->priv->adj_y->value = gtk_databox_get_offset_y (box);
-   box->priv->adj_y->page_size = gtk_databox_get_page_size_y (box);
-
-   /* Update rulers */
-   gtk_databox_ruler_update(box);
-
-   gtk_databox_calculate_translation_factors (box);
-
-   gtk_databox_zoomed (box);
-}
-
-/**
- * gtk_databox_calculate_visible_limits:
- * @box: A #GtkDatabox widget
- *
- * Calculates the visible limits based on the adjustment values and page sizes
- * and calls gtk_databox_set_visible_limits();
- */
-static void
-gtk_databox_calculate_visible_limits (GtkDatabox * box)
-{
-   if (!gtk_widget_get_visible (box))
-      return;
-
-   if (box->priv->scale_type_x == GTK_DATABOX_SCALE_LINEAR)
-   {
-      box->priv->visible_left =
-           box->priv->total_left
-           + (box->priv->total_right - box->priv->total_left)
-           * box->priv->adj_x->value;
-      box->priv->visible_right =
-           box->priv->total_left
-           + (box->priv->total_right - box->priv->total_left)
-           * (box->priv->adj_x->value + box->priv->adj_x->page_size);
-   }
-   else
-   {
-      box->priv->visible_left =
-            box->priv->total_left
-            * pow (box->priv->total_right / box->priv->total_left,
-                  box->priv->adj_x->value);
-      box->priv->visible_right =
-            box->priv->total_left
-            * pow (box->priv->total_right / box->priv->total_left,
-                   box->priv->adj_x->value + box->priv->adj_x->page_size);
-   }
-
-   if (box->priv->scale_type_y == GTK_DATABOX_SCALE_LINEAR)
-   {
-      box->priv->visible_top =
-           box->priv->total_top
-           + (box->priv->total_bottom - box->priv->total_top)
-           * box->priv->adj_y->value;
-      box->priv->visible_bottom =
-           box->priv->total_top
-           + (box->priv->total_bottom - box->priv->total_top)
-           * (box->priv->adj_y->value + box->priv->adj_y->page_size);
-   }
-   else
-   {
-      box->priv->visible_top =
-            box->priv->total_top
-            * pow (box->priv->total_bottom / box->priv->total_top,
-                   box->priv->adj_y->value),
-      box->priv->visible_bottom =
-            box->priv->total_top
-            * pow (box->priv->total_bottom / box->priv->total_top,
-                  box->priv->adj_y->value + box->priv->adj_y->page_size);
-   }
-
-   /* Adjustments are the basis for the calculations in this function
-    * so they do not need to be updated
-    */
-
-   /* Update rulers */
-   gtk_databox_ruler_update(box);
-
-   gtk_databox_calculate_translation_factors (box);
-}
-
-/**
- * gtk_databox_get_total_limits:
- * @box: A #GtkDatabox widget
- * @left: Space for total left value or #NULL
- * @right: Space for total right value or #NULL
- * @top: Space for total top value or #NULL
- * @bottom: Space for total bottom value or #NULL
- *
- * Gives the total limits (as set by gtk_databox_auto_rescale() or gtk_databox_set_total_limits()).
- */
-void
-gtk_databox_get_total_limits (GtkDatabox * box,
-			      gfloat * left, gfloat * right,
-			      gfloat * top, gfloat * bottom)
-{
-   g_return_if_fail (GTK_IS_DATABOX (box));
-
-   if (left)
-      *left = box->priv->total_left;
-   if (right)
-      *right = box->priv->total_right;
-   if (top)
-      *top = box->priv->total_top;
-   if (bottom)
-      *bottom = box->priv->total_bottom;
-}
-
-/**
- * gtk_databox_get_visible_limits:
- * @box: A #GtkDatabox widget
- * @left: Space for visible left value or #NULL
- * @right: Space for visible right value or #NULL
- * @top: Space for visible top value or #NULL
- * @bottom: Space for visible bottom value or #NULL
- *
- * Gives the current visible limits. These differ from those given by gtk_databox_get_total_limits() if
- * you zoomed into the data for instance by gtk_databox_zoom_to_selection() or gtk_databox_set_visible_limits() (these values
- * can be changed by scrolling, of course).
- */
-void
-gtk_databox_get_visible_limits (GtkDatabox * box,
-				gfloat * left, gfloat * right,
-				gfloat * top, gfloat * bottom)
-{
-   g_return_if_fail (GTK_IS_DATABOX (box));
-
-   if (left)
-      *left = box->priv->visible_left;
-   if (right)
-      *right = box->priv->visible_right;
-   if (top)
-      *top = box->priv->visible_top;
-   if (bottom)
-      *bottom = box->priv->visible_bottom;
-}
-
-
-/**
- * gtk_databox_graph_add:
- * @box: A #GtkDatabox widget
- * @graph: A graph, e.g. a #GtkDataboxPoints or a #GtkDataboxGrid object
- *
- * Adds the @graph to the @box. The next time the @box is re-drawn, the graph will be shown.
- *
- * It might be becessary to modify the total_limits in order for the graph to be displayed properly (see gtk_databox_set_total_limits()).
- *
- * Return value: 0 on success, -1 otherwise
- */
-gint
-gtk_databox_graph_add (GtkDatabox * box, GtkDataboxGraph * graph)
-{
-   g_return_val_if_fail (GTK_IS_DATABOX (box), -1);
-   g_return_val_if_fail (GTK_DATABOX_IS_GRAPH (graph), -1);
-
-   box->priv->graphs = g_list_append (box->priv->graphs, graph);
-
-   return (box->priv->graphs == NULL) ? -1 : 0;
-}
-
-/**
- * gtk_databox_graph_remove:
- * @box: A #GtkDatabox widget
- * @graph: A graph, e.g. a #GtkDataboxPoints or a #GtkDataboxGrid object
- *
- * Removes the @graph from the @box once. The next time the @box is re-drawn, the graph will not be shown (unless it was added more
- * than once).
- *
- * Return value: 0 on success, -1 otherwise
- */
-gint
-gtk_databox_graph_remove (GtkDatabox * box, GtkDataboxGraph * graph)
-{
-   GList *list;
-
-   g_return_val_if_fail (GTK_IS_DATABOX (box), -1);
-   g_return_val_if_fail (GTK_DATABOX_IS_GRAPH (graph), -1);
-
-   list = g_list_find (box->priv->graphs, graph);
-   g_return_val_if_fail (list, -1);
-
-   box->priv->graphs = g_list_delete_link (box->priv->graphs, list);
-
-   return 0;
-}
-
-/**
- * gtk_databox_graph_remove_all:
- * @box: A #GtkDatabox widget
- *
- * Removes all graphs from the @box. The next time the @box is re-drawn, no graphs will be shown.
- *
- * Return value: 0 on success, -1 otherwise
- */
-gint
-gtk_databox_graph_remove_all (GtkDatabox * box)
-{
-   g_return_val_if_fail (GTK_IS_DATABOX (box), -1);
-
-   g_list_free (box->priv->graphs);
-
-   box->priv->graphs = 0;
-
-   return 0;
-}
-
-/**
- * gtk_databox_values_to_pixels:
- * @box: A #GtkDatabox widget
- * @len: Number of values/pixels
- * @values_x: Array of X values (length>= len)
- * @values_y: Array of Y values (length>= len)
- * @pixels: Array of pixel coordinates (length>= len)
- *
- * Calculates the pixel equivalents of the given X/Y values and stores them in the @pixels array.
- */
-void
-gtk_databox_values_to_pixels (GtkDatabox * box, guint len,
-			      const gfloat * values_x,
-			      const gfloat * values_y,
-			      GdkPoint * pixels)
-{
-   guint i;
-
-   for (i = 0; i<  len; ++i, ++values_x, ++values_y, ++pixels)
-   {
-      if (box->priv->scale_type_x == GTK_DATABOX_SCALE_LINEAR)
-	 pixels->x =
-	    (*values_x -
-	     box->priv->visible_left) * box->priv->translation_factor_x;
-      else if (box->priv->scale_type_x == GTK_DATABOX_SCALE_LOG2)
-	 pixels->x =
-	    log2 (*values_x / box->priv->visible_left) *
-	    box->priv->translation_factor_x;
-      else
-	 pixels->x =
-	    log10 (*values_x / box->priv->visible_left) *
-	    box->priv->translation_factor_x;
-
-      if (box->priv->scale_type_y == GTK_DATABOX_SCALE_LINEAR)
-	 pixels->y =
-	    (*values_y -
-	     box->priv->visible_top) * box->priv->translation_factor_y;
-      else if (box->priv->scale_type_y == GTK_DATABOX_SCALE_LOG2)
-	 pixels->y =
-	    log2 (*values_y / box->priv->visible_top) *
-	    box->priv->translation_factor_y;
-      else
-	 pixels->y =
-	    log10 (*values_y / box->priv->visible_top) *
-	    box->priv->translation_factor_y;
-   }
-}
-
-/**
- * gtk_databox_value_to_pixel_x:
- * @box: A #GtkDatabox widget
- * @value: An x value
- *
- * Calculates the horizontal pixel coordinate which represents the x @value.
- * Pixel coordinates are relative to the top-left corner of the @box which is equivalent to (0,0).
- *
- * Return value: Pixel coordinate
- */
-gint16
-gtk_databox_value_to_pixel_x (GtkDatabox * box, gfloat value)
-{
-   if (box->priv->scale_type_x == GTK_DATABOX_SCALE_LINEAR)
-      return (value -
-	      box->priv->visible_left) *
-	 box->priv->translation_factor_x;
-   else if (box->priv->scale_type_x == GTK_DATABOX_SCALE_LOG2)
-      return log2 (value / box->priv->visible_left) *
-	 box->priv->translation_factor_x;
-   else
-      return log10 (value / box->priv->visible_left) *
-	 box->priv->translation_factor_x;
-}
-
-/**
- * gtk_databox_value_to_pixel_y:
- * @box: A #GtkDatabox widget
- * @value: A y value
- *
- * Calculates the vertical pixel coordinate which represents the y @value.
- * Pixel coordinates are relative to the top-left corner of the @box which is equivalent to (0,0).
- *
- * Return value: Pixel coordinate
- */
-gint16
-gtk_databox_value_to_pixel_y (GtkDatabox * box, gfloat value)
-{
-   if (box->priv->scale_type_y == GTK_DATABOX_SCALE_LINEAR)
-      return (value -
-	      box->priv->visible_top) * box->priv->translation_factor_y;
-   else if (box->priv->scale_type_y == GTK_DATABOX_SCALE_LOG2)
-      return log2 (value / box->priv->visible_top) *
-	 box->priv->translation_factor_y;
-   else
-      return log10 (value / box->priv->visible_top) *
-	 box->priv->translation_factor_y;
-}
-
-/**
- * gtk_databox_pixel_to_value_x:
- * @box: A #GtkDatabox widget
- * @pixel: A horizontal pixel coordinate
- *
- * Calculates the x value which is represented by the horizontal @pixel coordinate.
- * Pixel coordinates are relative to the top-left corner of the @box which is equivalent to (0,0).
- *
- * Return value: x value
- */
-gfloat
-gtk_databox_pixel_to_value_x (GtkDatabox * box, gint16 pixel)
-{
-   if (box->priv->scale_type_x == GTK_DATABOX_SCALE_LINEAR)
-      return box->priv->visible_left +
-	 pixel / box->priv->translation_factor_x;
-   else if (box->priv->scale_type_x == GTK_DATABOX_SCALE_LOG2)
-      return box->priv->visible_left * pow (2,
-					       pixel /
-					       box->priv->
-					       translation_factor_x);
-   else
-      return box->priv->visible_left * pow (10,
-					       pixel /
-					       box->priv->
-					       translation_factor_x);
-}
-
-/**
- * gtk_databox_pixel_to_value_y:
- * @box: A #GtkDatabox widget
- * @pixel: A vertical pixel coordinate
- *
- * Calculates the y value which is represented by the vertical @pixel coordinate.
- * Pixel coordinates are relative to the top-left corner of the @box which is equivalent to (0,0).
- *
- * Return value: y value
- */
-gfloat
-gtk_databox_pixel_to_value_y (GtkDatabox * box, gint16 pixel)
-{
-   if (box->priv->scale_type_y == GTK_DATABOX_SCALE_LINEAR)
-      return box->priv->visible_top +
-	 pixel / box->priv->translation_factor_y;
-   else if (box->priv->scale_type_y == GTK_DATABOX_SCALE_LOG2)
-      return box->priv->visible_top * pow (2,
-					      pixel /
-					      box->priv->
-					      translation_factor_y);
-   else
-      return box->priv->visible_top * pow (10,
-					      pixel /
-					      box->priv->
-					      translation_factor_y);
-}
-
-/**
- * gtk_databox_create_box_with_scrollbars_and_rulers:
- * @p_box: Will contain a pointer to a #GtkDatabox widget
- * @p_table: Will contain a pointer to a #GtkTable widget
- * @scrollbar_x: Whether to attach a horizontal scrollbar
- * @scrollbar_y: Whether to attach a vertical scrollbar
- * @ruler_x: Whether to attach a horizontal ruler
- * @ruler_y: Whether to attach a vertical ruler
- *
- * This is a convenience function which creates a #GtkDatabox widget in a
- * GtkTable widget optionally accompanied by scrollbars and rulers. You only
- * have to fill in the data (gtk_databox_graph_add()) and adjust the limits
- * (gtk_databox_set_total_limits() or gtk_databox_auto_rescale()).
- *
- * @see_also: gtk_databox_new(), gtk_databox_set_adjustment_x(), gtk_databox_set_adjustment_y(), gtk_databox_set_ruler_x(), gtk_databox_set_ruler_y()
- */
-void
-gtk_databox_create_box_with_scrollbars_and_rulers (GtkWidget ** p_box,
-						   GtkWidget ** p_table,
-						   gboolean scrollbar_x,
-						   gboolean scrollbar_y,
-						   gboolean ruler_x,
-						   gboolean ruler_y)
-{
-   GtkTable *table;
-   GtkDatabox *box;
-   GtkWidget *scrollbar;
-   GtkWidget *ruler;
-
-   *p_table = gtk_table_new (3, 3, FALSE);
-   *p_box = gtk_databox_new ();
-   box = GTK_DATABOX (*p_box);
-   table = GTK_TABLE (*p_table);
-
-   gtk_table_attach (table, GTK_WIDGET (box), 1, 2, 1, 2,
-		     GTK_FILL | GTK_EXPAND | GTK_SHRINK,
-		     GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 0);
-
-   if (scrollbar_x)
-   {
-      scrollbar = gtk_hscrollbar_new (NULL);
-      gtk_databox_set_adjustment_x (box,
-				   gtk_range_get_adjustment (GTK_RANGE
-							     (scrollbar)));
-      gtk_table_attach (table, scrollbar, 1, 2, 2, 3,
-			GTK_FILL | GTK_EXPAND | GTK_SHRINK, GTK_FILL, 0, 0);
-   }
-
-   if (scrollbar_y)
-   {
-      scrollbar = gtk_vscrollbar_new (NULL);
-      gtk_databox_set_adjustment_y (box,
-				   gtk_range_get_adjustment (GTK_RANGE
-							     (scrollbar)));
-      gtk_table_attach (table, scrollbar, 2, 3, 1, 2, GTK_FILL,
-			GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 0);
-   }
-
-   if (ruler_x)
-   {
-      ruler = gtk_databox_ruler_new (GTK_ORIENTATION_HORIZONTAL);
-      gtk_databox_ruler_set_scale_type (GTK_DATABOX_RULER (ruler),
-					box->priv->scale_type_x);
-      gtk_table_attach (table, ruler, 1, 2, 0, 1,
-			GTK_FILL | GTK_EXPAND | GTK_SHRINK, GTK_FILL, 0, 0);
-      gtk_databox_set_ruler_x (box, GTK_DATABOX_RULER (ruler));
-   }
-
-   if (ruler_y)
-   {
-      ruler = gtk_databox_ruler_new (GTK_ORIENTATION_VERTICAL);
-      gtk_databox_ruler_set_scale_type (GTK_DATABOX_RULER (ruler),
-					box->priv->scale_type_y);
-      gtk_table_attach (table, ruler, 0, 1, 1, 2, GTK_FILL,
-			GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 0);
-      gtk_databox_set_ruler_y (box, GTK_DATABOX_RULER (ruler));
-   }
-}
-
-
diff --git a/gtk/gtkdatabox.c.rej b/gtk/gtkdatabox.c.rej
deleted file mode 100644
index 3e6fdc6..0000000
--- a/gtk/gtkdatabox.c.rej
+++ /dev/null
@@ -1,42 +0,0 @@
---- gtk/gtkdatabox.c	2011-05-21 12:39:01.583594722 +0200
-+++ gtk/gtkdatabox.c	2011-05-21 12:38:43.523595004 +0200
-@@ -453,7 +453,8 @@
-       gint width;
-       gint height;
-
--      gdk_drawable_get_size (widget->window,&width,&height);
-+      width = gdk_window_get_width(widget->window);
-+      height = gdk_window_get_height(widget->window);
-       x = MAX (0, MIN (width - 1, x));
-       y = MAX (0, MIN (height - 1, y));
-
-@@ -587,7 +588,7 @@
-    gint attributes_mask;
-
-    box = GTK_DATABOX (widget);
--   GTK_WIDGET_SET_FLAGS (box, GTK_REALIZED);
-+   gtk_widget_set_realized(box, GTK_REALIZED);
-
-    attributes.window_type = GDK_WINDOW_CHILD;
-    attributes.x = widget->allocation.x;
---- gtk/gtkdatabox.c	2011-05-21 12:39:01.583594722 +0200
-+++ gtk/gtkdatabox.c	2011-05-21 12:38:43.523595004 +0200
-@@ -453,7 +453,8 @@
-       gint width;
-       gint height;
-
--      gdk_drawable_get_size (widget->window,&width,&height);
-+      width = gdk_window_get_width(widget->window);
-+      height = gdk_window_get_height(widget->window);
-       x = MAX (0, MIN (width - 1, x));
-       y = MAX (0, MIN (height - 1, y));
-
-@@ -587,7 +588,7 @@
-    gint attributes_mask;
-
-    box = GTK_DATABOX (widget);
--   GTK_WIDGET_SET_FLAGS (box, GTK_REALIZED);
-+   gtk_widget_set_realized(box, GTK_REALIZED);
-
-    attributes.window_type = GDK_WINDOW_CHILD;
-    attributes.x = widget->allocation.x;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]