1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved.
2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Use of this source code is governed by a BSD-style license that can be
3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// found in the LICENSE file.
4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/pdfwindow/PDFWindow.h"
8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/pdfwindow/PWL_Wnd.h"
9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/pdfwindow/PWL_ScrollBar.h"
10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/pdfwindow/PWL_Utils.h"
11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define IsFloatZero(f)						((f) < 0.0001 && (f) > -0.0001)
13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define IsFloatBigger(fa,fb)				((fa) > (fb) && !IsFloatZero((fa) - (fb)))
14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define IsFloatSmaller(fa,fb)				((fa) < (fb) && !IsFloatZero((fa) - (fb)))
15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define IsFloatEqual(fa,fb)					IsFloatZero((fa)-(fb))
16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ------------------------------- PWL_FLOATRANGE ------------------------------- */
19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
20ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPWL_FLOATRANGE::PWL_FLOATRANGE()
21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	Default();
23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
25ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPWL_FLOATRANGE::PWL_FLOATRANGE(FX_FLOAT min,FX_FLOAT max)
26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	Set(min,max);
28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid PWL_FLOATRANGE::Default()
31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	fMin = 0;
33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	fMax = 0;
34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid PWL_FLOATRANGE::Set(FX_FLOAT min,FX_FLOAT max)
37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (min > max)
39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		fMin = max;
41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		fMax = min;
42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		fMin = min;
46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		fMax = max;
47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
50ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL	PWL_FLOATRANGE::In(FX_FLOAT x) const
51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return (IsFloatBigger(x,fMin) || IsFloatEqual(x, fMin)) &&
53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		(IsFloatSmaller(x, fMax) || IsFloatEqual(x, fMax));
54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
56ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_FLOAT PWL_FLOATRANGE::GetWidth() const
57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return fMax - fMin;
59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ------------------------------- PWL_SCROLL_PRIVATEDATA ------------------------------- */
62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
63ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPWL_SCROLL_PRIVATEDATA::PWL_SCROLL_PRIVATEDATA()
64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	Default();
66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid PWL_SCROLL_PRIVATEDATA::Default()
69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ScrollRange.Default();
71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	fScrollPos = ScrollRange.fMin;
72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	fClientWidth = 0;
73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	fBigStep = 10;
74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	fSmallStep = 1;
75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid PWL_SCROLL_PRIVATEDATA::SetScrollRange(FX_FLOAT min,FX_FLOAT max)
78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ScrollRange.Set(min,max);
80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (IsFloatSmaller(fScrollPos, ScrollRange.fMin))
82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		fScrollPos = ScrollRange.fMin;
83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (IsFloatBigger(fScrollPos, ScrollRange.fMax))
84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		fScrollPos = ScrollRange.fMax;
85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid PWL_SCROLL_PRIVATEDATA::SetClientWidth(FX_FLOAT width)
88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	fClientWidth = width;
90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid PWL_SCROLL_PRIVATEDATA::SetSmallStep(FX_FLOAT step)
93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	fSmallStep = step;
95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid PWL_SCROLL_PRIVATEDATA::SetBigStep(FX_FLOAT step)
98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	fBigStep = step;
100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
102ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL PWL_SCROLL_PRIVATEDATA::SetPos(FX_FLOAT pos)
103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (ScrollRange.In(pos))
105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		fScrollPos = pos;
107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return FALSE;
110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid PWL_SCROLL_PRIVATEDATA::AddSmall()
113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!SetPos(fScrollPos + fSmallStep))
115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		SetPos(ScrollRange.fMax);
116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid PWL_SCROLL_PRIVATEDATA::SubSmall()
119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!SetPos(fScrollPos - fSmallStep))
121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		SetPos(ScrollRange.fMin);
122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid PWL_SCROLL_PRIVATEDATA::AddBig()
125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!SetPos(fScrollPos + fBigStep))
127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		SetPos(ScrollRange.fMax);
128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid PWL_SCROLL_PRIVATEDATA::SubBig()
131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!SetPos(fScrollPos - fBigStep))
133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		SetPos(ScrollRange.fMin);
134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ------------------------------- CPWL_SBButton ------------------------------- */
137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
138ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPWL_SBButton::CPWL_SBButton(PWL_SCROLLBAR_TYPE eScrollBarType,PWL_SBBUTTON_TYPE eButtonType)
139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_eScrollBarType = eScrollBarType;
141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_eSBButtonType = eButtonType;
142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_bMouseDown = FALSE;
144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
146ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPWL_SBButton::~CPWL_SBButton()
147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
151ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_ByteString CPWL_SBButton::GetClassName() const
152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return "CPWL_SBButton";
154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_SBButton::OnCreate(PWL_CREATEPARAM & cp)
157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	cp.eCursorType = FXCT_ARROW;
159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_SBButton::GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream)
162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPWL_Wnd::GetThisAppearanceStream(sAppStream);
164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!IsVisible()) return;
166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_ByteTextBuf sButton;
168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Rect rectWnd = GetWindowRect();
170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (rectWnd.IsEmpty()) return;
172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	sAppStream << "q\n";
174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Point ptCenter = this->GetCenterPoint();
176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	switch (this->m_eScrollBarType)
178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		case SBT_HSCROLL:
180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			switch (this->m_eSBButtonType)
181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				case PSBT_MIN:
183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					{
184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						CPDF_Point pt1(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f,ptCenter.y);
185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						CPDF_Point pt2(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f,ptCenter.y + PWL_TRIANGLE_HALFLEN);
186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						CPDF_Point pt3(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f,ptCenter.y - PWL_TRIANGLE_HALFLEN);
187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 &&
189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN )
190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						{
191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							sButton << "0 g\n";
192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							sButton << pt1.x << " " << pt1.y << " m\n";
193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							sButton << pt2.x << " " << pt2.y << " l\n";
194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							sButton << pt3.x << " " << pt3.y << " l\n";
195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							sButton << pt1.x << " " << pt1.y << " l f\n";
196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							sAppStream << sButton;
198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						}
199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					}
200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					break;
201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				case PSBT_MAX:
202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					{
203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						CPDF_Point pt1(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f,ptCenter.y);
204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						CPDF_Point pt2(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f,ptCenter.y + PWL_TRIANGLE_HALFLEN);
205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						CPDF_Point pt3(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f,ptCenter.y - PWL_TRIANGLE_HALFLEN);
206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 &&
208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN )
209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						{
210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							sButton << "0 g\n";
211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							sButton << pt1.x << " " << pt1.y << " m\n";
212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							sButton << pt2.x << " " << pt2.y << " l\n";
213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							sButton << pt3.x << " " << pt3.y << " l\n";
214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							sButton << pt1.x << " " << pt1.y << " l f\n";
215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							sAppStream << sButton;
217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						}
218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					}
219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					break;
220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				default:
221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					break;
222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		case SBT_VSCROLL:
225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			switch(this->m_eSBButtonType)
226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				case PSBT_MIN:
228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					{
229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						CPDF_Point pt1(ptCenter.x - PWL_TRIANGLE_HALFLEN,ptCenter.y - PWL_TRIANGLE_HALFLEN * 0.5f);
230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						CPDF_Point pt2(ptCenter.x + PWL_TRIANGLE_HALFLEN,ptCenter.y - PWL_TRIANGLE_HALFLEN * 0.5f);
231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						CPDF_Point pt3(ptCenter.x,ptCenter.y + PWL_TRIANGLE_HALFLEN * 0.5f);
232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 &&
234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN )
235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						{
236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							sButton << "0 g\n";
237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							sButton << pt1.x << " " << pt1.y << " m\n";
238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							sButton << pt2.x << " " << pt2.y << " l\n";
239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							sButton << pt3.x << " " << pt3.y << " l\n";
240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							sButton << pt1.x << " " << pt1.y << " l f\n";
241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							sAppStream << sButton;
243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						}
244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					}
245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					break;
246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				case PSBT_MAX:
247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					{
248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						CPDF_Point pt1(ptCenter.x - PWL_TRIANGLE_HALFLEN,ptCenter.y + PWL_TRIANGLE_HALFLEN * 0.5f);
249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						CPDF_Point pt2(ptCenter.x + PWL_TRIANGLE_HALFLEN,ptCenter.y + PWL_TRIANGLE_HALFLEN * 0.5f);
250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						CPDF_Point pt3(ptCenter.x,ptCenter.y - PWL_TRIANGLE_HALFLEN * 0.5f);
251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 &&
253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN )
254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						{
255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							sButton << "0 g\n";
256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							sButton << pt1.x << " " << pt1.y << " m\n";
257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							sButton << pt2.x << " " << pt2.y << " l\n";
258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							sButton << pt3.x << " " << pt3.y << " l\n";
259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							sButton << pt1.x << " " << pt1.y << " l f\n";
260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							sAppStream << sButton;
262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						}
263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					}
264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					break;
265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				default:
266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					break;
267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		default:
270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	sAppStream << "Q\n";
274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_SBButton::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device)
277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!IsVisible()) return;
279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Rect rectWnd = GetWindowRect();
281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (rectWnd.IsEmpty()) return;
282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Point ptCenter = this->GetCenterPoint();
284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_INT32 nTransparancy = this->GetTransparency();
285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	switch (this->m_eScrollBarType)
287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case SBT_HSCROLL:
289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPWL_Wnd::DrawThisAppearance(pDevice,pUser2Device);
290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		switch (this->m_eSBButtonType)
291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		case PSBT_MIN:
293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				CPDF_Point pt1(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f,ptCenter.y);
295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				CPDF_Point pt2(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f,ptCenter.y + PWL_TRIANGLE_HALFLEN);
296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				CPDF_Point pt3(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f,ptCenter.y - PWL_TRIANGLE_HALFLEN);
297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 &&
299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN )
300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				{
301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					CFX_PathData path;
302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					path.SetPointCount(4);
304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					path.SetPoint(0, pt1.x, pt1.y, FXPT_MOVETO);
305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					path.SetPoint(1, pt2.x, pt2.y, FXPT_LINETO);
306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					path.SetPoint(2, pt3.x, pt3.y, FXPT_LINETO);
307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					path.SetPoint(3, pt1.x, pt1.y, FXPT_LINETO);
308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					pDevice->DrawPath(&path, pUser2Device, NULL,
310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						CPWL_Utils::PWLColorToFXColor(PWL_DEFAULT_BLACKCOLOR,nTransparancy),
311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						0, FXFILL_ALTERNATE);
312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				}
313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		case PSBT_MAX:
316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				CPDF_Point pt1(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f,ptCenter.y);
318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				CPDF_Point pt2(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f,ptCenter.y + PWL_TRIANGLE_HALFLEN);
319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				CPDF_Point pt3(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f,ptCenter.y - PWL_TRIANGLE_HALFLEN);
320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 &&
322ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN )
323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				{
324ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					CFX_PathData path;
325ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					path.SetPointCount(4);
327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					path.SetPoint(0, pt1.x, pt1.y, FXPT_MOVETO);
328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					path.SetPoint(1, pt2.x, pt2.y, FXPT_LINETO);
329ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					path.SetPoint(2, pt3.x, pt3.y, FXPT_LINETO);
330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					path.SetPoint(3, pt1.x, pt1.y, FXPT_LINETO);
331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					pDevice->DrawPath(&path, pUser2Device, NULL,
333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						CPWL_Utils::PWLColorToFXColor(PWL_DEFAULT_BLACKCOLOR,nTransparancy),
334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						0, FXFILL_ALTERNATE);
335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				}
336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		default:
339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case SBT_VSCROLL:
343ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		switch(this->m_eSBButtonType)
344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		case PSBT_MIN:
346ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				//draw border
348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				CPDF_Rect rcDraw = rectWnd;
349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw,
350ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					ArgbEncode(nTransparancy,100,100,100),0.0f);
351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				//draw inner border
353ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				rcDraw = CPWL_Utils::DeflateRect(rectWnd,0.5f);
354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw,
355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					ArgbEncode(nTransparancy,255,255,255),1.0f);
356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
357ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				//draw background
358ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
359ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				rcDraw = CPWL_Utils::DeflateRect(rectWnd,1.0f);
360ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
361ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				if (this->IsEnabled())
362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					CPWL_Utils::DrawShadow(pDevice, pUser2Device, TRUE, FALSE, rcDraw, nTransparancy, 80, 220);
363ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				else
364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcDraw, ArgbEncode(255,255,255,255));
365ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
366ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				//draw arrow
367ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				if (rectWnd.top - rectWnd.bottom > 6.0f )
369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				{
370ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					FX_FLOAT fX = rectWnd.left + 1.5f;
371ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					FX_FLOAT fY = rectWnd.bottom;
372ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					CPDF_Point pts[7] = {
373ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								CPDF_Point(fX+2.5f, fY+4.0f),
374ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								CPDF_Point(fX+2.5f, fY+3.0f),
375ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								CPDF_Point(fX+4.5f, fY+5.0f),
376ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								CPDF_Point(fX+6.5f, fY+3.0f),
377ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								CPDF_Point(fX+6.5f, fY+4.0f),
378ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								CPDF_Point(fX+4.5f, fY+6.0f),
379ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								CPDF_Point(fX+2.5f, fY+4.0f)};
380ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
381ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
382ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					if (this->IsEnabled())
383ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						CPWL_Utils::DrawFillArea(pDevice, pUser2Device, pts, 7, ArgbEncode(nTransparancy,255,255,255));
384ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					else
385ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						CPWL_Utils::DrawFillArea(pDevice, pUser2Device, pts, 7,
386ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							CPWL_Utils::PWLColorToFXColor(PWL_DEFAULT_HEAVYGRAYCOLOR,255));
387ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				}
388ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
389ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
390ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		case PSBT_MAX:
391ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
392ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				//draw border
393ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				CPDF_Rect rcDraw = rectWnd;
394ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw,
395ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					ArgbEncode(nTransparancy,100,100,100),0.0f);
396ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
397ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				//draw inner border
398ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				rcDraw = CPWL_Utils::DeflateRect(rectWnd,0.5f);
399ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw,
400ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					ArgbEncode(nTransparancy,255,255,255),1.0f);
401ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
402ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				//draw background
403ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				rcDraw = CPWL_Utils::DeflateRect(rectWnd,1.0f);
404ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				if (this->IsEnabled())
405ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					CPWL_Utils::DrawShadow(pDevice, pUser2Device, TRUE, FALSE, rcDraw, nTransparancy, 80, 220);
406ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				else
407ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcDraw, ArgbEncode(255,255,255,255));
408ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
409ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				//draw arrow
410ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
411ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				if (rectWnd.top - rectWnd.bottom > 6.0f )
412ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				{
413ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					FX_FLOAT fX = rectWnd.left + 1.5f;
414ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					FX_FLOAT fY = rectWnd.bottom;
415ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
416ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					CPDF_Point pts[7] = {
417ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								CPDF_Point(fX+2.5f, fY+5.0f),
418ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								CPDF_Point(fX+2.5f, fY+6.0f),
419ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								CPDF_Point(fX+4.5f, fY+4.0f),
420ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								CPDF_Point(fX+6.5f, fY+6.0f),
421ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								CPDF_Point(fX+6.5f, fY+5.0f),
422ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								CPDF_Point(fX+4.5f, fY+3.0f),
423ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								CPDF_Point(fX+2.5f, fY+5.0f)};
424ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
425ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
426ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					if (this->IsEnabled())
427ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						CPWL_Utils::DrawFillArea(pDevice, pUser2Device, pts, 7, ArgbEncode(nTransparancy,255,255,255));
428ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					else
429ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						CPWL_Utils::DrawFillArea(pDevice, pUser2Device, pts, 7,
430ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							CPWL_Utils::PWLColorToFXColor(PWL_DEFAULT_HEAVYGRAYCOLOR,255));
431ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				}
432ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
433ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
434ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		case PSBT_POS:
435ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
436ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				//CPWL_Wnd::DrawThisAppearance(pDevice,pUser2Device);
437ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
438ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				//draw border
439ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				CPDF_Rect rcDraw = rectWnd;
440ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw,
441ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					ArgbEncode(nTransparancy,100,100,100),0.0f);
442ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
443ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				//draw inner border
444ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				rcDraw = CPWL_Utils::DeflateRect(rectWnd,0.5f);
445ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw,
446ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					ArgbEncode(nTransparancy,255,255,255),1.0f);
447ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
448ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				if (this->IsEnabled())
449ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				{
450ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					//draw shadow effect
451ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
452ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					CPDF_Point ptTop = CPDF_Point(rectWnd.left,rectWnd.top-1.0f);
453ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					CPDF_Point ptBottom = CPDF_Point(rectWnd.left,rectWnd.bottom+1.0f);
454ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
455ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					ptTop.x += 1.5f;
456ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					ptBottom.x += 1.5f;
457ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
458ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
459ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						ArgbEncode(nTransparancy,210,210,210),1.0f);
460ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
461ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					ptTop.x += 1.0f;
462ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					ptBottom.x += 1.0f;
463ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
464ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
465ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						ArgbEncode(nTransparancy,220,220,220),1.0f);
466ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
467ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					ptTop.x += 1.0f;
468ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					ptBottom.x += 1.0f;
469ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
470ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
471ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						ArgbEncode(nTransparancy,240,240,240),1.0f);
472ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
473ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					ptTop.x += 1.0f;
474ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					ptBottom.x += 1.0f;
475ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
476ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
477ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						ArgbEncode(nTransparancy,240,240,240),1.0f);
478ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
479ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					ptTop.x += 1.0f;
480ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					ptBottom.x += 1.0f;
481ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
482ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
483ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						ArgbEncode(nTransparancy,210,210,210),1.0f);
484ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
485ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					ptTop.x += 1.0f;
486ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					ptBottom.x += 1.0f;
487ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
488ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
489ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						ArgbEncode(nTransparancy,180,180,180),1.0f);
490ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
491ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					ptTop.x += 1.0f;
492ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					ptBottom.x += 1.0f;
493ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
494ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
495ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						ArgbEncode(nTransparancy,150,150,150),1.0f);
496ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
497ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					ptTop.x += 1.0f;
498ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					ptBottom.x += 1.0f;
499ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
500ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
501ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						ArgbEncode(nTransparancy,150,150,150),1.0f);
502ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
503ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					ptTop.x += 1.0f;
504ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					ptBottom.x += 1.0f;
505ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
506ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
507ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						ArgbEncode(nTransparancy,180,180,180),1.0f);
508ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
509ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					ptTop.x += 1.0f;
510ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					ptBottom.x += 1.0f;
511ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
512ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
513ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						ArgbEncode(nTransparancy,210,210,210),1.0f);
514ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				}
515ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				else
516ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				{
517ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcDraw, ArgbEncode(255,255,255,255));
518ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				}
519ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
520ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				//draw friction
521ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
522ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				if (rectWnd.Height() > 8.0f)
523ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				{
524ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					FX_COLORREF crStroke = ArgbEncode(nTransparancy,120,120,120);
525ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					if (!this->IsEnabled())
526ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						crStroke = CPWL_Utils::PWLColorToFXColor(PWL_DEFAULT_HEAVYGRAYCOLOR,255);
527ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
528ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					FX_FLOAT nFrictionWidth = 5.0f;
529ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					FX_FLOAT nFrictionHeight = 5.5f;
530ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
531ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					CPDF_Point ptLeft = CPDF_Point(ptCenter.x - nFrictionWidth / 2.0f, ptCenter.y - nFrictionHeight / 2.0f + 0.5f);
532ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					CPDF_Point ptRight = CPDF_Point(ptCenter.x + nFrictionWidth / 2.0f, ptCenter.y - nFrictionHeight / 2.0f + 0.5f);
533ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
534ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptLeft, ptRight,
535ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						crStroke,1.0f);
536ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
537ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					ptLeft.y += 2.0f;
538ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					ptRight.y += 2.0f;
539ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
540ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptLeft, ptRight,
541ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						crStroke,1.0f);
542ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
543ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					ptLeft.y += 2.0f;
544ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					ptRight.y += 2.0f;
545ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
546ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptLeft, ptRight,
547ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						crStroke,1.0f);
548ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
549ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					/*
550ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					ptLeft.y += 1.5f;
551ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					ptRight.y += 1.5f;
552ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
553ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptLeft, ptRight,
554ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						ArgbEncode(nTransparancy,150,150,150),1.0f);
555ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						*/
556ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				}
557ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
558ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
559ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		default:
560ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
561ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
562ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
563ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	default:
564ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
565ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
566ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
567ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
568ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPWL_SBButton::OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag)
569ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
570ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPWL_Wnd::OnLButtonDown(point,nFlag);
571ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
572ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (CPWL_Wnd * pParent = GetParentWindow())
573ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pParent->OnNotify(this,PNM_LBUTTONDOWN,0,(FX_INTPTR)&point);
574ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
575ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_bMouseDown = TRUE;
576ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	SetCapture();
577ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
578ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
579ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
580ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
581ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPWL_SBButton::OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag)
582ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
583ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPWL_Wnd::OnLButtonUp(point,nFlag);
584ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
585ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (CPWL_Wnd * pParent = GetParentWindow())
586ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pParent->OnNotify(this,PNM_LBUTTONUP,0,(FX_INTPTR)&point);
587ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
588ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_bMouseDown = FALSE;
589ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ReleaseCapture();
590ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
591ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
592ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
593ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
594ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPWL_SBButton::OnMouseMove(const CPDF_Point & point, FX_DWORD nFlag)
595ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
596ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPWL_Wnd::OnMouseMove(point,nFlag);
597ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
598ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (CPWL_Wnd * pParent = GetParentWindow())
599ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
600ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pParent->OnNotify(this,PNM_MOUSEMOVE,0,(FX_INTPTR)&point);
601ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
602ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		/*
603ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (m_bMouseDown && (m_eSBButtonType == PSBT_MIN || m_eSBButtonType == PSBT_MAX))
604ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
605ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (!pParent->OnNotify(this,PNM_LBUTTONDOWN,nFlags,(FX_INTPTR)&point))
606ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				return FALSE;
607ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
608ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		*/
609ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
610ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
611ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
612ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
613ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
614ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ------------------------------- CPWL_ScrollBar ---------------------------------- */
615ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
616ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPWL_ScrollBar::CPWL_ScrollBar(PWL_SCROLLBAR_TYPE sbType):
617ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_sbType(sbType),
618ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pMinButton(NULL),
619ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pMaxButton(NULL),
620ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pPosButton(NULL),
621ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_bMouseDown(FALSE),
622ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_bMinOrMax(FALSE),
623ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_bNotifyForever(TRUE)
624ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
625ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
626ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
627ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPWL_ScrollBar::~CPWL_ScrollBar()
628ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
629ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
630ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
631ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_ByteString CPWL_ScrollBar::GetClassName() const
632ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
633ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return "CPWL_ScrollBar";
634ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
635ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
636ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ScrollBar::OnCreate(PWL_CREATEPARAM & cp)
637ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
638ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	cp.eCursorType = FXCT_ARROW;
639ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
640ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
641ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ScrollBar::RePosChildWnd()
642ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
643ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Rect rcClient = this->GetClientRect();
644ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
645ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*
646ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	switch(m_sbType)
647ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
648ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		case SBT_HSCROLL:
649ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (rcClient.right - rcClient.left < PWL_SCROLLBAR_WIDTH ||
650ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				rcClient.top - rcClient.bottom < PWL_SCROLLBAR_WIDTH)
651ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
652ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				SetVisible(FALSE);
653ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
654ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
655ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		case SBT_VSCROLL:
656ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (rcClient.right - rcClient.left < PWL_SCROLLBAR_WIDTH ||
657ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				rcClient.top - rcClient.bottom < PWL_SCROLLBAR_WIDTH)
658ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
659ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				SetVisible(FALSE);
660ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
661ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
662ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
663ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
664ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Rect rcMinButton,rcMaxButton;
665ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
666ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_FLOAT fBWidth = 0;
667ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
668ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	switch (m_sbType)
669ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
670ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case SBT_HSCROLL:
671ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (rcClient.right - rcClient.left > PWL_SCROLLBAR_BUTTON_WIDTH * 2 + PWL_SCROLLBAR_POSBUTTON_MINWIDTH + 2)
672ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
673ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			rcMinButton = CPDF_Rect(rcClient.left,rcClient.bottom,
674ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				rcClient.left + PWL_SCROLLBAR_BUTTON_WIDTH,rcClient.top);
675ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			rcMaxButton = CPDF_Rect(rcClient.right - PWL_SCROLLBAR_BUTTON_WIDTH,rcClient.bottom,
676ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				rcClient.right,rcClient.top);
677ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
678ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		else
679ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
680ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			fBWidth = (rcClient.right - rcClient.left - PWL_SCROLLBAR_POSBUTTON_MINWIDTH - 2) / 2;
681ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
682ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (fBWidth > 0)
683ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
684ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				rcMinButton = CPDF_Rect(rcClient.left,rcClient.bottom,
685ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					rcClient.left + fBWidth,rcClient.top);
686ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				rcMaxButton = CPDF_Rect(rcClient.right - fBWidth,rcClient.bottom,
687ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					rcClient.right,rcClient.top);
688ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
689ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			else SetVisible(FALSE);
690ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
691ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
692ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case SBT_VSCROLL:
693ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (IsFloatBigger(rcClient.top - rcClient.bottom, PWL_SCROLLBAR_BUTTON_WIDTH * 2 + PWL_SCROLLBAR_POSBUTTON_MINWIDTH + 2))
694ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
695ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			rcMinButton = CPDF_Rect(rcClient.left,rcClient.top - PWL_SCROLLBAR_BUTTON_WIDTH,
696ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				rcClient.right,rcClient.top);
697ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			rcMaxButton = CPDF_Rect(rcClient.left,rcClient.bottom,
698ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				rcClient.right,rcClient.bottom + PWL_SCROLLBAR_BUTTON_WIDTH);
699ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
700ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		else
701ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
702ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			fBWidth = (rcClient.top - rcClient.bottom - PWL_SCROLLBAR_POSBUTTON_MINWIDTH - 2) / 2;
703ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
704ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (IsFloatBigger(fBWidth, 0))
705ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
706ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				rcMinButton = CPDF_Rect(rcClient.left,rcClient.top - fBWidth,
707ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					rcClient.right,rcClient.top);
708ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				rcMaxButton = CPDF_Rect(rcClient.left,rcClient.bottom,
709ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					rcClient.right,rcClient.bottom + fBWidth);
710ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
711ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			else SetVisible(FALSE);
712ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
713ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
714ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
715ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
716ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//	if (IsVisible())
717ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
718ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (m_pMinButton)
719ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			m_pMinButton->Move(rcMinButton,TRUE,FALSE);
720ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
721ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (m_pMaxButton)
722ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			m_pMaxButton->Move(rcMaxButton,TRUE,FALSE);
723ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
724ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		MovePosButton(FALSE);
725ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
726ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
727ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
728ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ScrollBar::GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream)
729ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
730ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Rect rectWnd = GetWindowRect();
731ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
732ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (IsVisible() && !rectWnd.IsEmpty())
733ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
734ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CFX_ByteTextBuf sButton;
735ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
736ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		sButton << "q\n";
737ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		sButton << "0 w\n" << CPWL_Utils::GetColorAppStream(GetBackgroundColor(),TRUE);
738ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		sButton << rectWnd.left << " " << rectWnd.bottom << " "
739ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				<< rectWnd.right - rectWnd.left << " " << rectWnd.top - rectWnd.bottom << " re b Q\n";
740ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
741ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		sAppStream << sButton;
742ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
743ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
744ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
745ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ScrollBar::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device)
746ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
747ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//	CPWL_Wnd::DrawThisAppearance(pDevice,pUser2Device);
748ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Rect rectWnd = GetWindowRect();
749ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
750ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (IsVisible() && !rectWnd.IsEmpty())
751ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
752ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rectWnd, this->GetBackgroundColor(), GetTransparency());
753ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
754ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device,
755ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CPDF_Point(rectWnd.left+2.0f,rectWnd.top-2.0f), CPDF_Point(rectWnd.left+2.0f,rectWnd.bottom+2.0f),
756ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			ArgbEncode(this->GetTransparency(),100,100,100),1.0f);
757ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
758ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device,
759ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CPDF_Point(rectWnd.right-2.0f,rectWnd.top-2.0f), CPDF_Point(rectWnd.right-2.0f,rectWnd.bottom+2.0f),
760ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			ArgbEncode(this->GetTransparency(),100,100,100),1.0f);
761ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
762ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
763ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
764ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPWL_ScrollBar::OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag)
765ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
766ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPWL_Wnd::OnLButtonDown(point,nFlag);
767ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
768ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	//SetFocus();
769ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
770ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (HasFlag(PWS_AUTOTRANSPARENT))
771ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
772ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (GetTransparency() != 255)
773ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
774ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			SetTransparency(255);
775ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			InvalidateRect();
776ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
777ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
778ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
779ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Rect rcMinArea,rcMaxArea;
780ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
781ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_pPosButton && m_pPosButton->IsVisible())
782ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
783ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPDF_Rect rcClient = this->GetClientRect();
784ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPDF_Rect rcPosButton = m_pPosButton->GetWindowRect();
785ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
786ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		switch (m_sbType)
787ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
788ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		case SBT_HSCROLL:
789ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			rcMinArea = CPDF_Rect(rcClient.left + PWL_SCROLLBAR_BUTTON_WIDTH,rcClient.bottom,
790ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							rcPosButton.left,rcClient.top);
791ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			rcMaxArea = CPDF_Rect(rcPosButton.right,rcClient.bottom,
792ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							rcClient.right - PWL_SCROLLBAR_BUTTON_WIDTH,rcClient.top);
793ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
794ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
795ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		case SBT_VSCROLL:
796ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			rcMinArea = CPDF_Rect(rcClient.left,rcPosButton.top,
797ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							rcClient.right,rcClient.top - PWL_SCROLLBAR_BUTTON_WIDTH);
798ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			rcMaxArea = CPDF_Rect(rcClient.left,rcClient.bottom + PWL_SCROLLBAR_BUTTON_WIDTH,
799ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							rcClient.right,rcPosButton.bottom);
800ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
801ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
802ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
803ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		rcMinArea.Normalize();
804ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		rcMaxArea.Normalize();
805ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
806ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (rcMinArea.Contains(point.x,point.y))
807ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
808ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			m_sData.SubBig();
809ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			MovePosButton(TRUE);
810ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			NotifyScrollWindow();
811ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
812ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
813ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (rcMaxArea.Contains(point.x,point.y))
814ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
815ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			m_sData.AddBig();
816ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			MovePosButton(TRUE);
817ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			NotifyScrollWindow();
818ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
819ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
820ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
821ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
822ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
823ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
824ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPWL_ScrollBar::OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag)
825ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
826ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPWL_Wnd::OnLButtonUp(point,nFlag);
827ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
828ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (HasFlag(PWS_AUTOTRANSPARENT))
829ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
830ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (GetTransparency() != PWL_SCROLLBAR_TRANSPARANCY)
831ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
832ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			SetTransparency(PWL_SCROLLBAR_TRANSPARANCY);
833ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			InvalidateRect();
834ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
835ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
836ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
837ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	EndTimer();
838ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_bMouseDown = FALSE;
839ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
840ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
841ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
842ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
843ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ScrollBar::OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, FX_INTPTR wParam, FX_INTPTR lParam)
844ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
845ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPWL_Wnd::OnNotify(pWnd,msg,wParam,lParam);
846ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
847ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	switch (msg)
848ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
849ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case PNM_LBUTTONDOWN:
850ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (pWnd == m_pMinButton)
851ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
852ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			OnMinButtonLBDown(*(CPDF_Point*)lParam);
853ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
854ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
855ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (pWnd == m_pMaxButton)
856ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
857ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			OnMaxButtonLBDown(*(CPDF_Point*)lParam);
858ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
859ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
860ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (pWnd == m_pPosButton)
861ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
862ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			OnPosButtonLBDown(*(CPDF_Point*)lParam);
863ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
864ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
865ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case PNM_LBUTTONUP:
866ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (pWnd == m_pMinButton)
867ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
868ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			OnMinButtonLBUp(*(CPDF_Point*)lParam);
869ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
870ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
871ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (pWnd == m_pMaxButton)
872ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
873ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			OnMaxButtonLBUp(*(CPDF_Point*)lParam);
874ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
875ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
876ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (pWnd == m_pPosButton)
877ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
878ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			OnPosButtonLBUp(*(CPDF_Point*)lParam);
879ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
880ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
881ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case PNM_MOUSEMOVE:
882ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (pWnd == m_pMinButton)
883ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
884ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			OnMinButtonMouseMove(*(CPDF_Point*)lParam);
885ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
886ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
887ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (pWnd == m_pMaxButton)
888ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
889ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			OnMaxButtonMouseMove(*(CPDF_Point*)lParam);
890ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
891ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
892ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (pWnd == m_pPosButton)
893ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
894ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			OnPosButtonMouseMove(*(CPDF_Point*)lParam);
895ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
896ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
897ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case PNM_SETSCROLLINFO:
898ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
899ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (PWL_SCROLL_INFO * pInfo = (PWL_SCROLL_INFO*)lParam)
900ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
901ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				if (FXSYS_memcmp(&m_OriginInfo, pInfo, sizeof(PWL_SCROLL_INFO)) != 0)
902ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				{
903ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					m_OriginInfo = *pInfo;
904ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					FX_FLOAT fMax = pInfo->fContentMax - pInfo->fContentMin - pInfo->fPlateWidth;
905ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					fMax = fMax > 0.0f ? fMax : 0.0f;
906ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					this->SetScrollRange(0,fMax, pInfo->fPlateWidth);
907ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					this->SetScrollStep(pInfo->fBigStep,pInfo->fSmallStep);
908ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				}
909ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
910ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
911ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
912ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case PNM_SETSCROLLPOS:
913ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
914ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			FX_FLOAT fPos = *(FX_FLOAT*)lParam;
915ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			switch (this->m_sbType)
916ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
917ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			case SBT_HSCROLL:
918ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				fPos = fPos - m_OriginInfo.fContentMin;
919ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				break;
920ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			case SBT_VSCROLL:
921ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				fPos = m_OriginInfo.fContentMax - fPos;
922ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				break;
923ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
924ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			this->SetScrollPos(fPos);
925ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
926ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
927ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
928ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
929ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
930ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ScrollBar::CreateButtons(const PWL_CREATEPARAM & cp)
931ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
932ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	PWL_CREATEPARAM	scp = cp;
933ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	scp.pParentWnd = this;
934ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	scp.dwBorderWidth = 2;
935ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	scp.nBorderStyle = PBS_BEVELED;
936ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
937ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	scp.dwFlags = PWS_VISIBLE | PWS_CHILD | PWS_BORDER | PWS_BACKGROUND | PWS_NOREFRESHCLIP;
938ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
939ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!m_pMinButton)
940ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
941ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pMinButton = new CPWL_SBButton(m_sbType,PSBT_MIN);
942ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pMinButton->Create(scp);
943ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
944ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
945ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!m_pMaxButton)
946ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
947ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pMaxButton = new CPWL_SBButton(m_sbType,PSBT_MAX);
948ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pMaxButton->Create(scp);
949ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
950ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
951ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!m_pPosButton)
952ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
953ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pPosButton = new CPWL_SBButton(m_sbType,PSBT_POS);
954ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pPosButton->SetVisible(FALSE);
955ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pPosButton->Create(scp);
956ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
957ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
958ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
959ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_FLOAT CPWL_ScrollBar::GetScrollBarWidth() const
960ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
961ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!IsVisible()) return 0;
962ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
963ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return PWL_SCROLLBAR_WIDTH;
964ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
965ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
966ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ScrollBar::SetScrollRange(FX_FLOAT fMin,FX_FLOAT fMax,FX_FLOAT fClientWidth)
967ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
968ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_pPosButton)
969ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
970ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_sData.SetScrollRange(fMin,fMax);
971ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_sData.SetClientWidth(fClientWidth);
972ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
973ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (IsFloatSmaller(m_sData.ScrollRange.GetWidth(), 0.0f))
974ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
975ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			m_pPosButton->SetVisible(FALSE);
976ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
977ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		else
978ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
979ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			m_pPosButton->SetVisible(TRUE);
980ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			MovePosButton(TRUE);
981ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
982ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
983ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
984ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
985ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ScrollBar::SetScrollPos(FX_FLOAT fPos)
986ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
987ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_FLOAT fOldPos = m_sData.fScrollPos;
988ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
989ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_sData.SetPos(fPos);
990ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
991ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!IsFloatEqual(m_sData.fScrollPos, fOldPos))
992ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		MovePosButton(TRUE);
993ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
994ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
995ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ScrollBar::SetScrollStep(FX_FLOAT fBigStep,FX_FLOAT fSmallStep)
996ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
997ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_sData.SetBigStep(fBigStep);
998ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_sData.SetSmallStep(fSmallStep);
999ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1000ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1001ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ScrollBar::MovePosButton(FX_BOOL bRefresh)
1002ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1003ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT (m_pPosButton != NULL);
1004ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT (m_pMinButton != NULL);
1005ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT (m_pMaxButton != NULL);
1006ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1007ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_pPosButton->IsVisible())
1008ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1009ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1010ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1011ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1012ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1013ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPDF_Rect rcClient;
1014ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPDF_Rect rcPosArea,rcPosButton;
1015ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1016ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		rcClient = this->GetClientRect();
1017ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		rcPosArea = GetScrollArea();
1018ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1019ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		FX_FLOAT fLeft,fRight,fTop,fBottom;
1020ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1021ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		switch (m_sbType)
1022ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
1023ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		case SBT_HSCROLL:
1024ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			fLeft = TrueToFace(m_sData.fScrollPos);
1025ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			fRight = TrueToFace(m_sData.fScrollPos + m_sData.fClientWidth);
1026ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1027ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (fRight - fLeft < PWL_SCROLLBAR_POSBUTTON_MINWIDTH)
1028ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				fRight = fLeft + PWL_SCROLLBAR_POSBUTTON_MINWIDTH;
1029ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1030ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (fRight > rcPosArea.right)
1031ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
1032ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				fRight = rcPosArea.right;
1033ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				fLeft = fRight - PWL_SCROLLBAR_POSBUTTON_MINWIDTH;
1034ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
1035ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1036ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			rcPosButton = CPDF_Rect(fLeft ,
1037ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								rcPosArea.bottom,
1038ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								fRight ,
1039ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								rcPosArea.top);
1040ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1041ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
1042ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		case SBT_VSCROLL:
1043ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			fBottom = TrueToFace(m_sData.fScrollPos + m_sData.fClientWidth);
1044ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			fTop = TrueToFace(m_sData.fScrollPos);
1045ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1046ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (IsFloatSmaller(fTop - fBottom, PWL_SCROLLBAR_POSBUTTON_MINWIDTH))
1047ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				fBottom = fTop - PWL_SCROLLBAR_POSBUTTON_MINWIDTH;
1048ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1049ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (IsFloatSmaller(fBottom, rcPosArea.bottom))
1050ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
1051ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				fBottom = rcPosArea.bottom;
1052ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				fTop = fBottom + PWL_SCROLLBAR_POSBUTTON_MINWIDTH;
1053ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
1054ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1055ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			rcPosButton = CPDF_Rect(rcPosArea.left,
1056ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								fBottom,
1057ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								rcPosArea.right,
1058ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								fTop);
1059ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1060ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
1061ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
1062ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1063ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pPosButton->Move(rcPosButton,TRUE,bRefresh);
1064ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1065ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1066ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1067ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ScrollBar::OnMinButtonLBDown(const CPDF_Point & point)
1068ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1069ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_sData.SubSmall();
1070ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	MovePosButton(TRUE);
1071ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	NotifyScrollWindow();
1072ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1073ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_bMinOrMax = TRUE;
1074ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1075ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	EndTimer();
1076ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	BeginTimer(100);
1077ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1078ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1079ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ScrollBar::OnMinButtonLBUp(const CPDF_Point & point)
1080ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1081ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1082ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1083ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ScrollBar::OnMinButtonMouseMove(const CPDF_Point & point)
1084ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1085ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1086ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1087ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ScrollBar::OnMaxButtonLBDown(const CPDF_Point & point)
1088ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1089ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_sData.AddSmall();
1090ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	MovePosButton(TRUE);
1091ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	NotifyScrollWindow();
1092ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1093ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_bMinOrMax = FALSE;
1094ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1095ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	EndTimer();
1096ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	BeginTimer(100);
1097ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1098ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1099ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ScrollBar::OnMaxButtonLBUp(const CPDF_Point & point)
1100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ScrollBar::OnMaxButtonMouseMove(const CPDF_Point & point)
1104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ScrollBar::OnPosButtonLBDown(const CPDF_Point & point)
1108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_bMouseDown = TRUE;
1110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_pPosButton)
1112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPDF_Rect rcPosButton = m_pPosButton->GetWindowRect();
1114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		switch(m_sbType)
1116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
1117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		case SBT_HSCROLL:
1118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			m_nOldPos = point.x;
1119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			m_fOldPosButton = rcPosButton.left;
1120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
1121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		case SBT_VSCROLL:
1122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			m_nOldPos = point.y;
1123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			m_fOldPosButton = rcPosButton.top;
1124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
1125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
1126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ScrollBar::OnPosButtonLBUp(const CPDF_Point & point)
1130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_bMouseDown)
1132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (!m_bNotifyForever)
1134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			NotifyScrollWindow();
1135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_bMouseDown = FALSE;
1137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ScrollBar::OnPosButtonMouseMove(const CPDF_Point & point)
1140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_FLOAT fOldScrollPos = m_sData.fScrollPos;
1142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_FLOAT fNewPos = 0;
1144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	switch (m_sbType)
1146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case SBT_HSCROLL:
1148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (FXSYS_fabs(point.x - m_nOldPos) < 1) return;
1149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		fNewPos = FaceToTrue(m_fOldPosButton + point.x - m_nOldPos);
1150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
1151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case SBT_VSCROLL:
1152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (FXSYS_fabs(point.y - m_nOldPos) < 1) return;
1153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		fNewPos = FaceToTrue(m_fOldPosButton + point.y - m_nOldPos);
1154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
1155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_bMouseDown)
1158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		switch (m_sbType)
1160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
1161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		case SBT_HSCROLL:
1162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (IsFloatSmaller(fNewPos, m_sData.ScrollRange.fMin))
1164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
1165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				fNewPos = m_sData.ScrollRange.fMin;
1166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
1167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (IsFloatBigger(fNewPos, m_sData.ScrollRange.fMax))
1169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
1170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				fNewPos = m_sData.ScrollRange.fMax;
1171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
1172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			m_sData.SetPos(fNewPos);
1174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
1176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		case SBT_VSCROLL:
1177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (IsFloatSmaller(fNewPos, m_sData.ScrollRange.fMin))
1179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
1180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				fNewPos = m_sData.ScrollRange.fMin;
1181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
1182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (IsFloatBigger(fNewPos, m_sData.ScrollRange.fMax))
1184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
1185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				fNewPos = m_sData.ScrollRange.fMax;
1186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
1187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			m_sData.SetPos(fNewPos);
1189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
1191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
1192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (!IsFloatEqual(fOldScrollPos, m_sData.fScrollPos))
1194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
1195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			MovePosButton(TRUE);
1196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (m_bNotifyForever)
1198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				NotifyScrollWindow();
1199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
1200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ScrollBar::NotifyScrollWindow()
1204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (CPWL_Wnd * pParent = this->GetParentWindow())
1206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		FX_FLOAT fPos;
1208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		switch (this->m_sbType)
1209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
1210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		case SBT_HSCROLL:
1211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			fPos = m_OriginInfo.fContentMin + m_sData.fScrollPos;
1212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
1213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		case SBT_VSCROLL:
1214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			fPos = m_OriginInfo.fContentMax - m_sData.fScrollPos;
1215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
1216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
1217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pParent->OnNotify(this,PNM_SCROLLWINDOW,(FX_INTPTR)m_sbType,(FX_INTPTR)&fPos);
1218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1221ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_Rect CPWL_ScrollBar::GetScrollArea() const
1222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Rect rcClient = GetClientRect();
1224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Rect rcArea;
1225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!m_pMinButton || !m_pMaxButton)return rcClient;
1227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Rect rcMin = m_pMinButton->GetWindowRect();
1229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Rect rcMax = m_pMaxButton->GetWindowRect();
1230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_FLOAT fMinWidth = rcMin.right - rcMin.left;
1232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_FLOAT fMinHeight = rcMin.top - rcMin.bottom;
1233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_FLOAT fMaxWidth = rcMax.right - rcMax.left;
1234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_FLOAT fMaxHeight = rcMax.top - rcMax.bottom;
1235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	switch(m_sbType)
1237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case SBT_HSCROLL:
1239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (rcClient.right - rcClient.left > fMinWidth + fMaxWidth + 2)
1240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
1241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			rcArea = CPDF_Rect(rcClient.left + fMinWidth + 1,rcClient.bottom,
1242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						rcClient.right - fMaxWidth - 1,rcClient.top);
1243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
1244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		else
1245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
1246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			rcArea = CPDF_Rect(rcClient.left + fMinWidth + 1,rcClient.bottom,
1247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						rcClient.left + fMinWidth + 1,rcClient.top);
1248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
1249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
1250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case SBT_VSCROLL:
1251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (rcClient.top - rcClient.bottom > fMinHeight + fMaxHeight + 2)
1252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
1253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			rcArea = CPDF_Rect(rcClient.left,rcClient.bottom + fMinHeight + 1,
1254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						rcClient.right,rcClient.top - fMaxHeight - 1);
1255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
1256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		else
1257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
1258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			rcArea = CPDF_Rect(rcClient.left,rcClient.bottom + fMinHeight + 1,
1259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						rcClient.right,rcClient.bottom + fMinHeight + 1);
1260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
1261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
1262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	rcArea.Normalize();
1265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return rcArea;
1267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1269ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_FLOAT CPWL_ScrollBar::TrueToFace(FX_FLOAT fTrue)
1270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Rect rcPosArea;
1272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	rcPosArea = GetScrollArea();
1273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_FLOAT fFactWidth = m_sData.ScrollRange.GetWidth() + m_sData.fClientWidth;
1275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	fFactWidth = fFactWidth == 0 ? 1 : fFactWidth;
1276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_FLOAT fFace = 0;
1278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	switch(m_sbType)
1280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case SBT_HSCROLL:
1282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		fFace = rcPosArea.left + fTrue * (rcPosArea.right - rcPosArea.left) / fFactWidth;
1283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
1284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case SBT_VSCROLL:
1285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		fFace = rcPosArea.top - fTrue * (rcPosArea.top - rcPosArea.bottom) / fFactWidth;
1286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
1287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return fFace;
1290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1292ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_FLOAT CPWL_ScrollBar::FaceToTrue(FX_FLOAT fFace)
1293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Rect rcPosArea;
1295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	rcPosArea = GetScrollArea();
1296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_FLOAT fFactWidth = m_sData.ScrollRange.GetWidth() + m_sData.fClientWidth;
1298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	fFactWidth = fFactWidth == 0 ? 1 : fFactWidth;
1299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_FLOAT fTrue = 0;
1301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	switch(m_sbType)
1303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case SBT_HSCROLL:
1305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		fTrue =  (fFace - rcPosArea.left) * fFactWidth / (rcPosArea.right - rcPosArea.left);
1306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
1307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case SBT_VSCROLL:
1308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		fTrue = (rcPosArea.top - fFace) * fFactWidth / (rcPosArea.top - rcPosArea.bottom);
1309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
1310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return fTrue;
1313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ScrollBar::CreateChildWnd(const PWL_CREATEPARAM & cp)
1316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CreateButtons(cp);
1318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ScrollBar::TimerProc()
1321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1322ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	PWL_SCROLL_PRIVATEDATA sTemp = m_sData;
1323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1324ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_bMinOrMax)m_sData.SubSmall();
1325ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else m_sData.AddSmall();
1326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (FXSYS_memcmp(&m_sData, &sTemp, sizeof(PWL_SCROLL_PRIVATEDATA)) != 0)
1328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1329ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		MovePosButton(TRUE);
1330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		NotifyScrollWindow();
1331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*
1335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ScrollBar::OnSetFocus()
1336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (GetTransparency() != 255)
1338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		SetTransparency(255);
1340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		InvalidateRect();
1341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1343ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ScrollBar::OnKillFocus()
1345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1346ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (GetTransparency() != PWL_SCROLLBAR_TRANSPARANCY)
1347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		SetTransparency(PWL_SCROLLBAR_TRANSPARANCY);
1349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		InvalidateRect();
1350ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
1353ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1354