FIX: handle mouseCaptureLost in common ctrls
Change-Id: Ifde2406911a628fa61acf41c0e7a5120612d73bf
This commit is contained in:
parent
e2d10baea0
commit
3d7d2badf7
|
@ -7,6 +7,7 @@ BEGIN_EVENT_TABLE(Button, StaticBox)
|
||||||
|
|
||||||
EVT_LEFT_DOWN(Button::mouseDown)
|
EVT_LEFT_DOWN(Button::mouseDown)
|
||||||
EVT_LEFT_UP(Button::mouseReleased)
|
EVT_LEFT_UP(Button::mouseReleased)
|
||||||
|
EVT_MOUSE_CAPTURE_LOST(Button::mouseCaptureLost)
|
||||||
EVT_KEY_DOWN(Button::keyDownUp)
|
EVT_KEY_DOWN(Button::keyDownUp)
|
||||||
EVT_KEY_UP(Button::keyDownUp)
|
EVT_KEY_UP(Button::keyDownUp)
|
||||||
|
|
||||||
|
@ -242,12 +243,19 @@ void Button::mouseReleased(wxMouseEvent& event)
|
||||||
event.Skip();
|
event.Skip();
|
||||||
if (pressedDown) {
|
if (pressedDown) {
|
||||||
pressedDown = false;
|
pressedDown = false;
|
||||||
ReleaseMouse();
|
if (HasCapture())
|
||||||
|
ReleaseMouse();
|
||||||
if (wxRect({0, 0}, GetSize()).Contains(event.GetPosition()))
|
if (wxRect({0, 0}, GetSize()).Contains(event.GetPosition()))
|
||||||
sendButtonEvent();
|
sendButtonEvent();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Button::mouseCaptureLost(wxMouseCaptureLostEvent &event)
|
||||||
|
{
|
||||||
|
wxMouseEvent evt;
|
||||||
|
mouseReleased(evt);
|
||||||
|
}
|
||||||
|
|
||||||
void Button::keyDownUp(wxKeyEvent &event)
|
void Button::keyDownUp(wxKeyEvent &event)
|
||||||
{
|
{
|
||||||
if (event.GetKeyCode() == WXK_SPACE || event.GetKeyCode() == WXK_RETURN) {
|
if (event.GetKeyCode() == WXK_SPACE || event.GetKeyCode() == WXK_RETURN) {
|
||||||
|
|
|
@ -67,6 +67,7 @@ private:
|
||||||
// some useful events
|
// some useful events
|
||||||
void mouseDown(wxMouseEvent& event);
|
void mouseDown(wxMouseEvent& event);
|
||||||
void mouseReleased(wxMouseEvent& event);
|
void mouseReleased(wxMouseEvent& event);
|
||||||
|
void mouseCaptureLost(wxMouseCaptureLostEvent &event);
|
||||||
void keyDownUp(wxKeyEvent &event);
|
void keyDownUp(wxKeyEvent &event);
|
||||||
|
|
||||||
void sendButtonEvent();
|
void sendButtonEvent();
|
||||||
|
|
|
@ -9,6 +9,7 @@ BEGIN_EVENT_TABLE(DropDown, wxPopupTransientWindow)
|
||||||
|
|
||||||
EVT_LEFT_DOWN(DropDown::mouseDown)
|
EVT_LEFT_DOWN(DropDown::mouseDown)
|
||||||
EVT_LEFT_UP(DropDown::mouseReleased)
|
EVT_LEFT_UP(DropDown::mouseReleased)
|
||||||
|
EVT_MOUSE_CAPTURE_LOST(DropDown::mouseCaptureLost)
|
||||||
EVT_MOTION(DropDown::mouseMove)
|
EVT_MOTION(DropDown::mouseMove)
|
||||||
EVT_MOUSEWHEEL(DropDown::mouseWheelMoved)
|
EVT_MOUSEWHEEL(DropDown::mouseWheelMoved)
|
||||||
|
|
||||||
|
@ -377,6 +378,7 @@ void DropDown::mouseDown(wxMouseEvent& event)
|
||||||
// force calc hover item again
|
// force calc hover item again
|
||||||
mouseMove(event);
|
mouseMove(event);
|
||||||
pressedDown = true;
|
pressedDown = true;
|
||||||
|
CaptureMouse();
|
||||||
dragStart = event.GetPosition();
|
dragStart = event.GetPosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -385,6 +387,8 @@ void DropDown::mouseReleased(wxMouseEvent& event)
|
||||||
if (pressedDown) {
|
if (pressedDown) {
|
||||||
dragStart = wxPoint();
|
dragStart = wxPoint();
|
||||||
pressedDown = false;
|
pressedDown = false;
|
||||||
|
if (HasCapture())
|
||||||
|
ReleaseMouse();
|
||||||
if (hover_item >= 0) { // not moved
|
if (hover_item >= 0) { // not moved
|
||||||
sendDropDownEvent();
|
sendDropDownEvent();
|
||||||
DismissAndNotify();
|
DismissAndNotify();
|
||||||
|
@ -392,6 +396,12 @@ void DropDown::mouseReleased(wxMouseEvent& event)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DropDown::mouseCaptureLost(wxMouseCaptureLostEvent &event)
|
||||||
|
{
|
||||||
|
wxMouseEvent evt;
|
||||||
|
mouseReleased(evt);
|
||||||
|
}
|
||||||
|
|
||||||
void DropDown::mouseMove(wxMouseEvent &event)
|
void DropDown::mouseMove(wxMouseEvent &event)
|
||||||
{
|
{
|
||||||
wxPoint pt = event.GetPosition();
|
wxPoint pt = event.GetPosition();
|
||||||
|
|
|
@ -98,6 +98,7 @@ private:
|
||||||
// some useful events
|
// some useful events
|
||||||
void mouseDown(wxMouseEvent& event);
|
void mouseDown(wxMouseEvent& event);
|
||||||
void mouseReleased(wxMouseEvent &event);
|
void mouseReleased(wxMouseEvent &event);
|
||||||
|
void mouseCaptureLost(wxMouseCaptureLostEvent &event);
|
||||||
void mouseMove(wxMouseEvent &event);
|
void mouseMove(wxMouseEvent &event);
|
||||||
void mouseWheelMoved(wxMouseEvent &event);
|
void mouseWheelMoved(wxMouseEvent &event);
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@ BEGIN_EVENT_TABLE(StepCtrl, StepCtrlBase)
|
||||||
EVT_LEFT_DOWN(StepCtrl::mouseDown)
|
EVT_LEFT_DOWN(StepCtrl::mouseDown)
|
||||||
EVT_MOTION(StepCtrl::mouseMove)
|
EVT_MOTION(StepCtrl::mouseMove)
|
||||||
EVT_LEFT_UP(StepCtrl::mouseUp)
|
EVT_LEFT_UP(StepCtrl::mouseUp)
|
||||||
|
EVT_MOUSE_CAPTURE_LOST(StepCtrl::mouseCaptureLost)
|
||||||
END_EVENT_TABLE()
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
StepCtrlBase::StepCtrlBase(wxWindow * parent,
|
StepCtrlBase::StepCtrlBase(wxWindow * parent,
|
||||||
|
@ -133,6 +134,7 @@ void StepCtrl::mouseDown(wxMouseEvent &event)
|
||||||
if (rcThumb.Contains(pt)) {
|
if (rcThumb.Contains(pt)) {
|
||||||
pos_thumb = wxPoint{circleX, size.y / 2};
|
pos_thumb = wxPoint{circleX, size.y / 2};
|
||||||
drag_offset = pos_thumb - pt;
|
drag_offset = pos_thumb - pt;
|
||||||
|
CaptureMouse();
|
||||||
} else if (rcBar.Contains(pt)) {
|
} else if (rcBar.Contains(pt)) {
|
||||||
if (pt.x < circleX) {
|
if (pt.x < circleX) {
|
||||||
if (step > 0) SelectItem(step - 1);
|
if (step > 0) SelectItem(step - 1);
|
||||||
|
@ -151,6 +153,10 @@ void StepCtrl::mouseMove(wxMouseEvent &event)
|
||||||
wxSize size = GetSize();
|
wxSize size = GetSize();
|
||||||
int itemWidth = size.x / steps.size();
|
int itemWidth = size.x / steps.size();
|
||||||
int index = pos_thumb.x / itemWidth;
|
int index = pos_thumb.x / itemWidth;
|
||||||
|
if (index < 0)
|
||||||
|
index = 0;
|
||||||
|
else if (index >= steps.size())
|
||||||
|
index = steps.size() - 1;
|
||||||
if (index != pos_thumb.y) {
|
if (index != pos_thumb.y) {
|
||||||
pos_thumb.y = index;
|
pos_thumb.y = index;
|
||||||
Refresh();
|
Refresh();
|
||||||
|
@ -163,8 +169,20 @@ void StepCtrl::mouseUp(wxMouseEvent &event)
|
||||||
wxSize size = GetSize();
|
wxSize size = GetSize();
|
||||||
int itemWidth = size.x / steps.size();
|
int itemWidth = size.x / steps.size();
|
||||||
int index = pos_thumb.x / itemWidth;
|
int index = pos_thumb.x / itemWidth;
|
||||||
pos_thumb = {0, 0};
|
if (index < 0)
|
||||||
SelectItem(index < steps.size() ? index : steps.size() - 1);
|
index = 0;
|
||||||
|
else if (index >= steps.size())
|
||||||
|
index = steps.size() - 1;
|
||||||
|
pos_thumb = {0, 0};
|
||||||
|
SelectItem(index);
|
||||||
|
if (HasCapture())
|
||||||
|
ReleaseMouse();
|
||||||
|
}
|
||||||
|
|
||||||
|
void StepCtrl::mouseCaptureLost(wxMouseCaptureLostEvent &event)
|
||||||
|
{
|
||||||
|
wxMouseEvent evt;
|
||||||
|
mouseUp(evt);
|
||||||
}
|
}
|
||||||
|
|
||||||
void StepCtrl::doRender(wxDC &dc)
|
void StepCtrl::doRender(wxDC &dc)
|
||||||
|
|
|
@ -77,6 +77,7 @@ private:
|
||||||
void mouseDown(wxMouseEvent &event);
|
void mouseDown(wxMouseEvent &event);
|
||||||
void mouseMove(wxMouseEvent &event);
|
void mouseMove(wxMouseEvent &event);
|
||||||
void mouseUp(wxMouseEvent &event);
|
void mouseUp(wxMouseEvent &event);
|
||||||
|
void mouseCaptureLost(wxMouseCaptureLostEvent &event);
|
||||||
|
|
||||||
void doRender(wxDC &dc) override;
|
void doRender(wxDC &dc) override;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue