GUI2: removed framebuffer code from draw impl functions

This commit is contained in:
Charles Dang 2017-05-31 01:36:49 +11:00
parent c926ce76e0
commit eb671aec48
31 changed files with 70 additions and 167 deletions

View file

@ -194,14 +194,12 @@ void container_base::set_visible_rectangle(const SDL_Rect& rectangle)
grid_.set_visible_rectangle(rectangle);
}
void container_base::impl_draw_children(surface& frame_buffer,
int x_offset,
int y_offset)
void container_base::impl_draw_children(int x_offset, int y_offset)
{
assert(get_visible() == widget::visibility::visible
&& grid_.get_visible() == widget::visibility::visible);
grid_.draw_children(frame_buffer, x_offset, y_offset);
grid_.draw_children(x_offset, y_offset);
}
void container_base::layout_children()

View file

@ -107,9 +107,7 @@ public:
virtual void set_visible_rectangle(const SDL_Rect& rectangle) override;
/** See @ref widget::impl_draw_children. */
virtual void impl_draw_children(surface& frame_buffer,
int x_offset,
int y_offset) override;
virtual void impl_draw_children(int x_offset, int y_offset) override;
protected:
/** See @ref widget::layout_children. */

View file

@ -279,9 +279,7 @@ public:
virtual void set_visible_rectangle(const SDL_Rect& rectangle) override = 0;
/** See @ref widget::impl_draw_children. */
virtual void impl_draw_children(surface& frame_buffer,
int x_offset,
int y_offset) override = 0;
virtual void impl_draw_children(int x_offset, int y_offset) override = 0;
/** See @ref widget::find_at. */
virtual widget* find_at(const point& coordinate,

View file

@ -826,7 +826,7 @@ public:
}
/** See @ref widget::impl_draw_children. */
virtual void impl_draw_children(surface& frame_buffer, int x_offset, int y_offset) override
virtual void impl_draw_children(int x_offset, int y_offset) override
{
assert(this->get_visible() == widget::visibility::visible);
@ -836,7 +836,7 @@ public:
child* item = items_[index].get();
if(item->child_grid.get_visible() == widget::visibility::visible && item->shown) {
item->child_grid.draw_children(frame_buffer, x_offset, y_offset);
item->child_grid.draw_children(x_offset, y_offset);
}
}
}

View file

@ -975,7 +975,7 @@ void grid::layout(const point& origin)
}
}
void grid::impl_draw_children(surface& frame_buffer, int x_offset, int y_offset)
void grid::impl_draw_children(int x_offset, int y_offset)
{
/*
* The call to SDL_PumpEvents seems a bit like black magic.
@ -1003,9 +1003,9 @@ void grid::impl_draw_children(surface& frame_buffer, int x_offset, int y_offset)
continue;
}
widget->draw_background(frame_buffer, x_offset, y_offset);
widget->draw_children(frame_buffer, x_offset, y_offset);
widget->draw_foreground(frame_buffer, x_offset, y_offset);
widget->draw_background(x_offset, y_offset);
widget->draw_children(x_offset, y_offset);
widget->draw_foreground(x_offset, y_offset);
}
}

View file

@ -559,9 +559,7 @@ private:
void layout(const point& origin);
/** See @ref widget::impl_draw_children. */
virtual void impl_draw_children(surface& frame_buffer,
int x_offset,
int y_offset) override;
virtual void impl_draw_children(int x_offset, int y_offset) override;
};
/**

View file

@ -112,9 +112,9 @@ void matrix::layout_initialize(const bool full_initialization)
}
void
matrix::impl_draw_children(surface& frame_buffer, int x_offset, int y_offset)
matrix::impl_draw_children(int x_offset, int y_offset)
{
content_.draw_children(frame_buffer, x_offset, y_offset);
content_.draw_children(x_offset, y_offset);
}
void matrix::layout_children()

View file

@ -121,9 +121,7 @@ public:
virtual void layout_initialize(const bool full_initialization) override;
/** See @ref widget::impl_draw_children. */
virtual void impl_draw_children(surface& frame_buffer,
int x_offset,
int y_offset) override;
virtual void impl_draw_children(int x_offset, int y_offset) override;
/** See @ref widget::layout_children. */
virtual void layout_children() override;

View file

@ -26,6 +26,7 @@
#include "sdl/rect.hpp"
#include "terrain/type_data.hpp"
#include "../../minimap.hpp" // We want the file in src/
#include "video.hpp"
#include "utils/functional.hpp"
@ -228,9 +229,7 @@ const surface minimap::get_image(const int w, const int h) const
return nullptr;
}
void minimap::impl_draw_background(surface& frame_buffer,
int x_offset,
int y_offset)
void minimap::impl_draw_background(int x_offset, int y_offset)
{
if(!terrain_)
return;
@ -248,7 +247,7 @@ void minimap::impl_draw_background(surface& frame_buffer,
const ::surface surf = get_image(rect.w, rect.h);
if(surf) {
sdl_blit(surf, nullptr, frame_buffer, &rect);
sdl_blit(surf, nullptr, CVideo::get_singleton().getSurface(), &rect);
}
}

View file

@ -101,9 +101,7 @@ private:
const surface get_image(const int w, const int h) const;
/** See @ref widget::impl_draw_background. */
virtual void impl_draw_background(surface& frame_buffer,
int x_offset,
int y_offset) override;
virtual void impl_draw_background(int x_offset, int y_offset) override;
/** Inherited from styled_widget, implemented by REGISTER_WIDGET. */
virtual const std::string& get_control_type() const override;

View file

@ -144,11 +144,7 @@ void multi_page::finalize(const std::vector<string_map>& page_data)
swap_grid(nullptr, &get_grid(), generator_, "_content_grid");
}
void multi_page::impl_draw_background(surface& /*frame_buffer*/
,
int /*x_offset*/
,
int /*y_offset*/)
void multi_page::impl_draw_background(int /*x_offset*/, int /*y_offset*/)
{
/* DO NOTHING */
}

View file

@ -201,9 +201,7 @@ private:
std::map<std::string, builder_grid_const_ptr> page_builders_;
/** See @ref widget::impl_draw_background. */
virtual void impl_draw_background(surface& frame_buffer,
int x_offset,
int y_offset) override;
virtual void impl_draw_background(int x_offset, int y_offset) override;
/** Inherited from styled_widget, implemented by REGISTER_WIDGET. */
virtual const std::string& get_control_type() const override;

View file

@ -186,14 +186,14 @@ void pane::layout_initialize(const bool full_initialization)
}
void
pane::impl_draw_children(surface& frame_buffer, int x_offset, int y_offset)
pane::impl_draw_children(int x_offset, int y_offset)
{
DBG_GUI_D << LOG_HEADER << '\n';
for(auto & item : items_)
{
if(item.item_grid->get_visible() != widget::visibility::invisible) {
item.item_grid->draw_children(frame_buffer, x_offset, y_offset);
item.item_grid->draw_children(x_offset, y_offset);
}
}
}

View file

@ -74,9 +74,7 @@ public:
virtual void layout_initialize(const bool full_initialization) override;
/** See @ref widget::impl_draw_children. */
virtual void impl_draw_children(surface& frame_buffer,
int x_offset,
int y_offset) override;
virtual void impl_draw_children(int x_offset, int y_offset) override;
/** See @ref widget::request_reduce_width. */
virtual void request_reduce_width(const unsigned maximum_width) override;

View file

@ -64,14 +64,14 @@ unsigned panel::get_state() const
return 0;
}
void panel::impl_draw_background(surface& /*frame_buffer*/, int x_offset, int y_offset)
void panel::impl_draw_background(int x_offset, int y_offset)
{
DBG_GUI_D << LOG_HEADER << " size " << get_rectangle() << ".\n";
get_canvas(0).render(calculate_blitting_rectangle(x_offset, y_offset));
}
void panel::impl_draw_foreground(surface& /*frame_buffer*/, int x_offset, int y_offset)
void panel::impl_draw_foreground(int x_offset, int y_offset)
{
DBG_GUI_D << LOG_HEADER << " size " << get_rectangle() << ".\n";

View file

@ -53,14 +53,10 @@ public:
private:
/** See @ref widget::impl_draw_background. */
virtual void impl_draw_background(surface& frame_buffer,
int x_offset,
int y_offset) override;
virtual void impl_draw_background(int x_offset, int y_offset) override;
/** See @ref widget::impl_draw_foreground. */
virtual void impl_draw_foreground(surface& frame_buffer,
int x_offset,
int y_offset) override;
virtual void impl_draw_foreground(int x_offset, int y_offset) override;
/** Inherited from styled_widget, implemented by REGISTER_WIDGET. */
virtual const std::string& get_control_type() const override;

View file

@ -785,14 +785,14 @@ void scrollbar_container::set_horizontal_scrollbar_mode(const scrollbar_mode scr
}
}
void scrollbar_container::impl_draw_children(surface& frame_buffer, int x_offset, int y_offset)
void scrollbar_container::impl_draw_children(int x_offset, int y_offset)
{
assert(get_visible() == widget::visibility::visible && content_grid_->get_visible() == widget::visibility::visible);
// Inherited.
container_base::impl_draw_children(frame_buffer, x_offset, y_offset);
container_base::impl_draw_children(x_offset, y_offset);
content_grid_->draw_children(frame_buffer, x_offset, y_offset);
content_grid_->draw_children( x_offset, y_offset);
}
void scrollbar_container::layout_children()

View file

@ -506,7 +506,7 @@ private:
virtual void layout_children() override;
/** See @ref widget::impl_draw_children. */
virtual void impl_draw_children(surface& frame_buffer, int x_offset, int y_offset) override;
virtual void impl_draw_children(int x_offset, int y_offset) override;
/**
* Sets the size of the content grid.

View file

@ -96,11 +96,7 @@ bool spacer::disable_click_dismiss() const
return false;
}
void spacer::impl_draw_background(surface& /*frame_buffer*/
,
int /*x_offset*/
,
int /*y_offset*/)
void spacer::impl_draw_background(int /*x_offset*/, int /*y_offset*/)
{
/* DO NOTHING */
}

View file

@ -79,9 +79,7 @@ private:
bool fills_available_space();
/** See @ref widget::impl_draw_background. */
virtual void impl_draw_background(surface& frame_buffer,
int x_offset,
int y_offset) override;
virtual void impl_draw_background(int x_offset, int y_offset) override;
/** Inherited from styled_widget, implemented by REGISTER_WIDGET. */
virtual const std::string& get_control_type() const override;

View file

@ -408,9 +408,7 @@ int styled_widget::get_text_maximum_height() const
return get_height() - config_->text_extra_height;
}
void styled_widget::impl_draw_background(surface& /*frame_buffer*/,
int x_offset,
int y_offset)
void styled_widget::impl_draw_background(int x_offset, int y_offset)
{
DBG_GUI_D << LOG_HEADER << " label '" << debug_truncate(label_) << "' size "
<< get_rectangle() << ".\n";
@ -418,11 +416,7 @@ void styled_widget::impl_draw_background(surface& /*frame_buffer*/,
get_canvas(get_state()).render(calculate_blitting_rectangle(x_offset, y_offset));
}
void styled_widget::impl_draw_foreground(surface& /*frame_buffer*/
,
int /*x_offset*/
,
int /*y_offset*/)
void styled_widget::impl_draw_foreground(int /*x_offset*/, int /*y_offset*/)
{
/* DO NOTHING */
}

View file

@ -412,14 +412,10 @@ public:
protected:
/** See @ref widget::impl_draw_background. */
virtual void impl_draw_background(surface& frame_buffer,
int x_offset,
int y_offset) override;
virtual void impl_draw_background(int x_offset, int y_offset) override;
/** See @ref widget::impl_draw_foreground. */
virtual void impl_draw_foreground(surface& frame_buffer,
int x_offset,
int y_offset) override;
virtual void impl_draw_foreground(int x_offset, int y_offset) override;
/** Exposes font::pango_text::get_token, for the text label of this styled_widget */
std::string get_label_token(const point & position, const char * delimiters = " \n\r\t") const;

View file

@ -191,22 +191,18 @@ void toggle_panel::set_state(const state_t state)
assert(conf);
}
void toggle_panel::impl_draw_background(surface& frame_buffer,
int x_offset,
int y_offset)
void toggle_panel::impl_draw_background(int x_offset, int y_offset)
{
// We don't have a fore and background and need to draw depending on
// our state, like a styled_widget. So we use the styled_widget's drawing method.
styled_widget::impl_draw_background(frame_buffer, x_offset, y_offset);
styled_widget::impl_draw_background(x_offset, y_offset);
}
void toggle_panel::impl_draw_foreground(surface& frame_buffer,
int x_offset,
int y_offset)
void toggle_panel::impl_draw_foreground(int x_offset, int y_offset)
{
// We don't have a fore and background and need to draw depending on
// our state, like a styled_widget. So we use the styled_widget's drawing method.
styled_widget::impl_draw_foreground(frame_buffer, x_offset, y_offset);
styled_widget::impl_draw_foreground(x_offset, y_offset);
}
void toggle_panel::signal_handler_mouse_enter(const event::ui_event event,

View file

@ -148,14 +148,10 @@ private:
std::function<void(widget&)> callback_mouse_left_double_click_;
/** See @ref widget::impl_draw_background. */
virtual void impl_draw_background(surface& frame_buffer,
int x_offset,
int y_offset) override;
virtual void impl_draw_background(int x_offset, int y_offset) override;
/** See @ref widget::impl_draw_foreground. */
virtual void impl_draw_foreground(surface& frame_buffer,
int x_offset,
int y_offset) override;
virtual void impl_draw_foreground(int x_offset, int y_offset) override;
/** Inherited from styled_widget, implemented by REGISTER_WIDGET. */
virtual const std::string& get_control_type() const override;

View file

@ -549,18 +549,16 @@ void tree_view_node::set_visible_rectangle(const SDL_Rect& rectangle)
}
}
void tree_view_node::impl_draw_children(surface& frame_buffer,
int x_offset,
int y_offset)
void tree_view_node::impl_draw_children(int x_offset, int y_offset)
{
grid_.draw_children(frame_buffer, x_offset, y_offset);
grid_.draw_children(x_offset, y_offset);
if(is_folded()) {
return;
}
for(auto & node : children_) {
node->impl_draw_children(frame_buffer, x_offset, y_offset);
node->impl_draw_children(x_offset, y_offset);
}
}

