]> www.fi.muni.cz Git - evince.git/commitdiff
[libdocument] Add EvMappinig to unify all Ev*Mapping types
authorCarlos Garcia Campos <carlosgc@gnome.org>
Sat, 23 May 2009 17:09:31 +0000 (19:09 +0200)
committerCarlos Garcia Campos <carlosgc@gnome.org>
Sat, 23 May 2009 17:09:31 +0000 (19:09 +0200)
libdocument/Makefile.am
libdocument/ev-mapping.c [new file with mode: 0644]
libdocument/ev-mapping.h [new file with mode: 0644]

index ef5876fd472a10c93ef239d0cf55582b82814597..15298e44935f4bc568f2baad3271459d157e6ec6 100644 (file)
@@ -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 (file)
index 0000000..a1bb5f7
--- /dev/null
@@ -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 (file)
index 0000000..3092d98
--- /dev/null
@@ -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 */