@@ -140,10 +140,36 @@ impl super::EventRouter for MouseAreaState {
140
140
MouseState :: Up => {
141
141
if let Some ( ( last_pos, drag) ) =
142
142
self . lastdown . remove ( & ( device_id, button as u64 ) )
143
+ && area. contains ( pos)
143
144
{
144
- if area. contains ( pos) {
145
- return Ok ( (
146
- self ,
145
+ return Ok ( (
146
+ self ,
147
+ SmallVec :: from_iter ( [
148
+ if drag {
149
+ let diff = pos - last_pos;
150
+ MouseAreaEvent :: OnDrag ( button, diff / dpi)
151
+ } else {
152
+ MouseAreaEvent :: OnClick ( button, pos / dpi)
153
+ } ,
154
+ hover,
155
+ ] ) ,
156
+ ) ) ;
157
+ }
158
+ }
159
+ MouseState :: DblClick => {
160
+ if let Some ( ( last_pos, drag) ) =
161
+ self . lastdown . remove ( & ( device_id, button as u64 ) )
162
+ && area. contains ( pos)
163
+ {
164
+ return Ok ( (
165
+ self ,
166
+ if drag {
167
+ SmallVec :: from_iter ( [
168
+ MouseAreaEvent :: OnClick ( button, pos / dpi) ,
169
+ MouseAreaEvent :: OnDblClick ( button, pos / dpi) ,
170
+ hover,
171
+ ] )
172
+ } else {
147
173
SmallVec :: from_iter ( [
148
174
if drag {
149
175
let diff = pos - last_pos;
@@ -152,37 +178,9 @@ impl super::EventRouter for MouseAreaState {
152
178
MouseAreaEvent :: OnClick ( button, pos / dpi)
153
179
} ,
154
180
hover,
155
- ] ) ,
156
- ) ) ;
157
- }
158
- }
159
- }
160
- MouseState :: DblClick => {
161
- if let Some ( ( last_pos, drag) ) =
162
- self . lastdown . remove ( & ( device_id, button as u64 ) )
163
- {
164
- if area. contains ( pos) {
165
- return Ok ( (
166
- self ,
167
- if drag {
168
- SmallVec :: from_iter ( [
169
- MouseAreaEvent :: OnClick ( button, pos / dpi) ,
170
- MouseAreaEvent :: OnDblClick ( button, pos / dpi) ,
171
- hover,
172
- ] )
173
- } else {
174
- SmallVec :: from_iter ( [
175
- if drag {
176
- let diff = pos - last_pos;
177
- MouseAreaEvent :: OnDrag ( button, diff / dpi)
178
- } else {
179
- MouseAreaEvent :: OnClick ( button, pos / dpi)
180
- } ,
181
- hover,
182
- ] )
183
- } ,
184
- ) ) ;
185
- }
181
+ ] )
182
+ } ,
183
+ ) ) ;
186
184
}
187
185
}
188
186
}
@@ -222,21 +220,21 @@ impl super::EventRouter for MouseAreaState {
222
220
}
223
221
crate :: input:: TouchState :: End => {
224
222
let hover = Self :: hover_event ( 0 , self . hover ) ;
225
- if let Some ( ( last_pos, drag) ) = self . lastdown . remove ( & ( device_id, index) ) {
226
- if area. contains ( pos. xy ( ) ) {
227
- let diff = pos . xy ( ) - last_pos ;
228
- return Ok ( (
229
- self ,
230
- SmallVec :: from_iter ( [
231
- if drag {
232
- MouseAreaEvent :: OnDrag ( MouseButton :: Left , diff / dpi )
233
- } else {
234
- MouseAreaEvent :: OnClick ( MouseButton :: Left , pos . xy ( ) / dpi )
235
- } ,
236
- hover ,
237
- ] ) ,
238
- ) ) ;
239
- }
223
+ if let Some ( ( last_pos, drag) ) = self . lastdown . remove ( & ( device_id, index) )
224
+ && area. contains ( pos. xy ( ) )
225
+ {
226
+ let diff = pos . xy ( ) - last_pos ;
227
+ return Ok ( (
228
+ self ,
229
+ SmallVec :: from_iter ( [
230
+ if drag {
231
+ MouseAreaEvent :: OnDrag ( MouseButton :: Left , diff / dpi )
232
+ } else {
233
+ MouseAreaEvent :: OnClick ( MouseButton :: Left , pos . xy ( ) / dpi )
234
+ } ,
235
+ hover ,
236
+ ] ) ,
237
+ ) ) ;
240
238
}
241
239
}
242
240
} ,
0 commit comments