Merge lp:~cimi/overlay-scrollbar/proximity-separate-function into lp:overlay-scrollbar

Proposed by Ted Gould
Status: Merged
Approved by: Ted Gould
Approved revision: 254
Merged at revision: 254
Proposed branch: lp:~cimi/overlay-scrollbar/proximity-separate-function
Merge into: lp:overlay-scrollbar
Prerequisite: lp:~cimi/overlay-scrollbar/various-namings-and-refactoring
Diff against target: 175 lines (+53/-34)
1 file modified
os/os-scrollbar.c (+53/-34)
To merge this branch: bzr merge lp:~cimi/overlay-scrollbar/proximity-separate-function
Reviewer Review Type Date Requested Status
Ted Gould (community) Approve
Review via email: mp+64689@code.launchpad.net

This proposal supersedes a proposal from 2011-06-15.

Description of the change

fork of lp:~cimi/ayatana-scrollbar/various-namings-and-refactoring, this branch contains a separate proximity function that can be easily extended to support scrollbars on other sides of the scrolled window

To post a comment you must log in.
Revision history for this message
Ted Gould (ted) wrote :

Resubmitted to make that a prereq. branch.

Revision history for this message
Ted Gould (ted) wrote :

+1, love this. Makes the code much easier to read.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'os/os-scrollbar.c'
2--- os/os-scrollbar.c 2011-06-15 13:38:57 +0000
3+++ os/os-scrollbar.c 2011-06-15 13:38:57 +0000
4@@ -50,6 +50,14 @@
5 /* Timeout before hiding in ms, after leaving the toplevel. */
6 #define TIMEOUT_TOPLEVEL_HIDE 200
7
8+typedef enum
9+{
10+ OS_SIDE_TOP,
11+ OS_SIDE_BOTTOM,
12+ OS_SIDE_LEFT,
13+ OS_SIDE_RIGHT
14+} OsSide;
15+
16 struct _OsScrollbarPrivate
17 {
18 GdkRectangle trough;
19@@ -1535,6 +1543,41 @@
20 return FALSE;
21 }
22
23+/* checks if the pointer is in the proximity area. */
24+static gboolean
25+check_proximity (OsScrollbar *scrollbar,
26+ gint x,
27+ gint y,
28+ OsSide side)
29+{
30+ OsScrollbarPrivate *priv;
31+
32+ priv = scrollbar->priv;
33+
34+ switch (side)
35+ {
36+ case OS_SIDE_RIGHT:
37+ return (x >= priv->pager_all.x + priv->pager_all.width - PROXIMITY_SIZE &&
38+ x <= priv->pager_all.x + priv->pager_all.width) &&
39+ (y >= priv->pager_all.y + priv->overlay.y &&
40+ y <= priv->pager_all.y + priv->overlay.y + priv->overlay.height);
41+ break;
42+ case OS_SIDE_BOTTOM:
43+ return (y >= priv->pager_all.y + priv->pager_all.height - PROXIMITY_SIZE &&
44+ y <= priv->pager_all.y + priv->pager_all.height) &&
45+ (x >= priv->pager_all.x + priv->overlay.x &&
46+ x <= priv->pager_all.x + priv->overlay.x + priv->overlay.width);
47+ break;
48+ case OS_SIDE_LEFT:
49+ case OS_SIDE_TOP:
50+ /* FIXME not implemented yet.
51+ * Add support for different scrollbar positions here. */
52+ break;
53+ }
54+
55+ return FALSE;
56+}
57+
58 /* filter function applied to the toplevel window */
59 #ifdef USE_GTK3
60 static GdkFilterReturn
61@@ -1549,8 +1592,8 @@
62 g_return_val_if_fail (OS_SCROLLBAR (user_data), GDK_FILTER_CONTINUE);
63
64 scrollbar = OS_SCROLLBAR (user_data);
65-
66 priv = scrollbar->priv;
67+
68 xev = gdkxevent;
69
70 g_return_val_if_fail (priv->pager != NULL, GDK_FILTER_CONTINUE);
71@@ -1577,10 +1620,7 @@
72 /* proximity area */
73 if (priv->orientation == GTK_ORIENTATION_VERTICAL)
74 {
75- if ((xiev->event_x >= priv->pager_all.x + priv->pager_all.width - PROXIMITY_SIZE &&
76- xiev->event_x <= priv->pager_all.x + priv->pager_all.width) &&
77- (xiev->event_y >= priv->pager_all.y + priv->overlay.y &&
78- xiev->event_y <= priv->pager_all.y + priv->overlay.y + priv->overlay.height))
79+ if (check_proximity (scrollbar, xiev->event_x, xiev->event_y, OS_SIDE_RIGHT))
80 {
81 priv->can_hide = FALSE;
82
83@@ -1610,10 +1650,7 @@
84 }
85 else
86 {
87- if ((xiev->event_y >= priv->pager_all.y + priv->pager_all.height - PROXIMITY_SIZE &&
88- xiev->event_y <= priv->pager_all.y + priv->pager_all.height) &&
89- (xiev->event_x >= priv->pager_all.x + priv->overlay.x &&
90- xiev->event_x <= priv->pager_all.x + priv->overlay.x + priv->overlay.width))
91+ if (check_proximity (scrollbar, xiev->event_x, xiev->event_y, OS_SIDE_BOTTOM))
92 {
93 priv->can_hide = FALSE;
94
95@@ -1704,10 +1741,7 @@
96 /* proximity area */
97 if (priv->orientation == GTK_ORIENTATION_VERTICAL)
98 {
99- if ((xiev->event_x >= priv->pager_all.x + priv->pager_all.width - PROXIMITY_SIZE &&
100- xiev->event_x <= priv->pager_all.x + priv->pager_all.width) &&
101- (xiev->event_y >= priv->pager_all.y + priv->overlay.y &&
102- xiev->event_y <= priv->pager_all.y + priv->overlay.y + priv->overlay.height))
103+ if (check_proximity (scrollbar, xiev->event_x, xiev->event_y, OS_SIDE_RIGHT))
104 {
105 priv->can_hide = FALSE;
106
107@@ -1745,10 +1779,7 @@
108 }
109 else
110 {
111- if ((xiev->event_y >= priv->pager_all.y + priv->pager_all.height - PROXIMITY_SIZE &&
112- xiev->event_y <= priv->pager_all.y + priv->pager_all.height) &&
113- (xiev->event_x >= priv->pager_all.x + priv->overlay.x &&
114- xiev->event_x <= priv->pager_all.x + priv->overlay.x + priv->overlay.width))
115+ if (check_proximity (scrollbar, xiev->event_x, xiev->event_y, OS_SIDE_BOTTOM))
116 {
117 priv->can_hide = FALSE;
118
119@@ -1803,8 +1834,8 @@
120 g_return_val_if_fail (OS_SCROLLBAR (user_data), GDK_FILTER_CONTINUE);
121
122 scrollbar = OS_SCROLLBAR (user_data);
123-
124 priv = scrollbar->priv;
125+
126 xev = gdkxevent;
127
128 g_return_val_if_fail (priv->pager != NULL, GDK_FILTER_CONTINUE);
129@@ -1825,10 +1856,7 @@
130 /* proximity area */
131 if (priv->orientation == GTK_ORIENTATION_VERTICAL)
132 {
133- if ((xev->xbutton.x >= priv->pager_all.x + priv->pager_all.width - PROXIMITY_SIZE &&
134- xev->xbutton.x <= priv->pager_all.x + priv->pager_all.width) &&
135- (xev->xbutton.y >= priv->pager_all.y + priv->overlay.y &&
136- xev->xbutton.y <= priv->pager_all.y + priv->overlay.y + priv->overlay.height))
137+ if (check_proximity (scrollbar, xev->xbutton.x, xev->xbutton.y, OS_SIDE_RIGHT))
138 {
139 priv->can_hide = FALSE;
140
141@@ -1858,10 +1886,7 @@
142 }
143 else
144 {
145- if ((xev->xbutton.y >= priv->pager_all.y + priv->pager_all.height - PROXIMITY_SIZE &&
146- xev->xbutton.y <= priv->pager_all.y + priv->pager_all.height) &&
147- (xev->xbutton.x >= priv->pager_all.x + priv->overlay.x &&
148- xev->xbutton.x <= priv->pager_all.x + priv->overlay.x + priv->overlay.width))
149+ if (check_proximity (scrollbar, xev->xbutton.x, xev->xbutton.y, OS_SIDE_BOTTOM))
150 {
151 priv->can_hide = FALSE;
152
153@@ -1949,10 +1974,7 @@
154 /* proximity area */
155 if (priv->orientation == GTK_ORIENTATION_VERTICAL)
156 {
157- if ((xev->xmotion.x >= priv->pager_all.x + priv->pager_all.width - PROXIMITY_SIZE &&
158- xev->xmotion.x <= priv->pager_all.x + priv->pager_all.width) &&
159- (xev->xmotion.y >= priv->pager_all.y + priv->overlay.y &&
160- xev->xmotion.y <= priv->pager_all.y + priv->overlay.y + priv->overlay.height))
161+ if (check_proximity (scrollbar, xev->xmotion.x, xev->xmotion.y, OS_SIDE_RIGHT))
162 {
163 priv->can_hide = FALSE;
164
165@@ -1990,10 +2012,7 @@
166 }
167 else
168 {
169- if ((xev->xmotion.y >= priv->pager_all.y + priv->pager_all.height - PROXIMITY_SIZE &&
170- xev->xmotion.y <= priv->pager_all.y + priv->pager_all.height) &&
171- (xev->xmotion.x >= priv->pager_all.x + priv->overlay.x &&
172- xev->xmotion.x <= priv->pager_all.x + priv->overlay.x + priv->overlay.width))
173+ if (check_proximity (scrollbar, xev->xmotion.x, xev->xmotion.y, OS_SIDE_BOTTOM))
174 {
175 priv->can_hide = FALSE;
176

Subscribers

People subscribed via source and target branches