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/cfwl_checkbox.h" | 7 #include "xfa/fwl/cfwl_checkbox.h" |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <memory> | 10 #include <memory> |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
113 case 1: | 113 case 1: |
114 m_pProperties->m_dwStates |= FWL_STATE_CKB_Checked; | 114 m_pProperties->m_dwStates |= FWL_STATE_CKB_Checked; |
115 break; | 115 break; |
116 case 2: | 116 case 2: |
117 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_3State) | 117 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_3State) |
118 m_pProperties->m_dwStates |= FWL_STATE_CKB_Neutral; | 118 m_pProperties->m_dwStates |= FWL_STATE_CKB_Neutral; |
119 break; | 119 break; |
120 default: | 120 default: |
121 break; | 121 break; |
122 } | 122 } |
123 Repaint(&m_rtClient); | 123 RepaintRect(m_rtClient); |
124 } | 124 } |
125 | 125 |
126 void CFWL_CheckBox::Layout() { | 126 void CFWL_CheckBox::Layout() { |
127 m_pProperties->m_rtWidget.width = | 127 m_pProperties->m_rtWidget.width = |
128 FXSYS_round(m_pProperties->m_rtWidget.width); | 128 FXSYS_round(m_pProperties->m_rtWidget.width); |
129 m_pProperties->m_rtWidget.height = | 129 m_pProperties->m_rtWidget.height = |
130 FXSYS_round(m_pProperties->m_rtWidget.height); | 130 FXSYS_round(m_pProperties->m_rtWidget.height); |
131 GetClientRect(m_rtClient); | 131 m_rtClient = GetClientRect(); |
132 | 132 |
133 FX_FLOAT fBoxTop = m_rtClient.top; | 133 FX_FLOAT fBoxTop = m_rtClient.top; |
134 FX_FLOAT fClientBottom = m_rtClient.bottom(); | 134 FX_FLOAT fClientBottom = m_rtClient.bottom(); |
135 | 135 |
136 switch (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_VLayoutMask) { | 136 switch (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_VLayoutMask) { |
137 case FWL_STYLEEXT_CKB_Top: | 137 case FWL_STYLEEXT_CKB_Top: |
138 break; | 138 break; |
139 case FWL_STYLEEXT_CKB_Bottom: { | 139 case FWL_STYLEEXT_CKB_Bottom: { |
140 fBoxTop = fClientBottom - m_fBoxHeight; | 140 fBoxTop = fClientBottom - m_fBoxHeight; |
141 break; | 141 break; |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
280 pWidgetMgr->GetSameGroupRadioButton(this, radioarr); | 280 pWidgetMgr->GetSameGroupRadioButton(this, radioarr); |
281 CFWL_CheckBox* pCheckBox = nullptr; | 281 CFWL_CheckBox* pCheckBox = nullptr; |
282 int32_t iCount = radioarr.GetSize(); | 282 int32_t iCount = radioarr.GetSize(); |
283 for (int32_t i = 0; i < iCount; i++) { | 283 for (int32_t i = 0; i < iCount; i++) { |
284 pCheckBox = static_cast<CFWL_CheckBox*>(radioarr[i]); | 284 pCheckBox = static_cast<CFWL_CheckBox*>(radioarr[i]); |
285 if (pCheckBox != this && | 285 if (pCheckBox != this && |
286 pCheckBox->GetStates() & FWL_STATE_CKB_Checked) { | 286 pCheckBox->GetStates() & FWL_STATE_CKB_Checked) { |
287 pCheckBox->SetCheckState(0); | 287 pCheckBox->SetCheckState(0); |
288 CFX_RectF rt = pCheckBox->GetWidgetRect(); | 288 CFX_RectF rt = pCheckBox->GetWidgetRect(); |
289 rt.left = rt.top = 0; | 289 rt.left = rt.top = 0; |
290 m_pWidgetMgr->RepaintWidget(pCheckBox, &rt); | 290 m_pWidgetMgr->RepaintWidget(pCheckBox, rt); |
291 break; | 291 break; |
292 } | 292 } |
293 } | 293 } |
294 } | 294 } |
295 m_pProperties->m_dwStates |= FWL_STATE_CKB_Checked; | 295 m_pProperties->m_dwStates |= FWL_STATE_CKB_Checked; |
296 } | 296 } |
297 } else { | 297 } else { |
298 if ((m_pProperties->m_dwStates & FWL_STATE_CKB_CheckMask) == | 298 if ((m_pProperties->m_dwStates & FWL_STATE_CKB_CheckMask) == |
299 FWL_STATE_CKB_Neutral) { | 299 FWL_STATE_CKB_Neutral) { |
300 m_pProperties->m_dwStates &= ~FWL_STATE_CKB_CheckMask; | 300 m_pProperties->m_dwStates &= ~FWL_STATE_CKB_CheckMask; |
301 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_3State) | 301 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_3State) |
302 m_pProperties->m_dwStates |= FWL_STATE_CKB_Checked; | 302 m_pProperties->m_dwStates |= FWL_STATE_CKB_Checked; |
303 } else if ((m_pProperties->m_dwStates & FWL_STATE_CKB_CheckMask) == | 303 } else if ((m_pProperties->m_dwStates & FWL_STATE_CKB_CheckMask) == |
304 FWL_STATE_CKB_Checked) { | 304 FWL_STATE_CKB_Checked) { |
305 m_pProperties->m_dwStates &= ~FWL_STATE_CKB_CheckMask; | 305 m_pProperties->m_dwStates &= ~FWL_STATE_CKB_CheckMask; |
306 } else { | 306 } else { |
307 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_3State) | 307 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_3State) |
308 m_pProperties->m_dwStates |= FWL_STATE_CKB_Neutral; | 308 m_pProperties->m_dwStates |= FWL_STATE_CKB_Neutral; |
309 else | 309 else |
310 m_pProperties->m_dwStates |= FWL_STATE_CKB_Checked; | 310 m_pProperties->m_dwStates |= FWL_STATE_CKB_Checked; |
311 } | 311 } |
312 } | 312 } |
313 | 313 |
314 Repaint(&m_rtClient); | 314 RepaintRect(m_rtClient); |
315 if (dwFirststate == m_pProperties->m_dwStates) | 315 if (dwFirststate == m_pProperties->m_dwStates) |
316 return; | 316 return; |
317 | 317 |
318 CFWL_Event wmCheckBoxState(CFWL_Event::Type::CheckStateChanged, this); | 318 CFWL_Event wmCheckBoxState(CFWL_Event::Type::CheckStateChanged, this); |
319 DispatchEvent(&wmCheckBoxState); | 319 DispatchEvent(&wmCheckBoxState); |
320 } | 320 } |
321 | 321 |
322 void CFWL_CheckBox::OnProcessMessage(CFWL_Message* pMessage) { | 322 void CFWL_CheckBox::OnProcessMessage(CFWL_Message* pMessage) { |
323 if (!pMessage) | 323 if (!pMessage) |
324 return; | 324 return; |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
367 const CFX_Matrix* pMatrix) { | 367 const CFX_Matrix* pMatrix) { |
368 DrawWidget(pGraphics, pMatrix); | 368 DrawWidget(pGraphics, pMatrix); |
369 } | 369 } |
370 | 370 |
371 void CFWL_CheckBox::OnFocusChanged(bool bSet) { | 371 void CFWL_CheckBox::OnFocusChanged(bool bSet) { |
372 if (bSet) | 372 if (bSet) |
373 m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused; | 373 m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused; |
374 else | 374 else |
375 m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused; | 375 m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused; |
376 | 376 |
377 Repaint(&m_rtClient); | 377 RepaintRect(m_rtClient); |
378 } | 378 } |
379 | 379 |
380 void CFWL_CheckBox::OnLButtonDown() { | 380 void CFWL_CheckBox::OnLButtonDown() { |
381 if (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) | 381 if (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) |
382 return; | 382 return; |
383 if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0) | 383 if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0) |
384 SetFocus(true); | 384 SetFocus(true); |
385 | 385 |
386 m_bBtnDown = true; | 386 m_bBtnDown = true; |
387 m_pProperties->m_dwStates &= ~FWL_STATE_CKB_Hovered; | 387 m_pProperties->m_dwStates &= ~FWL_STATE_CKB_Hovered; |
388 m_pProperties->m_dwStates |= FWL_STATE_CKB_Pressed; | 388 m_pProperties->m_dwStates |= FWL_STATE_CKB_Pressed; |
389 Repaint(&m_rtClient); | 389 RepaintRect(m_rtClient); |
390 } | 390 } |
391 | 391 |
392 void CFWL_CheckBox::OnLButtonUp(CFWL_MessageMouse* pMsg) { | 392 void CFWL_CheckBox::OnLButtonUp(CFWL_MessageMouse* pMsg) { |
393 if (!m_bBtnDown) | 393 if (!m_bBtnDown) |
394 return; | 394 return; |
395 | 395 |
396 m_bBtnDown = false; | 396 m_bBtnDown = false; |
397 if (!m_rtClient.Contains(pMsg->m_fx, pMsg->m_fy)) | 397 if (!m_rtClient.Contains(pMsg->m_fx, pMsg->m_fy)) |
398 return; | 398 return; |
399 | 399 |
(...skipping 29 matching lines...) Expand all Loading... |
429 } | 429 } |
430 } else { | 430 } else { |
431 if (m_rtClient.Contains(pMsg->m_fx, pMsg->m_fy)) { | 431 if (m_rtClient.Contains(pMsg->m_fx, pMsg->m_fy)) { |
432 if ((m_pProperties->m_dwStates & FWL_STATE_CKB_Hovered) == 0) { | 432 if ((m_pProperties->m_dwStates & FWL_STATE_CKB_Hovered) == 0) { |
433 bRepaint = true; | 433 bRepaint = true; |
434 m_pProperties->m_dwStates |= FWL_STATE_CKB_Hovered; | 434 m_pProperties->m_dwStates |= FWL_STATE_CKB_Hovered; |
435 } | 435 } |
436 } | 436 } |
437 } | 437 } |
438 if (bRepaint) | 438 if (bRepaint) |
439 Repaint(&m_rtBox); | 439 RepaintRect(m_rtBox); |
440 } | 440 } |
441 | 441 |
442 void CFWL_CheckBox::OnMouseLeave() { | 442 void CFWL_CheckBox::OnMouseLeave() { |
443 if (m_bBtnDown) | 443 if (m_bBtnDown) |
444 m_pProperties->m_dwStates |= FWL_STATE_CKB_Hovered; | 444 m_pProperties->m_dwStates |= FWL_STATE_CKB_Hovered; |
445 else | 445 else |
446 m_pProperties->m_dwStates &= ~FWL_STATE_CKB_Hovered; | 446 m_pProperties->m_dwStates &= ~FWL_STATE_CKB_Hovered; |
447 | 447 |
448 Repaint(&m_rtBox); | 448 RepaintRect(m_rtBox); |
449 } | 449 } |
450 | 450 |
451 void CFWL_CheckBox::OnKeyDown(CFWL_MessageKey* pMsg) { | 451 void CFWL_CheckBox::OnKeyDown(CFWL_MessageKey* pMsg) { |
452 if (pMsg->m_dwKeyCode == FWL_VKEY_Tab) | 452 if (pMsg->m_dwKeyCode == FWL_VKEY_Tab) |
453 return; | 453 return; |
454 if (pMsg->m_dwKeyCode == FWL_VKEY_Return || | 454 if (pMsg->m_dwKeyCode == FWL_VKEY_Return || |
455 pMsg->m_dwKeyCode == FWL_VKEY_Space) { | 455 pMsg->m_dwKeyCode == FWL_VKEY_Space) { |
456 NextStates(); | 456 NextStates(); |
457 } | 457 } |
458 } | 458 } |
OLD | NEW |