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