X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=libdocument%2Fev-link-dest.c;h=9d5d8608f0c92cd962b3ea8d81c3f6a0f196e66d;hb=2dd348d6fe62d96589c81379bbd01314d6442dc0;hp=09f840afb2079d1f98a3d4ddeb5d6b77e86cbfad;hpb=13a06349251874bd35d2f03c3fc93217cee749a2;p=evince.git diff --git a/libdocument/ev-link-dest.c b/libdocument/ev-link-dest.c index 09f840af..9d5d8608 100644 --- a/libdocument/ev-link-dest.c +++ b/libdocument/ev-link-dest.c @@ -15,10 +15,13 @@ * * 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. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ +#include + #include "ev-link-dest.h" +#include "ev-document-type-builtins.h" enum { PROP_0, @@ -29,10 +32,17 @@ enum { PROP_BOTTOM, PROP_RIGHT, PROP_ZOOM, + PROP_CHANGE, PROP_NAMED, PROP_PAGE_LABEL }; +typedef enum { + EV_DEST_CHANGE_TOP = 1 << 0, + EV_DEST_CHANGE_LEFT = 1 << 1, + EV_DEST_CHANGE_ZOOM = 1 << 2 +} EvDestChange; + struct _EvLinkDest { GObject base_instance; @@ -51,6 +61,7 @@ struct _EvLinkDestPrivate { double bottom; double right; double zoom; + EvDestChange change; gchar *named; gchar *page_label; }; @@ -60,31 +71,6 @@ G_DEFINE_TYPE (EvLinkDest, ev_link_dest, G_TYPE_OBJECT) #define EV_LINK_DEST_GET_PRIVATE(object) \ (G_TYPE_INSTANCE_GET_PRIVATE ((object), EV_TYPE_LINK_DEST, EvLinkDestPrivate)) -GType -ev_link_dest_type_get_type (void) -{ - static GType type = 0; - - if (G_UNLIKELY (type == 0)) { - static const GEnumValue values[] = { - { EV_LINK_DEST_TYPE_PAGE, "EV_LINK_DEST_TYPE_PAGE", "page" }, - { EV_LINK_DEST_TYPE_XYZ, "EV_LINK_DEST_TYPE_XYZ", "xyz" }, - { EV_LINK_DEST_TYPE_FIT, "EV_LINK_DEST_TYPE_FIT", "fit" }, - { EV_LINK_DEST_TYPE_FITH, "EV_LINK_DEST_TYPE_FITH", "fith" }, - { EV_LINK_DEST_TYPE_FITV, "EV_LINK_DEST_TYPE_FITV", "fitv" }, - { EV_LINK_DEST_TYPE_FITR, "EV_LINK_DEST_TYPE_FITR", "fitr" }, - { EV_LINK_DEST_TYPE_NAMED, "EV_LINK_DEST_TYPE_NAMED", "named" }, - { EV_LINK_DEST_TYPE_PAGE_LABEL, "EV_LINK_DEST_TYPE_PAGE_LABEL", "page_label" }, - { EV_LINK_DEST_TYPE_UNKNOWN, "EV_LINK_DEST_TYPE_UNKNOWN", "unknown" }, - { 0, NULL, NULL } - }; - - type = g_enum_register_static ("EvLinkDestType", values); - } - - return type; -} - EvLinkDestType ev_link_dest_get_dest_type (EvLinkDest *self) { @@ -102,18 +88,26 @@ ev_link_dest_get_page (EvLinkDest *self) } gdouble -ev_link_dest_get_top (EvLinkDest *self) +ev_link_dest_get_top (EvLinkDest *self, + gboolean *change_top) { g_return_val_if_fail (EV_IS_LINK_DEST (self), 0); + if (change_top) + *change_top = (self->priv->change & EV_DEST_CHANGE_TOP); + return self->priv->top; } gdouble -ev_link_dest_get_left (EvLinkDest *self) +ev_link_dest_get_left (EvLinkDest *self, + gboolean *change_left) { g_return_val_if_fail (EV_IS_LINK_DEST (self), 0); + if (change_left) + *change_left = (self->priv->change & EV_DEST_CHANGE_LEFT); + return self->priv->left; } @@ -134,10 +128,14 @@ ev_link_dest_get_right (EvLinkDest *self) } gdouble -ev_link_dest_get_zoom (EvLinkDest *self) +ev_link_dest_get_zoom (EvLinkDest *self, + gboolean *change_zoom) { g_return_val_if_fail (EV_IS_LINK_DEST (self), 0); + if (change_zoom) + *change_zoom = (self->priv->change & EV_DEST_CHANGE_ZOOM); + return self->priv->zoom; } @@ -189,6 +187,9 @@ ev_link_dest_get_property (GObject *object, case PROP_ZOOM: g_value_set_double (value, self->priv->zoom); break; + case PROP_CHANGE: + g_value_set_uint (value, self->priv->change); + break; case PROP_NAMED: g_value_set_string (value, self->priv->named); break; @@ -233,6 +234,9 @@ ev_link_dest_set_property (GObject *object, case PROP_ZOOM: self->priv->zoom = g_value_get_double (value); break; + case PROP_CHANGE: + self->priv->change = g_value_get_uint (value); + break; case PROP_NAMED: self->priv->named = g_value_dup_string (value); break; @@ -358,6 +362,16 @@ ev_link_dest_class_init (EvLinkDestClass *ev_link_dest_class) 0, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property (g_object_class, + PROP_CHANGE, + g_param_spec_uint ("change", + "Change", + "Wether top, left, and zoom should be changed", + 0, + G_MAXUINT, + 0, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property (g_object_class, PROP_NAMED, g_param_spec_string ("named", @@ -386,17 +400,30 @@ ev_link_dest_new_page (gint page) } EvLinkDest * -ev_link_dest_new_xyz (gint page, - gdouble left, - gdouble top, - gdouble zoom) +ev_link_dest_new_xyz (gint page, + gdouble left, + gdouble top, + gdouble zoom, + gboolean change_left, + gboolean change_top, + gboolean change_zoom) { + EvDestChange change = 0; + + if (change_left) + change |= EV_DEST_CHANGE_LEFT; + if (change_top) + change |= EV_DEST_CHANGE_TOP; + if (change_zoom) + change |= EV_DEST_CHANGE_ZOOM; + return EV_LINK_DEST (g_object_new (EV_TYPE_LINK_DEST, "page", page, "type", EV_LINK_DEST_TYPE_XYZ, "left", left, "top", top, "zoom", zoom, + "change", change, NULL)); } @@ -410,24 +437,38 @@ ev_link_dest_new_fit (gint page) } EvLinkDest * -ev_link_dest_new_fith (gint page, - gdouble top) +ev_link_dest_new_fith (gint page, + gdouble top, + gboolean change_top) { + EvDestChange change = 0; + + if (change_top) + change |= EV_DEST_CHANGE_TOP; + return EV_LINK_DEST (g_object_new (EV_TYPE_LINK_DEST, "page", page, "type", EV_LINK_DEST_TYPE_FITH, "top", top, + "change", change, NULL)); } EvLinkDest * -ev_link_dest_new_fitv (gint page, - gdouble left) +ev_link_dest_new_fitv (gint page, + gdouble left, + gboolean change_left) { + EvDestChange change = 0; + + if (change_left) + change |= EV_DEST_CHANGE_LEFT; + return EV_LINK_DEST (g_object_new (EV_TYPE_LINK_DEST, "page", page, "type", EV_LINK_DEST_TYPE_FITV, "left", left, + "change", change, NULL)); } @@ -438,6 +479,8 @@ ev_link_dest_new_fitr (gint page, gdouble right, gdouble top) { + EvDestChange change = EV_DEST_CHANGE_TOP | EV_DEST_CHANGE_LEFT; + return EV_LINK_DEST (g_object_new (EV_TYPE_LINK_DEST, "page", page, "type", EV_LINK_DEST_TYPE_FITR, @@ -445,6 +488,7 @@ ev_link_dest_new_fitr (gint page, "bottom", bottom, "right", right, "top", top, + "change", change, NULL)); }