make selection box sub-tile aware
This commit is contained in:
@@ -226,6 +226,17 @@ private:
|
||||
// which is the only case that goes on to start a box drag.
|
||||
bool selectAtPoint(QPoint tile, QVector2D worldPos, bool additive);
|
||||
void selectInBox(bool additive);
|
||||
// Moves the running box drag's far corner to the world position under
|
||||
// `cursorWidgetPos` and, once the cursor sits far enough from where the anchor is
|
||||
// drawn, promotes the gesture from a click to a drag. Every corner update goes
|
||||
// through here, including the ones a scrolling view causes under a cursor that
|
||||
// has not moved (REQ-UI-MULTI-SELECT).
|
||||
void updateBoxDrag(QPoint cursorWidgetPos);
|
||||
// The box the drag currently spans, in world coordinates and normalized: the
|
||||
// rectangle between its two corners once it reads as a drag, and the whole tile
|
||||
// the button went down on before that (REQ-UI-MULTI-SELECT). Both what is drawn
|
||||
// and what is selected come from here, so they can never disagree.
|
||||
QRectF getBoxWorldRect() const;
|
||||
// Publishes where on the screen the selection about to be made sits, so the
|
||||
// selection panel can be placed beside it (REQ-UI-SELECTION-PANEL). Called with
|
||||
// what is about to be selected, immediately before selecting it, and publishes
|
||||
@@ -313,16 +324,16 @@ private:
|
||||
// Not owned; set after construction, so null until MainWindow has built it.
|
||||
const BlueprintLibrary* m_blueprintLibrary = nullptr;
|
||||
bool m_boxSelecting;
|
||||
QPoint m_boxStartTile;
|
||||
QPoint m_boxCurrentTile;
|
||||
// Where the button went down, in widget pixels; the origin the drag threshold
|
||||
// below measures from. Pixels, not tiles: the threshold separates a click from a
|
||||
// drag, which is a hand-steadiness question and not a tile-sized one.
|
||||
QPoint m_boxStartPos;
|
||||
// Whether the cursor has moved far enough from m_boxStartPos for this to read as
|
||||
// a drag. Until it has, the rectangle is not drawn (REQ-UI-MULTI-SELECT): a plain
|
||||
// click would otherwise flash a one-tile rectangle. Sticky for the rest of the
|
||||
// drag, so coming back to the press position does not hide the rectangle again.
|
||||
// The drag's two corners in world coordinates, unsnapped: where the button went
|
||||
// down and where the cursor is now (REQ-UI-MULTI-SELECT). World rather than
|
||||
// widget coordinates so the anchor keeps the spot in the world it was placed on
|
||||
// when the view scrolls under a held button.
|
||||
QVector2D m_boxStartWorld;
|
||||
QVector2D m_boxCurrentWorld;
|
||||
// Whether the cursor has moved far enough from the anchor for this to read as a
|
||||
// drag. Until it has, the rectangle is not drawn and the box resolves as the
|
||||
// whole anchor tile (REQ-UI-MULTI-SELECT). Sticky for the rest of the drag, so
|
||||
// coming back to the press position does not hide the rectangle again.
|
||||
bool m_boxDragMoved;
|
||||
|
||||
// Interprets this widget's key events into semantic actions and publishes them
|
||||
|
||||
Reference in New Issue
Block a user