View file

@ -275,9 +275,7 @@ private:
virtual void set_visible_rectangle(const SDL_Rect& rectangle) override;
/** See @ref widget::impl_draw_children. */
virtual void impl_draw_children(surface& frame_buffer,
int x_offset,
int y_offset) override;
virtual void impl_draw_children(int x_offset, int y_offset) override;
// FIXME rename to icon
void signal_handler_left_button_click(const event::ui_event event);

View file

@ -121,15 +121,15 @@ void viewport::layout_initialize(const bool full_initialization)
}
void
viewport::impl_draw_children(surface& frame_buffer, int x_offset, int y_offset)
viewport::impl_draw_children(int x_offset, int y_offset)
{
x_offset += get_x();
y_offset += get_y();
if(widget_.get_visible() != widget::visibility::invisible) {
widget_.draw_background(frame_buffer, x_offset, y_offset);
widget_.draw_children(frame_buffer, x_offset, y_offset);
widget_.draw_foreground(frame_buffer, x_offset, y_offset);
widget_.draw_background(x_offset, y_offset);
widget_.draw_children(x_offset, y_offset);
widget_.draw_foreground(x_offset, y_offset);
}
}

View file

@ -54,9 +54,7 @@ public:
virtual void layout_initialize(const bool full_initialization) override;
/** See @ref widget::impl_draw_children. */
virtual void impl_draw_children(surface& frame_buffer,
int x_offset,
int y_offset) override;
virtual void impl_draw_children(int x_offset, int y_offset) override;
/** See @ref widget::request_reduce_width. */
virtual void request_reduce_width(const unsigned maximum_width) override;

View file

