56 lines
No EOL
1.2 KiB
C++
56 lines
No EOL
1.2 KiB
C++
#include "FloatingWidget.hpp"
|
|
|
|
using namespace tp;
|
|
|
|
void FloatingWidget::process(const EventHandler& events) {
|
|
const auto relativePointer = events.getPointer();
|
|
|
|
bool inside = getRelativeArea().isInside(relativePointer);
|
|
|
|
if (inside && events.isPressed(InputID::MOUSE1)) {
|
|
mPointerStart = relativePointer;
|
|
mIsFloating = true;
|
|
}
|
|
|
|
if (mIsFloating && resizeHandleRect().isInside(relativePointer)) {
|
|
mIsResizing = true;
|
|
}
|
|
|
|
if (mIsFloating && events.isReleased(InputID::MOUSE1)) {
|
|
mIsFloating = false;
|
|
mIsResizing = false;
|
|
}
|
|
|
|
mPointerCurrent = relativePointer;
|
|
|
|
// triggerWidgetUpdate();
|
|
}
|
|
|
|
void FloatingWidget::adjustRect() {
|
|
auto area = getArea();
|
|
|
|
if (mIsResizing) {
|
|
area.size = mPointerCurrent + mHandleSize / 2.f;
|
|
} else if (mIsFloating) {
|
|
area.pos += mPointerCurrent - mPointerStart;
|
|
}
|
|
|
|
setArea(area);
|
|
}
|
|
|
|
void FloatingWidget::draw(Canvas& canvas) {
|
|
canvas.rect(resizeHandleRect(), RGBA(0.7f), 2);
|
|
canvas.rect(getRelativeArea(), RGBA(0.5f), 10);
|
|
}
|
|
|
|
RectF FloatingWidget::resizeHandleRect() {
|
|
auto area = getRelativeArea();
|
|
area.pos = area.p3() - mHandleSize;
|
|
area.size = mHandleSize;
|
|
area.shrink(mHandlePadding);
|
|
return area;
|
|
}
|
|
|
|
bool FloatingWidget::propagateEventsToChildren() const {
|
|
return !mIsFloating;
|
|
} |