ultimatepp/uppsrc/IconDes/Event.cpp
2024-07-11 12:08:53 +02:00

110 lines
2.3 KiB
C++

#include "IconDes.h"
namespace Upp {
void IconDes::LeftDown(Point p, dword flags)
{
SetFocus();
if(!IsCurrent())
return;
SaveUndo();
startpoint = GetPos(p);
startcolor = InImage(startpoint) ? CurrentImage()[startpoint.y][startpoint.x] : RGBAZero();
if(IsPasting()) {
if(Rect(Current().pastepos, Current().paste_image.GetSize()).Contains(startpoint)) {
startpoint -= Current().pastepos;
SetCapture();
}
else
FinishPaste();
return;
}
SetCapture();
Current().base_image = CurrentImage();
int fill = (flags & (K_SHIFT|K_CTRL)) == (K_SHIFT|K_CTRL) ? -1 : flags & K_SHIFT ? 0 : flags & K_CTRL ? 20 : flags & K_ALT ? 40 : Null;
if(!IsNull(fill)) {
DoFill(fill);
return;
}
if(selectrect)
EmptyRectTool(startpoint, flags);
else
if(tool)
(this->*tool)(startpoint, flags);
}
void IconDes::MouseMove(Point p, dword keyflags)
{
SyncStatus();
if(!HasCapture() || !IsCurrent())
return;
p = GetPos(p);
if(IsPasting()) {
Current().pastepos = p - startpoint;
MakePaste();
return;
}
if(selectrect)
EmptyRectTool(p, keyflags);
else
if(tool)
(this->*tool)(p, keyflags);
}
void IconDes::LeftUp(Point p, dword keyflags)
{
if(!IsCurrent())
return;
if(IsPasting() && HasCapture())
Refresh();
else
if(HasCapture() && selectrect)
Move();
else
Current().base_image.Clear();
SetBar();
SyncShow();
}
void IconDes::RightDown(Point p, dword flags)
{
p = GetPos(p);
if(!InImage(p))
return;
if(tool == &IconDes::HotSpotTool) {
if(p != Current().image.Get2ndSpot()) {
ImageBuffer ib(Current().image);
ib.Set2ndSpot(p);
Current().image = ib;
Refresh();
}
return;
}
RGBA ic = CurrentImage()[p.y][p.x];
RGBA c = CurrentColor();
if(flags & K_ALT) {
c.a = ic.a;
ic = c;
}
if(flags & K_CTRL)
ic.a = c.a;
rgbactrl.Set(ic);
ColorChanged();
}
Image IconDes::CursorImage(Point p, dword flags)
{
if(IsHotSpot())
return Image::Arrow();
if(IsPasting())
return HasCapture() ? IconDesImg::MoveMove()
: Rect(Current().pastepos, Current().paste_image.GetSize()).Contains(GetPos(p)) ? IconDesImg::MoveCursor()
: IconDesImg::MoveOk();
return (flags & (K_SHIFT|K_CTRL)) == (K_SHIFT|K_CTRL) ? antifill_cursor :
flags & K_SHIFT ? fill_cursor :
flags & K_CTRL ? fill_cursor2 :
flags & K_ALT ? fill_cursor3 : cursor_image;
}
}