X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=cut-n-paste%2Fzoom-control%2Fephy-zoom-action.c;h=b6250c8b063e3b5dd402cdb5198891ae73f5fa48;hb=661c24bf2d3898825b081434c74807e6a7c4822b;hp=15a08df8db5ceec8c18b546325e63156a1d58399;hpb=19a00ed1cd086dcca4b6bfeb84e0b1488b2e3089;p=evince.git diff --git a/cut-n-paste/zoom-control/ephy-zoom-action.c b/cut-n-paste/zoom-control/ephy-zoom-action.c index 15a08df8..b6250c8b 100644 --- a/cut-n-paste/zoom-control/ephy-zoom-action.c +++ b/cut-n-paste/zoom-control/ephy-zoom-action.c @@ -36,12 +36,16 @@ struct _EphyZoomActionPrivate { float zoom; + float min_zoom; + float max_zoom; }; enum { PROP_0, - PROP_ZOOM + PROP_ZOOM, + PROP_MIN_ZOOM, + PROP_MAX_ZOOM }; @@ -56,35 +60,7 @@ enum static guint signals[LAST_SIGNAL] = { 0 }; -static GObjectClass *parent_class = NULL; - -GType -ephy_zoom_action_get_type (void) -{ - static GType type = 0; - - if (G_UNLIKELY (type == 0)) - { - const GTypeInfo our_info = - { - sizeof (EphyZoomActionClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) ephy_zoom_action_class_init, - NULL, - NULL, /* class_data */ - sizeof (EphyZoomAction), - 0, /* n_preallocs */ - (GInstanceInitFunc) ephy_zoom_action_init, - }; - - type = g_type_register_static (GTK_TYPE_ACTION, - "EphyZoomAction", - &our_info, 0); - } - - return type; -} +G_DEFINE_TYPE (EphyZoomAction, ephy_zoom_action, GTK_TYPE_ACTION) static void zoom_to_level_cb (EphyZoomControl *control, @@ -102,6 +78,22 @@ sync_zoom_cb (GtkAction *action, GParamSpec *pspec, GtkWidget *proxy) g_object_set (G_OBJECT (proxy), "zoom", zoom_action->priv->zoom, NULL); } +static void +sync_min_zoom_cb (GtkAction *action, GParamSpec *pspec, GtkWidget *proxy) +{ + EphyZoomAction *zoom_action = EPHY_ZOOM_ACTION (action); + + g_object_set (G_OBJECT (proxy), "min-zoom", zoom_action->priv->min_zoom, NULL); +} + +static void +sync_max_zoom_cb (GtkAction *action, GParamSpec *pspec, GtkWidget *proxy) +{ + EphyZoomAction *zoom_action = EPHY_ZOOM_ACTION (action); + + g_object_set (G_OBJECT (proxy), "max-zoom", zoom_action->priv->max_zoom, NULL); +} + static void connect_proxy (GtkAction *action, GtkWidget *proxy) { @@ -109,12 +101,15 @@ connect_proxy (GtkAction *action, GtkWidget *proxy) { g_signal_connect_object (action, "notify::zoom", G_CALLBACK (sync_zoom_cb), proxy, 0); - + g_signal_connect_object (action, "notify::min-zoom", + G_CALLBACK (sync_min_zoom_cb), proxy, 0); + g_signal_connect_object (action, "notify::max-zoom", + G_CALLBACK (sync_max_zoom_cb), proxy, 0); g_signal_connect (proxy, "zoom_to_level", G_CALLBACK (zoom_to_level_cb), action); } - GTK_ACTION_CLASS (parent_class)->connect_proxy (action, proxy); + GTK_ACTION_CLASS (ephy_zoom_action_parent_class)->connect_proxy (action, proxy); } static void @@ -171,7 +166,7 @@ create_menu_item (GtkAction *action) gtk_widget_show (menu); - menu_item = GTK_ACTION_CLASS (parent_class)->create_menu_item (action); + menu_item = GTK_ACTION_CLASS (ephy_zoom_action_parent_class)->create_menu_item (action); gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu_item), menu); @@ -195,6 +190,12 @@ ephy_zoom_action_set_property (GObject *object, case PROP_ZOOM: action->priv->zoom = g_value_get_float (value); break; + case PROP_MIN_ZOOM: + action->priv->min_zoom = g_value_get_float (value); + break; + case PROP_MAX_ZOOM: + action->priv->max_zoom = g_value_get_float (value); + break; } } @@ -213,6 +214,12 @@ ephy_zoom_action_get_property (GObject *object, case PROP_ZOOM: g_value_set_float (value, action->priv->zoom); break; + case PROP_MIN_ZOOM: + g_value_set_float (value, action->priv->min_zoom); + break; + case PROP_MAX_ZOOM: + g_value_set_float (value, action->priv->max_zoom); + break; } } @@ -225,8 +232,6 @@ ephy_zoom_action_class_init (EphyZoomActionClass *class) object_class->set_property = ephy_zoom_action_set_property; object_class->get_property = ephy_zoom_action_get_property; - parent_class = g_type_class_peek_parent (class); - action_class->toolbar_item_type = EPHY_TYPE_ZOOM_CONTROL; action_class->connect_proxy = connect_proxy; action_class->create_menu_item = create_menu_item; @@ -240,6 +245,24 @@ ephy_zoom_action_class_init (EphyZoomActionClass *class) ZOOM_MAXIMAL, 1.0, G_PARAM_READWRITE)); + g_object_class_install_property (object_class, + PROP_MIN_ZOOM, + g_param_spec_float ("min-zoom", + "MinZoom", + "The minimum zoom", + ZOOM_MINIMAL, + ZOOM_MAXIMAL, + ZOOM_MINIMAL, + G_PARAM_READWRITE)); + g_object_class_install_property (object_class, + PROP_MAX_ZOOM, + g_param_spec_float ("max-zoom", + "MaxZoom", + "The maximum zoom", + ZOOM_MINIMAL, + ZOOM_MAXIMAL, + ZOOM_MAXIMAL, + G_PARAM_READWRITE)); signals[ZOOM_TO_LEVEL_SIGNAL] = g_signal_new ("zoom_to_level", @@ -281,3 +304,33 @@ ephy_zoom_action_get_zoom_level (EphyZoomAction *action) return action->priv->zoom; } + +void +ephy_zoom_action_set_min_zoom_level (EphyZoomAction *action, + float zoom) +{ + g_return_if_fail (EPHY_IS_ZOOM_ACTION (action)); + + if (zoom < ZOOM_MINIMAL || zoom > ZOOM_MAXIMAL) return; + + action->priv->min_zoom = zoom; + if (action->priv->zoom > 0 && action->priv->zoom < zoom) + ephy_zoom_action_set_zoom_level (action, zoom); + + g_object_notify (G_OBJECT (action), "min-zoom"); +} + +void +ephy_zoom_action_set_max_zoom_level (EphyZoomAction *action, + float zoom) +{ + g_return_if_fail (EPHY_IS_ZOOM_ACTION (action)); + + if (zoom < ZOOM_MINIMAL || zoom > ZOOM_MAXIMAL) return; + + action->priv->max_zoom = zoom; + if (action->priv->zoom > 0 && action->priv->zoom > zoom) + ephy_zoom_action_set_zoom_level (action, zoom); + + g_object_notify (G_OBJECT (action), "max-zoom"); +}