| 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 "fpdfsdk/include/pdfwindow/PWL_ListCtrl.h" | 7 #include "fpdfsdk/include/pdfwindow/PWL_ListCtrl.h" |
| 8 #include "fpdfsdk/include/pdfwindow/PWL_Wnd.h" | 8 #include "fpdfsdk/include/pdfwindow/PWL_Wnd.h" |
| 9 | 9 |
| 10 CPWL_ListCtrl::CPWL_ListCtrl() | 10 CPWL_ListCtrl::CPWL_ListCtrl() |
| 11 : m_rcContent(0, 0, 0, 0), | 11 : m_rcContent(0, 0, 0, 0), |
| 12 m_ptScroll(0, 0), | 12 m_ptScroll(0, 0), |
| 13 m_fItemSpace(0.0f), | 13 m_fItemSpace(0.0f), |
| 14 m_fTopSpace(0.0f), | 14 m_fTopSpace(0.0f), |
| 15 m_fBottomSpace(0.0f) {} | 15 m_fBottomSpace(0.0f) {} |
| 16 | 16 |
| 17 CPWL_ListCtrl::~CPWL_ListCtrl() {} | 17 CPWL_ListCtrl::~CPWL_ListCtrl() {} |
| 18 | 18 |
| 19 void CPWL_ListCtrl::SetScrollPos(const CPDF_Point& point) { | 19 void CPWL_ListCtrl::SetScrollPos(const CFX_FloatPoint& point) { |
| 20 m_ptScroll = point; | 20 m_ptScroll = point; |
| 21 | 21 |
| 22 if (m_ptScroll.x < m_rcContent.left) | 22 if (m_ptScroll.x < m_rcContent.left) |
| 23 m_ptScroll.x = m_rcContent.left; | 23 m_ptScroll.x = m_rcContent.left; |
| 24 | 24 |
| 25 if (m_ptScroll.x > m_rcContent.right) | 25 if (m_ptScroll.x > m_rcContent.right) |
| 26 m_ptScroll.x = m_rcContent.right; | 26 m_ptScroll.x = m_rcContent.right; |
| 27 | 27 |
| 28 if (m_ptScroll.y > m_rcContent.top) | 28 if (m_ptScroll.y > m_rcContent.top) |
| 29 m_ptScroll.y = m_rcContent.top; | 29 m_ptScroll.y = m_rcContent.top; |
| 30 | 30 |
| 31 if (m_ptScroll.y < m_rcContent.bottom) | 31 if (m_ptScroll.y < m_rcContent.bottom) |
| 32 m_ptScroll.y = m_rcContent.bottom; | 32 m_ptScroll.y = m_rcContent.bottom; |
| 33 } | 33 } |
| 34 | 34 |
| 35 CPDF_Point CPWL_ListCtrl::GetScrollPos() const { | 35 CFX_FloatPoint CPWL_ListCtrl::GetScrollPos() const { |
| 36 return m_ptScroll; | 36 return m_ptScroll; |
| 37 } | 37 } |
| 38 | 38 |
| 39 CPDF_Rect CPWL_ListCtrl::GetScrollArea() const { | 39 CFX_FloatRect CPWL_ListCtrl::GetScrollArea() const { |
| 40 return m_rcContent; | 40 return m_rcContent; |
| 41 } | 41 } |
| 42 | 42 |
| 43 void CPWL_ListCtrl::ResetFace() { | 43 void CPWL_ListCtrl::ResetFace() { |
| 44 ResetAll(FALSE, 0); | 44 ResetAll(FALSE, 0); |
| 45 } | 45 } |
| 46 | 46 |
| 47 void CPWL_ListCtrl::ResetContent(int32_t nStart) { | 47 void CPWL_ListCtrl::ResetContent(int32_t nStart) { |
| 48 if (nStart < 0) | 48 if (nStart < 0) |
| 49 nStart = 0; | 49 nStart = 0; |
| (...skipping 20 matching lines...) Expand all Loading... |
| 70 | 70 |
| 71 fRet -= m_fItemSpace; | 71 fRet -= m_fItemSpace; |
| 72 } | 72 } |
| 73 | 73 |
| 74 fRet += m_fBottomSpace; | 74 fRet += m_fBottomSpace; |
| 75 | 75 |
| 76 return fRet; | 76 return fRet; |
| 77 } | 77 } |
| 78 | 78 |
| 79 void CPWL_ListCtrl::ResetAll(FX_BOOL bMove, int32_t nStart) { | 79 void CPWL_ListCtrl::ResetAll(FX_BOOL bMove, int32_t nStart) { |
| 80 CPDF_Rect rcClient = GetClientRect(); | 80 CFX_FloatRect rcClient = GetClientRect(); |
| 81 | 81 |
| 82 FX_FLOAT fWidth = rcClient.Width(); | 82 FX_FLOAT fWidth = rcClient.Width(); |
| 83 | 83 |
| 84 FX_FLOAT fy = 0.0f - m_fTopSpace; | 84 FX_FLOAT fy = 0.0f - m_fTopSpace; |
| 85 | 85 |
| 86 if (nStart - 1 >= 0 && nStart - 1 < m_aChildren.GetSize()) | 86 if (nStart - 1 >= 0 && nStart - 1 < m_aChildren.GetSize()) |
| 87 if (CPWL_Wnd* pChild = m_aChildren.GetAt(nStart - 1)) | 87 if (CPWL_Wnd* pChild = m_aChildren.GetAt(nStart - 1)) |
| 88 fy = pChild->GetWindowRect().bottom - m_fItemSpace; | 88 fy = pChild->GetWindowRect().bottom - m_fItemSpace; |
| 89 | 89 |
| 90 for (int32_t i = nStart, sz = m_aChildren.GetSize(); i < sz; i++) { | 90 for (int32_t i = nStart, sz = m_aChildren.GetSize(); i < sz; i++) { |
| 91 if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) { | 91 if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) { |
| 92 FX_FLOAT fLeft = pChild->GetItemLeftMargin(); | 92 FX_FLOAT fLeft = pChild->GetItemLeftMargin(); |
| 93 FX_FLOAT fRight = pChild->GetItemRightMargin(); | 93 FX_FLOAT fRight = pChild->GetItemRightMargin(); |
| 94 | 94 |
| 95 pChild->SetChildMatrix(CFX_Matrix(1, 0, 0, 1, | 95 pChild->SetChildMatrix(CFX_Matrix(1, 0, 0, 1, |
| 96 rcClient.left - m_ptScroll.x, | 96 rcClient.left - m_ptScroll.x, |
| 97 rcClient.top - m_ptScroll.y)); | 97 rcClient.top - m_ptScroll.y)); |
| 98 | 98 |
| 99 if (bMove) { | 99 if (bMove) { |
| 100 FX_FLOAT fItemHeight = pChild->GetItemHeight(fWidth - fLeft - fRight); | 100 FX_FLOAT fItemHeight = pChild->GetItemHeight(fWidth - fLeft - fRight); |
| 101 pChild->Move(CPDF_Rect(fLeft, fy - fItemHeight, fWidth - fRight, fy), | 101 pChild->Move( |
| 102 TRUE, FALSE); | 102 CFX_FloatRect(fLeft, fy - fItemHeight, fWidth - fRight, fy), TRUE, |
| 103 FALSE); |
| 103 fy -= fItemHeight; | 104 fy -= fItemHeight; |
| 104 fy -= m_fItemSpace; | 105 fy -= m_fItemSpace; |
| 105 } | 106 } |
| 106 } | 107 } |
| 107 } | 108 } |
| 108 | 109 |
| 109 fy += m_fItemSpace; | 110 fy += m_fItemSpace; |
| 110 | 111 |
| 111 fy -= m_fBottomSpace; | 112 fy -= m_fBottomSpace; |
| 112 | 113 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 130 m_fBottomSpace = fSpace; | 131 m_fBottomSpace = fSpace; |
| 131 } | 132 } |
| 132 | 133 |
| 133 void CPWL_ListCtrl::RePosChildWnd() { | 134 void CPWL_ListCtrl::RePosChildWnd() { |
| 134 ResetFace(); | 135 ResetFace(); |
| 135 } | 136 } |
| 136 | 137 |
| 137 void CPWL_ListCtrl::DrawChildAppearance(CFX_RenderDevice* pDevice, | 138 void CPWL_ListCtrl::DrawChildAppearance(CFX_RenderDevice* pDevice, |
| 138 CFX_Matrix* pUser2Device) { | 139 CFX_Matrix* pUser2Device) { |
| 139 pDevice->SaveState(); | 140 pDevice->SaveState(); |
| 140 CPDF_Rect rcClient = GetClientRect(); | 141 CFX_FloatRect rcClient = GetClientRect(); |
| 141 CPDF_Rect rcTemp = rcClient; | 142 CFX_FloatRect rcTemp = rcClient; |
| 142 pUser2Device->TransformRect(rcTemp); | 143 pUser2Device->TransformRect(rcTemp); |
| 143 FX_RECT rcClip((int32_t)rcTemp.left, (int32_t)rcTemp.bottom, | 144 FX_RECT rcClip((int32_t)rcTemp.left, (int32_t)rcTemp.bottom, |
| 144 (int32_t)rcTemp.right, (int32_t)rcTemp.top); | 145 (int32_t)rcTemp.right, (int32_t)rcTemp.top); |
| 145 | 146 |
| 146 pDevice->SetClip_Rect(&rcClip); | 147 pDevice->SetClip_Rect(&rcClip); |
| 147 | 148 |
| 148 for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) { | 149 for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) { |
| 149 if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) { | 150 if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) { |
| 150 CPDF_Rect rcChild = pChild->ChildToParent(pChild->GetWindowRect()); | 151 CFX_FloatRect rcChild = pChild->ChildToParent(pChild->GetWindowRect()); |
| 151 if (!(rcChild.top < rcClient.bottom || rcChild.bottom > rcClient.top)) { | 152 if (!(rcChild.top < rcClient.bottom || rcChild.bottom > rcClient.top)) { |
| 152 CFX_Matrix mt = pChild->GetChildMatrix(); | 153 CFX_Matrix mt = pChild->GetChildMatrix(); |
| 153 if (mt.IsIdentity()) { | 154 if (mt.IsIdentity()) { |
| 154 pChild->DrawAppearance(pDevice, pUser2Device); | 155 pChild->DrawAppearance(pDevice, pUser2Device); |
| 155 } else { | 156 } else { |
| 156 mt.Concat(*pUser2Device); | 157 mt.Concat(*pUser2Device); |
| 157 pChild->DrawAppearance(pDevice, &mt); | 158 pChild->DrawAppearance(pDevice, &mt); |
| 158 } | 159 } |
| 159 } | 160 } |
| 160 } | 161 } |
| 161 } | 162 } |
| 162 | 163 |
| 163 pDevice->RestoreState(); | 164 pDevice->RestoreState(); |
| 164 } | 165 } |
| 165 | 166 |
| 166 int32_t CPWL_ListCtrl::GetItemIndex(CPWL_Wnd* pItem) { | 167 int32_t CPWL_ListCtrl::GetItemIndex(CPWL_Wnd* pItem) { |
| 167 for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) { | 168 for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) { |
| 168 if (pItem == m_aChildren.GetAt(i)) | 169 if (pItem == m_aChildren.GetAt(i)) |
| 169 return i; | 170 return i; |
| 170 } | 171 } |
| 171 | 172 |
| 172 return -1; | 173 return -1; |
| 173 } | 174 } |
| 174 | 175 |
| 175 CPDF_Point CPWL_ListCtrl::InToOut(const CPDF_Point& point) const { | 176 CFX_FloatPoint CPWL_ListCtrl::InToOut(const CFX_FloatPoint& point) const { |
| 176 CPDF_Rect rcClient = GetClientRect(); | 177 CFX_FloatRect rcClient = GetClientRect(); |
| 177 | 178 |
| 178 return CPDF_Point(point.x + rcClient.left - m_ptScroll.x, | 179 return CFX_FloatPoint(point.x + rcClient.left - m_ptScroll.x, |
| 179 point.y + rcClient.top - m_ptScroll.y); | 180 point.y + rcClient.top - m_ptScroll.y); |
| 180 } | 181 } |
| 181 | 182 |
| 182 CPDF_Point CPWL_ListCtrl::OutToIn(const CPDF_Point& point) const { | 183 CFX_FloatPoint CPWL_ListCtrl::OutToIn(const CFX_FloatPoint& point) const { |
| 183 CPDF_Rect rcClient = GetClientRect(); | 184 CFX_FloatRect rcClient = GetClientRect(); |
| 184 | 185 |
| 185 return CPDF_Point(point.x - rcClient.left + m_ptScroll.x, | 186 return CFX_FloatPoint(point.x - rcClient.left + m_ptScroll.x, |
| 186 point.y - rcClient.top + m_ptScroll.y); | 187 point.y - rcClient.top + m_ptScroll.y); |
| 187 } | 188 } |
| 188 | 189 |
| 189 CPDF_Rect CPWL_ListCtrl::InToOut(const CPDF_Rect& rect) const { | 190 CFX_FloatRect CPWL_ListCtrl::InToOut(const CFX_FloatRect& rect) const { |
| 190 CPDF_Rect rcClient = GetClientRect(); | 191 CFX_FloatRect rcClient = GetClientRect(); |
| 191 | 192 |
| 192 return CPDF_Rect(rect.left + rcClient.left - m_ptScroll.x, | 193 return CFX_FloatRect(rect.left + rcClient.left - m_ptScroll.x, |
| 193 rect.bottom + rcClient.top - m_ptScroll.y, | 194 rect.bottom + rcClient.top - m_ptScroll.y, |
| 194 rect.right + rcClient.left - m_ptScroll.x, | 195 rect.right + rcClient.left - m_ptScroll.x, |
| 195 rect.top + rcClient.top - m_ptScroll.y); | 196 rect.top + rcClient.top - m_ptScroll.y); |
| 196 } | 197 } |
| 197 | 198 |
| 198 CPDF_Rect CPWL_ListCtrl::OutToIn(const CPDF_Rect& rect) const { | 199 CFX_FloatRect CPWL_ListCtrl::OutToIn(const CFX_FloatRect& rect) const { |
| 199 CPDF_Rect rcClient = GetClientRect(); | 200 CFX_FloatRect rcClient = GetClientRect(); |
| 200 | 201 |
| 201 return CPDF_Rect(rect.left - rcClient.left + m_ptScroll.x, | 202 return CFX_FloatRect(rect.left - rcClient.left + m_ptScroll.x, |
| 202 rect.bottom - rcClient.top + m_ptScroll.y, | 203 rect.bottom - rcClient.top + m_ptScroll.y, |
| 203 rect.right - rcClient.left + m_ptScroll.x, | 204 rect.right - rcClient.left + m_ptScroll.x, |
| 204 rect.top - rcClient.top + m_ptScroll.y); | 205 rect.top - rcClient.top + m_ptScroll.y); |
| 205 } | 206 } |
| OLD | NEW |