Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCarlos Garcia Campos <carlosgc@gnome.org>2009-05-23 17:09:31 (GMT)
committer Carlos Garcia Campos <carlosgc@gnome.org>2009-05-23 17:09:31 (GMT)
commit15d1dbc0c26ae7dc20a3dcadb917ae02913636ce (patch)
treef1b86826da4c248dfa8ddacee0d5ba6b2c68b12e
parent26b1533e697112e62c0373f5d38ebf18d0f491f4 (diff)
[libdocument] Add EvMappinig to unify all Ev*Mapping types
-rw-r--r--libdocument/Makefile.am2
-rw-r--r--libdocument/ev-mapping.c93
-rw-r--r--libdocument/ev-mapping.h52
3 files changed, 147 insertions, 0 deletions
diff --git a/libdocument/Makefile.am b/libdocument/Makefile.am
index ef5876f..15298e4 100644
--- a/libdocument/Makefile.am
+++ b/libdocument/Makefile.am
@@ -36,6 +36,7 @@ INST_H_FILES = \
ev-link-action.h \
ev-link-dest.h \
ev-link.h \
+ ev-mapping.h \
ev-page.h \
ev-render-context.h \
ev-selection.h \
@@ -74,6 +75,7 @@ libevdocument_la_SOURCES= \
ev-debug.c \
ev-file-exporter.c \
ev-file-helpers.c \
+ ev-mapping.c \
ev-module.c \
ev-page.c \
ev-render-context.c \
diff --git a/libdocument/ev-mapping.c b/libdocument/ev-mapping.c
new file mode 100644
index 0000000..a1bb5f7
--- /dev/null
+++ b/libdocument/ev-mapping.c
@@ -0,0 +1,93 @@
+/* ev-mapping.c
+ * this file is part of evince, a gnome document viewer
+ *
+ * Copyright (C) 2009 Carlos Garcia Campos <carlosgc@gnome.org>
+ *
+ * Evince is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Evince 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
+ * 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 "ev-mapping.h"
+
+EvMapping *
+ev_mapping_list_find (GList *mapping_list,
+ gconstpointer data)
+{
+ GList *list;
+
+ for (list = mapping_list; list; list = list->next) {
+ EvMapping *mapping = list->data;
+
+ if (mapping->data == data)
+ return mapping;
+ }
+
+ return NULL;
+}
+
+EvMapping *
+ev_mapping_list_find_custom (GList *mapping_list,
+ gconstpointer data,
+ GCompareFunc func)
+{
+ GList *list;
+
+ for (list = mapping_list; list; list = list->next) {
+ EvMapping *mapping = list->data;
+
+ if (!func (mapping->data, data))
+ return mapping;
+ }
+
+ return NULL;
+}
+
+gpointer
+ev_mapping_list_get_data (GList *mapping_list,
+ gdouble x,
+ gdouble y)
+{
+ GList *list;
+
+ for (list = mapping_list; list; list = list->next) {
+ EvMapping *mapping = list->data;
+
+ if ((x >= mapping->area.x1) &&
+ (y >= mapping->area.y1) &&
+ (x <= mapping->area.x2) &&
+ (y <= mapping->area.y2)) {
+ return mapping->data;
+ }
+ }
+
+ return NULL;
+}
+
+static void
+mapping_list_free_foreach (EvMapping *mapping,
+ GDestroyNotify destroy_func)
+{
+ destroy_func (mapping->data);
+ g_free (mapping);
+}
+
+void
+ev_mapping_list_free (GList *mapping_list,
+ GDestroyNotify destroy_func)
+{
+ g_list_foreach (mapping_list,
+ (GFunc)mapping_list_free_foreach,
+ destroy_func);
+ g_list_free (mapping_list);
+}
diff --git a/libdocument/ev-mapping.h b/libdocument/ev-mapping.h
new file mode 100644
index 0000000..3092d98
--- /dev/null
+++ b/libdocument/ev-mapping.h
@@ -0,0 +1,52 @@
+/* ev-mapping.h
+ * this file is part of evince, a gnome document viewer
+ *
+ * Copyright (C) 2009 Carlos Garcia Campos <carlosgc@gnome.org>
+ *
+ * Evince is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Evince 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
+ * 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.
+ */
+
+#if !defined (__EV_EVINCE_DOCUMENT_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-document.h> can be included directly."
+#endif
+
+#ifndef EV_MAPPING_H
+#define EV_MAPPING_H
+
+#include "ev-document.h"
+
+G_BEGIN_DECLS
+
+typedef struct _EvMapping EvMapping;
+
+struct _EvMapping {
+ EvRectangle area;
+ gpointer data;
+};
+
+EvMapping *ev_mapping_list_find (GList *mapping_list,
+ gconstpointer data);
+EvMapping *ev_mapping_list_find_custom (GList *mapping_list,
+ gconstpointer data,
+ GCompareFunc func);
+gpointer ev_mapping_list_get_data (GList *mapping_list,
+ gdouble x,
+ gdouble y);
+void ev_mapping_list_free (GList *mapping_list,
+ GDestroyNotify destroy_func);
+
+G_END_DECLS
+
+#endif /* EV_MAPPING_H */