| 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_form.h" | 7 #include "xfa/fwl/core/ifwl_form.h" |
| 8 | 8 |
| 9 #include "third_party/base/ptr_util.h" | 9 #include "third_party/base/ptr_util.h" |
| 10 #include "xfa/fde/tto/fde_textout.h" | 10 #include "xfa/fde/tto/fde_textout.h" |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 81 return FWL_Type::Form; | 81 return FWL_Type::Form; |
| 82 } | 82 } |
| 83 | 83 |
| 84 bool IFWL_Form::IsInstance(const CFX_WideStringC& wsClass) const { | 84 bool IFWL_Form::IsInstance(const CFX_WideStringC& wsClass) const { |
| 85 if (wsClass == CFX_WideStringC(FWL_CLASS_Form)) | 85 if (wsClass == CFX_WideStringC(FWL_CLASS_Form)) |
| 86 return true; | 86 return true; |
| 87 return IFWL_Widget::IsInstance(wsClass); | 87 return IFWL_Widget::IsInstance(wsClass); |
| 88 } | 88 } |
| 89 | 89 |
| 90 void IFWL_Form::GetWidgetRect(CFX_RectF& rect, bool bAutoSize) { | 90 void IFWL_Form::GetWidgetRect(CFX_RectF& rect, bool bAutoSize) { |
| 91 if (bAutoSize) { | 91 if (!bAutoSize) { |
| 92 rect.Reset(); | |
| 93 FX_FLOAT fCapHeight = GetCaptionHeight(); | |
| 94 FX_FLOAT fCXBorder = GetBorderSize(true); | |
| 95 FX_FLOAT fCYBorder = GetBorderSize(false); | |
| 96 FX_FLOAT fEdge = GetEdgeWidth(); | |
| 97 rect.height += fCapHeight + fCYBorder + fEdge + fEdge; | |
| 98 rect.width += fCXBorder + fCXBorder + fEdge + fEdge; | |
| 99 } else { | |
| 100 rect = m_pProperties->m_rtWidget; | 92 rect = m_pProperties->m_rtWidget; |
| 93 return; |
| 101 } | 94 } |
| 95 |
| 96 rect.Reset(); |
| 97 FX_FLOAT fCapHeight = GetCaptionHeight(); |
| 98 FX_FLOAT fCXBorder = GetBorderSize(true); |
| 99 FX_FLOAT fCYBorder = GetBorderSize(false); |
| 100 FX_FLOAT fEdge = GetEdgeWidth(); |
| 101 rect.height += fCapHeight + fCYBorder + fEdge + fEdge; |
| 102 rect.width += fCXBorder + fCXBorder + fEdge + fEdge; |
| 102 } | 103 } |
| 104 |
| 103 void IFWL_Form::GetClientRect(CFX_RectF& rect) { | 105 void IFWL_Form::GetClientRect(CFX_RectF& rect) { |
| 104 if ((m_pProperties->m_dwStyles & FWL_WGTSTYLE_Caption) == 0) { | 106 if ((m_pProperties->m_dwStyles & FWL_WGTSTYLE_Caption) == 0) { |
| 105 rect = m_pProperties->m_rtWidget; | 107 rect = m_pProperties->m_rtWidget; |
| 106 rect.Offset(-rect.left, -rect.top); | 108 rect.Offset(-rect.left, -rect.top); |
| 107 return; | 109 return; |
| 108 } | 110 } |
| 111 |
| 109 #ifdef FWL_UseMacSystemBorder | 112 #ifdef FWL_UseMacSystemBorder |
| 110 rect = m_rtRelative; | 113 rect = m_rtRelative; |
| 111 CFWL_WidgetMgr* pWidgetMgr = GetOwnerApp()->GetWidgetMgr(); | 114 CFWL_WidgetMgr* pWidgetMgr = GetOwnerApp()->GetWidgetMgr(); |
| 112 if (!pWidgetMgr) | 115 if (!pWidgetMgr) |
| 113 return; | 116 return; |
| 114 | 117 |
| 115 rect.left = 0; | 118 rect.left = 0; |
| 116 rect.top = 0; | 119 rect.top = 0; |
| 117 #else | 120 #else |
| 118 FX_FLOAT x = 0; | 121 FX_FLOAT x = 0; |
| 119 FX_FLOAT y = 0; | 122 FX_FLOAT y = 0; |
| 120 FX_FLOAT t = 0; | 123 FX_FLOAT t = 0; |
| 121 IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; | 124 IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; |
| 122 if (pTheme) { | 125 if (pTheme) { |
| 123 CFWL_ThemePart part; | 126 CFWL_ThemePart part; |
| 124 part.m_pWidget = this; | 127 part.m_pWidget = this; |
| 125 x = *static_cast<FX_FLOAT*>( | 128 x = *static_cast<FX_FLOAT*>( |
| 126 pTheme->GetCapacity(&part, CFWL_WidgetCapacity::CXBorder)); | 129 pTheme->GetCapacity(&part, CFWL_WidgetCapacity::CXBorder)); |
| 127 y = *static_cast<FX_FLOAT*>( | 130 y = *static_cast<FX_FLOAT*>( |
| 128 pTheme->GetCapacity(&part, CFWL_WidgetCapacity::CYBorder)); | 131 pTheme->GetCapacity(&part, CFWL_WidgetCapacity::CYBorder)); |
| 129 t = *static_cast<FX_FLOAT*>( | 132 t = *static_cast<FX_FLOAT*>( |
| 130 pTheme->GetCapacity(&part, CFWL_WidgetCapacity::CYCaption)); | 133 pTheme->GetCapacity(&part, CFWL_WidgetCapacity::CYCaption)); |
| 131 } | 134 } |
| 132 rect = m_pProperties->m_rtWidget; | 135 rect = m_pProperties->m_rtWidget; |
| 133 rect.Offset(-rect.left, -rect.top); | 136 rect.Offset(-rect.left, -rect.top); |
| 134 rect.Deflate(x, t, x, y); | 137 rect.Deflate(x, t, x, y); |
| 135 #endif | 138 #endif |
| 136 } | 139 } |
| 140 |
| 137 void IFWL_Form::Update() { | 141 void IFWL_Form::Update() { |
| 138 if (m_iLock > 0) { | 142 if (m_iLock > 0) |
| 139 return; | 143 return; |
| 140 } | 144 if (!m_pProperties->m_pThemeProvider) |
| 141 if (!m_pProperties->m_pThemeProvider) { | |
| 142 m_pProperties->m_pThemeProvider = GetAvailableTheme(); | 145 m_pProperties->m_pThemeProvider = GetAvailableTheme(); |
| 143 } | 146 |
| 144 #ifdef FWL_UseMacSystemBorder | 147 #ifndef FWL_UseMacSystemBorder |
| 145 #else | |
| 146 SetThemeData(); | 148 SetThemeData(); |
| 147 if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_Icon) { | 149 if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_Icon) |
| 148 UpdateIcon(); | 150 UpdateIcon(); |
| 149 } | |
| 150 #endif | 151 #endif |
| 152 |
| 151 UpdateCaption(); | 153 UpdateCaption(); |
| 152 Layout(); | 154 Layout(); |
| 153 } | 155 } |
| 156 |
| 154 FWL_WidgetHit IFWL_Form::HitTest(FX_FLOAT fx, FX_FLOAT fy) { | 157 FWL_WidgetHit IFWL_Form::HitTest(FX_FLOAT fx, FX_FLOAT fy) { |
| 155 GetAvailableTheme(); | 158 GetAvailableTheme(); |
| 159 |
| 156 if (m_pCloseBox && m_pCloseBox->m_rtBtn.Contains(fx, fy)) | 160 if (m_pCloseBox && m_pCloseBox->m_rtBtn.Contains(fx, fy)) |
| 157 return FWL_WidgetHit::CloseBox; | 161 return FWL_WidgetHit::CloseBox; |
| 158 if (m_pMaxBox && m_pMaxBox->m_rtBtn.Contains(fx, fy)) | 162 if (m_pMaxBox && m_pMaxBox->m_rtBtn.Contains(fx, fy)) |
| 159 return FWL_WidgetHit::MaxBox; | 163 return FWL_WidgetHit::MaxBox; |
| 160 if (m_pMinBox && m_pMinBox->m_rtBtn.Contains(fx, fy)) | 164 if (m_pMinBox && m_pMinBox->m_rtBtn.Contains(fx, fy)) |
| 161 return FWL_WidgetHit::MinBox; | 165 return FWL_WidgetHit::MinBox; |
| 166 |
| 162 CFX_RectF rtCap; | 167 CFX_RectF rtCap; |
| 163 rtCap.Set(m_rtCaption.left + m_fCYBorder, m_rtCaption.top + m_fCXBorder, | 168 rtCap.Set(m_rtCaption.left + m_fCYBorder, m_rtCaption.top + m_fCXBorder, |
| 164 m_rtCaption.width - kSystemButtonSize * m_iSysBox - 2 * m_fCYBorder, | 169 m_rtCaption.width - kSystemButtonSize * m_iSysBox - 2 * m_fCYBorder, |
| 165 m_rtCaption.height - m_fCXBorder); | 170 m_rtCaption.height - m_fCXBorder); |
| 166 if (rtCap.Contains(fx, fy)) | 171 if (rtCap.Contains(fx, fy)) |
| 167 return FWL_WidgetHit::Titlebar; | 172 return FWL_WidgetHit::Titlebar; |
| 168 if ((m_pProperties->m_dwStyles & FWL_WGTSTYLE_Border) && | 173 if ((m_pProperties->m_dwStyles & FWL_WGTSTYLE_Border) && |
| 169 (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_FRM_Resize)) { | 174 (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_FRM_Resize)) { |
| 170 FX_FLOAT fWidth = m_rtRelative.width - 2 * (m_fCYBorder + kCornerEnlarge); | 175 FX_FLOAT fWidth = m_rtRelative.width - 2 * (m_fCYBorder + kCornerEnlarge); |
| 171 FX_FLOAT fHeight = m_rtRelative.height - 2 * (m_fCXBorder + kCornerEnlarge); | 176 FX_FLOAT fHeight = m_rtRelative.height - 2 * (m_fCXBorder + kCornerEnlarge); |
| 177 |
| 172 CFX_RectF rt; | 178 CFX_RectF rt; |
| 173 rt.Set(0, m_fCXBorder + kCornerEnlarge, m_fCYBorder, fHeight); | 179 rt.Set(0, m_fCXBorder + kCornerEnlarge, m_fCYBorder, fHeight); |
| 174 if (rt.Contains(fx, fy)) | 180 if (rt.Contains(fx, fy)) |
| 175 return FWL_WidgetHit::Left; | 181 return FWL_WidgetHit::Left; |
| 182 |
| 176 rt.Set(m_rtRelative.width - m_fCYBorder, m_fCXBorder + kCornerEnlarge, | 183 rt.Set(m_rtRelative.width - m_fCYBorder, m_fCXBorder + kCornerEnlarge, |
| 177 m_fCYBorder, fHeight); | 184 m_fCYBorder, fHeight); |
| 178 if (rt.Contains(fx, fy)) | 185 if (rt.Contains(fx, fy)) |
| 179 return FWL_WidgetHit::Right; | 186 return FWL_WidgetHit::Right; |
| 187 |
| 180 rt.Set(m_fCYBorder + kCornerEnlarge, 0, fWidth, m_fCXBorder); | 188 rt.Set(m_fCYBorder + kCornerEnlarge, 0, fWidth, m_fCXBorder); |
| 181 if (rt.Contains(fx, fy)) | 189 if (rt.Contains(fx, fy)) |
| 182 return FWL_WidgetHit::Top; | 190 return FWL_WidgetHit::Top; |
| 191 |
| 183 rt.Set(m_fCYBorder + kCornerEnlarge, m_rtRelative.height - m_fCXBorder, | 192 rt.Set(m_fCYBorder + kCornerEnlarge, m_rtRelative.height - m_fCXBorder, |
| 184 fWidth, m_fCXBorder); | 193 fWidth, m_fCXBorder); |
| 185 if (rt.Contains(fx, fy)) | 194 if (rt.Contains(fx, fy)) |
| 186 return FWL_WidgetHit::Bottom; | 195 return FWL_WidgetHit::Bottom; |
| 196 |
| 187 rt.Set(0, 0, m_fCYBorder + kCornerEnlarge, m_fCXBorder + kCornerEnlarge); | 197 rt.Set(0, 0, m_fCYBorder + kCornerEnlarge, m_fCXBorder + kCornerEnlarge); |
| 188 if (rt.Contains(fx, fy)) | 198 if (rt.Contains(fx, fy)) |
| 189 return FWL_WidgetHit::LeftTop; | 199 return FWL_WidgetHit::LeftTop; |
| 200 |
| 190 rt.Set(0, m_rtRelative.height - m_fCXBorder - kCornerEnlarge, | 201 rt.Set(0, m_rtRelative.height - m_fCXBorder - kCornerEnlarge, |
| 191 m_fCYBorder + kCornerEnlarge, m_fCXBorder + kCornerEnlarge); | 202 m_fCYBorder + kCornerEnlarge, m_fCXBorder + kCornerEnlarge); |
| 192 if (rt.Contains(fx, fy)) | 203 if (rt.Contains(fx, fy)) |
| 193 return FWL_WidgetHit::LeftBottom; | 204 return FWL_WidgetHit::LeftBottom; |
| 205 |
| 194 rt.Set(m_rtRelative.width - m_fCYBorder - kCornerEnlarge, 0, | 206 rt.Set(m_rtRelative.width - m_fCYBorder - kCornerEnlarge, 0, |
| 195 m_fCYBorder + kCornerEnlarge, m_fCXBorder + kCornerEnlarge); | 207 m_fCYBorder + kCornerEnlarge, m_fCXBorder + kCornerEnlarge); |
| 196 if (rt.Contains(fx, fy)) | 208 if (rt.Contains(fx, fy)) |
| 197 return FWL_WidgetHit::RightTop; | 209 return FWL_WidgetHit::RightTop; |
| 210 |
| 198 rt.Set(m_rtRelative.width - m_fCYBorder - kCornerEnlarge, | 211 rt.Set(m_rtRelative.width - m_fCYBorder - kCornerEnlarge, |
| 199 m_rtRelative.height - m_fCXBorder - kCornerEnlarge, | 212 m_rtRelative.height - m_fCXBorder - kCornerEnlarge, |
| 200 m_fCYBorder + kCornerEnlarge, m_fCXBorder + kCornerEnlarge); | 213 m_fCYBorder + kCornerEnlarge, m_fCXBorder + kCornerEnlarge); |
| 201 if (rt.Contains(fx, fy)) | 214 if (rt.Contains(fx, fy)) |
| 202 return FWL_WidgetHit::RightBottom; | 215 return FWL_WidgetHit::RightBottom; |
| 203 } | 216 } |
| 204 return FWL_WidgetHit::Client; | 217 return FWL_WidgetHit::Client; |
| 205 } | 218 } |
| 219 |
| 206 void IFWL_Form::DrawWidget(CFX_Graphics* pGraphics, const CFX_Matrix* pMatrix) { | 220 void IFWL_Form::DrawWidget(CFX_Graphics* pGraphics, const CFX_Matrix* pMatrix) { |
| 207 if (!pGraphics) | 221 if (!pGraphics) |
| 208 return; | 222 return; |
| 209 if (!m_pProperties->m_pThemeProvider) | 223 if (!m_pProperties->m_pThemeProvider) |
| 210 return; | 224 return; |
| 225 |
| 211 IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; | 226 IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; |
| 212 bool bInactive = !IsActive(); | 227 bool bInactive = !IsActive(); |
| 213 int32_t iState = bInactive ? CFWL_PartState_Inactive : CFWL_PartState_Normal; | 228 int32_t iState = bInactive ? CFWL_PartState_Inactive : CFWL_PartState_Normal; |
| 214 if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_FRM_NoDrawClient) == 0) { | 229 if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_FRM_NoDrawClient) == 0) |
| 215 DrawBackground(pGraphics, pTheme); | 230 DrawBackground(pGraphics, pTheme); |
| 216 } | 231 |
| 217 #ifdef FWL_UseMacSystemBorder | 232 #ifdef FWL_UseMacSystemBorder |
| 218 return; | 233 return; |
| 219 #endif | 234 #endif |
| 220 CFWL_ThemeBackground param; | 235 CFWL_ThemeBackground param; |
| 221 param.m_pWidget = this; | 236 param.m_pWidget = this; |
| 222 param.m_dwStates = iState; | 237 param.m_dwStates = iState; |
| 223 param.m_pGraphics = pGraphics; | 238 param.m_pGraphics = pGraphics; |
| 224 param.m_rtPart = m_rtRelative; | 239 param.m_rtPart = m_rtRelative; |
| 225 if (pMatrix) { | 240 if (pMatrix) |
| 226 param.m_matrix.Concat(*pMatrix); | 241 param.m_matrix.Concat(*pMatrix); |
| 227 } | |
| 228 if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_Border) { | 242 if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_Border) { |
| 229 param.m_iPart = CFWL_Part::Border; | 243 param.m_iPart = CFWL_Part::Border; |
| 230 pTheme->DrawBackground(¶m); | 244 pTheme->DrawBackground(¶m); |
| 231 } | 245 } |
| 232 if ((m_pProperties->m_dwStyleExes & FWL_WGTSTYLE_EdgeMask) != | 246 if ((m_pProperties->m_dwStyleExes & FWL_WGTSTYLE_EdgeMask) != |
| 233 FWL_WGTSTYLE_EdgeNone) { | 247 FWL_WGTSTYLE_EdgeNone) { |
| 234 CFX_RectF rtEdge; | 248 CFX_RectF rtEdge; |
| 235 GetEdgeRect(rtEdge); | 249 GetEdgeRect(rtEdge); |
| 236 param.m_iPart = CFWL_Part::Edge; | 250 param.m_iPart = CFWL_Part::Edge; |
| 237 param.m_rtPart = rtEdge; | 251 param.m_rtPart = rtEdge; |
| 238 param.m_dwStates = iState; | 252 param.m_dwStates = iState; |
| 239 pTheme->DrawBackground(¶m); | 253 pTheme->DrawBackground(¶m); |
| 240 } | 254 } |
| 241 if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_Caption) { | 255 if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_Caption) { |
| 242 param.m_iPart = CFWL_Part::Caption; | 256 param.m_iPart = CFWL_Part::Caption; |
| 243 param.m_dwStates = iState; | 257 param.m_dwStates = iState; |
| 244 param.m_rtPart = m_rtCaption; | 258 param.m_rtPart = m_rtCaption; |
| 245 pTheme->DrawBackground(¶m); | 259 pTheme->DrawBackground(¶m); |
| 246 DrawCaptionText(pGraphics, pTheme, pMatrix); | 260 DrawCaptionText(pGraphics, pTheme, pMatrix); |
| 247 } else if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_NarrowCaption) { | 261 } else if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_NarrowCaption) { |
| 248 param.m_iPart = CFWL_Part::NarrowCaption; | 262 param.m_iPart = CFWL_Part::NarrowCaption; |
| 249 param.m_dwStates = iState; | 263 param.m_dwStates = iState; |
| 250 param.m_rtPart = m_rtCaption; | 264 param.m_rtPart = m_rtCaption; |
| 251 pTheme->DrawBackground(¶m); | 265 pTheme->DrawBackground(¶m); |
| 252 DrawCaptionText(pGraphics, pTheme, pMatrix); | 266 DrawCaptionText(pGraphics, pTheme, pMatrix); |
| 253 } | 267 } |
| 254 if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_Icon) { | 268 if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_Icon) { |
| 255 param.m_iPart = CFWL_Part::Icon; | 269 param.m_iPart = CFWL_Part::Icon; |
| 256 if (HasIcon()) { | 270 if (HasIcon()) |
| 257 DrawIconImage(pGraphics, pTheme, pMatrix); | 271 DrawIconImage(pGraphics, pTheme, pMatrix); |
| 258 } | |
| 259 } | 272 } |
| 273 |
| 260 #if (_FX_OS_ == _FX_MACOSX_) | 274 #if (_FX_OS_ == _FX_MACOSX_) |
| 261 { | 275 { |
| 262 if (m_pCloseBox) { | 276 if (m_pCloseBox) { |
| 263 param.m_iPart = CFWL_Part::CloseBox; | 277 param.m_iPart = CFWL_Part::CloseBox; |
| 264 param.m_dwStates = m_pCloseBox->GetPartState(); | 278 param.m_dwStates = m_pCloseBox->GetPartState(); |
| 265 if (m_pProperties->m_dwStates & FWL_WGTSTATE_Deactivated) { | 279 if (m_pProperties->m_dwStates & FWL_WGTSTATE_Deactivated) |
| 266 param.m_dwStates = CFWL_PartState_Disabled; | 280 param.m_dwStates = CFWL_PartState_Disabled; |
| 267 } else if (CFWL_PartState_Normal == param.m_dwStates && m_bMouseIn) { | 281 else if (CFWL_PartState_Normal == param.m_dwStates && m_bMouseIn) |
| 268 param.m_dwStates = CFWL_PartState_Hovered; | 282 param.m_dwStates = CFWL_PartState_Hovered; |
| 269 } | |
| 270 param.m_rtPart = m_pCloseBox->m_rtBtn; | 283 param.m_rtPart = m_pCloseBox->m_rtBtn; |
| 271 pTheme->DrawBackground(¶m); | 284 pTheme->DrawBackground(¶m); |
| 272 } | 285 } |
| 273 if (m_pMaxBox) { | 286 if (m_pMaxBox) { |
| 274 param.m_iPart = CFWL_Part::MaximizeBox; | 287 param.m_iPart = CFWL_Part::MaximizeBox; |
| 275 param.m_dwStates = m_pMaxBox->GetPartState(); | 288 param.m_dwStates = m_pMaxBox->GetPartState(); |
| 276 if (m_pProperties->m_dwStates & FWL_WGTSTATE_Deactivated) { | 289 if (m_pProperties->m_dwStates & FWL_WGTSTATE_Deactivated) |
| 277 param.m_dwStates = CFWL_PartState_Disabled; | 290 param.m_dwStates = CFWL_PartState_Disabled; |
| 278 } else if (CFWL_PartState_Normal == param.m_dwStates && m_bMouseIn) { | 291 else if (CFWL_PartState_Normal == param.m_dwStates && m_bMouseIn) |
| 279 param.m_dwStates = CFWL_PartState_Hovered; | 292 param.m_dwStates = CFWL_PartState_Hovered; |
| 280 } | |
| 281 param.m_rtPart = m_pMaxBox->m_rtBtn; | 293 param.m_rtPart = m_pMaxBox->m_rtBtn; |
| 282 param.m_bMaximize = m_bMaximized; | 294 param.m_bMaximize = m_bMaximized; |
| 283 pTheme->DrawBackground(¶m); | 295 pTheme->DrawBackground(¶m); |
| 284 } | 296 } |
| 285 if (m_pMinBox) { | 297 if (m_pMinBox) { |
| 286 param.m_iPart = CFWL_Part::MinimizeBox; | 298 param.m_iPart = CFWL_Part::MinimizeBox; |
| 287 param.m_dwStates = m_pMinBox->GetPartState(); | 299 param.m_dwStates = m_pMinBox->GetPartState(); |
| 288 if (m_pProperties->m_dwStates & FWL_WGTSTATE_Deactivated) { | 300 if (m_pProperties->m_dwStates & FWL_WGTSTATE_Deactivated) |
| 289 param.m_dwStates = CFWL_PartState_Disabled; | 301 param.m_dwStates = CFWL_PartState_Disabled; |
| 290 } else if (CFWL_PartState_Normal == param.m_dwStates && m_bMouseIn) { | 302 else if (CFWL_PartState_Normal == param.m_dwStates && m_bMouseIn) |
| 291 param.m_dwStates = CFWL_PartState_Hovered; | 303 param.m_dwStates = CFWL_PartState_Hovered; |
| 292 } | |
| 293 param.m_rtPart = m_pMinBox->m_rtBtn; | 304 param.m_rtPart = m_pMinBox->m_rtBtn; |
| 294 pTheme->DrawBackground(¶m); | 305 pTheme->DrawBackground(¶m); |
| 295 } | 306 } |
| 296 m_bMouseIn = false; | 307 m_bMouseIn = false; |
| 297 } | 308 } |
| 298 #else | 309 #else |
| 299 { | 310 { |
| 300 if (m_pCloseBox) { | 311 if (m_pCloseBox) { |
| 301 param.m_iPart = CFWL_Part::CloseBox; | 312 param.m_iPart = CFWL_Part::CloseBox; |
| 302 param.m_dwStates = m_pCloseBox->GetPartState(); | 313 param.m_dwStates = m_pCloseBox->GetPartState(); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 329 if (!pDriver) | 340 if (!pDriver) |
| 330 return nullptr; | 341 return nullptr; |
| 331 | 342 |
| 332 m_pNoteLoop = pdfium::MakeUnique<CFWL_NoteLoop>(); | 343 m_pNoteLoop = pdfium::MakeUnique<CFWL_NoteLoop>(); |
| 333 m_pNoteLoop->SetMainForm(this); | 344 m_pNoteLoop->SetMainForm(this); |
| 334 | 345 |
| 335 pDriver->PushNoteLoop(m_pNoteLoop.get()); | 346 pDriver->PushNoteLoop(m_pNoteLoop.get()); |
| 336 m_bDoModalFlag = true; | 347 m_bDoModalFlag = true; |
| 337 SetStates(FWL_WGTSTATE_Invisible, false); | 348 SetStates(FWL_WGTSTATE_Invisible, false); |
| 338 pDriver->Run(); | 349 pDriver->Run(); |
| 339 #if (_FX_OS_ == _FX_MACOSX_) | 350 |
| 340 #else | 351 #if _FX_OS_ != _FX_MACOSX_ |
| 341 pDriver->PopNoteLoop(); | 352 pDriver->PopNoteLoop(); |
| 342 #endif | 353 #endif |
| 354 |
| 343 m_pNoteLoop.reset(); | 355 m_pNoteLoop.reset(); |
| 344 return nullptr; | 356 return nullptr; |
| 345 } | 357 } |
| 346 | 358 |
| 347 void IFWL_Form::EndDoModal() { | 359 void IFWL_Form::EndDoModal() { |
| 348 if (!m_pNoteLoop) | 360 if (!m_pNoteLoop) |
| 349 return; | 361 return; |
| 362 |
| 350 m_bDoModalFlag = false; | 363 m_bDoModalFlag = false; |
| 364 |
| 351 #if (_FX_OS_ == _FX_MACOSX_) | 365 #if (_FX_OS_ == _FX_MACOSX_) |
| 352 m_pNoteLoop->EndModalLoop(); | 366 m_pNoteLoop->EndModalLoop(); |
| 353 const IFWL_App* pApp = GetOwnerApp(); | 367 const IFWL_App* pApp = GetOwnerApp(); |
| 354 if (!pApp) | 368 if (!pApp) |
| 355 return; | 369 return; |
| 356 | 370 |
| 357 CFWL_NoteDriver* pDriver = | 371 CFWL_NoteDriver* pDriver = |
| 358 static_cast<CFWL_NoteDriver*>(pApp->GetNoteDriver()); | 372 static_cast<CFWL_NoteDriver*>(pApp->GetNoteDriver()); |
| 359 if (!pDriver) | 373 if (!pDriver) |
| 360 return; | 374 return; |
| (...skipping 24 matching lines...) Expand all Loading... |
| 385 m_pCloseBox = nullptr; | 399 m_pCloseBox = nullptr; |
| 386 delete m_pMinBox; | 400 delete m_pMinBox; |
| 387 m_pMinBox = nullptr; | 401 m_pMinBox = nullptr; |
| 388 delete m_pMaxBox; | 402 delete m_pMaxBox; |
| 389 m_pMaxBox = nullptr; | 403 m_pMaxBox = nullptr; |
| 390 delete m_pCaptionBox; | 404 delete m_pCaptionBox; |
| 391 m_pCaptionBox = nullptr; | 405 m_pCaptionBox = nullptr; |
| 392 } | 406 } |
| 393 | 407 |
| 394 CFWL_SysBtn* IFWL_Form::GetSysBtnAtPoint(FX_FLOAT fx, FX_FLOAT fy) { | 408 CFWL_SysBtn* IFWL_Form::GetSysBtnAtPoint(FX_FLOAT fx, FX_FLOAT fy) { |
| 395 if (m_pCloseBox && m_pCloseBox->m_rtBtn.Contains(fx, fy)) { | 409 if (m_pCloseBox && m_pCloseBox->m_rtBtn.Contains(fx, fy)) |
| 396 return m_pCloseBox; | 410 return m_pCloseBox; |
| 397 } | 411 if (m_pMaxBox && m_pMaxBox->m_rtBtn.Contains(fx, fy)) |
| 398 if (m_pMaxBox && m_pMaxBox->m_rtBtn.Contains(fx, fy)) { | |
| 399 return m_pMaxBox; | 412 return m_pMaxBox; |
| 400 } | 413 if (m_pMinBox && m_pMinBox->m_rtBtn.Contains(fx, fy)) |
| 401 if (m_pMinBox && m_pMinBox->m_rtBtn.Contains(fx, fy)) { | |
| 402 return m_pMinBox; | 414 return m_pMinBox; |
| 403 } | 415 if (m_pCaptionBox && m_pCaptionBox->m_rtBtn.Contains(fx, fy)) |
| 404 if (m_pCaptionBox && m_pCaptionBox->m_rtBtn.Contains(fx, fy)) { | |
| 405 return m_pCaptionBox; | 416 return m_pCaptionBox; |
| 406 } | |
| 407 return nullptr; | 417 return nullptr; |
| 408 } | 418 } |
| 419 |
| 409 CFWL_SysBtn* IFWL_Form::GetSysBtnByState(uint32_t dwState) { | 420 CFWL_SysBtn* IFWL_Form::GetSysBtnByState(uint32_t dwState) { |
| 410 if (m_pCloseBox && (m_pCloseBox->m_dwState & dwState)) { | 421 if (m_pCloseBox && (m_pCloseBox->m_dwState & dwState)) |
| 411 return m_pCloseBox; | 422 return m_pCloseBox; |
| 412 } | 423 if (m_pMaxBox && (m_pMaxBox->m_dwState & dwState)) |
| 413 if (m_pMaxBox && (m_pMaxBox->m_dwState & dwState)) { | |
| 414 return m_pMaxBox; | 424 return m_pMaxBox; |
| 415 } | 425 if (m_pMinBox && (m_pMinBox->m_dwState & dwState)) |
| 416 if (m_pMinBox && (m_pMinBox->m_dwState & dwState)) { | |
| 417 return m_pMinBox; | 426 return m_pMinBox; |
| 418 } | 427 if (m_pCaptionBox && (m_pCaptionBox->m_dwState & dwState)) |
| 419 if (m_pCaptionBox && (m_pCaptionBox->m_dwState & dwState)) { | |
| 420 return m_pCaptionBox; | 428 return m_pCaptionBox; |
| 421 } | |
| 422 return nullptr; | 429 return nullptr; |
| 423 } | 430 } |
| 431 |
| 424 CFWL_SysBtn* IFWL_Form::GetSysBtnByIndex(int32_t nIndex) { | 432 CFWL_SysBtn* IFWL_Form::GetSysBtnByIndex(int32_t nIndex) { |
| 425 if (nIndex < 0) | 433 if (nIndex < 0) |
| 426 return nullptr; | 434 return nullptr; |
| 427 | 435 |
| 428 CFX_ArrayTemplate<CFWL_SysBtn*> arrBtn; | 436 CFX_ArrayTemplate<CFWL_SysBtn*> arrBtn; |
| 429 if (m_pMinBox) | 437 if (m_pMinBox) |
| 430 arrBtn.Add(m_pMinBox); | 438 arrBtn.Add(m_pMinBox); |
| 431 | |
| 432 if (m_pMaxBox) | 439 if (m_pMaxBox) |
| 433 arrBtn.Add(m_pMaxBox); | 440 arrBtn.Add(m_pMaxBox); |
| 434 | |
| 435 if (m_pCloseBox) | 441 if (m_pCloseBox) |
| 436 arrBtn.Add(m_pCloseBox); | 442 arrBtn.Add(m_pCloseBox); |
| 437 | |
| 438 return arrBtn[nIndex]; | 443 return arrBtn[nIndex]; |
| 439 } | 444 } |
| 445 |
| 440 int32_t IFWL_Form::GetSysBtnIndex(CFWL_SysBtn* pBtn) { | 446 int32_t IFWL_Form::GetSysBtnIndex(CFWL_SysBtn* pBtn) { |
| 441 CFX_ArrayTemplate<CFWL_SysBtn*> arrBtn; | 447 CFX_ArrayTemplate<CFWL_SysBtn*> arrBtn; |
| 442 if (m_pMinBox) | 448 if (m_pMinBox) |
| 443 arrBtn.Add(m_pMinBox); | 449 arrBtn.Add(m_pMinBox); |
| 444 | |
| 445 if (m_pMaxBox) | 450 if (m_pMaxBox) |
| 446 arrBtn.Add(m_pMaxBox); | 451 arrBtn.Add(m_pMaxBox); |
| 447 | |
| 448 if (m_pCloseBox) | 452 if (m_pCloseBox) |
| 449 arrBtn.Add(m_pCloseBox); | 453 arrBtn.Add(m_pCloseBox); |
| 450 | |
| 451 return arrBtn.Find(pBtn); | 454 return arrBtn.Find(pBtn); |
| 452 } | 455 } |
| 456 |
| 453 FX_FLOAT IFWL_Form::GetCaptionHeight() { | 457 FX_FLOAT IFWL_Form::GetCaptionHeight() { |
| 454 CFWL_WidgetCapacity dwCapacity = CFWL_WidgetCapacity::None; | 458 CFWL_WidgetCapacity dwCapacity = CFWL_WidgetCapacity::None; |
| 455 | 459 |
| 456 if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_Caption) { | 460 if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_Caption) |
| 457 dwCapacity = CFWL_WidgetCapacity::CYCaption; | 461 dwCapacity = CFWL_WidgetCapacity::CYCaption; |
| 458 } else if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_NarrowCaption) { | 462 else if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_NarrowCaption) |
| 459 dwCapacity = CFWL_WidgetCapacity::CYNarrowCaption; | 463 dwCapacity = CFWL_WidgetCapacity::CYNarrowCaption; |
| 460 } | 464 |
| 461 if (dwCapacity != CFWL_WidgetCapacity::None) { | 465 if (dwCapacity != CFWL_WidgetCapacity::None) { |
| 462 FX_FLOAT* pfCapHeight = | 466 FX_FLOAT* pfCapHeight = |
| 463 static_cast<FX_FLOAT*>(GetThemeCapacity(dwCapacity)); | 467 static_cast<FX_FLOAT*>(GetThemeCapacity(dwCapacity)); |
| 464 return pfCapHeight ? *pfCapHeight : 0; | 468 return pfCapHeight ? *pfCapHeight : 0; |
| 465 } | 469 } |
| 466 return 0; | 470 return 0; |
| 467 } | 471 } |
| 472 |
| 468 void IFWL_Form::DrawCaptionText(CFX_Graphics* pGs, | 473 void IFWL_Form::DrawCaptionText(CFX_Graphics* pGs, |
| 469 IFWL_ThemeProvider* pTheme, | 474 IFWL_ThemeProvider* pTheme, |
| 470 const CFX_Matrix* pMatrix) { | 475 const CFX_Matrix* pMatrix) { |
| 471 CFX_WideString wsText; | 476 CFX_WideString wsText; |
| 472 IFWL_DataProvider* pData = m_pProperties->m_pDataProvider; | 477 IFWL_DataProvider* pData = m_pProperties->m_pDataProvider; |
| 473 pData->GetCaption(this, wsText); | 478 pData->GetCaption(this, wsText); |
| 474 if (wsText.IsEmpty()) { | 479 if (wsText.IsEmpty()) |
| 475 return; | 480 return; |
| 476 } | 481 |
| 477 CFWL_ThemeText textParam; | 482 CFWL_ThemeText textParam; |
| 478 textParam.m_pWidget = this; | 483 textParam.m_pWidget = this; |
| 479 textParam.m_iPart = CFWL_Part::Caption; | 484 textParam.m_iPart = CFWL_Part::Caption; |
| 480 textParam.m_dwStates = CFWL_PartState_Normal; | 485 textParam.m_dwStates = CFWL_PartState_Normal; |
| 481 textParam.m_pGraphics = pGs; | 486 textParam.m_pGraphics = pGs; |
| 482 if (pMatrix) { | 487 if (pMatrix) |
| 483 textParam.m_matrix.Concat(*pMatrix); | 488 textParam.m_matrix.Concat(*pMatrix); |
| 484 } | 489 |
| 485 CFX_RectF rtText; | 490 CFX_RectF rtText; |
| 486 if (m_bCustomizeLayout) { | 491 if (m_bCustomizeLayout) { |
| 487 rtText = m_rtCaptionText; | 492 rtText = m_rtCaptionText; |
| 488 rtText.top -= 5; | 493 rtText.top -= 5; |
| 489 } else { | 494 } else { |
| 490 rtText = m_rtCaption; | 495 rtText = m_rtCaption; |
| 491 FX_FLOAT fpos; | 496 FX_FLOAT fpos; |
| 492 fpos = HasIcon() ? 29.0f : 13.0f; | 497 fpos = HasIcon() ? 29.0f : 13.0f; |
| 493 rtText.left += fpos; | 498 rtText.left += fpos; |
| 494 } | 499 } |
| 495 textParam.m_rtPart = rtText; | 500 textParam.m_rtPart = rtText; |
| 496 textParam.m_wsText = wsText; | 501 textParam.m_wsText = wsText; |
| 497 textParam.m_dwTTOStyles = FDE_TTOSTYLE_SingleLine | FDE_TTOSTYLE_Ellipsis; | 502 textParam.m_dwTTOStyles = FDE_TTOSTYLE_SingleLine | FDE_TTOSTYLE_Ellipsis; |
| 498 textParam.m_iTTOAlign = m_bCustomizeLayout ? FDE_TTOALIGNMENT_Center | 503 textParam.m_iTTOAlign = m_bCustomizeLayout ? FDE_TTOALIGNMENT_Center |
| 499 : FDE_TTOALIGNMENT_CenterLeft; | 504 : FDE_TTOALIGNMENT_CenterLeft; |
| 500 pTheme->DrawText(&textParam); | 505 pTheme->DrawText(&textParam); |
| 501 } | 506 } |
| 507 |
| 502 void IFWL_Form::DrawIconImage(CFX_Graphics* pGs, | 508 void IFWL_Form::DrawIconImage(CFX_Graphics* pGs, |
| 503 IFWL_ThemeProvider* pTheme, | 509 IFWL_ThemeProvider* pTheme, |
| 504 const CFX_Matrix* pMatrix) { | 510 const CFX_Matrix* pMatrix) { |
| 505 IFWL_FormDP* pData = | 511 IFWL_FormDP* pData = |
| 506 static_cast<IFWL_FormDP*>(m_pProperties->m_pDataProvider); | 512 static_cast<IFWL_FormDP*>(m_pProperties->m_pDataProvider); |
| 507 CFWL_ThemeBackground param; | 513 CFWL_ThemeBackground param; |
| 508 param.m_pWidget = this; | 514 param.m_pWidget = this; |
| 509 param.m_iPart = CFWL_Part::Icon; | 515 param.m_iPart = CFWL_Part::Icon; |
| 510 param.m_pGraphics = pGs; | 516 param.m_pGraphics = pGs; |
| 511 param.m_pImage = pData->GetIcon(this, false); | 517 param.m_pImage = pData->GetIcon(this, false); |
| 512 param.m_rtPart = m_rtIcon; | 518 param.m_rtPart = m_rtIcon; |
| 513 if (pMatrix) { | 519 if (pMatrix) |
| 514 param.m_matrix.Concat(*pMatrix); | 520 param.m_matrix.Concat(*pMatrix); |
| 515 } | |
| 516 pTheme->DrawBackground(¶m); | 521 pTheme->DrawBackground(¶m); |
| 517 } | 522 } |
| 523 |
| 518 void IFWL_Form::GetEdgeRect(CFX_RectF& rtEdge) { | 524 void IFWL_Form::GetEdgeRect(CFX_RectF& rtEdge) { |
| 519 rtEdge = m_rtRelative; | 525 rtEdge = m_rtRelative; |
| 520 if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_Border) { | 526 if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_Border) { |
| 521 FX_FLOAT fCX = GetBorderSize(); | 527 FX_FLOAT fCX = GetBorderSize(); |
| 522 FX_FLOAT fCY = GetBorderSize(false); | 528 FX_FLOAT fCY = GetBorderSize(false); |
| 523 rtEdge.Deflate(fCX, m_rtCaption.Height(), fCX, fCY); | 529 rtEdge.Deflate(fCX, m_rtCaption.Height(), fCX, fCY); |
| 524 } | 530 } |
| 525 } | 531 } |
| 532 |
| 526 void IFWL_Form::SetWorkAreaRect() { | 533 void IFWL_Form::SetWorkAreaRect() { |
| 527 m_rtRestore = m_pProperties->m_rtWidget; | 534 m_rtRestore = m_pProperties->m_rtWidget; |
| 528 CFWL_WidgetMgr* pWidgetMgr = GetOwnerApp()->GetWidgetMgr(); | 535 CFWL_WidgetMgr* pWidgetMgr = GetOwnerApp()->GetWidgetMgr(); |
| 529 if (!pWidgetMgr) | 536 if (!pWidgetMgr) |
| 530 return; | 537 return; |
| 538 |
| 531 m_bSetMaximize = true; | 539 m_bSetMaximize = true; |
| 532 Repaint(&m_rtRelative); | 540 Repaint(&m_rtRelative); |
| 533 } | 541 } |
| 534 | 542 |
| 535 void IFWL_Form::Layout() { | 543 void IFWL_Form::Layout() { |
| 536 GetRelativeRect(m_rtRelative); | 544 GetRelativeRect(m_rtRelative); |
| 545 |
| 537 #ifndef FWL_UseMacSystemBorder | 546 #ifndef FWL_UseMacSystemBorder |
| 538 ResetSysBtn(); | 547 ResetSysBtn(); |
| 539 #endif | 548 #endif |
| 540 } | 549 } |
| 550 |
| 541 void IFWL_Form::ResetSysBtn() { | 551 void IFWL_Form::ResetSysBtn() { |
| 542 m_fCXBorder = | 552 m_fCXBorder = |
| 543 *static_cast<FX_FLOAT*>(GetThemeCapacity(CFWL_WidgetCapacity::CXBorder)); | 553 *static_cast<FX_FLOAT*>(GetThemeCapacity(CFWL_WidgetCapacity::CXBorder)); |
| 544 m_fCYBorder = | 554 m_fCYBorder = |
| 545 *static_cast<FX_FLOAT*>(GetThemeCapacity(CFWL_WidgetCapacity::CYBorder)); | 555 *static_cast<FX_FLOAT*>(GetThemeCapacity(CFWL_WidgetCapacity::CYBorder)); |
| 546 RemoveSysButtons(); | 556 RemoveSysButtons(); |
| 557 |
| 547 IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; | 558 IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; |
| 548 m_bCustomizeLayout = pTheme->IsCustomizedLayout(this); | 559 m_bCustomizeLayout = pTheme->IsCustomizedLayout(this); |
| 549 FX_FLOAT fCapHeight = GetCaptionHeight(); | 560 FX_FLOAT fCapHeight = GetCaptionHeight(); |
| 550 if (fCapHeight > 0) { | 561 if (fCapHeight > 0) { |
| 551 m_rtCaption = m_rtRelative; | 562 m_rtCaption = m_rtRelative; |
| 552 m_rtCaption.height = fCapHeight; | 563 m_rtCaption.height = fCapHeight; |
| 553 } | 564 } |
| 565 |
| 554 m_iSysBox = 0; | 566 m_iSysBox = 0; |
| 555 if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_CloseBox) { | 567 if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_CloseBox) { |
| 556 m_pCloseBox = new CFWL_SysBtn; | 568 m_pCloseBox = new CFWL_SysBtn; |
| 557 if (!m_bCustomizeLayout) { | 569 if (!m_bCustomizeLayout) { |
| 558 m_pCloseBox->m_rtBtn.Set( | 570 m_pCloseBox->m_rtBtn.Set( |
| 559 m_rtRelative.right() - kSystemButtonMargin - kSystemButtonSize, | 571 m_rtRelative.right() - kSystemButtonMargin - kSystemButtonSize, |
| 560 kSystemButtonMargin, kSystemButtonSize, kSystemButtonSize); | 572 kSystemButtonMargin, kSystemButtonSize, kSystemButtonSize); |
| 561 } | 573 } |
| 562 m_iSysBox++; | 574 m_iSysBox++; |
| 563 } | 575 } |
| (...skipping 24 matching lines...) Expand all Loading... |
| 588 m_pCloseBox->m_rtBtn.left - kSystemButtonSpan - kSystemButtonSize, | 600 m_pCloseBox->m_rtBtn.left - kSystemButtonSpan - kSystemButtonSize, |
| 589 m_pCloseBox->m_rtBtn.top, kSystemButtonSize, kSystemButtonSize); | 601 m_pCloseBox->m_rtBtn.top, kSystemButtonSize, kSystemButtonSize); |
| 590 } else { | 602 } else { |
| 591 m_pMinBox->m_rtBtn.Set( | 603 m_pMinBox->m_rtBtn.Set( |
| 592 m_rtRelative.right() - kSystemButtonMargin - kSystemButtonSize, | 604 m_rtRelative.right() - kSystemButtonMargin - kSystemButtonSize, |
| 593 kSystemButtonMargin, kSystemButtonSize, kSystemButtonSize); | 605 kSystemButtonMargin, kSystemButtonSize, kSystemButtonSize); |
| 594 } | 606 } |
| 595 } | 607 } |
| 596 m_iSysBox++; | 608 m_iSysBox++; |
| 597 } | 609 } |
| 610 |
| 598 IFWL_FormDP* pData = | 611 IFWL_FormDP* pData = |
| 599 static_cast<IFWL_FormDP*>(m_pProperties->m_pDataProvider); | 612 static_cast<IFWL_FormDP*>(m_pProperties->m_pDataProvider); |
| 600 if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_Icon && | 613 if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_Icon && |
| 601 pData->GetIcon(this, false)) { | 614 pData->GetIcon(this, false)) { |
| 602 if (!m_bCustomizeLayout) { | 615 if (!m_bCustomizeLayout) { |
| 603 m_rtIcon.Set(5, (m_rtCaption.height - m_fSmallIconSz) / 2, m_fSmallIconSz, | 616 m_rtIcon.Set(5, (m_rtCaption.height - m_fSmallIconSz) / 2, m_fSmallIconSz, |
| 604 m_fSmallIconSz); | 617 m_fSmallIconSz); |
| 605 } | 618 } |
| 606 } | 619 } |
| 607 } | 620 } |
| 621 |
| 608 void IFWL_Form::RegisterForm() { | 622 void IFWL_Form::RegisterForm() { |
| 609 const IFWL_App* pApp = GetOwnerApp(); | 623 const IFWL_App* pApp = GetOwnerApp(); |
| 610 if (!pApp) | 624 if (!pApp) |
| 611 return; | 625 return; |
| 612 | 626 |
| 613 CFWL_NoteDriver* pDriver = | 627 CFWL_NoteDriver* pDriver = |
| 614 static_cast<CFWL_NoteDriver*>(pApp->GetNoteDriver()); | 628 static_cast<CFWL_NoteDriver*>(pApp->GetNoteDriver()); |
| 615 if (!pDriver) | 629 if (!pDriver) |
| 616 return; | 630 return; |
| 617 | 631 |
| 618 pDriver->RegisterForm(this); | 632 pDriver->RegisterForm(this); |
| 619 } | 633 } |
| 634 |
| 620 void IFWL_Form::UnRegisterForm() { | 635 void IFWL_Form::UnRegisterForm() { |
| 621 const IFWL_App* pApp = GetOwnerApp(); | 636 const IFWL_App* pApp = GetOwnerApp(); |
| 622 if (!pApp) | 637 if (!pApp) |
| 623 return; | 638 return; |
| 624 | 639 |
| 625 CFWL_NoteDriver* pDriver = | 640 CFWL_NoteDriver* pDriver = |
| 626 static_cast<CFWL_NoteDriver*>(pApp->GetNoteDriver()); | 641 static_cast<CFWL_NoteDriver*>(pApp->GetNoteDriver()); |
| 627 if (!pDriver) | 642 if (!pDriver) |
| 628 return; | 643 return; |
| 629 | 644 |
| 630 pDriver->UnRegisterForm(this); | 645 pDriver->UnRegisterForm(this); |
| 631 } | 646 } |
| 632 | 647 |
| 633 void IFWL_Form::SetThemeData() { | 648 void IFWL_Form::SetThemeData() { |
| 634 m_fSmallIconSz = | 649 m_fSmallIconSz = |
| 635 *static_cast<FX_FLOAT*>(GetThemeCapacity(CFWL_WidgetCapacity::SmallIcon)); | 650 *static_cast<FX_FLOAT*>(GetThemeCapacity(CFWL_WidgetCapacity::SmallIcon)); |
| 636 m_fBigIconSz = | 651 m_fBigIconSz = |
| 637 *static_cast<FX_FLOAT*>(GetThemeCapacity(CFWL_WidgetCapacity::BigIcon)); | 652 *static_cast<FX_FLOAT*>(GetThemeCapacity(CFWL_WidgetCapacity::BigIcon)); |
| 638 } | 653 } |
| 654 |
| 639 bool IFWL_Form::HasIcon() { | 655 bool IFWL_Form::HasIcon() { |
| 640 IFWL_FormDP* pData = | 656 IFWL_FormDP* pData = |
| 641 static_cast<IFWL_FormDP*>(m_pProperties->m_pDataProvider); | 657 static_cast<IFWL_FormDP*>(m_pProperties->m_pDataProvider); |
| 642 return !!pData->GetIcon(this, false); | 658 return !!pData->GetIcon(this, false); |
| 643 } | 659 } |
| 660 |
| 644 void IFWL_Form::UpdateIcon() { | 661 void IFWL_Form::UpdateIcon() { |
| 645 CFWL_WidgetMgr* pWidgetMgr = GetOwnerApp()->GetWidgetMgr(); | 662 CFWL_WidgetMgr* pWidgetMgr = GetOwnerApp()->GetWidgetMgr(); |
| 646 if (!pWidgetMgr) | 663 if (!pWidgetMgr) |
| 647 return; | 664 return; |
| 665 |
| 648 IFWL_FormDP* pData = | 666 IFWL_FormDP* pData = |
| 649 static_cast<IFWL_FormDP*>(m_pProperties->m_pDataProvider); | 667 static_cast<IFWL_FormDP*>(m_pProperties->m_pDataProvider); |
| 650 CFX_DIBitmap* pBigIcon = pData->GetIcon(this, true); | 668 CFX_DIBitmap* pBigIcon = pData->GetIcon(this, true); |
| 651 CFX_DIBitmap* pSmallIcon = pData->GetIcon(this, false); | 669 CFX_DIBitmap* pSmallIcon = pData->GetIcon(this, false); |
| 652 if (pBigIcon) | 670 if (pBigIcon) |
| 653 m_pBigIcon = pBigIcon; | 671 m_pBigIcon = pBigIcon; |
| 654 if (pSmallIcon) | 672 if (pSmallIcon) |
| 655 m_pSmallIcon = pSmallIcon; | 673 m_pSmallIcon = pSmallIcon; |
| 656 } | 674 } |
| 675 |
| 657 void IFWL_Form::UpdateCaption() { | 676 void IFWL_Form::UpdateCaption() { |
| 658 CFWL_WidgetMgr* pWidgetMgr = GetOwnerApp()->GetWidgetMgr(); | 677 CFWL_WidgetMgr* pWidgetMgr = GetOwnerApp()->GetWidgetMgr(); |
| 659 if (!pWidgetMgr) | 678 if (!pWidgetMgr) |
| 660 return; | 679 return; |
| 680 |
| 661 IFWL_DataProvider* pData = m_pProperties->m_pDataProvider; | 681 IFWL_DataProvider* pData = m_pProperties->m_pDataProvider; |
| 662 if (!pData) | 682 if (!pData) |
| 663 return; | 683 return; |
| 684 |
| 664 CFX_WideString text; | 685 CFX_WideString text; |
| 665 pData->GetCaption(this, text); | 686 pData->GetCaption(this, text); |
| 666 } | 687 } |
| 667 | 688 |
| 668 #ifdef FWL_UseMacSystemBorder | |
| 669 void IFWL_Form::OnProcessMessage(CFWL_Message* pMessage) {} | |
| 670 #else | |
| 671 void IFWL_Form::OnProcessMessage(CFWL_Message* pMessage) { | 689 void IFWL_Form::OnProcessMessage(CFWL_Message* pMessage) { |
| 690 #ifndef FWL_UseMacSystemBorder |
| 672 if (!pMessage) | 691 if (!pMessage) |
| 673 return; | 692 return; |
| 674 | 693 |
| 675 switch (pMessage->GetClassID()) { | 694 switch (pMessage->GetClassID()) { |
| 676 case CFWL_MessageType::Mouse: { | 695 case CFWL_MessageType::Mouse: { |
| 677 CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage); | 696 CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage); |
| 678 switch (pMsg->m_dwCmd) { | 697 switch (pMsg->m_dwCmd) { |
| 679 case FWL_MouseCommand::LeftButtonDown: | 698 case FWL_MouseCommand::LeftButtonDown: |
| 680 OnLButtonDown(pMsg); | 699 OnLButtonDown(pMsg); |
| 681 break; | 700 break; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 692 OnLButtonDblClk(pMsg); | 711 OnLButtonDblClk(pMsg); |
| 693 break; | 712 break; |
| 694 default: | 713 default: |
| 695 break; | 714 break; |
| 696 } | 715 } |
| 697 break; | 716 break; |
| 698 } | 717 } |
| 699 default: | 718 default: |
| 700 break; | 719 break; |
| 701 } | 720 } |
| 721 #endif // FWL_UseMacSystemBorder |
| 702 } | 722 } |
| 703 #endif // FWL_UseMacSystemBorder | |
| 704 | 723 |
| 705 void IFWL_Form::OnDrawWidget(CFX_Graphics* pGraphics, | 724 void IFWL_Form::OnDrawWidget(CFX_Graphics* pGraphics, |
| 706 const CFX_Matrix* pMatrix) { | 725 const CFX_Matrix* pMatrix) { |
| 707 DrawWidget(pGraphics, pMatrix); | 726 DrawWidget(pGraphics, pMatrix); |
| 708 } | 727 } |
| 709 | 728 |
| 710 void IFWL_Form::OnLButtonDown(CFWL_MsgMouse* pMsg) { | 729 void IFWL_Form::OnLButtonDown(CFWL_MsgMouse* pMsg) { |
| 711 SetGrab(true); | 730 SetGrab(true); |
| 712 m_bLButtonDown = true; | 731 m_bLButtonDown = true; |
| 713 m_eResizeType = FORM_RESIZETYPE_None; | 732 m_eResizeType = FORM_RESIZETYPE_None; |
| 733 |
| 714 CFWL_SysBtn* pPressBtn = GetSysBtnAtPoint(pMsg->m_fx, pMsg->m_fy); | 734 CFWL_SysBtn* pPressBtn = GetSysBtnAtPoint(pMsg->m_fx, pMsg->m_fy); |
| 715 m_iCaptureBtn = GetSysBtnIndex(pPressBtn); | 735 m_iCaptureBtn = GetSysBtnIndex(pPressBtn); |
| 736 |
| 716 CFX_RectF rtCap; | 737 CFX_RectF rtCap; |
| 717 rtCap.Set(m_rtCaption.left + m_fCYBorder, m_rtCaption.top + m_fCXBorder, | 738 rtCap.Set(m_rtCaption.left + m_fCYBorder, m_rtCaption.top + m_fCXBorder, |
| 718 m_rtCaption.width - kSystemButtonSize * m_iSysBox - 2 * m_fCYBorder, | 739 m_rtCaption.width - kSystemButtonSize * m_iSysBox - 2 * m_fCYBorder, |
| 719 m_rtCaption.height - m_fCXBorder); | 740 m_rtCaption.height - m_fCXBorder); |
| 720 | 741 |
| 721 if (pPressBtn) { | 742 if (pPressBtn) { |
| 722 pPressBtn->SetPressed(); | 743 pPressBtn->SetPressed(); |
| 723 Repaint(&pPressBtn->m_rtBtn); | 744 Repaint(&pPressBtn->m_rtBtn); |
| 724 } else if (rtCap.Contains(pMsg->m_fx, pMsg->m_fy)) { | 745 } else if (rtCap.Contains(pMsg->m_fx, pMsg->m_fy)) { |
| 725 m_eResizeType = FORM_RESIZETYPE_Cap; | 746 m_eResizeType = FORM_RESIZETYPE_Cap; |
| 726 } | 747 } |
| 748 |
| 727 m_InfoStart.m_ptStart = CFX_PointF(pMsg->m_fx, pMsg->m_fy); | 749 m_InfoStart.m_ptStart = CFX_PointF(pMsg->m_fx, pMsg->m_fy); |
| 728 m_InfoStart.m_szStart = CFX_SizeF(m_pProperties->m_rtWidget.width, | 750 m_InfoStart.m_szStart = CFX_SizeF(m_pProperties->m_rtWidget.width, |
| 729 m_pProperties->m_rtWidget.height); | 751 m_pProperties->m_rtWidget.height); |
| 730 } | 752 } |
| 731 | 753 |
| 732 void IFWL_Form::OnLButtonUp(CFWL_MsgMouse* pMsg) { | 754 void IFWL_Form::OnLButtonUp(CFWL_MsgMouse* pMsg) { |
| 733 SetGrab(false); | 755 SetGrab(false); |
| 734 m_bLButtonDown = false; | 756 m_bLButtonDown = false; |
| 735 CFWL_SysBtn* pPointBtn = GetSysBtnAtPoint(pMsg->m_fx, pMsg->m_fy); | 757 CFWL_SysBtn* pPointBtn = GetSysBtnAtPoint(pMsg->m_fx, pMsg->m_fy); |
| 736 CFWL_SysBtn* pPressedBtn = GetSysBtnByIndex(m_iCaptureBtn); | 758 CFWL_SysBtn* pPressedBtn = GetSysBtnByIndex(m_iCaptureBtn); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 756 } | 778 } |
| 757 | 779 |
| 758 void IFWL_Form::OnMouseMove(CFWL_MsgMouse* pMsg) { | 780 void IFWL_Form::OnMouseMove(CFWL_MsgMouse* pMsg) { |
| 759 if (m_bLButtonDown) | 781 if (m_bLButtonDown) |
| 760 return; | 782 return; |
| 761 | 783 |
| 762 CFX_RectF rtInvalidate; | 784 CFX_RectF rtInvalidate; |
| 763 rtInvalidate.Reset(); | 785 rtInvalidate.Reset(); |
| 764 CFWL_SysBtn* pPointBtn = GetSysBtnAtPoint(pMsg->m_fx, pMsg->m_fy); | 786 CFWL_SysBtn* pPointBtn = GetSysBtnAtPoint(pMsg->m_fx, pMsg->m_fy); |
| 765 CFWL_SysBtn* pOldHover = GetSysBtnByState(FWL_SYSBUTTONSTATE_Hover); | 787 CFWL_SysBtn* pOldHover = GetSysBtnByState(FWL_SYSBUTTONSTATE_Hover); |
| 766 #if (_FX_OS_ == _FX_MACOSX_) | 788 |
| 789 #if _FX_OS_ == _FX_MACOSX_ |
| 767 { | 790 { |
| 768 if (pOldHover && pPointBtn != pOldHover) | 791 if (pOldHover && pPointBtn != pOldHover) |
| 769 pOldHover->SetNormal(); | 792 pOldHover->SetNormal(); |
| 770 if (pPointBtn && pPointBtn != pOldHover) | 793 if (pPointBtn && pPointBtn != pOldHover) |
| 771 pPointBtn->SetHover(); | 794 pPointBtn->SetHover(); |
| 772 if (m_pCloseBox) | 795 if (m_pCloseBox) |
| 773 rtInvalidate = m_pCloseBox->m_rtBtn; | 796 rtInvalidate = m_pCloseBox->m_rtBtn; |
| 774 if (m_pMaxBox) { | 797 if (m_pMaxBox) { |
| 775 if (rtInvalidate.IsEmpty()) | 798 if (rtInvalidate.IsEmpty()) |
| 776 rtInvalidate = m_pMaxBox->m_rtBtn; | 799 rtInvalidate = m_pMaxBox->m_rtBtn; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 796 } | 819 } |
| 797 if (pPointBtn && pPointBtn != pOldHover) { | 820 if (pPointBtn && pPointBtn != pOldHover) { |
| 798 pPointBtn->SetHover(); | 821 pPointBtn->SetHover(); |
| 799 if (rtInvalidate.IsEmpty()) | 822 if (rtInvalidate.IsEmpty()) |
| 800 rtInvalidate = pPointBtn->m_rtBtn; | 823 rtInvalidate = pPointBtn->m_rtBtn; |
| 801 else | 824 else |
| 802 rtInvalidate.Union(pPointBtn->m_rtBtn); | 825 rtInvalidate.Union(pPointBtn->m_rtBtn); |
| 803 } | 826 } |
| 804 } | 827 } |
| 805 #endif | 828 #endif |
| 829 |
| 806 if (!rtInvalidate.IsEmpty()) | 830 if (!rtInvalidate.IsEmpty()) |
| 807 Repaint(&rtInvalidate); | 831 Repaint(&rtInvalidate); |
| 808 } | 832 } |
| 809 | 833 |
| 810 void IFWL_Form::OnMouseLeave(CFWL_MsgMouse* pMsg) { | 834 void IFWL_Form::OnMouseLeave(CFWL_MsgMouse* pMsg) { |
| 811 CFWL_SysBtn* pHover = GetSysBtnByState(FWL_SYSBUTTONSTATE_Hover); | 835 CFWL_SysBtn* pHover = GetSysBtnByState(FWL_SYSBUTTONSTATE_Hover); |
| 812 if (pHover) { | 836 if (!pHover) |
| 813 pHover->SetNormal(); | 837 return; |
| 814 Repaint(&pHover->m_rtBtn); | 838 |
| 815 } | 839 pHover->SetNormal(); |
| 840 Repaint(&pHover->m_rtBtn); |
| 816 } | 841 } |
| 817 | 842 |
| 818 void IFWL_Form::OnLButtonDblClk(CFWL_MsgMouse* pMsg) { | 843 void IFWL_Form::OnLButtonDblClk(CFWL_MsgMouse* pMsg) { |
| 819 if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_FRM_Resize) && | 844 if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_FRM_Resize) && |
| 820 HitTest(pMsg->m_fx, pMsg->m_fy) == FWL_WidgetHit::Titlebar) { | 845 HitTest(pMsg->m_fx, pMsg->m_fy) == FWL_WidgetHit::Titlebar) { |
| 821 if (m_bMaximized) | 846 if (m_bMaximized) |
| 822 SetWidgetRect(m_rtRestore); | 847 SetWidgetRect(m_rtRestore); |
| 823 else | 848 else |
| 824 SetWorkAreaRect(); | 849 SetWorkAreaRect(); |
| 825 | 850 |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 858 | 883 |
| 859 uint32_t CFWL_SysBtn::GetPartState() const { | 884 uint32_t CFWL_SysBtn::GetPartState() const { |
| 860 if (IsDisabled()) | 885 if (IsDisabled()) |
| 861 return CFWL_PartState_Disabled; | 886 return CFWL_PartState_Disabled; |
| 862 if (m_dwState & FWL_SYSBUTTONSTATE_Pressed) | 887 if (m_dwState & FWL_SYSBUTTONSTATE_Pressed) |
| 863 return CFWL_PartState_Pressed; | 888 return CFWL_PartState_Pressed; |
| 864 if (m_dwState & FWL_SYSBUTTONSTATE_Hover) | 889 if (m_dwState & FWL_SYSBUTTONSTATE_Hover) |
| 865 return CFWL_PartState_Hovered; | 890 return CFWL_PartState_Hovered; |
| 866 return CFWL_PartState_Normal; | 891 return CFWL_PartState_Normal; |
| 867 } | 892 } |
| OLD | NEW |