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_listbox.h" | 7 #include "xfa/fwl/core/ifwl_listbox.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 24 matching lines...) Expand all Loading... |
35 m_rtConent.Reset(); | 35 m_rtConent.Reset(); |
36 m_rtStatic.Reset(); | 36 m_rtStatic.Reset(); |
37 } | 37 } |
38 | 38 |
39 IFWL_ListBox::~IFWL_ListBox() {} | 39 IFWL_ListBox::~IFWL_ListBox() {} |
40 | 40 |
41 FWL_Type IFWL_ListBox::GetClassID() const { | 41 FWL_Type IFWL_ListBox::GetClassID() const { |
42 return FWL_Type::ListBox; | 42 return FWL_Type::ListBox; |
43 } | 43 } |
44 | 44 |
45 FWL_Error IFWL_ListBox::GetWidgetRect(CFX_RectF& rect, bool bAutoSize) { | 45 void IFWL_ListBox::GetWidgetRect(CFX_RectF& rect, bool bAutoSize) { |
46 if (bAutoSize) { | 46 if (bAutoSize) { |
47 rect.Set(0, 0, 0, 0); | 47 rect.Set(0, 0, 0, 0); |
48 if (!m_pProperties->m_pThemeProvider) { | 48 if (!m_pProperties->m_pThemeProvider) { |
49 m_pProperties->m_pThemeProvider = GetAvailableTheme(); | 49 m_pProperties->m_pThemeProvider = GetAvailableTheme(); |
50 } | 50 } |
51 CFX_SizeF fs = CalcSize(true); | 51 CFX_SizeF fs = CalcSize(true); |
52 rect.Set(0, 0, fs.x, fs.y); | 52 rect.Set(0, 0, fs.x, fs.y); |
53 IFWL_Widget::GetWidgetRect(rect, true); | 53 IFWL_Widget::GetWidgetRect(rect, true); |
54 } else { | 54 } else { |
55 rect = m_pProperties->m_rtWidget; | 55 rect = m_pProperties->m_rtWidget; |
56 } | 56 } |
57 return FWL_Error::Succeeded; | |
58 } | 57 } |
59 | 58 |
60 FWL_Error IFWL_ListBox::Update() { | 59 void IFWL_ListBox::Update() { |
61 if (IsLocked()) { | 60 if (IsLocked()) { |
62 return FWL_Error::Indefinite; | 61 return; |
63 } | 62 } |
64 if (!m_pProperties->m_pThemeProvider) { | 63 if (!m_pProperties->m_pThemeProvider) { |
65 m_pProperties->m_pThemeProvider = GetAvailableTheme(); | 64 m_pProperties->m_pThemeProvider = GetAvailableTheme(); |
66 } | 65 } |
67 m_iTTOAligns = FDE_TTOALIGNMENT_Center; | 66 m_iTTOAligns = FDE_TTOALIGNMENT_Center; |
68 switch (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_AlignMask) { | 67 switch (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_AlignMask) { |
69 case FWL_STYLEEXT_LTB_LeftAlign: { | 68 case FWL_STYLEEXT_LTB_LeftAlign: { |
70 m_iTTOAligns = FDE_TTOALIGNMENT_CenterLeft; | 69 m_iTTOAligns = FDE_TTOALIGNMENT_CenterLeft; |
71 break; | 70 break; |
72 } | 71 } |
73 case FWL_STYLEEXT_LTB_RightAlign: { | 72 case FWL_STYLEEXT_LTB_RightAlign: { |
74 m_iTTOAligns = FDE_TTOALIGNMENT_CenterRight; | 73 m_iTTOAligns = FDE_TTOALIGNMENT_CenterRight; |
75 break; | 74 break; |
76 } | 75 } |
77 case FWL_STYLEEXT_LTB_CenterAlign: | 76 case FWL_STYLEEXT_LTB_CenterAlign: |
78 default: { m_iTTOAligns = FDE_TTOALIGNMENT_Center; } | 77 default: { m_iTTOAligns = FDE_TTOALIGNMENT_Center; } |
79 } | 78 } |
80 if (m_pProperties->m_dwStyleExes & FWL_WGTSTYLE_RTLReading) { | 79 if (m_pProperties->m_dwStyleExes & FWL_WGTSTYLE_RTLReading) { |
81 m_dwTTOStyles |= FDE_TTOSTYLE_RTL; | 80 m_dwTTOStyles |= FDE_TTOSTYLE_RTL; |
82 } | 81 } |
83 m_dwTTOStyles |= FDE_TTOSTYLE_SingleLine; | 82 m_dwTTOStyles |= FDE_TTOSTYLE_SingleLine; |
84 m_fScorllBarWidth = GetScrollWidth(); | 83 m_fScorllBarWidth = GetScrollWidth(); |
85 CalcSize(); | 84 CalcSize(); |
86 return FWL_Error::Succeeded; | |
87 } | 85 } |
88 | 86 |
89 FWL_WidgetHit IFWL_ListBox::HitTest(FX_FLOAT fx, FX_FLOAT fy) { | 87 FWL_WidgetHit IFWL_ListBox::HitTest(FX_FLOAT fx, FX_FLOAT fy) { |
90 if (IsShowScrollBar(false)) { | 88 if (IsShowScrollBar(false)) { |
91 CFX_RectF rect; | 89 CFX_RectF rect; |
92 m_pHorzScrollBar->GetWidgetRect(rect); | 90 m_pHorzScrollBar->GetWidgetRect(rect); |
93 if (rect.Contains(fx, fy)) | 91 if (rect.Contains(fx, fy)) |
94 return FWL_WidgetHit::HScrollBar; | 92 return FWL_WidgetHit::HScrollBar; |
95 } | 93 } |
96 if (IsShowScrollBar(true)) { | 94 if (IsShowScrollBar(true)) { |
97 CFX_RectF rect; | 95 CFX_RectF rect; |
98 m_pVertScrollBar->GetWidgetRect(rect); | 96 m_pVertScrollBar->GetWidgetRect(rect); |
99 if (rect.Contains(fx, fy)) | 97 if (rect.Contains(fx, fy)) |
100 return FWL_WidgetHit::VScrollBar; | 98 return FWL_WidgetHit::VScrollBar; |
101 } | 99 } |
102 if (m_rtClient.Contains(fx, fy)) | 100 if (m_rtClient.Contains(fx, fy)) |
103 return FWL_WidgetHit::Client; | 101 return FWL_WidgetHit::Client; |
104 return FWL_WidgetHit::Unknown; | 102 return FWL_WidgetHit::Unknown; |
105 } | 103 } |
106 | 104 |
107 FWL_Error IFWL_ListBox::DrawWidget(CFX_Graphics* pGraphics, | 105 void IFWL_ListBox::DrawWidget(CFX_Graphics* pGraphics, |
108 const CFX_Matrix* pMatrix) { | 106 const CFX_Matrix* pMatrix) { |
109 if (!pGraphics) | 107 if (!pGraphics) |
110 return FWL_Error::Indefinite; | 108 return; |
111 if (!m_pProperties->m_pThemeProvider) | 109 if (!m_pProperties->m_pThemeProvider) |
112 return FWL_Error::Indefinite; | 110 return; |
113 IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; | 111 IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; |
114 pGraphics->SaveGraphState(); | 112 pGraphics->SaveGraphState(); |
115 if (HasBorder()) { | 113 if (HasBorder()) { |
116 DrawBorder(pGraphics, CFWL_Part::Border, pTheme, pMatrix); | 114 DrawBorder(pGraphics, CFWL_Part::Border, pTheme, pMatrix); |
117 } | 115 } |
118 if (HasEdge()) { | 116 if (HasEdge()) { |
119 DrawEdge(pGraphics, CFWL_Part::Edge, pTheme, pMatrix); | 117 DrawEdge(pGraphics, CFWL_Part::Edge, pTheme, pMatrix); |
120 } | 118 } |
121 CFX_RectF rtClip(m_rtConent); | 119 CFX_RectF rtClip(m_rtConent); |
122 if (IsShowScrollBar(false)) { | 120 if (IsShowScrollBar(false)) { |
123 rtClip.height -= m_fScorllBarWidth; | 121 rtClip.height -= m_fScorllBarWidth; |
124 } | 122 } |
125 if (IsShowScrollBar(true)) { | 123 if (IsShowScrollBar(true)) { |
126 rtClip.width -= m_fScorllBarWidth; | 124 rtClip.width -= m_fScorllBarWidth; |
127 } | 125 } |
128 if (pMatrix) { | 126 if (pMatrix) { |
129 pMatrix->TransformRect(rtClip); | 127 pMatrix->TransformRect(rtClip); |
130 } | 128 } |
131 pGraphics->SetClipRect(rtClip); | 129 pGraphics->SetClipRect(rtClip); |
132 if ((m_pProperties->m_dwStyles & FWL_WGTSTYLE_NoBackground) == 0) { | 130 if ((m_pProperties->m_dwStyles & FWL_WGTSTYLE_NoBackground) == 0) { |
133 DrawBkground(pGraphics, pTheme, pMatrix); | 131 DrawBkground(pGraphics, pTheme, pMatrix); |
134 } | 132 } |
135 DrawItems(pGraphics, pTheme, pMatrix); | 133 DrawItems(pGraphics, pTheme, pMatrix); |
136 pGraphics->RestoreGraphState(); | 134 pGraphics->RestoreGraphState(); |
137 return FWL_Error::Succeeded; | |
138 } | 135 } |
139 | 136 |
140 FWL_Error IFWL_ListBox::SetThemeProvider(IFWL_ThemeProvider* pThemeProvider) { | 137 void IFWL_ListBox::SetThemeProvider(IFWL_ThemeProvider* pThemeProvider) { |
141 if (!pThemeProvider) | 138 if (pThemeProvider) |
142 return FWL_Error::Indefinite; | 139 m_pProperties->m_pThemeProvider = pThemeProvider; |
143 m_pProperties->m_pThemeProvider = pThemeProvider; | |
144 return FWL_Error::Succeeded; | |
145 } | 140 } |
146 int32_t IFWL_ListBox::CountSelItems() { | 141 int32_t IFWL_ListBox::CountSelItems() { |
147 if (!m_pProperties->m_pDataProvider) | 142 if (!m_pProperties->m_pDataProvider) |
148 return 0; | 143 return 0; |
149 int32_t iRet = 0; | 144 int32_t iRet = 0; |
150 IFWL_ListBoxDP* pData = | 145 IFWL_ListBoxDP* pData = |
151 static_cast<IFWL_ListBoxDP*>(m_pProperties->m_pDataProvider); | 146 static_cast<IFWL_ListBoxDP*>(m_pProperties->m_pDataProvider); |
152 int32_t iCount = pData->CountItems(this); | 147 int32_t iCount = pData->CountItems(this); |
153 for (int32_t i = 0; i < iCount; i++) { | 148 for (int32_t i = 0; i < iCount; i++) { |
154 CFWL_ListItem* pItem = pData->GetItem(this, i); | 149 CFWL_ListItem* pItem = pData->GetItem(this, i); |
(...skipping 990 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1145 Repaint(&m_rtClient); | 1140 Repaint(&m_rtClient); |
1146 } | 1141 } |
1147 return true; | 1142 return true; |
1148 } | 1143 } |
1149 | 1144 |
1150 void IFWL_ListBox::DispatchSelChangedEv() { | 1145 void IFWL_ListBox::DispatchSelChangedEv() { |
1151 CFWL_EvtLtbSelChanged ev; | 1146 CFWL_EvtLtbSelChanged ev; |
1152 ev.m_pSrcTarget = this; | 1147 ev.m_pSrcTarget = this; |
1153 DispatchEvent(&ev); | 1148 DispatchEvent(&ev); |
1154 } | 1149 } |
OLD | NEW |