OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #include "xfa/fwl/core/ifwl_spinbutton.h" | 7 #include "xfa/fwl/core/ifwl_spinbutton.h" |
8 | 8 |
9 #include "third_party/base/ptr_util.h" | 9 #include "third_party/base/ptr_util.h" |
10 #include "xfa/fwl/core/cfwl_message.h" | 10 #include "xfa/fwl/core/cfwl_message.h" |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 IFWL_ThemeProvider* pTheme = GetAvailableTheme(); | 103 IFWL_ThemeProvider* pTheme = GetAvailableTheme(); |
104 if (HasBorder()) | 104 if (HasBorder()) |
105 DrawBorder(pGraphics, CFWL_Part::Border, pTheme, pMatrix); | 105 DrawBorder(pGraphics, CFWL_Part::Border, pTheme, pMatrix); |
106 if (HasEdge()) | 106 if (HasEdge()) |
107 DrawEdge(pGraphics, CFWL_Part::Edge, pTheme, pMatrix); | 107 DrawEdge(pGraphics, CFWL_Part::Edge, pTheme, pMatrix); |
108 | 108 |
109 DrawUpButton(pGraphics, pTheme, pMatrix); | 109 DrawUpButton(pGraphics, pTheme, pMatrix); |
110 DrawDownButton(pGraphics, pTheme, pMatrix); | 110 DrawDownButton(pGraphics, pTheme, pMatrix); |
111 } | 111 } |
112 | 112 |
113 FWL_Error IFWL_SpinButton::EnableButton(bool bEnable, bool bUp) { | 113 void IFWL_SpinButton::EnableButton(bool bEnable, bool bUp) { |
114 if (bUp) | 114 if (bUp) |
115 m_dwUpState = bEnable ? CFWL_PartState_Normal : CFWL_PartState_Disabled; | 115 m_dwUpState = bEnable ? CFWL_PartState_Normal : CFWL_PartState_Disabled; |
116 else | 116 else |
117 m_dwDnState = bEnable ? CFWL_PartState_Normal : CFWL_PartState_Disabled; | 117 m_dwDnState = bEnable ? CFWL_PartState_Normal : CFWL_PartState_Disabled; |
118 | |
119 return FWL_Error::Succeeded; | |
120 } | 118 } |
121 | 119 |
122 bool IFWL_SpinButton::IsButtonEnable(bool bUp) { | 120 bool IFWL_SpinButton::IsButtonEnabled(bool bUp) { |
123 if (bUp) | 121 if (bUp) |
124 return (m_dwUpState != CFWL_PartState_Disabled); | 122 return (m_dwUpState != CFWL_PartState_Disabled); |
125 return (m_dwDnState != CFWL_PartState_Disabled); | 123 return (m_dwDnState != CFWL_PartState_Disabled); |
126 } | 124 } |
127 | 125 |
128 void IFWL_SpinButton::DrawUpButton(CFX_Graphics* pGraphics, | 126 void IFWL_SpinButton::DrawUpButton(CFX_Graphics* pGraphics, |
129 IFWL_ThemeProvider* pTheme, | 127 IFWL_ThemeProvider* pTheme, |
130 const CFX_Matrix* pMatrix) { | 128 const CFX_Matrix* pMatrix) { |
131 CFWL_ThemeBackground params; | 129 CFWL_ThemeBackground params; |
132 params.m_pWidget = this; | 130 params.m_pWidget = this; |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
216 } | 214 } |
217 | 215 |
218 void IFWL_SpinButton::OnLButtonDown(CFWL_MsgMouse* pMsg) { | 216 void IFWL_SpinButton::OnLButtonDown(CFWL_MsgMouse* pMsg) { |
219 m_bLButtonDwn = true; | 217 m_bLButtonDwn = true; |
220 SetGrab(true); | 218 SetGrab(true); |
221 SetFocus(true); | 219 SetFocus(true); |
222 if (!m_pProperties->m_pDataProvider) | 220 if (!m_pProperties->m_pDataProvider) |
223 return; | 221 return; |
224 | 222 |
225 bool bUpPress = | 223 bool bUpPress = |
226 (m_rtUpButton.Contains(pMsg->m_fx, pMsg->m_fy) && IsButtonEnable(true)); | 224 (m_rtUpButton.Contains(pMsg->m_fx, pMsg->m_fy) && IsButtonEnabled(true)); |
227 bool bDnPress = | 225 bool bDnPress = |
228 (m_rtDnButton.Contains(pMsg->m_fx, pMsg->m_fy) && IsButtonEnable(false)); | 226 (m_rtDnButton.Contains(pMsg->m_fx, pMsg->m_fy) && IsButtonEnabled(false)); |
229 if (!bUpPress && !bDnPress) | 227 if (!bUpPress && !bDnPress) |
230 return; | 228 return; |
231 if (bUpPress) { | 229 if (bUpPress) { |
232 m_iButtonIndex = 0; | 230 m_iButtonIndex = 0; |
233 m_dwUpState = CFWL_PartState_Pressed; | 231 m_dwUpState = CFWL_PartState_Pressed; |
234 } | 232 } |
235 if (bDnPress) { | 233 if (bDnPress) { |
236 m_iButtonIndex = 1; | 234 m_iButtonIndex = 1; |
237 m_dwDnState = CFWL_PartState_Pressed; | 235 m_dwDnState = CFWL_PartState_Pressed; |
238 } | 236 } |
(...skipping 11 matching lines...) Expand all Loading... |
250 | 248 |
251 m_bLButtonDwn = false; | 249 m_bLButtonDwn = false; |
252 SetGrab(false); | 250 SetGrab(false); |
253 SetFocus(false); | 251 SetFocus(false); |
254 if (m_pTimerInfo) { | 252 if (m_pTimerInfo) { |
255 m_pTimerInfo->StopTimer(); | 253 m_pTimerInfo->StopTimer(); |
256 m_pTimerInfo = nullptr; | 254 m_pTimerInfo = nullptr; |
257 } | 255 } |
258 bool bRepaint = false; | 256 bool bRepaint = false; |
259 CFX_RectF rtInvalidate; | 257 CFX_RectF rtInvalidate; |
260 if (m_dwUpState == CFWL_PartState_Pressed && IsButtonEnable(true)) { | 258 if (m_dwUpState == CFWL_PartState_Pressed && IsButtonEnabled(true)) { |
261 m_dwUpState = CFWL_PartState_Normal; | 259 m_dwUpState = CFWL_PartState_Normal; |
262 bRepaint = true; | 260 bRepaint = true; |
263 rtInvalidate = m_rtUpButton; | 261 rtInvalidate = m_rtUpButton; |
264 } else if (m_dwDnState == CFWL_PartState_Pressed && IsButtonEnable(false)) { | 262 } else if (m_dwDnState == CFWL_PartState_Pressed && IsButtonEnabled(false)) { |
265 m_dwDnState = CFWL_PartState_Normal; | 263 m_dwDnState = CFWL_PartState_Normal; |
266 bRepaint = true; | 264 bRepaint = true; |
267 rtInvalidate = m_rtDnButton; | 265 rtInvalidate = m_rtDnButton; |
268 } | 266 } |
269 if (bRepaint) | 267 if (bRepaint) |
270 Repaint(&rtInvalidate); | 268 Repaint(&rtInvalidate); |
271 } | 269 } |
272 | 270 |
273 void IFWL_SpinButton::OnMouseMove(CFWL_MsgMouse* pMsg) { | 271 void IFWL_SpinButton::OnMouseMove(CFWL_MsgMouse* pMsg) { |
274 if (!m_pProperties->m_pDataProvider) | 272 if (!m_pProperties->m_pDataProvider) |
275 return; | 273 return; |
276 if (m_bLButtonDwn) | 274 if (m_bLButtonDwn) |
277 return; | 275 return; |
278 | 276 |
279 bool bRepaint = false; | 277 bool bRepaint = false; |
280 CFX_RectF rtInvlidate; | 278 CFX_RectF rtInvlidate; |
281 rtInvlidate.Reset(); | 279 rtInvlidate.Reset(); |
282 if (m_rtUpButton.Contains(pMsg->m_fx, pMsg->m_fy)) { | 280 if (m_rtUpButton.Contains(pMsg->m_fx, pMsg->m_fy)) { |
283 if (IsButtonEnable(true)) { | 281 if (IsButtonEnabled(true)) { |
284 if (m_dwUpState == CFWL_PartState_Hovered) { | 282 if (m_dwUpState == CFWL_PartState_Hovered) { |
285 m_dwUpState = CFWL_PartState_Hovered; | 283 m_dwUpState = CFWL_PartState_Hovered; |
286 bRepaint = true; | 284 bRepaint = true; |
287 rtInvlidate = m_rtUpButton; | 285 rtInvlidate = m_rtUpButton; |
288 } | 286 } |
289 if (m_dwDnState != CFWL_PartState_Normal && IsButtonEnable(false)) { | 287 if (m_dwDnState != CFWL_PartState_Normal && IsButtonEnabled(false)) { |
290 m_dwDnState = CFWL_PartState_Normal; | 288 m_dwDnState = CFWL_PartState_Normal; |
291 if (bRepaint) | 289 if (bRepaint) |
292 rtInvlidate.Union(m_rtDnButton); | 290 rtInvlidate.Union(m_rtDnButton); |
293 else | 291 else |
294 rtInvlidate = m_rtDnButton; | 292 rtInvlidate = m_rtDnButton; |
295 | 293 |
296 bRepaint = true; | 294 bRepaint = true; |
297 } | 295 } |
298 } | 296 } |
299 if (!IsButtonEnable(false)) | 297 if (!IsButtonEnabled(false)) |
300 EnableButton(false, false); | 298 EnableButton(false, false); |
301 | 299 |
302 } else if (m_rtDnButton.Contains(pMsg->m_fx, pMsg->m_fy)) { | 300 } else if (m_rtDnButton.Contains(pMsg->m_fx, pMsg->m_fy)) { |
303 if (IsButtonEnable(false)) { | 301 if (IsButtonEnabled(false)) { |
304 if (m_dwDnState != CFWL_PartState_Hovered) { | 302 if (m_dwDnState != CFWL_PartState_Hovered) { |
305 m_dwDnState = CFWL_PartState_Hovered; | 303 m_dwDnState = CFWL_PartState_Hovered; |
306 bRepaint = true; | 304 bRepaint = true; |
307 rtInvlidate = m_rtDnButton; | 305 rtInvlidate = m_rtDnButton; |
308 } | 306 } |
309 if (m_dwUpState != CFWL_PartState_Normal && IsButtonEnable(true)) { | 307 if (m_dwUpState != CFWL_PartState_Normal && IsButtonEnabled(true)) { |
310 m_dwUpState = CFWL_PartState_Normal; | 308 m_dwUpState = CFWL_PartState_Normal; |
311 if (bRepaint) | 309 if (bRepaint) |
312 rtInvlidate.Union(m_rtUpButton); | 310 rtInvlidate.Union(m_rtUpButton); |
313 else | 311 else |
314 rtInvlidate = m_rtUpButton; | 312 rtInvlidate = m_rtUpButton; |
315 bRepaint = true; | 313 bRepaint = true; |
316 } | 314 } |
317 } | 315 } |
318 } else if (m_dwUpState != CFWL_PartState_Normal || | 316 } else if (m_dwUpState != CFWL_PartState_Normal || |
319 m_dwDnState != CFWL_PartState_Normal) { | 317 m_dwDnState != CFWL_PartState_Normal) { |
(...skipping 12 matching lines...) Expand all Loading... |
332 bRepaint = true; | 330 bRepaint = true; |
333 } | 331 } |
334 } | 332 } |
335 if (bRepaint) | 333 if (bRepaint) |
336 Repaint(&rtInvlidate); | 334 Repaint(&rtInvlidate); |
337 } | 335 } |
338 | 336 |
339 void IFWL_SpinButton::OnMouseLeave(CFWL_MsgMouse* pMsg) { | 337 void IFWL_SpinButton::OnMouseLeave(CFWL_MsgMouse* pMsg) { |
340 if (!pMsg) | 338 if (!pMsg) |
341 return; | 339 return; |
342 if (m_dwUpState != CFWL_PartState_Normal && IsButtonEnable(true)) | 340 if (m_dwUpState != CFWL_PartState_Normal && IsButtonEnabled(true)) |
343 m_dwUpState = CFWL_PartState_Normal; | 341 m_dwUpState = CFWL_PartState_Normal; |
344 if (m_dwDnState != CFWL_PartState_Normal && IsButtonEnable(false)) | 342 if (m_dwDnState != CFWL_PartState_Normal && IsButtonEnabled(false)) |
345 m_dwDnState = CFWL_PartState_Normal; | 343 m_dwDnState = CFWL_PartState_Normal; |
346 | 344 |
347 Repaint(&m_rtClient); | 345 Repaint(&m_rtClient); |
348 } | 346 } |
349 | 347 |
350 void IFWL_SpinButton::OnKeyDown(CFWL_MsgKey* pMsg) { | 348 void IFWL_SpinButton::OnKeyDown(CFWL_MsgKey* pMsg) { |
351 if (!m_pProperties->m_pDataProvider) | 349 if (!m_pProperties->m_pDataProvider) |
352 return; | 350 return; |
353 | 351 |
354 bool bUp = | 352 bool bUp = |
355 pMsg->m_dwKeyCode == FWL_VKEY_Up || pMsg->m_dwKeyCode == FWL_VKEY_Left; | 353 pMsg->m_dwKeyCode == FWL_VKEY_Up || pMsg->m_dwKeyCode == FWL_VKEY_Left; |
356 bool bDown = | 354 bool bDown = |
357 pMsg->m_dwKeyCode == FWL_VKEY_Down || pMsg->m_dwKeyCode == FWL_VKEY_Right; | 355 pMsg->m_dwKeyCode == FWL_VKEY_Down || pMsg->m_dwKeyCode == FWL_VKEY_Right; |
358 if (!bUp && !bDown) | 356 if (!bUp && !bDown) |
359 return; | 357 return; |
360 | 358 |
361 bool bUpEnable = IsButtonEnable(true); | 359 bool bUpEnable = IsButtonEnabled(true); |
362 bool bDownEnable = IsButtonEnable(false); | 360 bool bDownEnable = IsButtonEnabled(false); |
363 if (!bUpEnable && !bDownEnable) | 361 if (!bUpEnable && !bDownEnable) |
364 return; | 362 return; |
365 | 363 |
366 CFWL_EvtSpbClick wmPosChanged; | 364 CFWL_EvtSpbClick wmPosChanged; |
367 wmPosChanged.m_pSrcTarget = this; | 365 wmPosChanged.m_pSrcTarget = this; |
368 wmPosChanged.m_bUp = bUpEnable; | 366 wmPosChanged.m_bUp = bUpEnable; |
369 DispatchEvent(&wmPosChanged); | 367 DispatchEvent(&wmPosChanged); |
370 Repaint(bUpEnable ? &m_rtUpButton : &m_rtDnButton); | 368 Repaint(bUpEnable ? &m_rtUpButton : &m_rtDnButton); |
371 } | 369 } |
372 | 370 |
373 IFWL_SpinButton::Timer::Timer(IFWL_SpinButton* pToolTip) | 371 IFWL_SpinButton::Timer::Timer(IFWL_SpinButton* pToolTip) |
374 : IFWL_Timer(pToolTip) {} | 372 : IFWL_Timer(pToolTip) {} |
375 | 373 |
376 void IFWL_SpinButton::Timer::Run(IFWL_TimerInfo* pTimerInfo) { | 374 void IFWL_SpinButton::Timer::Run(IFWL_TimerInfo* pTimerInfo) { |
377 IFWL_SpinButton* pButton = static_cast<IFWL_SpinButton*>(m_pWidget); | 375 IFWL_SpinButton* pButton = static_cast<IFWL_SpinButton*>(m_pWidget); |
378 | 376 |
379 if (!pButton->m_pTimerInfo) | 377 if (!pButton->m_pTimerInfo) |
380 return; | 378 return; |
381 | 379 |
382 CFWL_EvtSpbClick wmPosChanged; | 380 CFWL_EvtSpbClick wmPosChanged; |
383 wmPosChanged.m_pSrcTarget = pButton; | 381 wmPosChanged.m_pSrcTarget = pButton; |
384 wmPosChanged.m_bUp = pButton->m_iButtonIndex == 0; | 382 wmPosChanged.m_bUp = pButton->m_iButtonIndex == 0; |
385 pButton->DispatchEvent(&wmPosChanged); | 383 pButton->DispatchEvent(&wmPosChanged); |
386 } | 384 } |
OLD | NEW |