@ -358,51 +358,26 @@ SDL_Rect widget::calculate_clipping_rectangle(const int x_offset,
return result;
}
void widget::draw_background(surface& frame_buffer, int x_offset, int y_offset)
void widget::draw_background(int x_offset, int y_offset)
{
assert(visible_ == visibility::visible);
if(redraw_action_ == redraw_action::partly) {
const SDL_Rect clipping_rectangle
= calculate_clipping_rectangle(x_offset, y_offset);
clip_rect_setter clip(frame_buffer, &clipping_rectangle);
draw_debug_border(x_offset, y_offset);
impl_draw_background(frame_buffer, x_offset, y_offset);
} else {
draw_debug_border(x_offset, y_offset);
impl_draw_background(frame_buffer, x_offset, y_offset);
}
draw_debug_border(x_offset, y_offset);
impl_draw_background(x_offset, y_offset);
}
void widget::draw_children(surface& frame_buffer, int x_offset, int y_offset)
void widget::draw_children(int x_offset, int y_offset)
{
assert(visible_ == visibility::visible);
if(redraw_action_ == redraw_action::partly) {
const SDL_Rect clipping_rectangle
= calculate_clipping_rectangle(x_offset, y_offset);
clip_rect_setter clip(frame_buffer, &clipping_rectangle);
impl_draw_children(frame_buffer, x_offset, y_offset);
} else {
impl_draw_children(frame_buffer, x_offset, y_offset);
}
impl_draw_children(x_offset, y_offset);
}
void widget::draw_foreground(surface& frame_buffer, int x_offset, int y_offset)
void widget::draw_foreground(int x_offset, int y_offset)
{
assert(visible_ == visibility::visible);
if(redraw_action_ == redraw_action::partly) {
const SDL_Rect clipping_rectangle
= calculate_clipping_rectangle(x_offset, y_offset);
clip_rect_setter clip(frame_buffer, &clipping_rectangle);
impl_draw_foreground(frame_buffer, x_offset, y_offset);
} else {
impl_draw_foreground(frame_buffer, x_offset, y_offset);
}
impl_draw_foreground(x_offset, y_offset);
}
SDL_Rect widget::get_dirty_rectangle() const

View file

@ -537,13 +537,12 @@ public:
* Derived should override @ref impl_draw_background instead of changing
* this function.
*
* @param frame_buffer The surface to draw upon.
* @param x_offset The offset in the x-direction in the
* @p frame_buffer to draw.
* @param y_offset The offset in the y-direction in the
* @p frame_buffer to draw.
*/
void draw_background(surface& frame_buffer, int x_offset, int y_offset);
void draw_background(int x_offset, int y_offset);
/**
* Draws the children of a widget.
@ -553,13 +552,12 @@ public:
* Derived should override @ref impl_draw_children instead of changing
* this function.
*
* @param frame_buffer The surface to draw upon.
* @param x_offset The offset in the x-direction in the
* @p frame_buffer to draw.
* @param y_offset The offset in the y-direction in the
* @p frame_buffer to draw.
*/
void draw_children(surface& frame_buffer, int x_offset, int y_offset);
void draw_children(int x_offset, int y_offset);
/**
* Draws the foreground of the widget.
@ -570,42 +568,30 @@ public:
* Derived should override @ref impl_draw_foreground instead of changing
* this function.
*
* @param frame_buffer The surface to draw upon.
* @param x_offset The offset in the x-direction in the
* @p frame_buffer to draw.
* @param y_offset The offset in the y-direction in the
* @p frame_buffer to draw.
*/
void draw_foreground(surface& frame_buffer, int x_offset, int y_offset);
void draw_foreground(int x_offset, int y_offset);
private:
/** See @ref draw_background. */
virtual void impl_draw_background(surface& /*frame_buffer*/)
virtual void impl_draw_background()
{
}
virtual void impl_draw_background(surface& /*frame_buffer*/
,
int /*x_offset*/
,
int /*y_offset*/)
virtual void impl_draw_background(int /*x_offset*/, int /*y_offset*/)
{
}
/** See @ref draw_children. */
virtual void impl_draw_children(surface& /*frame_buffer*/
,
int /*x_offset*/
,
int /*y_offset*/)
virtual void impl_draw_children(int /*x_offset*/, int /*y_offset*/)
{
}
/** See @ref draw_foreground. */
virtual void impl_draw_foreground(surface& /*frame_buffer*/
,
int /*x_offset*/
,
int /*y_offset*/)
virtual void impl_draw_foreground(int /*x_offset*/, int /*y_offset*/)
{
}

View file

@ -610,9 +610,6 @@ void window::draw()
return;
}
// TODO: remove
surface& frame_buffer = video_.getSurface();
/***** ***** Layout ***** *****/
if(need_layout_) {
layout();
@ -623,13 +620,13 @@ void window::draw()
}
// Draw background.
this->draw_background(frame_buffer, 0, 0);
this->draw_background(0, 0);
// Draw children.
this->draw_children(frame_buffer, 0, 0);
this->draw_children(0, 0);
// Draw foreground.
this->draw_foreground(frame_buffer, 0, 0);
this->draw_foreground(0, 0);
if(callback_next_draw_ != nullptr) {