From: Carlos Garcia Campos Date: Sun, 3 Jan 2010 16:56:20 +0000 (+0100) Subject: [libview] Move cursor handling stuff to a new file X-Git-Tag: EVINCE_2_29_5~28 X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=commitdiff_plain;h=27dd64c8e65aeaa40ab6ac3472be5df31feacaf3;p=evince.git [libview] Move cursor handling stuff to a new file --- diff --git a/libview/Makefile.am b/libview/Makefile.am index e26e82ed..95d9f29d 100644 --- a/libview/Makefile.am +++ b/libview/Makefile.am @@ -7,6 +7,7 @@ NOINST_H_FILES = \ ev-timeline.h \ ev-transition-animation.h \ ev-view-accessible.h \ + ev-view-cursor.h \ ev-view-marshal.h \ ev-view-private.h @@ -36,6 +37,7 @@ libevview_la_SOURCES = \ ev-view.c \ ev-view-accessible.c \ ev-view-marshal.c \ + ev-view-cursor.c \ ev-view-type-builtins.c \ $(NOINST_H_FILES) \ $(INST_H_FILES) diff --git a/libview/ev-view-cursor.c b/libview/ev-view-cursor.c new file mode 100644 index 00000000..6411712a --- /dev/null +++ b/libview/ev-view-cursor.c @@ -0,0 +1,64 @@ +/* this file is part of evince, a gnome document viewer + * + * Copyright (C) 2004 Red Hat, Inc + * + * 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-view-cursor.h" + +static GdkCursor * +ev_view_create_invisible_cursor (void) +{ + GdkBitmap *empty; + GdkColor black = { 0, 0, 0, 0 }; + static char bits[] = { 0x00 }; + + empty = gdk_bitmap_create_from_data (NULL, bits, 1, 1); + + return gdk_cursor_new_from_pixmap (empty, empty, &black, &black, 0, 0); +} + +GdkCursor * +ev_view_cursor_new (GdkDisplay *display, + EvViewCursor new_cursor) +{ + GdkCursor *cursor = NULL; + + switch (new_cursor) { + case EV_VIEW_CURSOR_NORMAL: + break; + case EV_VIEW_CURSOR_IBEAM: + cursor = gdk_cursor_new_for_display (display, GDK_XTERM); + break; + case EV_VIEW_CURSOR_LINK: + cursor = gdk_cursor_new_for_display (display, GDK_HAND2); + break; + case EV_VIEW_CURSOR_WAIT: + cursor = gdk_cursor_new_for_display (display, GDK_WATCH); + break; + case EV_VIEW_CURSOR_HIDDEN: + cursor = ev_view_create_invisible_cursor (); + break; + case EV_VIEW_CURSOR_DRAG: + cursor = gdk_cursor_new_for_display (display, GDK_FLEUR); + break; + case EV_VIEW_CURSOR_AUTOSCROLL: + cursor = gdk_cursor_new_for_display (display, GDK_DOUBLE_ARROW); + break; + } + + return cursor; +} diff --git a/libview/ev-view-cursor.h b/libview/ev-view-cursor.h new file mode 100644 index 00000000..2315a7f3 --- /dev/null +++ b/libview/ev-view-cursor.h @@ -0,0 +1,46 @@ +/* this file is part of evince, a gnome document viewer + * + * Copyright (C) 2004 Red Hat, Inc + * + * 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_VIEW_H_INSIDE__) && !defined (EVINCE_COMPILATION) +#error "Only can be included directly." +#endif + +#ifndef __EV_VIEW_CURSOR_H__ +#define __EV_VIEW_CURSOR_H__ + +#include + +G_BEGIN_DECLS + +typedef enum { + EV_VIEW_CURSOR_NORMAL, + EV_VIEW_CURSOR_IBEAM, + EV_VIEW_CURSOR_LINK, + EV_VIEW_CURSOR_WAIT, + EV_VIEW_CURSOR_HIDDEN, + EV_VIEW_CURSOR_DRAG, + EV_VIEW_CURSOR_AUTOSCROLL +} EvViewCursor; + +GdkCursor *ev_view_cursor_new (GdkDisplay *display, + EvViewCursor cursor); + +G_END_DECLS + +#endif /* __EV_VIEW_CURSOR_H__ */ diff --git a/libview/ev-view-private.h b/libview/ev-view-private.h index 7bd16e91..bfc6ea2c 100644 --- a/libview/ev-view-private.h +++ b/libview/ev-view-private.h @@ -34,6 +34,7 @@ #include "ev-form-field.h" #include "ev-selection.h" #include "ev-transition-animation.h" +#include "ev-view-cursor.h" #define DRAG_HISTORY 10 @@ -101,16 +102,6 @@ typedef enum { SCROLL_TO_FIND_LOCATION, } PendingScroll; -typedef enum { - EV_VIEW_CURSOR_NORMAL, - EV_VIEW_CURSOR_IBEAM, - EV_VIEW_CURSOR_LINK, - EV_VIEW_CURSOR_WAIT, - EV_VIEW_CURSOR_HIDDEN, - EV_VIEW_CURSOR_DRAG, - EV_VIEW_CURSOR_AUTOSCROLL, -} EvViewCursor; - typedef enum { EV_PRESENTATION_NORMAL, EV_PRESENTATION_BLACK, diff --git a/libview/ev-view.c b/libview/ev-view.c index b84cb2c2..d7475815 100644 --- a/libview/ev-view.c +++ b/libview/ev-view.c @@ -264,7 +264,6 @@ static void ev_view_zoom_for_size_single_page (EvView *view, int width, int height); /*** Cursors ***/ -static GdkCursor* ev_view_create_invisible_cursor (void); static void ev_view_set_cursor (EvView *view, EvViewCursor new_cursor); static void ev_view_handle_cursor_over_xy (EvView *view, @@ -6372,63 +6371,24 @@ ev_view_copy_link_address (EvView *view, } /*** Cursor operations ***/ - -static GdkCursor * -ev_view_create_invisible_cursor(void) -{ - GdkBitmap *empty; - GdkColor black = { 0, 0, 0, 0 }; - static char bits[] = { 0x00 }; - - empty = gdk_bitmap_create_from_data (NULL, bits, 1, 1); - - return gdk_cursor_new_from_pixmap (empty, empty, &black, &black, 0, 0); -} - static void ev_view_set_cursor (EvView *view, EvViewCursor new_cursor) { GdkCursor *cursor = NULL; - GdkDisplay *display; GtkWidget *widget; if (view->cursor == new_cursor) { return; } - widget = gtk_widget_get_toplevel (GTK_WIDGET (view)); - display = gtk_widget_get_display (widget); view->cursor = new_cursor; - switch (new_cursor) { - case EV_VIEW_CURSOR_NORMAL: - gdk_window_set_cursor (view->layout.bin_window, NULL); - break; - case EV_VIEW_CURSOR_IBEAM: - cursor = gdk_cursor_new_for_display (display, GDK_XTERM); - break; - case EV_VIEW_CURSOR_LINK: - cursor = gdk_cursor_new_for_display (display, GDK_HAND2); - break; - case EV_VIEW_CURSOR_WAIT: - cursor = gdk_cursor_new_for_display (display, GDK_WATCH); - break; - case EV_VIEW_CURSOR_HIDDEN: - cursor = ev_view_create_invisible_cursor (); - break; - case EV_VIEW_CURSOR_DRAG: - cursor = gdk_cursor_new_for_display (display, GDK_FLEUR); - break; - case EV_VIEW_CURSOR_AUTOSCROLL: - cursor = gdk_cursor_new_for_display (display, GDK_DOUBLE_ARROW); - break; - } - - if (cursor) { - gdk_window_set_cursor (view->layout.bin_window, cursor); + widget = gtk_widget_get_toplevel (GTK_WIDGET (view)); + cursor = ev_view_cursor_new (gtk_widget_get_display (widget), new_cursor); + gdk_window_set_cursor (view->layout.bin_window, cursor); + gdk_flush (); + if (cursor) gdk_cursor_unref (cursor); - gdk_flush(); - } } void