X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;ds=sidebyside;f=shell%2Fev-view.c;h=0a7622368601ff4442320a2e8de341e2856a7485;hb=5bde54f8810020217366ec3e9a64b44b4f6ee3c6;hp=e76f5b81728af22109298bb499683c81d825e767;hpb=ac6e61a0860b741e22072696e0ac6a78e386db0d;p=evince.git diff --git a/shell/ev-view.c b/shell/ev-view.c index e76f5b81..0a762236 100644 --- a/shell/ev-view.c +++ b/shell/ev-view.c @@ -77,6 +77,7 @@ struct _EvView { gboolean pressed_button; gboolean has_selection; + GdkPoint selection_start; GdkRectangle selection; EvViewCursor cursor; @@ -223,6 +224,9 @@ ev_view_size_request (GtkWidget *widget, requisition->width = 10; requisition->height = 10; } + + requisition->width += 2; + requisition->height += 2; } } @@ -245,17 +249,6 @@ ev_view_size_allocate (GtkWidget *widget, } } -static void -update_window_backgrounds (EvView *view) -{ - GtkWidget *widget = GTK_WIDGET (view); - - if (GTK_WIDGET_REALIZED (view)) { - gdk_window_set_background (view->bin_window, - &widget->style->base[GTK_WIDGET_STATE (widget)]); - } -} - static void ev_view_realize (GtkWidget *widget) { @@ -302,6 +295,9 @@ ev_view_realize (GtkWidget *widget) gdk_window_set_user_data (view->bin_window, widget); gdk_window_show (view->bin_window); + widget->style = gtk_style_attach (widget->style, view->bin_window); + gdk_window_set_background (view->bin_window, &widget->style->mid[widget->state]); + if (view->document) { ev_document_set_target (view->document, view->bin_window); @@ -312,8 +308,6 @@ ev_view_realize (GtkWidget *widget) */ gtk_widget_queue_resize (widget); } - - update_window_backgrounds (view); } static void @@ -331,20 +325,6 @@ ev_view_unrealize (GtkWidget *widget) GTK_WIDGET_CLASS (ev_view_parent_class)->unrealize (widget); } -static void -ev_view_style_set (GtkWidget *widget, - GtkStyle *previous_style) -{ - update_window_backgrounds (EV_VIEW (widget)); -} - -static void -ev_view_state_changed (GtkWidget *widget, - GtkStateType previous_state) -{ - update_window_backgrounds (EV_VIEW (widget)); -} - static guint32 ev_gdk_color_to_rgb (const GdkColor *color) { @@ -395,13 +375,29 @@ expose_bin_window (GtkWidget *widget, GdkEventExpose *event) { EvView *view = EV_VIEW (widget); - int i; - int current_page; + int i, current_page; + int x_offset, y_offset; const EvFindResult *results; if (view->document == NULL) return; - + + x_offset = MAX (0, (widget->allocation.width - + widget->requisition.width) / 2); + y_offset = MAX (0, (widget->allocation.height - + widget->requisition.height) / 2); + gdk_draw_rectangle (view->bin_window, + widget->style->black_gc, + FALSE, + x_offset, + y_offset, + widget->requisition.width - 1, + widget->requisition.height - 1); + + ev_document_set_page_offset (view->document, + x_offset + 1, + y_offset + 1); + ev_document_render (view->document, event->area.x, event->area.y, event->area.width, event->area.height); @@ -418,9 +414,16 @@ expose_bin_window (GtkWidget *widget, results[i].highlight_area.width, results[i].highlight_area.height); #endif - if (results[i].page_num == current_page) + if (results[i].page_num == current_page) { + GdkRectangle highlight_area_fixed; + highlight_area_fixed.x = results[i].highlight_area.x + x_offset + 1; + highlight_area_fixed.y = results[i].highlight_area.y + y_offset + 1; + highlight_area_fixed.width = results[i].highlight_area.width; + highlight_area_fixed.height = results[i].highlight_area.height; + draw_rubberband (widget, view->bin_window, - &results[i].highlight_area); + &highlight_area_fixed); + } ++i; } @@ -534,10 +537,8 @@ ev_view_button_press_event (GtkWidget *widget, gtk_widget_queue_draw (widget); } - view->selection.x = event->x; - view->selection.y = event->y; - view->selection.width = 0; - view->selection.height = 0; + view->selection_start.x = event->x; + view->selection_start.y = event->y; break; } @@ -635,10 +636,10 @@ ev_view_motion_notify_event (GtkWidget *widget, if (view->pressed_button > 0) { view->has_selection = TRUE; - view->selection.x = MIN (view->selection.x, event->x); - view->selection.y = MIN (view->selection.y, event->y); - view->selection.width = ABS (view->selection.x - event->x) + 1; - view->selection.height = ABS (view->selection.y - event->y) + 1; + view->selection.x = MIN (view->selection_start.x, event->x); + view->selection.y = MIN (view->selection_start.y, event->y); + view->selection.width = ABS (view->selection_start.x - event->x) + 1; + view->selection.height = ABS (view->selection_start.y - event->y) + 1; } else if (view->document) { EvLink *link; @@ -850,8 +851,6 @@ ev_view_class_init (EvViewClass *class) widget_class->size_allocate = ev_view_size_allocate; widget_class->realize = ev_view_realize; widget_class->unrealize = ev_view_unrealize; - widget_class->style_set = ev_view_style_set; - widget_class->state_changed = ev_view_state_changed; gtk_object_class->destroy = ev_view_destroy; class->set_scroll_adjustments = ev_view_set_scroll_adjustments; @@ -914,16 +913,12 @@ ev_view_class_init (EvViewClass *class) static void ev_view_init (EvView *view) { - static const GdkColor white = { 0, 0xffff, 0xffff, 0xffff }; - GTK_WIDGET_SET_FLAGS (view, GTK_CAN_FOCUS); view->scale = 1.0; view->pressed_button = -1; view->cursor = EV_VIEW_CURSOR_NORMAL; - gtk_widget_modify_bg (GTK_WIDGET (view), GTK_STATE_NORMAL, &white); - view->find_results = g_array_new (FALSE, FALSE, sizeof (EvFindResult)); @@ -1113,6 +1108,10 @@ set_document_page (EvView *view, int page) { if (view->document) { int old_page = ev_document_get_page (view->document); + int old_width, old_height; + + ev_document_get_page_size (view->document, + &old_width, &old_height); if (old_page != page) { ev_view_set_cursor (view, EV_VIEW_CURSOR_WAIT); @@ -1120,8 +1119,16 @@ set_document_page (EvView *view, int page) } if (old_page != ev_document_get_page (view->document)) { + int width, height; + g_signal_emit (view, page_changed_signal, 0); + view->has_selection = FALSE; + ev_document_get_page_size (view->document, + &width, &height); + if (width != old_width || height != old_height) + gtk_widget_queue_resize (GTK_WIDGET (view)); + view->find_percent_complete = 0.0; update_find_results (view); }