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