Merge lp:~canonical-dx-team/unity/unity.quicklist-event-handling into lp:unity
- unity.quicklist-event-handling
- Merge into trunk
Proposed by
Jay Taoko
Status: | Merged |
---|---|
Merged at revision: | 640 |
Proposed branch: | lp:~canonical-dx-team/unity/unity.quicklist-event-handling |
Merge into: | lp:unity |
Diff against target: |
293 lines (+115/-16) 4 files modified
src/QuicklistMenuItem.cpp (+3/-3) src/QuicklistMenuItem.h (+2/-1) src/QuicklistView.cpp (+101/-9) src/QuicklistView.h (+9/-3) |
To merge this branch: | bzr merge lp:~canonical-dx-team/unity/unity.quicklist-event-handling |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Jason Smith (community) | Approve | ||
Review via email:
|
Commit message
Description of the change
Improved mouse event handling. Interpret mouse events on the quicklist and get ready to send the clicked signal.
To post a comment you must log in.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'src/QuicklistMenuItem.cpp' | |||
2 | --- src/QuicklistMenuItem.cpp 2010-11-29 17:18:55 +0000 | |||
3 | +++ src/QuicklistMenuItem.cpp 2010-11-30 05:21:18 +0000 | |||
4 | @@ -301,7 +301,7 @@ | |||
5 | 301 | 301 | ||
6 | 302 | void QuicklistMenuItem::RecvMouseUp (int x, int y, unsigned long button_flags, unsigned long key_flags) | 302 | void QuicklistMenuItem::RecvMouseUp (int x, int y, unsigned long button_flags, unsigned long key_flags) |
7 | 303 | { | 303 | { |
9 | 304 | sigMouseReleased.emit (this); | 304 | sigMouseReleased.emit (this, x, y); |
10 | 305 | } | 305 | } |
11 | 306 | 306 | ||
12 | 307 | void QuicklistMenuItem::RecvMouseClick (int x, int y, unsigned long button_flags, unsigned long key_flags) | 307 | void QuicklistMenuItem::RecvMouseClick (int x, int y, unsigned long button_flags, unsigned long key_flags) |
13 | @@ -316,12 +316,12 @@ | |||
14 | 316 | 316 | ||
15 | 317 | void QuicklistMenuItem::RecvMouseMove (int x, int y, int dx, int dy, unsigned long button_flags, unsigned long key_flags) | 317 | void QuicklistMenuItem::RecvMouseMove (int x, int y, int dx, int dy, unsigned long button_flags, unsigned long key_flags) |
16 | 318 | { | 318 | { |
18 | 319 | 319 | //printf ("[QuicklistMenuItem::RecvMouseMove]\n"); | |
19 | 320 | } | 320 | } |
20 | 321 | 321 | ||
21 | 322 | void QuicklistMenuItem::RecvMouseDrag (int x, int y, int dx, int dy, unsigned long button_flags, unsigned long key_flags) | 322 | void QuicklistMenuItem::RecvMouseDrag (int x, int y, int dx, int dy, unsigned long button_flags, unsigned long key_flags) |
22 | 323 | { | 323 | { |
24 | 324 | 324 | sigMouseDrag.emit (this, x, y); | |
25 | 325 | } | 325 | } |
26 | 326 | 326 | ||
27 | 327 | void QuicklistMenuItem::RecvMouseEnter (int x, int y, unsigned long button_flags, unsigned long key_flags) | 327 | void QuicklistMenuItem::RecvMouseEnter (int x, int y, unsigned long button_flags, unsigned long key_flags) |
28 | 328 | 328 | ||
29 | === modified file 'src/QuicklistMenuItem.h' | |||
30 | --- src/QuicklistMenuItem.h 2010-11-25 13:01:34 +0000 | |||
31 | +++ src/QuicklistMenuItem.h 2010-11-30 05:21:18 +0000 | |||
32 | @@ -109,8 +109,9 @@ | |||
33 | 109 | 109 | ||
34 | 110 | sigc::signal<void, QuicklistMenuItem*> sigMouseEnter; | 110 | sigc::signal<void, QuicklistMenuItem*> sigMouseEnter; |
35 | 111 | sigc::signal<void, QuicklistMenuItem*> sigMouseLeave; | 111 | sigc::signal<void, QuicklistMenuItem*> sigMouseLeave; |
37 | 112 | sigc::signal<void, QuicklistMenuItem*> sigMouseReleased; | 112 | sigc::signal<void, QuicklistMenuItem*, int, int> sigMouseReleased; |
38 | 113 | sigc::signal<void, QuicklistMenuItem*> sigMouseClick; | 113 | sigc::signal<void, QuicklistMenuItem*> sigMouseClick; |
39 | 114 | sigc::signal<void, QuicklistMenuItem*, int, int> sigMouseDrag; | ||
40 | 114 | 115 | ||
41 | 115 | DbusmenuMenuitem* _menuItem; | 116 | DbusmenuMenuitem* _menuItem; |
42 | 116 | QuicklistMenuItemType _item_type; | 117 | QuicklistMenuItemType _item_type; |
43 | 117 | 118 | ||
44 | === modified file 'src/QuicklistView.cpp' | |||
45 | --- src/QuicklistView.cpp 2010-11-24 18:25:38 +0000 | |||
46 | +++ src/QuicklistView.cpp 2010-11-30 05:21:18 +0000 | |||
47 | @@ -139,6 +139,7 @@ | |||
48 | 139 | item->sigMouseReleased.connect (sigc::mem_fun (this, &QuicklistView::RecvItemMouseRelease)); | 139 | item->sigMouseReleased.connect (sigc::mem_fun (this, &QuicklistView::RecvItemMouseRelease)); |
49 | 140 | item->sigMouseEnter.connect (sigc::mem_fun (this, &QuicklistView::RecvItemMouseEnter)); | 140 | item->sigMouseEnter.connect (sigc::mem_fun (this, &QuicklistView::RecvItemMouseEnter)); |
50 | 141 | item->sigMouseLeave.connect (sigc::mem_fun (this, &QuicklistView::RecvItemMouseLeave)); | 141 | item->sigMouseLeave.connect (sigc::mem_fun (this, &QuicklistView::RecvItemMouseLeave)); |
51 | 142 | item->sigMouseDrag.connect (sigc::mem_fun (this, &QuicklistView::RecvItemMouseDrag)); | ||
52 | 142 | 143 | ||
53 | 143 | _default_item_layout->AddView(item, 1, nux::eCenter, nux::eFull); | 144 | _default_item_layout->AddView(item, 1, nux::eCenter, nux::eFull); |
54 | 144 | _default_item_list.push_back (item); | 145 | _default_item_list.push_back (item); |
55 | @@ -159,6 +160,7 @@ | |||
56 | 159 | item->sigMouseReleased.connect (sigc::mem_fun (this, &QuicklistView::RecvItemMouseRelease)); | 160 | item->sigMouseReleased.connect (sigc::mem_fun (this, &QuicklistView::RecvItemMouseRelease)); |
57 | 160 | item->sigMouseEnter.connect (sigc::mem_fun (this, &QuicklistView::RecvItemMouseEnter)); | 161 | item->sigMouseEnter.connect (sigc::mem_fun (this, &QuicklistView::RecvItemMouseEnter)); |
58 | 161 | item->sigMouseLeave.connect (sigc::mem_fun (this, &QuicklistView::RecvItemMouseLeave)); | 162 | item->sigMouseLeave.connect (sigc::mem_fun (this, &QuicklistView::RecvItemMouseLeave)); |
59 | 163 | item->sigMouseDrag.connect (sigc::mem_fun (this, &QuicklistView::RecvItemMouseDrag)); | ||
60 | 162 | 164 | ||
61 | 163 | _default_item_layout->AddView(item, 1, nux::eCenter, nux::eFull); | 165 | _default_item_layout->AddView(item, 1, nux::eCenter, nux::eFull); |
62 | 164 | _default_item_list.push_back (item); | 166 | _default_item_list.push_back (item); |
63 | @@ -214,8 +216,12 @@ | |||
64 | 214 | // We choose to test the quicklist items ourselves instead of processing them as it is usual in nux. | 216 | // We choose to test the quicklist items ourselves instead of processing them as it is usual in nux. |
65 | 215 | // This is meant to be easier since the quicklist has a atypical way of working. | 217 | // This is meant to be easier since the quicklist has a atypical way of working. |
66 | 216 | if (m_layout) | 218 | if (m_layout) |
67 | 219 | { | ||
68 | 217 | ret = m_layout->ProcessEvent (window_event, ret, ProcEvInfo); | 220 | ret = m_layout->ProcessEvent (window_event, ret, ProcEvInfo); |
70 | 218 | 221 | } | |
71 | 222 | |||
72 | 223 | // The quicklist itself does not process the evvent. Instead we do some analysis of the event | ||
73 | 224 | // to detect the user action and perform the correct operation. | ||
74 | 219 | if (ievent.e_event == nux::NUX_MOUSE_PRESSED) | 225 | if (ievent.e_event == nux::NUX_MOUSE_PRESSED) |
75 | 220 | { | 226 | { |
76 | 221 | if (GetGeometry ().IsPointInside (ievent.e_x, ievent.e_y)) | 227 | if (GetGeometry ().IsPointInside (ievent.e_x, ievent.e_y)) |
77 | @@ -227,6 +233,7 @@ | |||
78 | 227 | _mouse_down = false; | 233 | _mouse_down = false; |
79 | 228 | if (IsVisible ()) | 234 | if (IsVisible ()) |
80 | 229 | { | 235 | { |
81 | 236 | CancelItemsPrelightStatus (); | ||
82 | 230 | CaptureMouseDownAnyWhereElse (false); | 237 | CaptureMouseDownAnyWhereElse (false); |
83 | 231 | ForceStopFocus (1, 1); | 238 | ForceStopFocus (1, 1); |
84 | 232 | UnGrabPointer (); | 239 | UnGrabPointer (); |
85 | @@ -238,10 +245,10 @@ | |||
86 | 238 | } | 245 | } |
87 | 239 | else if ((ievent.e_event == nux::NUX_MOUSE_RELEASED) && _mouse_down) | 246 | else if ((ievent.e_event == nux::NUX_MOUSE_RELEASED) && _mouse_down) |
88 | 240 | { | 247 | { |
89 | 241 | |||
90 | 242 | _mouse_down = false; | 248 | _mouse_down = false; |
91 | 243 | if (IsVisible ()) | 249 | if (IsVisible ()) |
92 | 244 | { | 250 | { |
93 | 251 | CancelItemsPrelightStatus (); | ||
94 | 245 | CaptureMouseDownAnyWhereElse (false); | 252 | CaptureMouseDownAnyWhereElse (false); |
95 | 246 | ForceStopFocus (1, 1); | 253 | ForceStopFocus (1, 1); |
96 | 247 | UnGrabPointer (); | 254 | UnGrabPointer (); |
97 | @@ -251,11 +258,7 @@ | |||
98 | 251 | return nux::eMouseEventSolved; | 258 | return nux::eMouseEventSolved; |
99 | 252 | } | 259 | } |
100 | 253 | 260 | ||
106 | 254 | // PostProcessEvent2 must always have its last parameter set to 0 | 261 | |
102 | 255 | // because the m_BackgroundArea is the real physical limit of the window. | ||
103 | 256 | // So the previous test about IsPointInside do not prevail over m_BackgroundArea | ||
104 | 257 | // testing the event by itself. | ||
105 | 258 | //ret = PostProcessEvent2 (ievent, ret, 0); | ||
107 | 259 | return ret; | 262 | return ret; |
108 | 260 | } | 263 | } |
109 | 261 | 264 | ||
110 | @@ -440,6 +443,7 @@ | |||
111 | 440 | _mouse_down = false; | 443 | _mouse_down = false; |
112 | 441 | if (IsVisible ()) | 444 | if (IsVisible ()) |
113 | 442 | { | 445 | { |
114 | 446 | CancelItemsPrelightStatus (); | ||
115 | 443 | CaptureMouseDownAnyWhereElse (false); | 447 | CaptureMouseDownAnyWhereElse (false); |
116 | 444 | ForceStopFocus (1, 1); | 448 | ForceStopFocus (1, 1); |
117 | 445 | UnGrabPointer (); | 449 | UnGrabPointer (); |
118 | @@ -448,11 +452,44 @@ | |||
119 | 448 | } | 452 | } |
120 | 449 | } | 453 | } |
121 | 450 | 454 | ||
123 | 451 | void QuicklistView::RecvItemMouseRelease (QuicklistMenuItem* item) | 455 | void QuicklistView::CheckAndEmitItemSignal (int x, int y) |
124 | 456 | { | ||
125 | 457 | nux::Geometry geo; | ||
126 | 458 | std::list<QuicklistMenuItem*>::iterator it; | ||
127 | 459 | for (it = _item_list.begin(); it != _item_list.end(); it++) | ||
128 | 460 | { | ||
129 | 461 | geo = (*it)->GetGeometry (); | ||
130 | 462 | geo.width = _item_layout->GetBaseWidth (); | ||
131 | 463 | |||
132 | 464 | if (geo.IsPointInside (x, y)) | ||
133 | 465 | { | ||
134 | 466 | // An action is performed: send the signal back to the application | ||
135 | 467 | } | ||
136 | 468 | } | ||
137 | 469 | |||
138 | 470 | for (it = _default_item_list.begin(); it != _default_item_list.end(); it++) | ||
139 | 471 | { | ||
140 | 472 | geo = (*it)->GetGeometry (); | ||
141 | 473 | geo.width = _default_item_layout->GetBaseWidth (); | ||
142 | 474 | |||
143 | 475 | if (geo.IsPointInside (x, y)) | ||
144 | 476 | { | ||
145 | 477 | // An action is performed: send the signal back to the application | ||
146 | 478 | } | ||
147 | 479 | } | ||
148 | 480 | } | ||
149 | 481 | |||
150 | 482 | void QuicklistView::RecvItemMouseRelease (QuicklistMenuItem* item, int x, int y) | ||
151 | 452 | { | 483 | { |
152 | 453 | _mouse_down = false; | 484 | _mouse_down = false; |
153 | 485 | |||
154 | 486 | |||
155 | 454 | if (IsVisible ()) | 487 | if (IsVisible ()) |
156 | 455 | { | 488 | { |
157 | 489 | // Check if the mouse was released over an item and emit the signal | ||
158 | 490 | CheckAndEmitItemSignal (x + item->GetBaseX (), y + item->GetBaseY ()); | ||
159 | 491 | |||
160 | 492 | CancelItemsPrelightStatus (); | ||
161 | 456 | CaptureMouseDownAnyWhereElse (false); | 493 | CaptureMouseDownAnyWhereElse (false); |
162 | 457 | ForceStopFocus (1, 1); | 494 | ForceStopFocus (1, 1); |
163 | 458 | UnGrabPointer (); | 495 | UnGrabPointer (); |
164 | @@ -461,6 +498,57 @@ | |||
165 | 461 | } | 498 | } |
166 | 462 | } | 499 | } |
167 | 463 | 500 | ||
168 | 501 | void QuicklistView::CancelItemsPrelightStatus () | ||
169 | 502 | { | ||
170 | 503 | std::list<QuicklistMenuItem*>::iterator it; | ||
171 | 504 | for (it = _item_list.begin(); it != _item_list.end(); it++) | ||
172 | 505 | { | ||
173 | 506 | (*it)->_prelight = false; | ||
174 | 507 | } | ||
175 | 508 | |||
176 | 509 | for (it = _default_item_list.begin(); it != _default_item_list.end(); it++) | ||
177 | 510 | { | ||
178 | 511 | (*it)->_prelight = false; | ||
179 | 512 | } | ||
180 | 513 | } | ||
181 | 514 | |||
182 | 515 | void QuicklistView::RecvItemMouseDrag (QuicklistMenuItem* item, int x, int y) | ||
183 | 516 | { | ||
184 | 517 | nux::Geometry geo; | ||
185 | 518 | std::list<QuicklistMenuItem*>::iterator it; | ||
186 | 519 | for (it = _item_list.begin(); it != _item_list.end(); it++) | ||
187 | 520 | { | ||
188 | 521 | geo = (*it)->GetGeometry (); | ||
189 | 522 | geo.width = _item_layout->GetBaseWidth (); | ||
190 | 523 | |||
191 | 524 | if (geo.IsPointInside (x + item->GetBaseX (), y + item->GetBaseY ())) | ||
192 | 525 | { | ||
193 | 526 | (*it)->_prelight = true; | ||
194 | 527 | } | ||
195 | 528 | else | ||
196 | 529 | { | ||
197 | 530 | (*it)->_prelight = false; | ||
198 | 531 | } | ||
199 | 532 | } | ||
200 | 533 | |||
201 | 534 | for (it = _default_item_list.begin(); it != _default_item_list.end(); it++) | ||
202 | 535 | { | ||
203 | 536 | geo = (*it)->GetGeometry (); | ||
204 | 537 | geo.width = _default_item_layout->GetBaseWidth (); | ||
205 | 538 | |||
206 | 539 | if (geo.IsPointInside (x + item->GetBaseX (), y + item->GetBaseY ())) | ||
207 | 540 | { | ||
208 | 541 | (*it)->_prelight = true; | ||
209 | 542 | } | ||
210 | 543 | else | ||
211 | 544 | { | ||
212 | 545 | (*it)->_prelight = false; | ||
213 | 546 | } | ||
214 | 547 | } | ||
215 | 548 | |||
216 | 549 | NeedRedraw (); | ||
217 | 550 | } | ||
218 | 551 | |||
219 | 464 | void QuicklistView::RecvItemMouseEnter (QuicklistMenuItem* item) | 552 | void QuicklistView::RecvItemMouseEnter (QuicklistMenuItem* item) |
220 | 465 | { | 553 | { |
221 | 466 | NeedRedraw (); | 554 | NeedRedraw (); |
222 | @@ -485,13 +573,15 @@ | |||
223 | 485 | 573 | ||
224 | 486 | void QuicklistView::RecvMouseUp (int x, int y, unsigned long button_flags, unsigned long key_flags) | 574 | void QuicklistView::RecvMouseUp (int x, int y, unsigned long button_flags, unsigned long key_flags) |
225 | 487 | { | 575 | { |
227 | 488 | 576 | // Check if the mouse was released over an item and emit the signal | |
228 | 577 | CheckAndEmitItemSignal (x, y); | ||
229 | 489 | } | 578 | } |
230 | 490 | 579 | ||
231 | 491 | void QuicklistView::RecvMouseClick (int x, int y, unsigned long button_flags, unsigned long key_flags) | 580 | void QuicklistView::RecvMouseClick (int x, int y, unsigned long button_flags, unsigned long key_flags) |
232 | 492 | { | 581 | { |
233 | 493 | if (IsVisible ()) | 582 | if (IsVisible ()) |
234 | 494 | { | 583 | { |
235 | 584 | CancelItemsPrelightStatus (); | ||
236 | 495 | CaptureMouseDownAnyWhereElse (false); | 585 | CaptureMouseDownAnyWhereElse (false); |
237 | 496 | ForceStopFocus (1, 1); | 586 | ForceStopFocus (1, 1); |
238 | 497 | UnGrabPointer (); | 587 | UnGrabPointer (); |
239 | @@ -514,6 +604,7 @@ | |||
240 | 514 | { | 604 | { |
241 | 515 | if (IsVisible ()) | 605 | if (IsVisible ()) |
242 | 516 | { | 606 | { |
243 | 607 | CancelItemsPrelightStatus (); | ||
244 | 517 | CaptureMouseDownAnyWhereElse (false); | 608 | CaptureMouseDownAnyWhereElse (false); |
245 | 518 | ForceStopFocus (1, 1); | 609 | ForceStopFocus (1, 1); |
246 | 519 | UnGrabPointer (); | 610 | UnGrabPointer (); |
247 | @@ -544,6 +635,7 @@ | |||
248 | 544 | item->sigMouseReleased.connect (sigc::mem_fun (this, &QuicklistView::RecvItemMouseRelease)); | 635 | item->sigMouseReleased.connect (sigc::mem_fun (this, &QuicklistView::RecvItemMouseRelease)); |
249 | 545 | item->sigMouseEnter.connect (sigc::mem_fun (this, &QuicklistView::RecvItemMouseEnter)); | 636 | item->sigMouseEnter.connect (sigc::mem_fun (this, &QuicklistView::RecvItemMouseEnter)); |
250 | 546 | item->sigMouseLeave.connect (sigc::mem_fun (this, &QuicklistView::RecvItemMouseLeave)); | 637 | item->sigMouseLeave.connect (sigc::mem_fun (this, &QuicklistView::RecvItemMouseLeave)); |
251 | 638 | item->sigMouseDrag.connect (sigc::mem_fun (this, &QuicklistView::RecvItemMouseDrag)); | ||
252 | 547 | 639 | ||
253 | 548 | _item_layout->AddView(item, 1, nux::eCenter, nux::eFull); | 640 | _item_layout->AddView(item, 1, nux::eCenter, nux::eFull); |
254 | 549 | _item_list.push_back (item); | 641 | _item_list.push_back (item); |
255 | 550 | 642 | ||
256 | === modified file 'src/QuicklistView.h' | |||
257 | --- src/QuicklistView.h 2010-11-24 00:03:08 +0000 | |||
258 | +++ src/QuicklistView.h 2010-11-30 05:21:18 +0000 | |||
259 | @@ -81,7 +81,7 @@ | |||
260 | 81 | 81 | ||
261 | 82 | int GetNumItems (); | 82 | int GetNumItems (); |
262 | 83 | QuicklistMenuItem* GetNthItems (int index); | 83 | QuicklistMenuItem* GetNthItems (int index); |
264 | 84 | QuicklistMenuItemType GetNthType (int index); | 84 | QuicklistMenuItemType GetNthType (int index); |
265 | 85 | std::list<QuicklistMenuItem*> GetChildren (); | 85 | std::list<QuicklistMenuItem*> GetChildren (); |
266 | 86 | 86 | ||
267 | 87 | void TestMenuItems (DbusmenuMenuitem* root); | 87 | void TestMenuItems (DbusmenuMenuitem* root); |
268 | @@ -90,10 +90,11 @@ | |||
269 | 90 | void RecvCairoTextChanged (QuicklistMenuItem* item); | 90 | void RecvCairoTextChanged (QuicklistMenuItem* item); |
270 | 91 | void RecvCairoTextColorChanged (QuicklistMenuItem* item); | 91 | void RecvCairoTextColorChanged (QuicklistMenuItem* item); |
271 | 92 | void RecvItemMouseClick (QuicklistMenuItem* item); | 92 | void RecvItemMouseClick (QuicklistMenuItem* item); |
273 | 93 | void RecvItemMouseRelease (QuicklistMenuItem* item); | 93 | void RecvItemMouseRelease (QuicklistMenuItem* item, int x, int y); |
274 | 94 | void RecvItemMouseEnter (QuicklistMenuItem* item); | 94 | void RecvItemMouseEnter (QuicklistMenuItem* item); |
275 | 95 | void RecvItemMouseLeave (QuicklistMenuItem* item); | 95 | void RecvItemMouseLeave (QuicklistMenuItem* item); |
277 | 96 | 96 | void RecvItemMouseDrag (QuicklistMenuItem* item, int x, int y); | |
278 | 97 | |||
279 | 97 | void RecvMouseDown (int x, int y, unsigned long button_flags, unsigned long key_flags); | 98 | void RecvMouseDown (int x, int y, unsigned long button_flags, unsigned long key_flags); |
280 | 98 | void RecvMouseUp (int x, int y, unsigned long button_flags, unsigned long key_flags); | 99 | void RecvMouseUp (int x, int y, unsigned long button_flags, unsigned long key_flags); |
281 | 99 | void RecvMouseClick (int x, int y, unsigned long button_flags, unsigned long key_flags); | 100 | void RecvMouseClick (int x, int y, unsigned long button_flags, unsigned long key_flags); |
282 | @@ -114,6 +115,11 @@ | |||
283 | 114 | //! A convenience function to fill in the default quicklist with some random items. | 115 | //! A convenience function to fill in the default quicklist with some random items. |
284 | 115 | void FillInDefaultItems (); | 116 | void FillInDefaultItems (); |
285 | 116 | 117 | ||
286 | 118 | void CancelItemsPrelightStatus (); | ||
287 | 119 | |||
288 | 120 | //! Check the mouse up event sent by an item. Detect the item where the mous is and emit the appropriate signal. | ||
289 | 121 | void CheckAndEmitItemSignal (int x, int y); | ||
290 | 122 | |||
291 | 117 | //nux::CairoGraphics* _cairo_graphics; | 123 | //nux::CairoGraphics* _cairo_graphics; |
292 | 118 | int _anchorX; | 124 | int _anchorX; |
293 | 119 | int _anchorY; | 125 | int _anchorY; |
+1