X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fdropper-context.cpp;h=b7344889ff67836fe81fac969ca6db79a291d001;hb=338d6dce719c1981c663a900b95754114934d3ec;hp=1f6842a5ca34236cd5304338b36188b28a572639;hpb=e9b6af083e34e2397a8ddbe9781920733d09d151;p=inkscape.git diff --git a/src/dropper-context.cpp b/src/dropper-context.cpp index 1f6842a5c..b7344889f 100644 --- a/src/dropper-context.cpp +++ b/src/dropper-context.cpp @@ -1,11 +1,10 @@ -#define __SP_DROPPER_CONTEXT_C__ - /* * Tool for picking colors from drawing * * Authors: * Lauris Kaplinski * bulia byak + * Abhishek Sharma * * Copyright (C) 1999-2005 Authors * @@ -43,6 +42,8 @@ #include "message-context.h" //#include "libnr/nr-scale-translate-ops.h" +using Inkscape::DocumentUndo; + static void sp_dropper_context_class_init(SPDropperContextClass *klass); static void sp_dropper_context_init(SPDropperContext *dc); @@ -129,6 +130,11 @@ static void sp_dropper_context_finish(SPEventContext *ec) SPDropperContext *dc = SP_DROPPER_CONTEXT(ec); ec->enableGrDrag(false); + + if (dc->grabbed) { + sp_canvas_item_ungrab(dc->grabbed, GDK_CURRENT_TIME); + dc->grabbed = NULL; + } if (dc->area) { gtk_object_destroy(GTK_OBJECT(dc->area)); @@ -137,6 +143,16 @@ static void sp_dropper_context_finish(SPEventContext *ec) } +/** + * Returns the current dropper context icc-color. + */ +SPColor* sp_dropper_context_get_icc_color(SPEventContext */*ec*/) +{ + //TODO: implement-me! + + return 0; // At least we will cause a clean crash, instead of random corruption. +} + /** * Returns the current dropper context color. */ @@ -144,11 +160,11 @@ guint32 sp_dropper_context_get_color(SPEventContext *ec) { SPDropperContext *dc = SP_DROPPER_CONTEXT(ec); Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - + int pick = prefs->getInt("/tools/dropper/pick", SP_DROPPER_PICK_VISIBLE); bool setalpha = prefs->getBool("/tools/dropper/setalpha", true); - + return SP_RGBA32_F_COMPOSE(dc->R, dc->G, dc->B, (pick == SP_DROPPER_PICK_ACTUAL && setalpha) ? dc->alpha : 1.0); } @@ -171,6 +187,12 @@ static gint sp_dropper_context_root_handler(SPEventContext *event_context, GdkEv dc->dragging = TRUE; ret = TRUE; } + + sp_canvas_item_grab(SP_CANVAS_ITEM(desktop->acetate), + GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK, + NULL, event->button.time); + dc->grabbed = SP_CANVAS_ITEM(desktop->acetate); + break; case GDK_MOTION_NOTIFY: if (event->motion.state & GDK_BUTTON2_MASK) { @@ -311,6 +333,11 @@ static gint sp_dropper_context_root_handler(SPEventContext *event_context, GdkEv { sp_canvas_item_hide(dc->area); dc->dragging = FALSE; + + if (dc->grabbed) { + sp_canvas_item_ungrab(dc->grabbed, event->button.time); + dc->grabbed = NULL; + } double alpha_to_set = setalpha? dc->alpha : 1.0; @@ -324,8 +351,8 @@ static gint sp_dropper_context_root_handler(SPEventContext *event_context, GdkEv if (!(sp_desktop_selection(desktop)->isEmpty())) { - sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_DROPPER, - _("Set picked color")); + DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_DROPPER, + _("Set picked color")); } ret = TRUE;