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:
parent
4472449cc4
commit
50244bf400
4 changed files with 52 additions and 33 deletions
|
@ -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();
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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:
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue