diff options
Diffstat (limited to 'fpdfsdk/src/pdfwindow/PWL_ListCtrl.cpp')
-rw-r--r-- | fpdfsdk/src/pdfwindow/PWL_ListCtrl.cpp | 305 |
1 files changed, 134 insertions, 171 deletions
diff --git a/fpdfsdk/src/pdfwindow/PWL_ListCtrl.cpp b/fpdfsdk/src/pdfwindow/PWL_ListCtrl.cpp index 3077e6293f..e01ce5c203 100644 --- a/fpdfsdk/src/pdfwindow/PWL_ListCtrl.cpp +++ b/fpdfsdk/src/pdfwindow/PWL_ListCtrl.cpp @@ -10,236 +10,199 @@ /* ---------------------------- CPWL_ListCtrl ---------------------------- */ -CPWL_ListCtrl::CPWL_ListCtrl() : - m_rcContent(0,0,0,0), - m_ptScroll(0,0), - m_fItemSpace(0.0f), - m_fTopSpace(0.0f), - m_fBottomSpace(0.0f) -{ -} +CPWL_ListCtrl::CPWL_ListCtrl() + : m_rcContent(0, 0, 0, 0), + m_ptScroll(0, 0), + m_fItemSpace(0.0f), + m_fTopSpace(0.0f), + m_fBottomSpace(0.0f) {} -CPWL_ListCtrl::~CPWL_ListCtrl() -{ -} +CPWL_ListCtrl::~CPWL_ListCtrl() {} -void CPWL_ListCtrl::SetScrollPos(const CPDF_Point& point) -{ - m_ptScroll = point; +void CPWL_ListCtrl::SetScrollPos(const CPDF_Point& point) { + m_ptScroll = point; - if (m_ptScroll.x < m_rcContent.left) - m_ptScroll.x = m_rcContent.left; + if (m_ptScroll.x < m_rcContent.left) + m_ptScroll.x = m_rcContent.left; - if (m_ptScroll.x > m_rcContent.right) - m_ptScroll.x = m_rcContent.right; + if (m_ptScroll.x > m_rcContent.right) + m_ptScroll.x = m_rcContent.right; - if (m_ptScroll.y > m_rcContent.top) - m_ptScroll.y = m_rcContent.top; + if (m_ptScroll.y > m_rcContent.top) + m_ptScroll.y = m_rcContent.top; - if (m_ptScroll.y < m_rcContent.bottom) - m_ptScroll.y = m_rcContent.bottom; + if (m_ptScroll.y < m_rcContent.bottom) + m_ptScroll.y = m_rcContent.bottom; } -CPDF_Point CPWL_ListCtrl::GetScrollPos() const -{ - return m_ptScroll; +CPDF_Point CPWL_ListCtrl::GetScrollPos() const { + return m_ptScroll; } -CPDF_Rect CPWL_ListCtrl::GetScrollArea() const -{ - return m_rcContent; +CPDF_Rect CPWL_ListCtrl::GetScrollArea() const { + return m_rcContent; } -void CPWL_ListCtrl::ResetFace() -{ - ResetAll(FALSE, 0); +void CPWL_ListCtrl::ResetFace() { + ResetAll(FALSE, 0); } -void CPWL_ListCtrl::ResetContent(int32_t nStart) -{ - if (nStart < 0) - nStart = 0; - if (nStart >= 0 && nStart < m_aChildren.GetSize()) - ResetAll(TRUE, nStart); +void CPWL_ListCtrl::ResetContent(int32_t nStart) { + if (nStart < 0) + nStart = 0; + if (nStart >= 0 && nStart < m_aChildren.GetSize()) + ResetAll(TRUE, nStart); } -FX_FLOAT CPWL_ListCtrl::GetContentsHeight(FX_FLOAT fLimitWidth) -{ - FX_FLOAT fRet = m_fTopSpace; +FX_FLOAT CPWL_ListCtrl::GetContentsHeight(FX_FLOAT fLimitWidth) { + FX_FLOAT fRet = m_fTopSpace; - FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth(); + FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth(); - if (fLimitWidth > fBorderWidth* 2) - { - for (int32_t i=0,sz=m_aChildren.GetSize(); i<sz; i++) - { - if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) - { - FX_FLOAT fLeft = pChild->GetItemLeftMargin(); - FX_FLOAT fRight = pChild->GetItemRightMargin(); + if (fLimitWidth > fBorderWidth * 2) { + for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) { + if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) { + FX_FLOAT fLeft = pChild->GetItemLeftMargin(); + FX_FLOAT fRight = pChild->GetItemRightMargin(); - fRet += pChild->GetItemHeight(fLimitWidth - fBorderWidth* 2 - fLeft - fRight); - fRet += m_fItemSpace; - } - } + fRet += pChild->GetItemHeight(fLimitWidth - fBorderWidth * 2 - fLeft - + fRight); + fRet += m_fItemSpace; + } + } - fRet -= m_fItemSpace; - } + fRet -= m_fItemSpace; + } - fRet += m_fBottomSpace; + fRet += m_fBottomSpace; - return fRet; + return fRet; } -void CPWL_ListCtrl::ResetAll(FX_BOOL bMove, int32_t nStart) -{ - CPDF_Rect rcClient = GetClientRect(); +void CPWL_ListCtrl::ResetAll(FX_BOOL bMove, int32_t nStart) { + CPDF_Rect rcClient = GetClientRect(); - FX_FLOAT fWidth = rcClient.Width(); + FX_FLOAT fWidth = rcClient.Width(); - FX_FLOAT fy = 0.0f - m_fTopSpace; + FX_FLOAT fy = 0.0f - m_fTopSpace; - if (nStart-1 >= 0 && nStart-1 < m_aChildren.GetSize()) - if (CPWL_Wnd* pChild = m_aChildren.GetAt(nStart-1)) - fy = pChild->GetWindowRect().bottom - m_fItemSpace; + if (nStart - 1 >= 0 && nStart - 1 < m_aChildren.GetSize()) + if (CPWL_Wnd* pChild = m_aChildren.GetAt(nStart - 1)) + fy = pChild->GetWindowRect().bottom - m_fItemSpace; - for (int32_t i=nStart,sz=m_aChildren.GetSize(); i<sz; i++) - { - if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) - { - FX_FLOAT fLeft = pChild->GetItemLeftMargin(); - FX_FLOAT fRight = pChild->GetItemRightMargin(); + for (int32_t i = nStart, sz = m_aChildren.GetSize(); i < sz; i++) { + if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) { + FX_FLOAT fLeft = pChild->GetItemLeftMargin(); + FX_FLOAT fRight = pChild->GetItemRightMargin(); - pChild->SetChildMatrix( - CPDF_Matrix(1,0,0,1, - rcClient.left - m_ptScroll.x, - rcClient.top - m_ptScroll.y) - ); + pChild->SetChildMatrix(CPDF_Matrix(1, 0, 0, 1, + rcClient.left - m_ptScroll.x, + rcClient.top - m_ptScroll.y)); - if (bMove) - { - FX_FLOAT fItemHeight = pChild->GetItemHeight(fWidth - fLeft - fRight); - pChild->Move(CPDF_Rect(fLeft, fy-fItemHeight, fWidth - fRight, fy), TRUE, FALSE); - fy -= fItemHeight; - fy -= m_fItemSpace; - } - } - } + if (bMove) { + FX_FLOAT fItemHeight = pChild->GetItemHeight(fWidth - fLeft - fRight); + pChild->Move(CPDF_Rect(fLeft, fy - fItemHeight, fWidth - fRight, fy), + TRUE, FALSE); + fy -= fItemHeight; + fy -= m_fItemSpace; + } + } + } - fy += m_fItemSpace; + fy += m_fItemSpace; - fy -= m_fBottomSpace; + fy -= m_fBottomSpace; - if (bMove) - { - m_rcContent.left = 0; - m_rcContent.top = 0; - m_rcContent.right = fWidth; - m_rcContent.bottom = fy; - } + if (bMove) { + m_rcContent.left = 0; + m_rcContent.top = 0; + m_rcContent.right = fWidth; + m_rcContent.bottom = fy; + } } -void CPWL_ListCtrl::SetItemSpace(FX_FLOAT fSpace) -{ - m_fItemSpace = fSpace; +void CPWL_ListCtrl::SetItemSpace(FX_FLOAT fSpace) { + m_fItemSpace = fSpace; } -void CPWL_ListCtrl::SetTopSpace(FX_FLOAT fSpace) -{ - m_fTopSpace = fSpace; +void CPWL_ListCtrl::SetTopSpace(FX_FLOAT fSpace) { + m_fTopSpace = fSpace; } -void CPWL_ListCtrl::SetBottomSpace(FX_FLOAT fSpace) -{ - m_fBottomSpace = fSpace; +void CPWL_ListCtrl::SetBottomSpace(FX_FLOAT fSpace) { + m_fBottomSpace = fSpace; } -void CPWL_ListCtrl::RePosChildWnd() -{ - ResetFace(); +void CPWL_ListCtrl::RePosChildWnd() { + ResetFace(); } -void CPWL_ListCtrl::DrawChildAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device) -{ - pDevice->SaveState(); - CPDF_Rect rcClient = GetClientRect(); - CPDF_Rect rcTemp = rcClient; - pUser2Device->TransformRect(rcTemp); - FX_RECT rcClip((int32_t)rcTemp.left, - (int32_t)rcTemp.bottom, - (int32_t)rcTemp.right, - (int32_t)rcTemp.top); +void CPWL_ListCtrl::DrawChildAppearance(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device) { + pDevice->SaveState(); + CPDF_Rect rcClient = GetClientRect(); + CPDF_Rect rcTemp = rcClient; + pUser2Device->TransformRect(rcTemp); + FX_RECT rcClip((int32_t)rcTemp.left, (int32_t)rcTemp.bottom, + (int32_t)rcTemp.right, (int32_t)rcTemp.top); - pDevice->SetClip_Rect(&rcClip); + pDevice->SetClip_Rect(&rcClip); - for (int32_t i=0,sz=m_aChildren.GetSize(); i<sz; i++) - { - if (CPWL_Wnd * pChild = m_aChildren.GetAt(i)) - { - CPDF_Rect rcChild = pChild->ChildToParent(pChild->GetWindowRect()); - if (!(rcChild.top < rcClient.bottom || rcChild.bottom > rcClient.top)) - { - CPDF_Matrix mt = pChild->GetChildMatrix(); - if (mt.IsIdentity()) - { - pChild->DrawAppearance(pDevice,pUser2Device); - } - else - { - mt.Concat(*pUser2Device); - pChild->DrawAppearance(pDevice,&mt); - } - } - } - } + for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) { + if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) { + CPDF_Rect rcChild = pChild->ChildToParent(pChild->GetWindowRect()); + if (!(rcChild.top < rcClient.bottom || rcChild.bottom > rcClient.top)) { + CPDF_Matrix mt = pChild->GetChildMatrix(); + if (mt.IsIdentity()) { + pChild->DrawAppearance(pDevice, pUser2Device); + } else { + mt.Concat(*pUser2Device); + pChild->DrawAppearance(pDevice, &mt); + } + } + } + } - pDevice->RestoreState(); + pDevice->RestoreState(); } -int32_t CPWL_ListCtrl::GetItemIndex(CPWL_Wnd* pItem) -{ - for (int32_t i=0, sz=m_aChildren.GetSize(); i<sz; i++) - { - if (pItem == m_aChildren.GetAt(i)) - return i; - } +int32_t CPWL_ListCtrl::GetItemIndex(CPWL_Wnd* pItem) { + for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) { + if (pItem == m_aChildren.GetAt(i)) + return i; + } - return -1; + return -1; } -CPDF_Point CPWL_ListCtrl::InToOut(const CPDF_Point& point) const -{ - CPDF_Rect rcClient = GetClientRect(); +CPDF_Point CPWL_ListCtrl::InToOut(const CPDF_Point& point) const { + CPDF_Rect rcClient = GetClientRect(); - return CPDF_Point(point.x + rcClient.left - m_ptScroll.x, - point.y + rcClient.top - m_ptScroll.y); + return CPDF_Point(point.x + rcClient.left - m_ptScroll.x, + point.y + rcClient.top - m_ptScroll.y); } -CPDF_Point CPWL_ListCtrl::OutToIn(const CPDF_Point& point) const -{ - CPDF_Rect rcClient = GetClientRect(); +CPDF_Point CPWL_ListCtrl::OutToIn(const CPDF_Point& point) const { + CPDF_Rect rcClient = GetClientRect(); - return CPDF_Point(point.x - rcClient.left + m_ptScroll.x, - point.y - rcClient.top + m_ptScroll.y); + return CPDF_Point(point.x - rcClient.left + m_ptScroll.x, + point.y - rcClient.top + m_ptScroll.y); } -CPDF_Rect CPWL_ListCtrl::InToOut(const CPDF_Rect& rect) const -{ - CPDF_Rect rcClient = GetClientRect(); +CPDF_Rect CPWL_ListCtrl::InToOut(const CPDF_Rect& rect) const { + CPDF_Rect rcClient = GetClientRect(); - return CPDF_Rect(rect.left + rcClient.left - m_ptScroll.x, - rect.bottom + rcClient.top - m_ptScroll.y, - rect.right + rcClient.left - m_ptScroll.x, - rect.top + rcClient.top - m_ptScroll.y); + return CPDF_Rect(rect.left + rcClient.left - m_ptScroll.x, + rect.bottom + rcClient.top - m_ptScroll.y, + rect.right + rcClient.left - m_ptScroll.x, + rect.top + rcClient.top - m_ptScroll.y); } -CPDF_Rect CPWL_ListCtrl::OutToIn(const CPDF_Rect& rect) const -{ - CPDF_Rect rcClient = GetClientRect(); +CPDF_Rect CPWL_ListCtrl::OutToIn(const CPDF_Rect& rect) const { + CPDF_Rect rcClient = GetClientRect(); - return CPDF_Rect(rect.left - rcClient.left + m_ptScroll.x, - rect.bottom - rcClient.top + m_ptScroll.y, - rect.right - rcClient.left + m_ptScroll.x, - rect.top - rcClient.top + m_ptScroll.y); + return CPDF_Rect(rect.left - rcClient.left + m_ptScroll.x, + rect.bottom - rcClient.top + m_ptScroll.y, + rect.right - rcClient.left + m_ptScroll.x, + rect.top - rcClient.top + m_ptScroll.y); } - |