double ScrollBar::get_area_size() const { if (orientation==VERTICAL) { double area=get_size().height; area-=get_stylebox("scroll")->get_minimum_size().height; area-=get_icon("increment")->get_height(); area-=get_icon("decrement")->get_height(); area-=get_grabber_min_size(); return area; } else if (orientation==HORIZONTAL) { double area=get_size().width; area-=get_stylebox("scroll")->get_minimum_size().width; area-=get_icon("increment")->get_width(); area-=get_icon("decrement")->get_width(); area-=get_grabber_min_size(); return area; } else { return 0; } }
Size2 ScrollBar::get_minimum_size() const { Ref<Texture> incr = get_icon("increment"); Ref<Texture> decr = get_icon("decrement"); Ref<StyleBox> bg = get_stylebox("scroll"); Size2 minsize; if (orientation == VERTICAL) { minsize.width = MAX(incr->get_size().width, (bg->get_minimum_size() + bg->get_center_size()).width); minsize.height += incr->get_size().height; minsize.height += decr->get_size().height; minsize.height += bg->get_minimum_size().height; minsize.height += get_grabber_min_size(); } if (orientation == HORIZONTAL) { minsize.height = MAX(incr->get_size().height, (bg->get_center_size() + bg->get_minimum_size()).height); minsize.width += incr->get_size().width; minsize.width += decr->get_size().width; minsize.width += bg->get_minimum_size().width; minsize.width += get_grabber_min_size(); } return minsize; }
double ScrollBar::get_grabber_size() const { float range = get_max()-get_min(); if (range<=0) return 0; float page = (get_page()>0)? get_page() : 0; // if (grabber_range < get_step()) // grabber_range=get_step(); double area_size=get_area_size(); double grabber_size = page / range * area_size; return grabber_size+get_grabber_min_size(); }