Fix the incorrect display behavior of the pipette cursor + add tooltip to Edit buttons
This commit is contained in:
@@ -31,6 +31,8 @@ CURVEEDITOR_TOOLTIPPASTE;Colle la courbe du presse-papier
|
||||
CURVEEDITOR_TOOLTIPSAVE;Enregistrer la courbe actuelle
|
||||
CURVEEDITOR_TYPE;Type:
|
||||
EDITWINDOW_TITLE;Édition d'image
|
||||
EDIT_OBJECT_TOOLTIP;Cliquez sur ce ce bouton pour afficher des éléments graphiques dans la fenêtre de prévisualisation, que vous pourrez utiliser pour éditer les/certains réglages de cet outil.
|
||||
EDIT_PIPETTE_TOOLTIP;Pour ajouter ou sélectionner un point d'ajustement de la courbe, maintenez la touche Ctrl préssé et cliquez dans l'image avec le bouton gauche de la souris. Tout en gardant ce bouton appuyé, déplacez ensuite le curseur vers le haut ou le bas pour ajuster la position du point (Ctrl peut être relâché).\nClic droit pour sortir du mode pipette.
|
||||
EXIFFILTER_APERTURE;Ouverture
|
||||
EXIFFILTER_CAMERA;Appareil photo
|
||||
EXIFFILTER_EXPOSURECOMPENSATION;Compensation d'exposition (EV)
|
||||
|
@@ -33,6 +33,8 @@ CURVEEDITOR_TOOLTIPPASTE;Paste curve from clipboard.
|
||||
CURVEEDITOR_TOOLTIPSAVE;Save current curve.
|
||||
CURVEEDITOR_TYPE;Type:
|
||||
EDITWINDOW_TITLE;Image Edit
|
||||
EDIT_OBJECT_TOOLTIP;Click on this button to display graphical element on the preview window, that you can use to edit the/some tool's settings.
|
||||
EDIT_PIPETTE_TOOLTIP;To add or select a curve adjustment point, hold the Ctrl key while left-clicking on the image preview. While holding this button pressed, control the adjustment by moving the mouse up and down (the Ctrl key can be released).\nRight-click to exit pipette-mode.
|
||||
EXIFFILTER_APERTURE;Aperture
|
||||
EXIFFILTER_CAMERA;Camera
|
||||
EXIFFILTER_EXPOSURECOMPENSATION;Exposure Compensation (EV)
|
||||
|
@@ -223,18 +223,19 @@ bool CropWindow::isInside (int x, int y) {
|
||||
}
|
||||
|
||||
void CropWindow::leaveNotify (GdkEventCrossing* event) {
|
||||
printf("LeaveNotify\n");
|
||||
EditSubscriber* subscriber = iarea->getCurrSubscriber();
|
||||
if (state==SNormal && subscriber && subscriber->getEditingType()==ET_PIPETTE) {
|
||||
printf("Values\n");
|
||||
iarea->pipetteVal[0] = iarea->pipetteVal[1] = iarea->pipetteVal[2] = -1.f;
|
||||
if (subscriber->mouseOver(0)) {
|
||||
printf("Redraw\n");
|
||||
iarea->redraw();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CropWindow::flawnOver (bool isFlawnOver) {
|
||||
this->isFlawnOver = isFlawnOver;
|
||||
}
|
||||
|
||||
void CropWindow::buttonPress (int button, int type, int bstate, int x, int y) {
|
||||
|
||||
iarea->grabFocus (this);
|
||||
@@ -324,11 +325,6 @@ void CropWindow::buttonPress (int button, int type, int bstate, int x, int y) {
|
||||
press_x = x;
|
||||
action_x = cropHandler.cropParams.w;
|
||||
}
|
||||
else if (onArea (CropObserved, x, y)) {
|
||||
state = SObservedMove;
|
||||
press_x = x;
|
||||
press_y = y;
|
||||
}
|
||||
else if ((bstate & GDK_SHIFT_MASK) && onArea (CropInside, x, y)) {
|
||||
state = SCropMove;
|
||||
press_x = x;
|
||||
@@ -345,10 +341,24 @@ void CropWindow::buttonPress (int button, int type, int bstate, int x, int y) {
|
||||
|
||||
EditSubscriber *editSubscriber = iarea->getCurrSubscriber();
|
||||
|
||||
if (button==1 && editSubscriber && cropgl && cropgl->inImageArea(iarea->posImage.x, iarea->posImage.y) && ( (editSubscriber->getEditingType() == ET_PIPETTE && (bstate & GDK_CONTROL_MASK)) || (editSubscriber->getEditingType() == ET_OBJECTS && iarea->object>-1)) ) {
|
||||
if (button==1 && editSubscriber && cropgl && cropgl->inImageArea(iarea->posImage.x, iarea->posImage.y) && (editSubscriber->getEditingType()==ET_OBJECTS && iarea->object>-1) ) {
|
||||
editSubscriber->button1Pressed(bstate);
|
||||
state=SEditDrag;
|
||||
}
|
||||
else if (onArea (CropObserved, x, y)) {
|
||||
state = SObservedMove;
|
||||
press_x = x;
|
||||
press_y = y;
|
||||
}
|
||||
else if (button==1 && editSubscriber && cropgl && cropgl->inImageArea(iarea->posImage.x, iarea->posImage.y) && (editSubscriber->getEditingType()==ET_PIPETTE && (bstate & GDK_CONTROL_MASK)) ) {
|
||||
editSubscriber->button1Pressed(bstate);
|
||||
state=SEditDrag;
|
||||
}
|
||||
}
|
||||
else if (onArea (CropObserved, x, y)) {
|
||||
state = SObservedMove;
|
||||
press_x = x;
|
||||
press_y = y;
|
||||
}
|
||||
else if (iarea->getToolMode () == TMStraighten) {
|
||||
state = SRotateSelecting;
|
||||
@@ -579,7 +589,7 @@ void CropWindow::pointerMoved (int bstate, int x, int y) {
|
||||
Coord cropPos;
|
||||
screenCoordToCropBuffer(x, y, cropPos.x, cropPos.y);
|
||||
if (editSubscriber->getEditingType()==ET_PIPETTE) {
|
||||
iarea->object = onArea (CropImage, x, y) ? 1 : 0;
|
||||
iarea->object = onArea (CropImage, x, y) && !onArea (CropObserved, x, y) ? 1 : 0;
|
||||
//iarea->object = cropgl && cropgl->inImageArea(iarea->posImage.x, iarea->posImage.y) ? 1 : 0;
|
||||
if (iarea->object) {
|
||||
crop->getPipetteData(iarea->pipetteVal, cropPos.x, cropPos.y, iarea->getPipetteRectSize());
|
||||
@@ -780,7 +790,7 @@ void CropWindow::updateCursor (int x, int y) {
|
||||
if (state==SNormal) {
|
||||
if (onArea (CropWinButtons, x, y))
|
||||
cursorManager.setCursor (iarea->get_window(), CSArrow);
|
||||
else if (onArea (CropToolBar, x, y))
|
||||
else if (onArea (CropToolBar, x, y))
|
||||
cursorManager.setCursor (iarea->get_window(), CSMove);
|
||||
else if (onArea (CropResize, x, y))
|
||||
cursorManager.setCursor (iarea->get_window(), CSResizeDiagonal);
|
||||
@@ -955,9 +965,10 @@ void CropWindow::expose (Cairo::RefPtr<Cairo::Context> cr) {
|
||||
float sum_L, sum_L2;
|
||||
float sumsq_L, sumsq_L2; //sum of deviations squared
|
||||
float stdDev_L, stdDev_L2;
|
||||
float focus_thresh, focus_thresh2;
|
||||
float focus_thresh;
|
||||
//float focus_thresh2;
|
||||
int kernel_size, kernel_size2;// count of pixels in the blur kernel
|
||||
float opacity = 0.9;//TODO: implement opacity
|
||||
//float opacity = 0.9;//TODO: implement opacity
|
||||
//TODO: evaluate effects of altering sampling frequency
|
||||
|
||||
|
||||
@@ -966,7 +977,7 @@ void CropWindow::expose (Cairo::RefPtr<Cairo::Context> cr) {
|
||||
focus_thresh=80;
|
||||
|
||||
blur_radius2 = blur_radius/4; // Band2
|
||||
focus_thresh2 = focus_thresh/2; // Band 2 threshold
|
||||
//focus_thresh2 = focus_thresh/2; // Band 2 threshold
|
||||
|
||||
if (j>blur_radius && j<tmp->get_width()-blur_radius
|
||||
&& i>blur_radius && i<tmp->get_height()-blur_radius){ //stay within image area
|
||||
@@ -1245,9 +1256,9 @@ void CropWindow::expose (Cairo::RefPtr<Cairo::Context> cr) {
|
||||
}
|
||||
if (state==SRotateSelecting)
|
||||
drawStraightenGuide (cr);
|
||||
if (state==SNormal) {
|
||||
if (state==SNormal && isFlawnOver) {
|
||||
EditSubscriber *editSubscriber = iarea->getCurrSubscriber();
|
||||
if (iarea->getToolMode () == TMHand && editSubscriber && editSubscriber->getEditingType()==ET_PIPETTE)
|
||||
if (iarea->getToolMode () == TMHand && editSubscriber && editSubscriber->getEditingType()==ET_PIPETTE && iarea->object)
|
||||
drawUnscaledSpotRectangle (cr, iarea->getPipetteRectSize ());
|
||||
else if (iarea->getToolMode () == TMSpotWB)
|
||||
drawScaledSpotRectangle (cr, iarea->getSpotWBRectSize ());
|
||||
|
@@ -60,6 +60,7 @@ class CropWindow : public LWButtonListener, public CropHandlerListener, public E
|
||||
Glib::ustring cropLabel;
|
||||
int backColor;
|
||||
bool decorated;
|
||||
bool isFlawnOver;
|
||||
|
||||
// crop frame description
|
||||
int titleHeight, sideBorderWidth, lowerBorderWidth, upperBorderWidth, sepWidth, minWidth;
|
||||
@@ -121,6 +122,7 @@ class CropWindow : public LWButtonListener, public CropHandlerListener, public E
|
||||
void getSize (int& w, int& h);
|
||||
|
||||
void leaveNotify (GdkEventCrossing* event);
|
||||
void flawnOver (bool isFlawnOver);
|
||||
|
||||
// zoomlistener interface
|
||||
void zoomIn (bool toCursor=false, int cursorX=-1, int cursorY=-1);
|
||||
|
@@ -63,6 +63,7 @@ DiagonalCurveEditorSubGroup::DiagonalCurveEditorSubGroup (CurveEditorGroup* prt,
|
||||
loadCustom->add (*Gtk::manage (new RTImage ("gtk-open.png")));
|
||||
editCustom = Gtk::manage (new Gtk::ToggleButton());
|
||||
editCustom->add (*Gtk::manage (new RTImage ("editmodehand.png")));
|
||||
editCustom->set_tooltip_text(M("EDIT_PIPETTE_TOOLTIP"));
|
||||
editCustom->hide();
|
||||
custombbox->pack_end (*pasteCustom, Gtk::PACK_SHRINK, 0);
|
||||
custombbox->pack_end (*copyCustom, Gtk::PACK_SHRINK, 0);
|
||||
@@ -108,6 +109,7 @@ DiagonalCurveEditorSubGroup::DiagonalCurveEditorSubGroup (CurveEditorGroup* prt,
|
||||
loadNURBS->add (*Gtk::manage (new RTImage ("gtk-open.png")));
|
||||
editNURBS = Gtk::manage (new Gtk::ToggleButton());
|
||||
editNURBS->add (*Gtk::manage (new RTImage ("editmodehand.png")));
|
||||
editNURBS->set_tooltip_text(M("EDIT_PIPETTE_TOOLTIP"));
|
||||
editNURBS->hide();
|
||||
NURBSbbox->pack_end (*pasteNURBS, Gtk::PACK_SHRINK, 0);
|
||||
NURBSbbox->pack_end (*copyNURBS, Gtk::PACK_SHRINK, 0);
|
||||
@@ -158,6 +160,7 @@ DiagonalCurveEditorSubGroup::DiagonalCurveEditorSubGroup (CurveEditorGroup* prt,
|
||||
loadParam->add (*Gtk::manage (new RTImage ("gtk-open.png")));
|
||||
editParam = Gtk::manage (new Gtk::ToggleButton());
|
||||
editParam->add (*Gtk::manage (new RTImage ("editmodehand.png")));
|
||||
editParam->set_tooltip_text(M("EDIT_PIPETTE_TOOLTIP"));
|
||||
editParam->hide();
|
||||
parambbox->pack_end (*pasteParam, Gtk::PACK_SHRINK, 0);
|
||||
parambbox->pack_end (*copyParam, Gtk::PACK_SHRINK, 0);
|
||||
|
@@ -58,6 +58,7 @@ FlatCurveEditorSubGroup::FlatCurveEditorSubGroup (CurveEditorGroup* prt, Glib::u
|
||||
loadCPoints->add (*Gtk::manage (new RTImage ("gtk-open.png")));
|
||||
editCPoints = Gtk::manage (new Gtk::ToggleButton());
|
||||
editCPoints->add (*Gtk::manage (new RTImage ("editmodehand.png")));
|
||||
editCPoints->set_tooltip_text(M("EDIT_PIPETTE_TOOLTIP"));
|
||||
editCPoints->hide();
|
||||
|
||||
CPointsbbox->pack_end (*pasteCPoints, Gtk::PACK_SHRINK, 0);
|
||||
|
@@ -19,6 +19,7 @@ Gradient::Gradient () : Gtk::VBox(), FoldableToolPanel(this), EditSubscriber(ET_
|
||||
|
||||
edit = Gtk::manage (new Gtk::ToggleButton());
|
||||
edit->add (*Gtk::manage (new RTImage ("editmodehand.png")));
|
||||
edit->set_tooltip_text(M("EDIT_OBJECT_TOOLTIP"));
|
||||
editConn = edit->signal_toggled().connect( sigc::mem_fun(*this, &Gradient::editToggled) );
|
||||
|
||||
strength = Gtk::manage (new Adjuster (M("TP_GRADIENT_STRENGTH"), -5, 5, 0.01, 0));
|
||||
|
@@ -33,6 +33,7 @@ ImageArea::ImageArea (ImageAreaPanel* p) : parent(p) {
|
||||
pmlistener = NULL;
|
||||
pmhlistener = NULL;
|
||||
focusGrabber = NULL;
|
||||
flawnOverWindow = NULL;
|
||||
mainCropWindow = NULL;
|
||||
previewHandler = NULL;
|
||||
lastClosedX = -1;
|
||||
@@ -44,6 +45,8 @@ ImageArea::ImageArea (ImageAreaPanel* p) : parent(p) {
|
||||
indClippedPanel = Gtk::manage (new IndicateClippedPanel (this));
|
||||
previewModePanel = Gtk::manage (new PreviewModePanel (this));
|
||||
|
||||
add_events(Gdk::LEAVE_NOTIFY_MASK);
|
||||
|
||||
signal_style_changed().connect( sigc::mem_fun(*this, &ImageArea::styleChanged) );
|
||||
signal_size_allocate().connect( sigc::mem_fun(*this, &ImageArea::on_resized) );
|
||||
|
||||
@@ -209,8 +212,19 @@ bool ImageArea::on_motion_notify_event (GdkEventMotion* event) {
|
||||
focusGrabber->pointerMoved (event->state, event->x, event->y);
|
||||
else {
|
||||
CropWindow* cw = getCropWindow (event->x, event->y);
|
||||
if (cw)
|
||||
if (cw) {
|
||||
if (cw != flawnOverWindow) {
|
||||
if (flawnOverWindow)
|
||||
flawnOverWindow->flawnOver(false);
|
||||
cw->flawnOver(true);
|
||||
flawnOverWindow = cw;
|
||||
}
|
||||
cw->pointerMoved (event->state, event->x, event->y);
|
||||
}
|
||||
else if (flawnOverWindow) {
|
||||
flawnOverWindow->flawnOver(false);
|
||||
flawnOverWindow = NULL;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -259,13 +273,19 @@ bool ImageArea::on_button_release_event (GdkEventButton* event) {
|
||||
}
|
||||
|
||||
bool ImageArea::on_leave_notify_event (GdkEventCrossing* event) {
|
||||
if (focusGrabber)
|
||||
if (flawnOverWindow) {
|
||||
flawnOverWindow->flawnOver(false);
|
||||
flawnOverWindow = NULL;
|
||||
}
|
||||
if (focusGrabber) {
|
||||
focusGrabber->flawnOver(false);
|
||||
focusGrabber->leaveNotify (event);
|
||||
}
|
||||
else {
|
||||
printf("ImageArea::1\n");
|
||||
CropWindow* cw = getCropWindow (event->x, event->y);
|
||||
|
||||
if (cw) {
|
||||
printf("ImageArea::appel\n");
|
||||
cw->flawnOver(false);
|
||||
cw->leaveNotify (event);
|
||||
}
|
||||
}
|
||||
|
@@ -55,6 +55,7 @@ class ImageArea : public Gtk::DrawingArea, public CropWindowListener, public Edi
|
||||
|
||||
bool dirty;
|
||||
CropWindow* focusGrabber;
|
||||
CropWindow* flawnOverWindow;
|
||||
CropGUIListener* cropgl;
|
||||
PointerMotionListener* pmlistener;
|
||||
PointerMotionListener* pmhlistener;
|
||||
|
Reference in New Issue
Block a user