|
|
@@ -29,7 +29,8 @@ public: |
|
|
|
explicit ResizeHandle(Window& window) |
|
|
|
: TopLevelWidget(window), |
|
|
|
handleSize(16), |
|
|
|
resizing(false) |
|
|
|
hasCursor(false), |
|
|
|
isResizing(false) |
|
|
|
{ |
|
|
|
resetArea(); |
|
|
|
} |
|
|
@@ -38,7 +39,8 @@ public: |
|
|
|
explicit ResizeHandle(TopLevelWidget* const tlw) |
|
|
|
: TopLevelWidget(tlw->getWindow()), |
|
|
|
handleSize(16), |
|
|
|
resizing(false) |
|
|
|
hasCursor(false), |
|
|
|
isResizing(false) |
|
|
|
{ |
|
|
|
resetArea(); |
|
|
|
} |
|
|
@@ -56,12 +58,9 @@ protected: |
|
|
|
const GraphicsContext& context(getGraphicsContext()); |
|
|
|
const double lineWidth = 1.0 * getScaleFactor(); |
|
|
|
|
|
|
|
#ifdef DGL_OPENGL |
|
|
|
glUseProgram(0); |
|
|
|
# ifndef DGL_USE_OPENGL3 |
|
|
|
#if defined(DGL_OPENGL) && !defined(DGL_USE_OPENGL3) |
|
|
|
glMatrixMode(GL_MODELVIEW); |
|
|
|
# endif |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
// draw white lines, 1px wide |
|
|
|
Color(1.0f, 1.0f, 1.0f).setFor(context); |
|
|
@@ -87,15 +86,16 @@ protected: |
|
|
|
|
|
|
|
if (ev.press && area.contains(ev.pos)) |
|
|
|
{ |
|
|
|
resizing = true; |
|
|
|
isResizing = true; |
|
|
|
resizingSize = Size<double>(getWidth(), getHeight()); |
|
|
|
lastResizePoint = ev.pos; |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
if (resizing && ! ev.press) |
|
|
|
if (isResizing && ! ev.press) |
|
|
|
{ |
|
|
|
resizing = false; |
|
|
|
isResizing = false; |
|
|
|
recheckCursor(ev.pos); |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
@@ -104,8 +104,11 @@ protected: |
|
|
|
|
|
|
|
bool onMotion(const MotionEvent& ev) override |
|
|
|
{ |
|
|
|
if (! resizing) |
|
|
|
if (! isResizing) |
|
|
|
{ |
|
|
|
recheckCursor(ev.pos); |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
const Size<double> offset(ev.pos.getX() - lastResizePoint.getX(), |
|
|
|
ev.pos.getY() - lastResizePoint.getY()); |
|
|
@@ -113,9 +116,11 @@ protected: |
|
|
|
resizingSize += offset; |
|
|
|
lastResizePoint = ev.pos; |
|
|
|
|
|
|
|
// TODO min width, min height |
|
|
|
const uint minWidth = 16; |
|
|
|
const uint minHeight = 16; |
|
|
|
// TODO keepAspectRatio |
|
|
|
bool keepAspectRatio; |
|
|
|
const Size<uint> minSize(getWindow().getGeometryConstraints(keepAspectRatio)); |
|
|
|
const uint minWidth = minSize.getWidth(); |
|
|
|
const uint minHeight = minSize.getHeight(); |
|
|
|
|
|
|
|
if (resizingSize.getWidth() < minWidth) |
|
|
|
resizingSize.setWidth(minWidth); |
|
|
@@ -142,10 +147,21 @@ private: |
|
|
|
uint handleSize; |
|
|
|
|
|
|
|
// event handling state |
|
|
|
bool resizing; |
|
|
|
bool hasCursor, isResizing; |
|
|
|
Point<double> lastResizePoint; |
|
|
|
Size<double> resizingSize; |
|
|
|
|
|
|
|
void recheckCursor(const Point<double>& pos) |
|
|
|
{ |
|
|
|
const bool shouldHaveCursor = area.contains(pos); |
|
|
|
|
|
|
|
if (shouldHaveCursor == hasCursor) |
|
|
|
return; |
|
|
|
|
|
|
|
hasCursor = shouldHaveCursor; |
|
|
|
setCursor(shouldHaveCursor ? kMouseCursorDiagonal : kMouseCursorArrow); |
|
|
|
} |
|
|
|
|
|
|
|
void resetArea() |
|
|
|
{ |
|
|
|
const double scaleFactor = getScaleFactor(); |
|
|
|