1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-10 04:22:20 +02:00

Triple-click to select line

This commit is contained in:
Brian Fiete 2020-05-16 10:11:04 -07:00
parent 4472449cc4
commit 50244bf400
4 changed files with 52 additions and 33 deletions

View file

@ -743,7 +743,12 @@ namespace Beefy.widgets
//PrintF("~TestStruct() %d\n", mInner.mVal1); //PrintF("~TestStruct() %d\n", mInner.mVal1);
if ((btnCount > 1) && (!mWidgetWindow.IsKeyDown(KeyCode.Shift))) if ((btn == 0) && (btnCount >= 3) && (!mWidgetWindow.IsKeyDown(KeyCode.Shift)))
{
GetLinePosition(CursorLineAndColumn.mLine, var lineStart, var lineEnd);
mSelection = EditSelection(lineStart, lineEnd);
}
else if ((btn == 0) && (btnCount >= 2) && (!mWidgetWindow.IsKeyDown(KeyCode.Shift)))
{ {
// Select word // Select word
StartSelection(); StartSelection();

View file

@ -160,7 +160,12 @@ BFWindow::BFWindow()
for (int i = 0; i < KEYCODE_MAX; i++) for (int i = 0; i < KEYCODE_MAX; i++)
mIsKeyDown[i] = false; mIsKeyDown[i] = false;
for (int i = 0; i < MOUSEBUTTON_MAX; i++) for (int i = 0; i < MOUSEBUTTON_MAX; i++)
{
mIsMouseDown[i] = false; mIsMouseDown[i] = false;
mMouseClickCount[i] = 0;
mMouseDownTicks[i] = 0;
mMouseDownCoords[i] = { -1, -1 };
}
} }
BFWindow::~BFWindow() BFWindow::~BFWindow()

View file

@ -84,6 +84,12 @@ class BFSysBitmap;
class BFWindow; class BFWindow;
struct BFCoord
{
int mX;
int mY;
};
class BFWindow class BFWindow
{ {
public: public:
@ -92,6 +98,10 @@ public:
int mFlags; int mFlags;
bool mIsKeyDown[KEYCODE_MAX]; bool mIsKeyDown[KEYCODE_MAX];
bool mIsMouseDown[MOUSEBUTTON_MAX]; bool mIsMouseDown[MOUSEBUTTON_MAX];
BFCoord mMouseDownCoords[MOUSEBUTTON_MAX];
int mMouseClickCount[MOUSEBUTTON_MAX];
uint32 mMouseDownTicks[MOUSEBUTTON_MAX];
BFMenu* mMenu; BFMenu* mMenu;
RenderWindow* mRenderWindow; RenderWindow* mRenderWindow;
bool mNonExclusiveMouseCapture; bool mNonExclusiveMouseCapture;

View file

@ -83,7 +83,7 @@ WinBFWindow::WinBFWindow(BFWindow* parent, const StringImpl& title, int x, int y
mMinHeight = 128; mMinHeight = 128;
WNDCLASSW wc; WNDCLASSW wc;
wc.style = CS_DBLCLKS; wc.style = 0;
wc.cbClsExtra = 0; wc.cbClsExtra = 0;
wc.cbWndExtra = 0; wc.cbWndExtra = 0;
wc.hbrBackground = NULL; wc.hbrBackground = NULL;
@ -567,51 +567,50 @@ LRESULT WinBFWindow::WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPar
bool checkNonTransparentMousePosition = mNonExclusiveMouseCapture; bool checkNonTransparentMousePosition = mNonExclusiveMouseCapture;
auto _BtnDown = [&](int btn)
{
DWORD tickNow = BFTickCount();
SetCapture(hWnd);
mIsMouseDown[btn] = true;
BFCoord mouseCoords = { x, y };
if ((mouseCoords.mX != mMouseDownCoords[btn].mX) || (mouseCoords.mY != mMouseDownCoords[btn].mY) ||
(tickNow - mMouseDownTicks[btn] > ::GetDoubleClickTime()))
mMouseClickCount[btn] = 0;
mMouseDownCoords[btn] = mouseCoords;
mMouseClickCount[btn]++;
mMouseDownTicks[btn] = tickNow;
mMouseDownFunc(this, x, y, btn, mMouseClickCount[btn]);
};
auto _BtnUp = [&](int btn)
{
releaseCapture = true;
mIsMouseDown[btn] = false;
mMouseUpFunc(this, x, y, btn);
};
switch (uMsg) switch (uMsg)
{ {
case WM_LBUTTONDOWN: case WM_LBUTTONDOWN:
//OutputDebugStrF("WM_LBUTTONDOWN Capture HWnd: %X\n", hWnd); //OutputDebugStrF("WM_LBUTTONDOWN Capture HWnd: %X\n", hWnd);
SetCapture(hWnd); _BtnDown(0);
mIsMouseDown[0] = true;
mMouseDownFunc(this, x, y, 0, 1);
break; break;
case WM_RBUTTONDOWN: case WM_RBUTTONDOWN:
//OutputDebugStrF("WM_RBUTTONDOWN Capture HWnd: %X\n", hWnd); //OutputDebugStrF("WM_RBUTTONDOWN Capture HWnd: %X\n", hWnd);
SetCapture(hWnd); _BtnDown(1);
mIsMouseDown[1] = true;
mMouseDownFunc(this, x, y, 1, 1);
break; break;
case WM_MBUTTONDOWN: case WM_MBUTTONDOWN:
SetCapture(hWnd); _BtnDown(2);
mIsMouseDown[2] = true; break;
mMouseDownFunc(this, x, y, 2, 1);
break;
case WM_LBUTTONDBLCLK:
SetCapture(hWnd);
mMouseDownFunc(this, x, y, 0, 2);
break;
case WM_RBUTTONDBLCLK:
SetCapture(hWnd);
mMouseDownFunc(this, x, y, 1, 2);
break;
case WM_MBUTTONDBLCLK:
SetCapture(hWnd);
mMouseDownFunc(this, x, y, 2, 2);
break;
case WM_LBUTTONUP: case WM_LBUTTONUP:
releaseCapture = true; _BtnUp(0);
mIsMouseDown[0] = false;
mMouseUpFunc(this, x, y, 0);
break; break;
case WM_RBUTTONUP: case WM_RBUTTONUP:
releaseCapture = true; _BtnUp(1);
mIsMouseDown[1] = false;
mMouseUpFunc(this, x, y, 1);
break; break;
case WM_MBUTTONUP: case WM_MBUTTONUP:
releaseCapture = true; _BtnUp(2);
mIsMouseDown[2] = false;
mMouseUpFunc(this, x, y, 2);
break; break;
case WM_MOUSEWHEEL: case WM_MOUSEWHEEL:
{ {