*
* 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 <config.h>
+
#include "ev-link-dest.h"
+#include "ev-document-type-builtins.h"
enum {
PROP_0,
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;
double bottom;
double right;
double zoom;
+ EvDestChange change;
gchar *named;
gchar *page_label;
};
#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)
{
}
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;
}
}
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;
}
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;
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;
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",
}
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));
}
}
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));
}
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,
"bottom", bottom,
"right", right,
"top", top,
+ "change", change,
NULL));
}