void FalagardScrollbar::updateThumb(void) { const WidgetLookFeel& wlf = WidgetLookManager::getSingleton().getWidgetLook(d_lookName); Rect area(wlf.getNamedArea("ThumbTrackArea").getArea().getPixelRect(*this)); Thumb* theThumb = static_cast<Thumb*>(WindowManager::getSingleton().getWindow(getName() + "__auto_thumb__")); float posExtent = d_documentSize - d_pageSize; float slideExtent; if (d_vertical) { if(d_useSpecialThumb) { if(fabs(d_position - posExtent) <=(1e-08f)) { theThumb->useSpecialImg(false); } else { theThumb->useSpecialImg(true); } } slideExtent = area.getHeight() - theThumb->getAbsoluteHeight(); theThumb->setVertRange(absoluteToRelativeY_impl(this, area.d_top), absoluteToRelativeY_impl(this, area.d_top + slideExtent)); theThumb->setPosition(Point(absoluteToRelativeX_impl(this, area.d_left), absoluteToRelativeY_impl(this, area.d_top + (d_position * (slideExtent / posExtent))))); } else { slideExtent = area.getWidth() - theThumb->getAbsoluteWidth(); theThumb->setHorzRange(absoluteToRelativeX_impl(this, area.d_left), absoluteToRelativeX_impl(this, area.d_left + slideExtent)); theThumb->setPosition(Point(absoluteToRelativeX_impl(this, area.d_left + (d_position * (slideExtent / posExtent))), absoluteToRelativeY_impl(this, area.d_top))); } }
void FalagardSlider::updateThumb(void) { // get area the thumb is supposed to use as it's area. const WidgetLookFeel& wlf = WidgetLookManager::getSingleton().getWidgetLook(d_lookName); Rect area(wlf.getNamedArea("ThumbTrackArea").getArea().getPixelRect(*this)); // get accesss to the thumb Thumb* theThumb = static_cast<Thumb*>(WindowManager::getSingleton().getWindow(getName() + "__auto_thumb__")); // get base location for thumb widget Point thumbPosition(area.d_left, area.d_top); // Is this a vertical slider if (d_vertical) { // pixel extent of total available area the thumb moves in float slideExtent = area.getHeight() - theThumb->getAbsoluteHeight(); // Set range of motion for the thumb widget theThumb->setVertRange(absoluteToRelativeY_impl(this, area.d_top), absoluteToRelativeY_impl(this, area.d_top + slideExtent)); // calculate vertical positon for thumb float thumbOffset = d_value * (slideExtent / d_maxValue); thumbPosition.d_y += d_reversed ? thumbOffset : slideExtent - thumbOffset; } // Horizontal slider else { // pixel extent of total available area the thumb moves in float slideExtent = area.getWidth() - theThumb->getAbsoluteWidth(); // Set range of motion for the thumb widget theThumb->setHorzRange(absoluteToRelativeX_impl(this, area.d_left), absoluteToRelativeX_impl(this, area.d_left + slideExtent)); // calculate horizontal positon for thumb float thumbOffset = d_value * (slideExtent / d_maxValue); thumbPosition.d_x += d_reversed ? slideExtent - thumbOffset : thumbOffset; } // set new position for thumb. theThumb->setPosition(absoluteToRelative_impl(this, thumbPosition)); }