[evince] [libdocument] Add EvMappinig to unify all Ev*Mapping types



commit 15d1dbc0c26ae7dc20a3dcadb917ae02913636ce
Author: Carlos Garcia Campos <carlosgc gnome org>
Date:   Sat May 23 19:09:31 2009 +0200

    [libdocument] Add EvMappinig to unify all Ev*Mapping types
---
 libdocument/Makefile.am  |    2 +
 libdocument/ev-mapping.c |   93 ++++++++++++++++++++++++++++++++++++++++++++++
 libdocument/ev-mapping.h |   52 +++++++++++++++++++++++++
 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 */



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]