void tscrollbar_container::scrollbar_moved() { // Init. assert(content_ && content_grid_); assert(vertical_scrollbar_ && horizontal_scrollbar_); /*** Update the content location. ***/ const int x_offset = horizontal_scrollbar_mode_ == always_invisible ? 0 : horizontal_scrollbar_->get_item_position() * horizontal_scrollbar_->get_step_size(); const int y_offset = vertical_scrollbar_mode_ == always_invisible ? 0 : vertical_scrollbar_->get_item_position() * vertical_scrollbar_->get_step_size(); const tpoint content_origin = {content_->get_x() - x_offset, content_->get_y() - y_offset}; content_grid_->set_origin(content_origin); content_grid_->set_visible_rectangle(content_visible_area_); content_grid_->set_is_dirty(true); // Update scrollbar. set_scrollbar_button_status(); }
bool tscrollbar_container::content_resize_request( const int width_modification , const int height_modification) { DBG_GUI_L << LOG_HEADER << " wanted width modification " << width_modification << " wanted height modification " << height_modification << ".\n"; if(get_size() == tpoint(0, 0)) { DBG_GUI_L << LOG_HEADER << " initial setup not done, bailing out.\n"; return false; } twindow* window = get_window(); assert(window); if(window->get_need_layout()) { DBG_GUI_L << LOG_HEADER << " window already needs a layout phase, bailing out.\n"; return false; } assert(content_ && content_grid_); const bool result = content_resize_width(width_modification) && content_resize_height(height_modification); if(result) { /* * The subroutines set the new size of the scrollbar but don't * update the button status. */ set_scrollbar_button_status(); } DBG_GUI_L << LOG_HEADER << " result " << result << ".\n"; return result; }
void tscrollbar_container::place(const tpoint& origin, const tpoint& size) { // Inherited. tcontainer_::place(origin, size); // Set content size assert(content_ && content_grid_); const tpoint content_origin = content_->get_origin(); const tpoint best_size = content_grid_->get_best_size(); const tpoint content_size(content_->get_width(), content_->get_height()); const tpoint content_grid_size(std::max(best_size.x, content_size.x), std::max(best_size.y, content_size.y)); set_content_size(content_origin, content_grid_size); // Set vertical scrollbar set_scrollbar_mode(vertical_scrollbar_grid_, vertical_scrollbar_, vertical_scrollbar_mode_, content_grid_->get_height(), content_->get_height()); // Set horizontal scrollbar set_scrollbar_mode(horizontal_scrollbar_grid_, horizontal_scrollbar_, horizontal_scrollbar_mode_, content_grid_->get_width(), content_->get_width()); // Update the buttons. set_scrollbar_button_status(); // Now set the visible part of the content. content_visible_area_ = content_->get_rectangle(); content_grid_->set_visible_rectangle(content_visible_area_); }