Chromium Code Reviews| 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/cfwl_widget.h" | 7 #include "xfa/fwl/core/cfwl_widget.h" |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 58 | 58 |
| 59 CFWL_Widget::~CFWL_Widget() { | 59 CFWL_Widget::~CFWL_Widget() { |
| 60 NotifyDriver(); | 60 NotifyDriver(); |
| 61 m_pWidgetMgr->RemoveWidget(this); | 61 m_pWidgetMgr->RemoveWidget(this); |
| 62 } | 62 } |
| 63 | 63 |
| 64 bool CFWL_Widget::IsInstance(const CFX_WideStringC& wsClass) const { | 64 bool CFWL_Widget::IsInstance(const CFX_WideStringC& wsClass) const { |
| 65 return false; | 65 return false; |
| 66 } | 66 } |
| 67 | 67 |
| 68 void CFWL_Widget::GetWidgetRect(CFX_RectF& rect, bool bAutoSize) { | 68 CFX_RectF CFWL_Widget::GetWidgetRect(bool bAutoSize) { |
| 69 if (!bAutoSize) { | 69 if (!bAutoSize) |
| 70 rect = m_pProperties->m_rtWidget; | 70 return m_pProperties->m_rtWidget; |
| 71 return; | 71 |
| 72 } | 72 CFX_RectF rect; |
| 73 InflateWidgetRect(rect); | 73 InflateWidgetRect(rect); |
| 74 return rect; | |
| 74 } | 75 } |
| 75 | 76 |
| 76 void CFWL_Widget::InflateWidgetRect(CFX_RectF& rect) { | 77 void CFWL_Widget::InflateWidgetRect(CFX_RectF& rect) { |
| 77 if (HasEdge()) { | 78 if (HasEdge()) { |
| 78 FX_FLOAT fEdge = GetEdgeWidth(); | 79 FX_FLOAT fEdge = GetEdgeWidth(); |
| 79 rect.Inflate(fEdge, fEdge); | 80 rect.Inflate(fEdge, fEdge); |
| 80 } | 81 } |
| 81 if (HasBorder()) { | 82 if (HasBorder()) { |
| 82 FX_FLOAT fBorder = GetBorderSize(true); | 83 FX_FLOAT fBorder = GetBorderSize(true); |
| 83 rect.Inflate(fBorder, fBorder); | 84 rect.Inflate(fBorder, fBorder); |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 194 szOffset.y = -szOffset.y; | 195 szOffset.y = -szOffset.y; |
| 195 } | 196 } |
| 196 fx += szOffset.x; | 197 fx += szOffset.x; |
| 197 fy += szOffset.y; | 198 fy += szOffset.y; |
| 198 return; | 199 return; |
| 199 } | 200 } |
| 200 CFX_RectF r; | 201 CFX_RectF r; |
| 201 CFX_Matrix m; | 202 CFX_Matrix m; |
| 202 CFWL_Widget* parent = GetParent(); | 203 CFWL_Widget* parent = GetParent(); |
| 203 if (parent) { | 204 if (parent) { |
| 204 GetWidgetRect(r, false); | 205 InflateWidgetRect(r); |
| 205 fx += r.left; | 206 fx += r.left; |
| 206 fy += r.top; | 207 fy += r.top; |
| 207 GetMatrix(m, true); | 208 GetMatrix(m, true); |
| 208 m.TransformPoint(fx, fy); | 209 m.TransformPoint(fx, fy); |
| 209 } | 210 } |
| 210 CFWL_Widget* form1 = m_pWidgetMgr->GetSystemFormWidget(this); | 211 CFWL_Widget* form1 = m_pWidgetMgr->GetSystemFormWidget(this); |
| 211 if (!form1) | 212 if (!form1) |
| 212 return; | 213 return; |
| 214 | |
| 213 if (!pWidget) { | 215 if (!pWidget) { |
| 214 form1->GetWidgetRect(r, false); | 216 r = form1->GetWidgetRect(false); |
| 215 fx += r.left; | 217 fx += r.left; |
| 216 fy += r.top; | 218 fy += r.top; |
| 217 return; | 219 return; |
| 218 } | 220 } |
| 219 CFWL_Widget* form2 = m_pWidgetMgr->GetSystemFormWidget(pWidget); | 221 CFWL_Widget* form2 = m_pWidgetMgr->GetSystemFormWidget(pWidget); |
| 220 if (!form2) | 222 if (!form2) |
| 221 return; | 223 return; |
| 222 if (form1 != form2) { | 224 if (form1 != form2) { |
| 223 form1->GetWidgetRect(r, false); | 225 r = form1->GetWidgetRect(false); |
| 224 fx += r.left; | 226 fx += r.left; |
| 225 fy += r.top; | 227 fy += r.top; |
| 226 form2->GetWidgetRect(r, false); | 228 r = form2->GetWidgetRect(false); |
| 227 fx -= r.left; | 229 fx -= r.left; |
| 228 fy -= r.top; | 230 fy -= r.top; |
| 229 } | 231 } |
| 230 parent = pWidget->GetParent(); | 232 parent = pWidget->GetParent(); |
| 231 if (parent) { | 233 if (parent) { |
| 232 pWidget->GetMatrix(m, true); | 234 pWidget->GetMatrix(m, true); |
| 233 CFX_Matrix m1; | 235 CFX_Matrix m1; |
| 234 m1.SetIdentity(); | 236 m1.SetIdentity(); |
| 235 m1.SetReverse(m); | 237 m1.SetReverse(m); |
| 236 m1.TransformPoint(fx, fy); | 238 m1.TransformPoint(fx, fy); |
| 237 pWidget->GetWidgetRect(r, false); | 239 r = pWidget->GetWidgetRect(false); |
|
dsinclair
2016/12/07 21:09:11
If pWidget isn't a subclass that overrides GetWidg
| |
| 238 fx -= r.left; | 240 fx -= r.left; |
| 239 fy -= r.top; | 241 fy -= r.top; |
| 240 } | 242 } |
| 241 } | 243 } |
| 242 | 244 |
| 243 void CFWL_Widget::GetMatrix(CFX_Matrix& matrix, bool bGlobal) { | 245 void CFWL_Widget::GetMatrix(CFX_Matrix& matrix, bool bGlobal) { |
| 244 if (!m_pProperties) | 246 if (!m_pProperties) |
| 245 return; | 247 return; |
| 246 if (!bGlobal) { | 248 if (!bGlobal) { |
| 247 matrix.SetIdentity(); | 249 matrix.SetIdentity(); |
| 248 return; | 250 return; |
| 249 } | 251 } |
| 250 | 252 |
| 251 CFWL_Widget* parent = GetParent(); | 253 CFWL_Widget* parent = GetParent(); |
| 252 CFX_ArrayTemplate<CFWL_Widget*> parents; | 254 CFX_ArrayTemplate<CFWL_Widget*> parents; |
| 253 while (parent) { | 255 while (parent) { |
| 254 parents.Add(parent); | 256 parents.Add(parent); |
| 255 parent = parent->GetParent(); | 257 parent = parent->GetParent(); |
| 256 } | 258 } |
| 257 matrix.SetIdentity(); | 259 matrix.SetIdentity(); |
| 258 CFX_Matrix ctmOnParent; | 260 CFX_Matrix ctmOnParent; |
| 259 CFX_RectF rect; | 261 CFX_RectF rect; |
| 260 int32_t count = parents.GetSize(); | 262 int32_t count = parents.GetSize(); |
| 261 for (int32_t i = count - 2; i >= 0; i--) { | 263 for (int32_t i = count - 2; i >= 0; i--) { |
| 262 parent = parents.GetAt(i); | 264 parent = parents.GetAt(i); |
| 263 parent->GetMatrix(ctmOnParent, false); | 265 parent->GetMatrix(ctmOnParent, false); |
| 264 parent->GetWidgetRect(rect, false); | 266 rect = parent->GetWidgetRect(false); |
|
dsinclair
2016/12/07 21:09:11
potential difference if parent is a subclass that
| |
| 265 matrix.Concat(ctmOnParent, true); | 267 matrix.Concat(ctmOnParent, true); |
| 266 matrix.Translate(rect.left, rect.top, true); | 268 matrix.Translate(rect.left, rect.top, true); |
| 267 } | 269 } |
| 268 CFX_Matrix m; | 270 CFX_Matrix m; |
| 269 m.SetIdentity(); | 271 m.SetIdentity(); |
| 270 matrix.Concat(m, true); | 272 matrix.Concat(m, true); |
| 271 parents.RemoveAll(); | 273 parents.RemoveAll(); |
| 272 } | 274 } |
| 273 | 275 |
| 274 IFWL_ThemeProvider* CFWL_Widget::GetThemeProvider() const { | 276 IFWL_ThemeProvider* CFWL_Widget::GetThemeProvider() const { |
| (...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 679 | 681 |
| 680 CFWL_WidgetMgr* pWidgetMgr = GetOwnerApp()->GetWidgetMgr(); | 682 CFWL_WidgetMgr* pWidgetMgr = GetOwnerApp()->GetWidgetMgr(); |
| 681 if (!pWidgetMgr) | 683 if (!pWidgetMgr) |
| 682 return CFX_SizeF(); | 684 return CFX_SizeF(); |
| 683 | 685 |
| 684 CFX_SizeF szRet(m_pProperties->m_rtWidget.left, | 686 CFX_SizeF szRet(m_pProperties->m_rtWidget.left, |
| 685 m_pProperties->m_rtWidget.top); | 687 m_pProperties->m_rtWidget.top); |
| 686 | 688 |
| 687 CFWL_Widget* pDstWidget = GetParent(); | 689 CFWL_Widget* pDstWidget = GetParent(); |
| 688 while (pDstWidget && pDstWidget != pParent) { | 690 while (pDstWidget && pDstWidget != pParent) { |
| 689 CFX_RectF rtDst; | 691 CFX_RectF rtDst = pDstWidget->GetWidgetRect(false); |
| 690 pDstWidget->GetWidgetRect(rtDst, false); | |
| 691 szRet += CFX_SizeF(rtDst.left, rtDst.top); | 692 szRet += CFX_SizeF(rtDst.left, rtDst.top); |
| 692 pDstWidget = pWidgetMgr->GetParentWidget(pDstWidget); | 693 pDstWidget = pWidgetMgr->GetParentWidget(pDstWidget); |
| 693 } | 694 } |
| 694 return szRet; | 695 return szRet; |
| 695 } | 696 } |
| 696 | 697 |
| 697 bool CFWL_Widget::IsParent(CFWL_Widget* pParent) { | 698 bool CFWL_Widget::IsParent(CFWL_Widget* pParent) { |
| 698 CFWL_Widget* pUpWidget = GetParent(); | 699 CFWL_Widget* pUpWidget = GetParent(); |
| 699 while (pUpWidget) { | 700 while (pUpWidget) { |
| 700 if (pUpWidget == pParent) | 701 if (pUpWidget == pParent) |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 720 } | 721 } |
| 721 default: | 722 default: |
| 722 break; | 723 break; |
| 723 } | 724 } |
| 724 } | 725 } |
| 725 | 726 |
| 726 void CFWL_Widget::OnProcessEvent(CFWL_Event* pEvent) {} | 727 void CFWL_Widget::OnProcessEvent(CFWL_Event* pEvent) {} |
| 727 | 728 |
| 728 void CFWL_Widget::OnDrawWidget(CFX_Graphics* pGraphics, | 729 void CFWL_Widget::OnDrawWidget(CFX_Graphics* pGraphics, |
| 729 const CFX_Matrix* pMatrix) {} | 730 const CFX_Matrix* pMatrix) {} |
| OLD | NEW |