Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/libdocument/ev-mapping.c
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 /libdocument/ev-mapping.c
parent26b1533e697112e62c0373f5d38ebf18d0f491f4 (diff)
[libdocument] Add EvMappinig to unify all Ev*Mapping types
Diffstat (limited to 'libdocument/ev-mapping.c')
-rw-r--r--libdocument/ev-mapping.c93
1 files changed, 93 insertions, 0 deletions
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);
+}