Commit 6fa30214 authored by claes's avatar claes

Fix in scroll adjustment at window resize

parent 9d57b650
/* /*
* Proview $Id: flow_browwidget_gtk.cpp,v 1.2 2007-01-11 11:40:30 claes Exp $ * Proview $Id: flow_browwidget_gtk.cpp,v 1.3 2007-02-01 07:10:33 claes Exp $
* Copyright (C) 2005 SSAB Oxelsund AB. * Copyright (C) 2005 SSAB Oxelsund AB.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
**/ **/
#include <stdlib.h> #include <stdlib.h>
#include <math.h>
#include "glow_std.h" #include "glow_std.h"
#include "flow.h" #include "flow.h"
...@@ -54,6 +55,8 @@ struct _BrowWidgetGtk { ...@@ -54,6 +55,8 @@ struct _BrowWidgetGtk {
GtkWidget *form; GtkWidget *form;
int scroll_h_ignore; int scroll_h_ignore;
int scroll_v_ignore; int scroll_v_ignore;
gdouble scroll_h_value;
gdouble scroll_v_value;
}; };
struct _BrowWidgetGtkClass { struct _BrowWidgetGtkClass {
...@@ -119,6 +122,7 @@ static void scroll_callback( flow_sScroll *data) ...@@ -119,6 +122,7 @@ static void scroll_callback( flow_sScroll *data)
NULL); NULL);
gtk_adjustment_changed( gtk_adjustment_changed(
((GtkScrollbar *)scroll_data->scroll_h)->range.adjustment); ((GtkScrollbar *)scroll_data->scroll_h)->range.adjustment);
((BrowWidgetGtk *)scroll_data->brow)->scroll_h_value = (gdouble)data->offset_x;
} }
if ( scroll_data->scroll_v_managed) { if ( scroll_data->scroll_v_managed) {
...@@ -132,6 +136,7 @@ static void scroll_callback( flow_sScroll *data) ...@@ -132,6 +136,7 @@ static void scroll_callback( flow_sScroll *data)
((GtkScrollbar *)scroll_data->scroll_v)->range.adjustment); ((GtkScrollbar *)scroll_data->scroll_v)->range.adjustment);
((BrowWidgetGtk *)scroll_data->brow)->scroll_v_ignore = 1; ((BrowWidgetGtk *)scroll_data->brow)->scroll_v_ignore = 1;
gtk_range_set_value( GTK_RANGE(scroll_data->scroll_v), (gdouble)data->offset_y); gtk_range_set_value( GTK_RANGE(scroll_data->scroll_v), (gdouble)data->offset_y);
((BrowWidgetGtk *)scroll_data->brow)->scroll_v_value = (gdouble)data->offset_y;
} }
} }
...@@ -146,9 +151,14 @@ static void scroll_h_action( GtkWidget *w, ...@@ -146,9 +151,14 @@ static void scroll_h_action( GtkWidget *w,
BrowCtx *ctx = (BrowCtx *) broww->brow_ctx; BrowCtx *ctx = (BrowCtx *) broww->brow_ctx;
gdouble value; gdouble value;
g_object_get( w, value = gtk_range_get_value( GTK_RANGE(broww->scroll_h));
"value", &value,
NULL); if ( value == 0 && fabs(broww->scroll_h_value) > 2) {
// Probably a resize that seems to set value to zero, set old value
ctx->change_scrollbar();
return;
}
broww->scroll_h_value = value;
flow_scroll_horizontal( ctx, int(value), 0); flow_scroll_horizontal( ctx, int(value), 0);
} }
...@@ -165,9 +175,16 @@ static void scroll_v_action( GtkWidget *w, ...@@ -165,9 +175,16 @@ static void scroll_v_action( GtkWidget *w,
BrowCtx *ctx = (BrowCtx *) broww->brow_ctx; BrowCtx *ctx = (BrowCtx *) broww->brow_ctx;
gdouble value; gdouble value;
g_object_get( w,
"value", &value, value = gtk_range_get_value( GTK_RANGE(broww->scroll_v));
NULL);
if ( value == 0 && fabs(broww->scroll_v_value) > 2) {
// Probably a resize that seems to set value to zero, set old value
ctx->change_scrollbar();
return;
}
broww->scroll_v_value = value;
flow_scroll_vertical( ctx, int(value), 0); flow_scroll_vertical( ctx, int(value), 0);
} }
...@@ -328,6 +345,8 @@ GtkWidget *scrolledbrowwidgetgtk_new( ...@@ -328,6 +345,8 @@ GtkWidget *scrolledbrowwidgetgtk_new(
w->scroll_v = gtk_scrolled_window_get_vscrollbar( GTK_SCROLLED_WINDOW(form)); w->scroll_v = gtk_scrolled_window_get_vscrollbar( GTK_SCROLLED_WINDOW(form));
w->scroll_h_ignore = 0; w->scroll_h_ignore = 0;
w->scroll_v_ignore = 0; w->scroll_v_ignore = 0;
w->scroll_h_value = 0;
w->scroll_v_value = 0;
w->form = form; w->form = form;
*browwidget = GTK_WIDGET( w); *browwidget = GTK_WIDGET( w);
......
/* /*
* Proview $Id: flow_widget_gtk.cpp,v 1.2 2007-01-11 11:40:30 claes Exp $ * Proview $Id: flow_widget_gtk.cpp,v 1.3 2007-02-01 07:10:33 claes Exp $
* Copyright (C) 2005 SSAB Oxelsund AB. * Copyright (C) 2005 SSAB Oxelsund AB.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
**/ **/
#include <stdlib.h> #include <stdlib.h>
#include <math.h>
#include "glow_std.h" #include "glow_std.h"
#include "flow.h" #include "flow.h"
...@@ -54,6 +55,8 @@ struct _FlowWidgetGtk { ...@@ -54,6 +55,8 @@ struct _FlowWidgetGtk {
GtkWidget *form; GtkWidget *form;
int scroll_h_ignore; int scroll_h_ignore;
int scroll_v_ignore; int scroll_v_ignore;
gdouble scroll_h_value;
gdouble scroll_v_value;
}; };
struct _FlowWidgetGtkClass { struct _FlowWidgetGtkClass {
...@@ -119,6 +122,7 @@ static void scroll_callback( flow_sScroll *data) ...@@ -119,6 +122,7 @@ static void scroll_callback( flow_sScroll *data)
NULL); NULL);
gtk_adjustment_changed( gtk_adjustment_changed(
((GtkScrollbar *)scroll_data->scroll_h)->range.adjustment); ((GtkScrollbar *)scroll_data->scroll_h)->range.adjustment);
((FlowWidgetGtk *)scroll_data->flow)->scroll_h_value = (gdouble)data->offset_x;
} }
if ( scroll_data->scroll_v_managed) { if ( scroll_data->scroll_v_managed) {
...@@ -130,6 +134,7 @@ static void scroll_callback( flow_sScroll *data) ...@@ -130,6 +134,7 @@ static void scroll_callback( flow_sScroll *data)
NULL); NULL);
gtk_adjustment_changed( gtk_adjustment_changed(
((GtkScrollbar *)scroll_data->scroll_v)->range.adjustment); ((GtkScrollbar *)scroll_data->scroll_v)->range.adjustment);
((FlowWidgetGtk *)scroll_data->flow)->scroll_v_value = (gdouble)data->offset_y;
} }
} }
...@@ -144,9 +149,15 @@ static void scroll_h_action( GtkWidget *w, ...@@ -144,9 +149,15 @@ static void scroll_h_action( GtkWidget *w,
FlowCtx *ctx = (FlowCtx *) floww->flow_ctx; FlowCtx *ctx = (FlowCtx *) floww->flow_ctx;
gdouble value; gdouble value;
g_object_get( w, value = gtk_range_get_value( GTK_RANGE(floww->scroll_h));
"value", &value,
NULL); if ( value == 0 && fabs(floww->scroll_h_value) > 2) {
// Probably a resize that seems to set value to zero, set old value
ctx->change_scrollbar();
return;
}
floww->scroll_h_value = value;
flow_scroll_horizontal( ctx, int(value), 0); flow_scroll_horizontal( ctx, int(value), 0);
} }
...@@ -163,9 +174,15 @@ static void scroll_v_action( GtkWidget *w, ...@@ -163,9 +174,15 @@ static void scroll_v_action( GtkWidget *w,
FlowCtx *ctx = (FlowCtx *) floww->flow_ctx; FlowCtx *ctx = (FlowCtx *) floww->flow_ctx;
gdouble value; gdouble value;
g_object_get( w, value = gtk_range_get_value( GTK_RANGE(floww->scroll_v));
"value", &value,
NULL); if ( value == 0 && fabs( floww->scroll_v_value) > 2) {
// Probably a resize that seems to set value to zero, set old value
ctx->change_scrollbar();
return;
}
floww->scroll_v_value = value;
flow_scroll_vertical( ctx, int(value), 0); flow_scroll_vertical( ctx, int(value), 0);
} }
......
/* /*
* Proview $Id: glow_growwidget_gtk.cpp,v 1.2 2007-01-11 11:40:31 claes Exp $ * Proview $Id: glow_growwidget_gtk.cpp,v 1.3 2007-02-01 07:10:33 claes Exp $
* Copyright (C) 2005 SSAB Oxelsund AB. * Copyright (C) 2005 SSAB Oxelsund AB.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
**/ **/
#include <stdlib.h> #include <stdlib.h>
#include <math.h>
#include "glow_std.h" #include "glow_std.h"
#include <gtk/gtk.h> #include <gtk/gtk.h>
...@@ -56,6 +57,8 @@ struct _GrowWidgetGtk { ...@@ -56,6 +57,8 @@ struct _GrowWidgetGtk {
GtkWidget *form; GtkWidget *form;
int scroll_h_ignore; int scroll_h_ignore;
int scroll_v_ignore; int scroll_v_ignore;
gdouble scroll_h_value;
gdouble scroll_v_value;
}; };
struct _GrowWidgetGtkClass { struct _GrowWidgetGtkClass {
...@@ -121,6 +124,7 @@ static void scroll_callback( glow_sScroll *data) ...@@ -121,6 +124,7 @@ static void scroll_callback( glow_sScroll *data)
NULL); NULL);
gtk_adjustment_changed( gtk_adjustment_changed(
((GtkScrollbar *)scroll_data->scroll_h)->range.adjustment); ((GtkScrollbar *)scroll_data->scroll_h)->range.adjustment);
((GrowWidgetGtk *)scroll_data->grow)->scroll_h_value = (gdouble)data->offset_x;
} }
if ( scroll_data->scroll_v_managed) { if ( scroll_data->scroll_v_managed) {
...@@ -132,6 +136,7 @@ static void scroll_callback( glow_sScroll *data) ...@@ -132,6 +136,7 @@ static void scroll_callback( glow_sScroll *data)
NULL); NULL);
gtk_adjustment_changed( gtk_adjustment_changed(
((GtkScrollbar *)scroll_data->scroll_v)->range.adjustment); ((GtkScrollbar *)scroll_data->scroll_v)->range.adjustment);
((GrowWidgetGtk *)scroll_data->grow)->scroll_v_value = (gdouble)data->offset_y;
} }
} }
...@@ -146,9 +151,15 @@ static void scroll_h_action( GtkWidget *w, ...@@ -146,9 +151,15 @@ static void scroll_h_action( GtkWidget *w,
GrowCtx *ctx = (GrowCtx *) groww->grow_ctx; GrowCtx *ctx = (GrowCtx *) groww->grow_ctx;
gdouble value; gdouble value;
g_object_get( w, value = gtk_range_get_value( GTK_RANGE(groww->scroll_h));
"value", &value,
NULL); if ( value == 0 && fabs(groww->scroll_h_value) > 2) {
// Probably a resize that seems to set value to zero, set old value
ctx->change_scrollbar();
return;
}
groww->scroll_h_value = value;
glow_scroll_horizontal( ctx, int(value), 0); glow_scroll_horizontal( ctx, int(value), 0);
} }
...@@ -165,9 +176,15 @@ static void scroll_v_action( GtkWidget *w, ...@@ -165,9 +176,15 @@ static void scroll_v_action( GtkWidget *w,
GrowCtx *ctx = (GrowCtx *) groww->grow_ctx; GrowCtx *ctx = (GrowCtx *) groww->grow_ctx;
gdouble value; gdouble value;
g_object_get( w, value = gtk_range_get_value( GTK_RANGE(groww->scroll_v));
"value", &value,
NULL); if ( value == 0 && fabs(groww->scroll_v_value) > 2) {
// Probably a resize that seems to set value to zero, set old value
ctx->change_scrollbar();
return;
}
groww->scroll_v_value = value;
glow_scroll_vertical( ctx, int(value), 0); glow_scroll_vertical( ctx, int(value), 0);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment