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