EvSizingMode sizing_mode;
PendingScroll pending_scroll;
+ gboolean pending_resize;
};
struct _EvViewClass {
} else {
view->scroll_y = 0;
}
-
- // gtk_widget_queue_draw (GTK_WIDGET (view));
- gdk_window_scroll (GTK_WIDGET (view)->window, dx, dy);
+
+
+ if (view->pending_resize)
+ gtk_widget_queue_draw (GTK_WIDGET (view));
+ else
+ gdk_window_scroll (GTK_WIDGET (view)->window, dx, dy);
if (view->document)
EvPageCache *page_cache = view->page_cache;
int old_width, old_height;
int new_width, new_height;
- int max_height, n_rows;
+ int max_height, max_width, n_rows;
ev_page_cache_get_size (page_cache,
view->current_page,
else
gtk_widget_queue_draw (GTK_WIDGET (view));
- if (view->continuous) {
+ get_bounding_box_size (view, &max_width, &max_height);
+
+ if (view->continuous && view->vadjustment) {
n_rows = view->dual_page ? new_page / 2 : new_page;
-
- get_bounding_box_size (view, NULL, &max_height);
gtk_adjustment_clamp_page(view->vadjustment,
(max_height + view->spacing) * n_rows,
gtk_adjustment_set_value (view->vadjustment,
view->vadjustment->lower);
}
+
+ if (view->dual_page && view->hadjustment) {
+ if (new_page % 2 == 0) {
+ gtk_adjustment_set_value (view->hadjustment,
+ view->hadjustment->lower);
+ } else {
+ gtk_adjustment_clamp_page (view->hadjustment,
+ view->hadjustment->lower +
+ max_width + view->spacing,
+ view->hadjustment->lower +
+ max_width + view->spacing +
+ view->hadjustment->page_size);
+ }
+ }
view->current_page = new_page;
view_update_range_and_current_page (view);
{
EvView *view = EV_VIEW (widget);
- if (!GTK_WIDGET_REALIZED (widget))
- return;
-
if (view->document == NULL) {
requisition->width = 1;
requisition->height = 1;
view_set_adjustment_values (view, GTK_ORIENTATION_VERTICAL);
view->pending_scroll = SCROLL_TO_KEEP_POSITION;
+ view->pending_resize = FALSE;
if (view->document)
view_update_range_and_current_page (view);
gdk_window_set_background (widget->window, &widget->style->black);
else
gdk_window_set_background (widget->window, &widget->style->mid [GTK_STATE_NORMAL]);
-
- if (view->document) {
- /* We can't get page size without a target, so we have to
- * queue a size request at realization. Could be fixed
- * with EvDocument changes to allow setting a GdkScreen
- * without setting a target.
- */
- gtk_widget_queue_resize (widget);
- }
}
static void
{
if (view->current_page != new_page) {
- view_scroll_to_page (view, new_page);
+ if (view->pending_scroll != SCROLL_TO_CURRENT_PAGE) {
+ /* Should scroll right now */
+ view_scroll_to_page (view, new_page);
+ } else {
+ /* We'll scroll to new page on allocate */
+ view->current_page = new_page;
+ }
if (EV_IS_DOCUMENT_FIND (view->document)) {
view->find_page = new_page;
if (ABS (view->scale - scale) < EPSILON)
return;
view->scale = scale;
+ view->pending_resize = TRUE;
gtk_widget_queue_resize (GTK_WIDGET (view));
}