mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-21 06:45:39 -06:00
CtrlCore: Horizontal mouse wheel support using MouseWheelHor() (#192)
This commit is contained in:
parent
09960b1056
commit
e3e7f75e98
4 changed files with 44 additions and 14 deletions
|
|
@ -882,6 +882,7 @@ public:
|
||||||
MOUSELEAVE = 0x30,
|
MOUSELEAVE = 0x30,
|
||||||
CURSORIMAGE = 0x40,
|
CURSORIMAGE = 0x40,
|
||||||
MOUSEWHEEL = 0x50,
|
MOUSEWHEEL = 0x50,
|
||||||
|
MOUSEHWHEEL = 0x60,
|
||||||
|
|
||||||
DOWN = 0x80,
|
DOWN = 0x80,
|
||||||
UP = 0x90,
|
UP = 0x90,
|
||||||
|
|
@ -987,6 +988,7 @@ public:
|
||||||
virtual void MiddleHold(Point p, dword keyflags);
|
virtual void MiddleHold(Point p, dword keyflags);
|
||||||
virtual void MiddleUp(Point p, dword keyflags);
|
virtual void MiddleUp(Point p, dword keyflags);
|
||||||
virtual void MouseWheel(Point p, int zdelta, dword keyflags);
|
virtual void MouseWheel(Point p, int zdelta, dword keyflags);
|
||||||
|
virtual void MouseWheelHor(Point p, int zdelta, dword keyflags);
|
||||||
virtual void MouseLeave();
|
virtual void MouseLeave();
|
||||||
|
|
||||||
virtual void Pen(Point p, const PenInfo& pen, dword keyflags);
|
virtual void Pen(Point p, const PenInfo& pen, dword keyflags);
|
||||||
|
|
|
||||||
|
|
@ -95,7 +95,7 @@ Image Ctrl::MouseEvent0(int event, Point p, int zdelta, dword keyflags)
|
||||||
sPropagated = false;
|
sPropagated = false;
|
||||||
Image m = this_ ? MouseEvent(event, p, zdelta, keyflags) : Image();
|
Image m = this_ ? MouseEvent(event, p, zdelta, keyflags) : Image();
|
||||||
Ctrl *parent = this_ ? this_->GetParent() : NULL;
|
Ctrl *parent = this_ ? this_->GetParent() : NULL;
|
||||||
if(event == MOUSEWHEEL && !sPropagated && this_ && parent)
|
if(((event == MOUSEWHEEL)||(event == MOUSEHWHEEL)) && !sPropagated && this_ && parent)
|
||||||
parent->ChildMouseEvent(this, event, p, zdelta, keyflags);
|
parent->ChildMouseEvent(this, event, p, zdelta, keyflags);
|
||||||
sPropagated = pb;
|
sPropagated = pb;
|
||||||
return m;
|
return m;
|
||||||
|
|
@ -111,7 +111,7 @@ Image Ctrl::MouseEventH(int event, Point p, int zdelta, dword keyflags)
|
||||||
if(this_)
|
if(this_)
|
||||||
LogMouseEvent(NULL, this, event, p, zdelta, keyflags);
|
LogMouseEvent(NULL, this, event, p, zdelta, keyflags);
|
||||||
Ctrl *parent = this_ ? this_->GetParent() : NULL;
|
Ctrl *parent = this_ ? this_->GetParent() : NULL;
|
||||||
if(this_ && parent && event != MOUSEWHEEL)
|
if(this_ && parent && event != MOUSEWHEEL && event != MOUSEHWHEEL)
|
||||||
parent->ChildMouseEvent(this, event, p, zdelta, keyflags);
|
parent->ChildMouseEvent(this, event, p, zdelta, keyflags);
|
||||||
return MouseEvent0(event, p, zdelta, keyflags);
|
return MouseEvent0(event, p, zdelta, keyflags);
|
||||||
}
|
}
|
||||||
|
|
@ -129,6 +129,19 @@ void Ctrl::MouseWheel(Point p, int zd, dword kf)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Ctrl::MouseWheelHor(Point p, int zd, dword kf)
|
||||||
|
{
|
||||||
|
Ctrl *parent = GetParent();
|
||||||
|
if(parent) {
|
||||||
|
p += GetScreenView().TopLeft();
|
||||||
|
Rect r = parent->GetScreenView();
|
||||||
|
if(r.Contains(p)) {
|
||||||
|
parent->MouseEvent0(MOUSEHWHEEL, p - r.TopLeft(), zd, kf);
|
||||||
|
sPropagated = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Ctrl::ChildFrameMouseEvent(Ctrl *child, int event, Point p, int zdelta, dword keyflags)
|
void Ctrl::ChildFrameMouseEvent(Ctrl *child, int event, Point p, int zdelta, dword keyflags)
|
||||||
{
|
{
|
||||||
GuiLock __;
|
GuiLock __;
|
||||||
|
|
@ -224,6 +237,9 @@ Image Ctrl::MouseEvent(int event, Point p, int zdelta, dword keyflags)
|
||||||
case MOUSEWHEEL:
|
case MOUSEWHEEL:
|
||||||
MouseWheel(p, zdelta, keyflags);
|
MouseWheel(p, zdelta, keyflags);
|
||||||
break;
|
break;
|
||||||
|
case MOUSEHWHEEL:
|
||||||
|
MouseWheelHor(p, zdelta, keyflags);
|
||||||
|
break;
|
||||||
case CURSORIMAGE:
|
case CURSORIMAGE:
|
||||||
return CursorImage(p, keyflags);
|
return CursorImage(p, keyflags);
|
||||||
}
|
}
|
||||||
|
|
@ -531,7 +547,7 @@ bool sDblTime(int time)
|
||||||
Image Ctrl::DispatchMouse(int e, Point p, int zd) {
|
Image Ctrl::DispatchMouse(int e, Point p, int zd) {
|
||||||
GuiLock __;
|
GuiLock __;
|
||||||
EventLevelDo ___;
|
EventLevelDo ___;
|
||||||
if(e == MOUSEWHEEL && !zd) // ignore non-scroll wheel events
|
if(((e == MOUSEWHEEL)||(e == MOUSEHWHEEL)) && !zd) // ignore non-scroll wheel events
|
||||||
return Null;
|
return Null;
|
||||||
if(e == MOUSEMOVE && repeatTopCtrl == this) {
|
if(e == MOUSEMOVE && repeatTopCtrl == this) {
|
||||||
if(sDistMin(leftmousepos, p) > GUI_DragDistance() && GetMouseLeft()) {
|
if(sDistMin(leftmousepos, p) > GUI_DragDistance() && GetMouseLeft()) {
|
||||||
|
|
@ -621,7 +637,7 @@ Image Ctrl::DispatchMouseEvent(int e, Point p, int zd) {
|
||||||
if(!IsEnabled())
|
if(!IsEnabled())
|
||||||
return Image::Arrow();
|
return Image::Arrow();
|
||||||
Ctrl *top = this;
|
Ctrl *top = this;
|
||||||
if(e == MOUSEWHEEL && !GetParent()) {
|
if(((e == MOUSEWHEEL)||(e == MOUSEHWHEEL)) && !GetParent()) {
|
||||||
Ctrl *w = GetFocusCtrl();
|
Ctrl *w = GetFocusCtrl();
|
||||||
if(w) {
|
if(w) {
|
||||||
top = w->GetTopCtrl();
|
top = w->GetTopCtrl();
|
||||||
|
|
|
||||||
|
|
@ -168,13 +168,22 @@ gboolean Ctrl::GtkEvent(GtkWidget *widget, GdkEvent *event, gpointer user_data)
|
||||||
break;
|
break;
|
||||||
case GDK_SCROLL: {
|
case GDK_SCROLL: {
|
||||||
GdkEventScroll *e = (GdkEventScroll *)event;
|
GdkEventScroll *e = (GdkEventScroll *)event;
|
||||||
if(findarg(e->direction, GDK_SCROLL_UP, GDK_SCROLL_LEFT) >= 0)
|
switch(e->direction){
|
||||||
value = 120;
|
case GDK_SCROLL_UP:
|
||||||
else
|
value = Point(0, 120);
|
||||||
if(findarg(e->direction, GDK_SCROLL_DOWN, GDK_SCROLL_RIGHT) >= 0)
|
break;
|
||||||
value = -120;
|
case GDK_SCROLL_DOWN:
|
||||||
else
|
value = Point(0, -120);
|
||||||
|
break;
|
||||||
|
case GDK_SCROLL_RIGHT:
|
||||||
|
value = Point(120 ,0);
|
||||||
|
break;
|
||||||
|
case GDK_SCROLL_LEFT:
|
||||||
|
value = Point(-120, 0);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GDK_KEY_PRESS:
|
case GDK_KEY_PRESS:
|
||||||
|
|
@ -571,7 +580,9 @@ void Ctrl::Proc()
|
||||||
GtkButtonEvent(UP);
|
GtkButtonEvent(UP);
|
||||||
break;
|
break;
|
||||||
case GDK_SCROLL: {
|
case GDK_SCROLL: {
|
||||||
GtkMouseEvent(MOUSEWHEEL, MOUSEWHEEL, CurrentEvent.value);
|
Point delta = CurrentEvent.value;
|
||||||
|
if(delta.y!=0.0) GtkMouseEvent(MOUSEWHEEL, MOUSEWHEEL, delta.y);
|
||||||
|
if(delta.x!=0.0) GtkMouseEvent(MOUSEHWHEEL, MOUSEHWHEEL, delta.x);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GDK_KEY_PRESS:
|
case GDK_KEY_PRESS:
|
||||||
|
|
@ -729,7 +740,7 @@ bool Ctrl::ProcessEvent0(bool *quit, bool fetch)
|
||||||
b.count += a.count;
|
b.count += a.count;
|
||||||
else
|
else
|
||||||
if(a.type == GDK_SCROLL)
|
if(a.type == GDK_SCROLL)
|
||||||
b.value = (int)b.value + (int)a.value;
|
b.value = (Point)b.value + (Point)a.value;
|
||||||
else
|
else
|
||||||
if(a.type != GDK_CONFIGURE)
|
if(a.type != GDK_CONFIGURE)
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -340,6 +340,7 @@ LRESULT Ctrl::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) {
|
||||||
}
|
}
|
||||||
return 0L;
|
return 0L;
|
||||||
case 0x20a: // WM_MOUSEWHEEL:
|
case 0x20a: // WM_MOUSEWHEEL:
|
||||||
|
case 0x20e: // WM_MOUSEHWHEEL:
|
||||||
if(ignoreclick) {
|
if(ignoreclick) {
|
||||||
EndIgnore();
|
EndIgnore();
|
||||||
return 0L;
|
return 0L;
|
||||||
|
|
@ -347,7 +348,7 @@ LRESULT Ctrl::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) {
|
||||||
if(_this) {
|
if(_this) {
|
||||||
Point p(0, 0);
|
Point p(0, 0);
|
||||||
::ClientToScreen(hwnd, p);
|
::ClientToScreen(hwnd, p);
|
||||||
DoMouse(MOUSEWHEEL, Point((dword)lParam) - p, (short)HIWORD(wParam));
|
DoMouse(message == 0x20e ? MOUSEHWHEEL : MOUSEWHEEL, Point((dword)lParam) - p, (short)HIWORD(wParam));
|
||||||
CurrentMousePos = Point((dword)lParam);
|
CurrentMousePos = Point((dword)lParam);
|
||||||
}
|
}
|
||||||
if(_this) PostInput();
|
if(_this) PostInput();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue