zoom-context.cpp revision 60d3de07a6473dd321c1d0016f49d13eb06c0884
c7aeb2c8479a339ddcc01cf5973c31ddd6277b0dLuke Smith * Handy zooming tool
cf6c1ae1ed15095f8dc269bb9d7a373a1b87990eJenny Donnelly * Lauris Kaplinski <lauris@kaplinski.com>
c7aeb2c8479a339ddcc01cf5973c31ddd6277b0dLuke Smith * Frank Felfe <innerspace@iname.com>
c7aeb2c8479a339ddcc01cf5973c31ddd6277b0dLuke Smith * bulia byak <buliabyak@users.sf.net>
c7aeb2c8479a339ddcc01cf5973c31ddd6277b0dLuke Smith * Copyright (C) 1999-2002 Authors
c7aeb2c8479a339ddcc01cf5973c31ddd6277b0dLuke Smith * Released under GNU GPL, read the file 'COPYING' for more information
cf6c1ae1ed15095f8dc269bb9d7a373a1b87990eJenny Donnellystatic void sp_zoom_context_class_init(SPZoomContextClass *klass);
cf6c1ae1ed15095f8dc269bb9d7a373a1b87990eJenny Donnellystatic void sp_zoom_context_init(SPZoomContext *zoom_context);
cf6c1ae1ed15095f8dc269bb9d7a373a1b87990eJenny Donnellystatic void sp_zoom_context_setup(SPEventContext *ec);
c7aeb2c8479a339ddcc01cf5973c31ddd6277b0dLuke Smithstatic void sp_zoom_context_finish (SPEventContext *ec);
c7aeb2c8479a339ddcc01cf5973c31ddd6277b0dLuke Smithstatic gint sp_zoom_context_root_handler(SPEventContext *event_context, GdkEvent *event);
cf6c1ae1ed15095f8dc269bb9d7a373a1b87990eJenny Donnellystatic gint sp_zoom_context_item_handler(SPEventContext *event_context, SPItem *item, GdkEvent *event);
cf6c1ae1ed15095f8dc269bb9d7a373a1b87990eJenny Donnellystatic gint xp = 0, yp = 0; // where drag started
cf6c1ae1ed15095f8dc269bb9d7a373a1b87990eJenny Donnellystatic bool within_tolerance = false;
cf6c1ae1ed15095f8dc269bb9d7a373a1b87990eJenny Donnelly type = g_type_register_static(SP_TYPE_EVENT_CONTEXT, "SPZoomContext", &info, (GTypeFlags) 0);
cf6c1ae1ed15095f8dc269bb9d7a373a1b87990eJenny Donnellystatic void sp_zoom_context_class_init(SPZoomContextClass *klass)
cf6c1ae1ed15095f8dc269bb9d7a373a1b87990eJenny Donnelly SPEventContextClass *event_context_class = (SPEventContextClass *) klass;
cf6c1ae1ed15095f8dc269bb9d7a373a1b87990eJenny Donnelly parent_class = (SPEventContextClass*) g_type_class_peek_parent(klass);
cf6c1ae1ed15095f8dc269bb9d7a373a1b87990eJenny Donnelly event_context_class->setup = sp_zoom_context_setup;
cf6c1ae1ed15095f8dc269bb9d7a373a1b87990eJenny Donnelly event_context_class->finish = sp_zoom_context_finish;
cf6c1ae1ed15095f8dc269bb9d7a373a1b87990eJenny Donnelly event_context_class->root_handler = sp_zoom_context_root_handler;
cf6c1ae1ed15095f8dc269bb9d7a373a1b87990eJenny Donnelly event_context_class->item_handler = sp_zoom_context_item_handler;
cf6c1ae1ed15095f8dc269bb9d7a373a1b87990eJenny Donnellystatic void sp_zoom_context_init (SPZoomContext *zoom_context)
eb17ee6092f0f0c34723b1344149f7eab4286a40Luke Smith SPEventContext *event_context = SP_EVENT_CONTEXT(zoom_context);
cf6c1ae1ed15095f8dc269bb9d7a373a1b87990eJenny Donnelly event_context->cursor_shape = cursor_zoom_xpm;
994d0b3f447aa108b0ed35a5e4a8d82a62b6fb0fLuke Smithstatic void sp_zoom_context_setup(SPEventContext *ec)
994d0b3f447aa108b0ed35a5e4a8d82a62b6fb0fLuke Smith if (prefs_get_int_attribute("tools.zoom", "selcue", 0) != 0) {
994d0b3f447aa108b0ed35a5e4a8d82a62b6fb0fLuke Smith if (prefs_get_int_attribute("tools.zoom", "gradientdrag", 0) != 0) {
cf6c1ae1ed15095f8dc269bb9d7a373a1b87990eJenny Donnelly if (((SPEventContextClass *) parent_class)->setup) {
cf6c1ae1ed15095f8dc269bb9d7a373a1b87990eJenny Donnelly ((SPEventContextClass *) parent_class)->setup(ec);
cf6c1ae1ed15095f8dc269bb9d7a373a1b87990eJenny Donnellystatic gint sp_zoom_context_item_handler(SPEventContext *event_context, SPItem *item, GdkEvent *event)
cf6c1ae1ed15095f8dc269bb9d7a373a1b87990eJenny Donnelly if (((SPEventContextClass *) parent_class)->item_handler) {
cf6c1ae1ed15095f8dc269bb9d7a373a1b87990eJenny Donnelly ret = ((SPEventContextClass *) parent_class)->item_handler (event_context, item, event);
cf6c1ae1ed15095f8dc269bb9d7a373a1b87990eJenny Donnellystatic gint sp_zoom_context_root_handler(SPEventContext *event_context, GdkEvent *event)
cf6c1ae1ed15095f8dc269bb9d7a373a1b87990eJenny Donnelly tolerance = prefs_get_int_attribute_limited ("options.dragtolerance", "value", 0, 0, 100);
cf6c1ae1ed15095f8dc269bb9d7a373a1b87990eJenny Donnelly double const zoom_inc = prefs_get_double_attribute_limited("options.zoomincrement", "value", M_SQRT2, 1.01, 10);
within_tolerance = true;
escaped = false;
case GDK_MOTION_NOTIFY:
if ( within_tolerance
within_tolerance = false;
case GDK_BUTTON_RELEASE:
if (b && !within_tolerance) {
} else if (!escaped) {
: zoom_inc );
escaped = false;
case GDK_KEY_PRESS:
case GDK_Escape:
escaped = true;
case GDK_Up:
case GDK_Down:
case GDK_KP_Up:
case GDK_KP_Down:
if (!MOD__CTRL_ONLY)
case GDK_Shift_L:
case GDK_Shift_R:
case GDK_KEY_RELEASE:
case GDK_Shift_L:
case GDK_Shift_R:
if (!ret) {
return ret;