| 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_form.h" | 7 #include "xfa/fwl/cfwl_form.h" |
| 8 | 8 |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 25 #include "xfa/fwl/theme/cfwl_widgettp.h" | 25 #include "xfa/fwl/theme/cfwl_widgettp.h" |
| 26 | 26 |
| 27 namespace { | 27 namespace { |
| 28 | 28 |
| 29 const int kSystemButtonSize = 21; | 29 const int kSystemButtonSize = 21; |
| 30 const int kSystemButtonMargin = 5; | 30 const int kSystemButtonMargin = 5; |
| 31 const int kSystemButtonSpan = 2; | 31 const int kSystemButtonSpan = 2; |
| 32 | 32 |
| 33 } // namespace | 33 } // namespace |
| 34 | 34 |
| 35 namespace { | |
| 36 | |
| 37 const uint8_t kCornerEnlarge = 10; | |
| 38 | |
| 39 } // namespace | |
| 40 | |
| 41 CFWL_Form::CFWL_Form(const CFWL_App* app, | 35 CFWL_Form::CFWL_Form(const CFWL_App* app, |
| 42 std::unique_ptr<CFWL_WidgetProperties> properties, | 36 std::unique_ptr<CFWL_WidgetProperties> properties, |
| 43 CFWL_Widget* pOuter) | 37 CFWL_Widget* pOuter) |
| 44 : CFWL_Widget(app, std::move(properties), pOuter), | 38 : CFWL_Widget(app, std::move(properties), pOuter), |
| 45 #if (_FX_OS_ == _FX_MACOSX_) | 39 #if (_FX_OS_ == _FX_MACOSX_) |
| 46 m_bMouseIn(false), | 40 m_bMouseIn(false), |
| 47 #endif | 41 #endif |
| 48 m_pCloseBox(nullptr), | 42 m_pCloseBox(nullptr), |
| 49 m_pMinBox(nullptr), | 43 m_pMinBox(nullptr), |
| 50 m_pMaxBox(nullptr), | 44 m_pMaxBox(nullptr), |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 102 return FWL_WidgetHit::CloseBox; | 96 return FWL_WidgetHit::CloseBox; |
| 103 if (m_pMaxBox && m_pMaxBox->m_rtBtn.Contains(fx, fy)) | 97 if (m_pMaxBox && m_pMaxBox->m_rtBtn.Contains(fx, fy)) |
| 104 return FWL_WidgetHit::MaxBox; | 98 return FWL_WidgetHit::MaxBox; |
| 105 if (m_pMinBox && m_pMinBox->m_rtBtn.Contains(fx, fy)) | 99 if (m_pMinBox && m_pMinBox->m_rtBtn.Contains(fx, fy)) |
| 106 return FWL_WidgetHit::MinBox; | 100 return FWL_WidgetHit::MinBox; |
| 107 | 101 |
| 108 CFX_RectF rtCap; | 102 CFX_RectF rtCap; |
| 109 rtCap.Set(m_fCYBorder, m_fCXBorder, | 103 rtCap.Set(m_fCYBorder, m_fCXBorder, |
| 110 0 - kSystemButtonSize * m_iSysBox - 2 * m_fCYBorder, | 104 0 - kSystemButtonSize * m_iSysBox - 2 * m_fCYBorder, |
| 111 0 - m_fCXBorder); | 105 0 - m_fCXBorder); |
| 112 if (rtCap.Contains(fx, fy)) | 106 return rtCap.Contains(fx, fy) ? FWL_WidgetHit::Titlebar |
| 113 return FWL_WidgetHit::Titlebar; | 107 : FWL_WidgetHit::Client; |
| 114 if ((m_pProperties->m_dwStyles & FWL_WGTSTYLE_Border) && | |
| 115 (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_FRM_Resize)) { | |
| 116 FX_FLOAT fWidth = m_rtRelative.width - 2 * (m_fCYBorder + kCornerEnlarge); | |
| 117 FX_FLOAT fHeight = m_rtRelative.height - 2 * (m_fCXBorder + kCornerEnlarge); | |
| 118 | |
| 119 CFX_RectF rt; | |
| 120 rt.Set(0, m_fCXBorder + kCornerEnlarge, m_fCYBorder, fHeight); | |
| 121 if (rt.Contains(fx, fy)) | |
| 122 return FWL_WidgetHit::Left; | |
| 123 | |
| 124 rt.Set(m_rtRelative.width - m_fCYBorder, m_fCXBorder + kCornerEnlarge, | |
| 125 m_fCYBorder, fHeight); | |
| 126 if (rt.Contains(fx, fy)) | |
| 127 return FWL_WidgetHit::Right; | |
| 128 | |
| 129 rt.Set(m_fCYBorder + kCornerEnlarge, 0, fWidth, m_fCXBorder); | |
| 130 if (rt.Contains(fx, fy)) | |
| 131 return FWL_WidgetHit::Top; | |
| 132 | |
| 133 rt.Set(m_fCYBorder + kCornerEnlarge, m_rtRelative.height - m_fCXBorder, | |
| 134 fWidth, m_fCXBorder); | |
| 135 if (rt.Contains(fx, fy)) | |
| 136 return FWL_WidgetHit::Bottom; | |
| 137 | |
| 138 rt.Set(0, 0, m_fCYBorder + kCornerEnlarge, m_fCXBorder + kCornerEnlarge); | |
| 139 if (rt.Contains(fx, fy)) | |
| 140 return FWL_WidgetHit::LeftTop; | |
| 141 | |
| 142 rt.Set(0, m_rtRelative.height - m_fCXBorder - kCornerEnlarge, | |
| 143 m_fCYBorder + kCornerEnlarge, m_fCXBorder + kCornerEnlarge); | |
| 144 if (rt.Contains(fx, fy)) | |
| 145 return FWL_WidgetHit::LeftBottom; | |
| 146 | |
| 147 rt.Set(m_rtRelative.width - m_fCYBorder - kCornerEnlarge, 0, | |
| 148 m_fCYBorder + kCornerEnlarge, m_fCXBorder + kCornerEnlarge); | |
| 149 if (rt.Contains(fx, fy)) | |
| 150 return FWL_WidgetHit::RightTop; | |
| 151 | |
| 152 rt.Set(m_rtRelative.width - m_fCYBorder - kCornerEnlarge, | |
| 153 m_rtRelative.height - m_fCXBorder - kCornerEnlarge, | |
| 154 m_fCYBorder + kCornerEnlarge, m_fCXBorder + kCornerEnlarge); | |
| 155 if (rt.Contains(fx, fy)) | |
| 156 return FWL_WidgetHit::RightBottom; | |
| 157 } | |
| 158 return FWL_WidgetHit::Client; | |
| 159 } | 108 } |
| 160 | 109 |
| 161 void CFWL_Form::DrawWidget(CFX_Graphics* pGraphics, const CFX_Matrix* pMatrix) { | 110 void CFWL_Form::DrawWidget(CFX_Graphics* pGraphics, const CFX_Matrix* pMatrix) { |
| 162 if (!pGraphics) | 111 if (!pGraphics) |
| 163 return; | 112 return; |
| 164 if (!m_pProperties->m_pThemeProvider) | 113 if (!m_pProperties->m_pThemeProvider) |
| 165 return; | 114 return; |
| 166 | 115 |
| 167 IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; | 116 IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; |
| 168 bool bInactive = !IsActive(); | 117 bool bInactive = !IsActive(); |
| 169 int32_t iState = bInactive ? CFWL_PartState_Inactive : CFWL_PartState_Normal; | 118 int32_t iState = bInactive ? CFWL_PartState_Inactive : CFWL_PartState_Normal; |
| 170 if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_FRM_NoDrawClient) == 0) | 119 DrawBackground(pGraphics, pTheme); |
| 171 DrawBackground(pGraphics, pTheme); | |
| 172 | 120 |
| 173 #ifdef FWL_UseMacSystemBorder | 121 #ifdef FWL_UseMacSystemBorder |
| 174 return; | 122 return; |
| 175 #endif | 123 #endif |
| 176 CFWL_ThemeBackground param; | 124 CFWL_ThemeBackground param; |
| 177 param.m_pWidget = this; | 125 param.m_pWidget = this; |
| 178 param.m_dwStates = iState; | 126 param.m_dwStates = iState; |
| 179 param.m_pGraphics = pGraphics; | 127 param.m_pGraphics = pGraphics; |
| 180 param.m_rtPart = m_rtRelative; | 128 param.m_rtPart = m_rtRelative; |
| 181 if (pMatrix) | 129 if (pMatrix) |
| (...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 482 break; | 430 break; |
| 483 case FWL_MouseCommand::LeftButtonUp: | 431 case FWL_MouseCommand::LeftButtonUp: |
| 484 OnLButtonUp(pMsg); | 432 OnLButtonUp(pMsg); |
| 485 break; | 433 break; |
| 486 case FWL_MouseCommand::Move: | 434 case FWL_MouseCommand::Move: |
| 487 OnMouseMove(pMsg); | 435 OnMouseMove(pMsg); |
| 488 break; | 436 break; |
| 489 case FWL_MouseCommand::Leave: | 437 case FWL_MouseCommand::Leave: |
| 490 OnMouseLeave(pMsg); | 438 OnMouseLeave(pMsg); |
| 491 break; | 439 break; |
| 492 case FWL_MouseCommand::LeftButtonDblClk: | |
| 493 OnLButtonDblClk(pMsg); | |
| 494 break; | |
| 495 default: | 440 default: |
| 496 break; | 441 break; |
| 497 } | 442 } |
| 498 break; | 443 break; |
| 499 } | 444 } |
| 500 default: | 445 default: |
| 501 break; | 446 break; |
| 502 } | 447 } |
| 503 #endif // FWL_UseMacSystemBorder | 448 #endif // FWL_UseMacSystemBorder |
| 504 } | 449 } |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 602 } | 547 } |
| 603 | 548 |
| 604 void CFWL_Form::OnMouseLeave(CFWL_MessageMouse* pMsg) { | 549 void CFWL_Form::OnMouseLeave(CFWL_MessageMouse* pMsg) { |
| 605 CFWL_SysBtn* pHover = GetSysBtnByState(FWL_SYSBUTTONSTATE_Hover); | 550 CFWL_SysBtn* pHover = GetSysBtnByState(FWL_SYSBUTTONSTATE_Hover); |
| 606 if (!pHover) | 551 if (!pHover) |
| 607 return; | 552 return; |
| 608 | 553 |
| 609 pHover->SetNormal(); | 554 pHover->SetNormal(); |
| 610 RepaintRect(pHover->m_rtBtn); | 555 RepaintRect(pHover->m_rtBtn); |
| 611 } | 556 } |
| 612 | |
| 613 void CFWL_Form::OnLButtonDblClk(CFWL_MessageMouse* pMsg) { | |
| 614 if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_FRM_Resize) && | |
| 615 HitTest(pMsg->m_fx, pMsg->m_fy) == FWL_WidgetHit::Titlebar) { | |
| 616 if (m_bMaximized) | |
| 617 SetWidgetRect(m_rtRestore); | |
| 618 else | |
| 619 SetWorkAreaRect(); | |
| 620 | |
| 621 Update(); | |
| 622 m_bMaximized = !m_bMaximized; | |
| 623 } | |
| 624 } | |
| OLD | NEW |