Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
O
opencv
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
opencv
Commits
6020dacc
Commit
6020dacc
authored
8 years ago
by
Alexandr Kondratev
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
highgui module: implemented QT and GTK mouse wheel callback support in linux
parent
68c63188
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
39 additions
and
4 deletions
+39
-4
window_QT.cpp
modules/highgui/src/window_QT.cpp
+11
-1
window_QT.h
modules/highgui/src/window_QT.h
+1
-1
window_gtk.cpp
modules/highgui/src/window_gtk.cpp
+27
-2
No files found.
modules/highgui/src/window_QT.cpp
View file @
6020dacc
...
...
@@ -2629,8 +2629,18 @@ void DefaultViewPort::resizeEvent(QResizeEvent* evnt)
void
DefaultViewPort
::
wheelEvent
(
QWheelEvent
*
evnt
)
{
scaleView
(
evnt
->
delta
()
/
240.0
,
evnt
->
pos
());
int
delta
=
evnt
->
delta
();
int
cv_event
=
-
1
;
int
flags
=
((
delta
&
0xffff
)
<<
16
)
|
((
evnt
->
orientation
()
==
Qt
::
Vertical
)
?
CV_EVENT_MOUSEWHEEL
:
CV_EVENT_MOUSEHWHEEL
);
QPoint
pt
=
evnt
->
pos
();
icvmouseHandler
(
evnt
,
mouse_wheel
,
cv_event
,
flags
);
icvmouseProcessing
(
QPoingF
(
pt
),
cv_event
,
flags
);
scaleView
(
evnt
->
delta
()
/
240.0
,
pt
);
viewport
()
->
update
();
QWidget
::
mouseWheel
(
evnt
);
}
...
...
This diff is collapsed.
Click to expand it.
modules/highgui/src/window_QT.h
View file @
6020dacc
...
...
@@ -366,7 +366,7 @@ private slots:
};
enum
type_mouse_event
{
mouse_up
=
0
,
mouse_down
=
1
,
mouse_dbclick
=
2
,
mouse_move
=
3
};
enum
type_mouse_event
{
mouse_up
=
0
,
mouse_down
=
1
,
mouse_dbclick
=
2
,
mouse_move
=
3
,
mouse_wheel
=
3
};
static
const
int
tableMouseButtons
[][
3
]
=
{
{
CV_EVENT_LBUTTONUP
,
CV_EVENT_RBUTTONUP
,
CV_EVENT_MBUTTONUP
},
//mouse_up
{
CV_EVENT_LBUTTONDOWN
,
CV_EVENT_RBUTTONDOWN
,
CV_EVENT_MBUTTONDOWN
},
//mouse_down
...
...
This diff is collapsed.
Click to expand it.
modules/highgui/src/window_gtk.cpp
View file @
6020dacc
...
...
@@ -1066,6 +1066,8 @@ CV_IMPL int cvNamedWindow( const char* name, int flags )
G_CALLBACK
(
icvOnMouse
),
window
);
g_signal_connect
(
window
->
widget
,
"motion-notify-event"
,
G_CALLBACK
(
icvOnMouse
),
window
);
g_signal_connect
(
window
->
widget
,
"scroll-event"
,
G_CALLBACK
(
icvOnMouse
),
window
);
g_signal_connect
(
window
->
frame
,
"delete-event"
,
G_CALLBACK
(
icvOnClose
),
window
);
#if defined(GTK_VERSION3)
...
...
@@ -1076,7 +1078,7 @@ CV_IMPL int cvNamedWindow( const char* name, int flags )
G_CALLBACK
(
cvImageWidget_expose
),
window
);
#endif //GTK_VERSION3
gtk_widget_add_events
(
window
->
widget
,
GDK_BUTTON_RELEASE_MASK
|
GDK_BUTTON_PRESS_MASK
|
GDK_POINTER_MOTION_MASK
)
;
gtk_widget_add_events
(
window
->
widget
,
GDK_BUTTON_RELEASE_MASK
|
GDK_BUTTON_PRESS_MASK
|
GDK_POINTER_MOTION_MASK
|
GDK_SCROLL_MASK
)
;
gtk_widget_show
(
window
->
frame
);
gtk_window_set_title
(
GTK_WINDOW
(
window
->
frame
),
name
);
...
...
@@ -1947,6 +1949,13 @@ static gboolean icvOnMouse( GtkWidget *widget, GdkEvent *event, gpointer user_da
}
state
=
event_button
->
state
;
}
else
if
(
event
->
type
==
GDK_SCROLL
)
{
GdkEventButton
*
event_button
=
(
GdkEventButton
*
)
event
;
cv_event
=
CV_EVENT_MOUSEWHEEL
;
state
=
event_button
->
state
;
}
if
(
cv_event
>=
0
){
// scale point if image is scaled
...
...
@@ -1973,7 +1982,23 @@ static gboolean icvOnMouse( GtkWidget *widget, GdkEvent *event, gpointer user_da
// if((unsigned)pt.x < (unsigned)(image_widget->original_image->width) &&
// (unsigned)pt.y < (unsigned)(image_widget->original_image->height) )
{
int
flags
=
(
state
&
GDK_SHIFT_MASK
?
CV_EVENT_FLAG_SHIFTKEY
:
0
)
|
int
flags
=
0
;
if
(
state
&
GDK_SCROLL_MASK
)
{
cv_event
=
CV_EVENT_MOUSEMOVE
;
int
orient
=
CV_EVENT_MOUSEWHEEL
;
switch
(
event
->
scroll
.
direction
)
{
case
GDK_SCROLL_RIGHT
:
orient
=
CV_EVENT_MOUSEHWHEEL
;
case
GDK_SCROLL_UP
:
flags
|=
((
1
<<
16
)
|
orient
);
break
;
case
GDK_SCROLL_LEFT
:
orient
=
CV_EVENT_MOUSEHWHEEL
;
case
GDK_SCROLL_DOWN
:
flags
|=
((
-
1
<<
16
)
|
orient
);
break
;
case
GDK_SCROLL_SMOOTH
:
// to prevent make warning; TODO
;
};
};
flags
=
flags
|
(
state
&
GDK_SHIFT_MASK
?
CV_EVENT_FLAG_SHIFTKEY
:
0
)
|
(
state
&
GDK_CONTROL_MASK
?
CV_EVENT_FLAG_CTRLKEY
:
0
)
|
(
state
&
(
GDK_MOD1_MASK
|
GDK_MOD2_MASK
)
?
CV_EVENT_FLAG_ALTKEY
:
0
)
|
(
state
&
GDK_BUTTON1_MASK
?
CV_EVENT_FLAG_LBUTTON
:
0
)
|
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment