float FalagardSlider::getValueFromThumb(void) const { Slider* w = (Slider*)d_window; // get area the thumb is supposed to use as it's area. const WidgetLookFeel& wlf = getLookNFeel(); const Rectf area(wlf.getNamedArea("ThumbTrackArea").getArea().getPixelRect(*w)); // get accesss to the thumb Thumb* theThumb = w->getThumb(); // slider is vertical if (d_vertical) { // pixel extent of total available area the thumb moves in float slideExtent = area.getHeight() - theThumb->getPixelSize().d_height; // calculate value represented by current thumb position float thumbValue = (CoordConverter::asAbsolute( theThumb->getYPosition(), w->getPixelSize().d_height) - area.top()) / (slideExtent / w->getMaxValue()); // return final thumb value according to slider settings return d_reversed ? thumbValue : w->getMaxValue() - thumbValue; } // slider is horizontal else { // pixel extent of total available area the thumb moves in float slideExtent = area.getWidth() - theThumb->getPixelSize().d_width; // calculate value represented by current thumb position float thumbValue = (CoordConverter::asAbsolute( theThumb->getXPosition(), w->getPixelSize().d_width) - area.left()) / (slideExtent / w->getMaxValue()); // return final thumb value according to slider settings return d_reversed ? w->getMaxValue() - thumbValue : thumbValue; } }
float FalagardSlider::getValueFromThumb(void) const { // 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__")); // slider is vertical if (d_vertical) { // pixel extent of total available area the thumb moves in float slideExtent = area.getHeight() - theThumb->getAbsoluteHeight(); // calculate value represented by current thumb position float thumbValue = (theThumb->getAbsoluteYPosition() - area.d_top) / (slideExtent / d_maxValue); // return final thumb value according to slider settings return d_reversed ? thumbValue : d_maxValue - thumbValue; } // slider is horizontal else { // pixel extent of total available area the thumb moves in float slideExtent = area.getWidth() - theThumb->getAbsoluteWidth(); // calculate value represented by current thumb position float thumbValue = (theThumb->getAbsoluteXPosition() - area.d_left) / (slideExtent / d_maxValue); // return final thumb value according to slider settings return d_reversed ? d_maxValue - thumbValue : thumbValue; } }
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))); } }
/************************************************************************* Initialises the Window based object ready for use. *************************************************************************/ void Slider::initialiseComponents(void) { // get thumb Thumb* thumb = getThumb(); // bind handler to thumb events thumb->subscribeEvent(Thumb::EventThumbPositionChanged, Event::Subscriber(&CEGUI::Slider::handleThumbMoved, this)); thumb->subscribeEvent(Thumb::EventThumbTrackStarted, Event::Subscriber(&CEGUI::Slider::handleThumbTrackStarted, this)); thumb->subscribeEvent(Thumb::EventThumbTrackEnded, Event::Subscriber(&CEGUI::Slider::handleThumbTrackEnded, this)); performChildWindowLayout(); }
/************************************************************************* Initialises the Scrollbar object ready for use. *************************************************************************/ void Scrollbar::initialiseComponents(void) { // Set up thumb Thumb* thumb = getThumb(); thumb->subscribeEvent(Thumb::EventThumbPositionChanged, Event::Subscriber(&CEGUI::Scrollbar::handleThumbMoved, this)); thumb->subscribeEvent(Thumb::EventThumbTrackStarted, Event::Subscriber(&CEGUI::Scrollbar::handleThumbTrackStarted, this)); thumb->subscribeEvent(Thumb::EventThumbTrackEnded, Event::Subscriber(&CEGUI::Scrollbar::handleThumbTrackEnded, this)); // set up Increase button PushButton* increase = getIncreaseButton(); increase->subscribeEvent(PushButton::EventMouseButtonDown, Event::Subscriber(&CEGUI::Scrollbar::handleIncreaseClicked, this)); // set up Decrease button PushButton* decrease = getDecreaseButton(); decrease->subscribeEvent(PushButton::EventMouseButtonDown, Event::Subscriber(&CEGUI::Scrollbar::handleDecreaseClicked, this)); // do initial layout performChildWindowLayout(); }
float FalagardScrollbar::getValueFromThumb(void) const { 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; if (d_vertical) { float slideExtent = area.getHeight() - theThumb->getAbsoluteHeight(); return (theThumb->getAbsoluteYPosition() - area.d_top) / (slideExtent / posExtent); } else { float slideExtent = area.getWidth() - theThumb->getAbsoluteWidth(); return (theThumb->getAbsoluteXPosition() - area.d_left) / (slideExtent / posExtent); } }
float FalagardScrollbar::getValueFromThumb(void) const { Scrollbar* w = (Scrollbar*)d_window; const WidgetLookFeel& wlf = getLookNFeel(); const Rectf area(wlf.getNamedArea("ThumbTrackArea").getArea().getPixelRect(*w)); Thumb* theThumb = w->getThumb(); float posExtent = w->getDocumentSize() - w->getPageSize(); if (d_vertical) { float slideExtent = area.getHeight() - theThumb->getPixelSize().d_height; return (CoordConverter::asAbsolute(theThumb->getYPosition(), w->getPixelSize().d_height) - area.top()) / (slideExtent / posExtent); } else { float slideExtent = area.getWidth() - theThumb->getPixelSize().d_width; return (CoordConverter::asAbsolute(theThumb->getXPosition(), w->getPixelSize().d_width) - area.left()) / (slideExtent / posExtent); } }
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)); }