Make storyscreen respect draw-all events

The storyscreen now marks itself as dirty on a draw-all event and
redraws itself. There's also some code cleanup in here.
This commit is contained in:
Andreas Löf 2016-02-24 15:34:25 +13:00
parent 7565ae00d6
commit d00e207202
5 changed files with 21 additions and 9 deletions

View file

@ -883,6 +883,7 @@ void display::layout_buttons()
if (s) {
const SDL_Rect& loc = i->location(screen_area());
s->set_location(loc);
s->set_measurements(0,0);
s->set_volatile(
sdl::rects_overlap(s->location(),map_outside_area()));
}
@ -895,6 +896,7 @@ void display::layout_buttons()
if(b) {
const SDL_Rect& loc = i->location(screen_area());
b->set_location(loc);
b->set_measurements(0,0);
b->set_label(i->title());
b->set_volatile(
sdl::rects_overlap(b->location(),map_outside_area()));
@ -908,6 +910,7 @@ void display::layout_buttons()
if(b) {
const SDL_Rect& loc = i->location(screen_area());
b->set_location(loc);
b->set_measurements(0,0);
b->set_label(i->title());
b->set_volatile(
sdl::rects_overlap(b->location(),map_outside_area()));

View file

@ -443,7 +443,7 @@ void pump()
}
//make sure this runs in it's own scope.
{
for( std::deque<context>::iterator i = event_contexts.begin() ; i != event_contexts.end(); i++) {
for( std::deque<context>::iterator i = event_contexts.begin() ; i != event_contexts.end(); ++i) {
const std::vector<sdl_handler*>& event_handlers = (*i).handlers;
for(size_t i1 = 0, i2 = event_handlers.size(); i1 != i2 && i1 < event_handlers.size(); ++i1) {
event_handlers[i1]->handle_window_event(event);
@ -512,11 +512,10 @@ void pump()
case DRAW_ALL_EVENT:
{
/* iterate backwards as the most recent things will be at the top */
for( std::deque<context>::iterator i = event_contexts.begin() ; i != event_contexts.end(); i++) {
for( std::deque<context>::iterator i = event_contexts.begin() ; i != event_contexts.end(); ++i) {
const std::vector<sdl_handler*>& event_handlers = (*i).handlers;
for( std::vector<sdl_handler*>::const_iterator i1 = event_handlers.begin(); i1 != event_handlers.end(); i1++) {
for( std::vector<sdl_handler*>::const_iterator i1 = event_handlers.begin(); i1 != event_handlers.end(); ++i1) {
(*i1)->handle_event(event);
//event_handlers[i1]->draw();
}
}
continue; //do not do further handling here
@ -610,7 +609,7 @@ void raise_draw_event()
void raise_draw_all_event()
{
for( std::deque<context>::iterator i = event_contexts.begin() ; i != event_contexts.end(); i++) {
for( std::deque<context>::iterator i = event_contexts.begin() ; i != event_contexts.end(); ++i) {
const std::vector<sdl_handler*>& event_handlers = (*i).handlers;
for(size_t i1 = 0, i2 = event_handlers.size(); i1 != i2 && i1 < event_handlers.size(); ++i1) {
event_handlers[i1]->draw();
@ -634,7 +633,7 @@ void raise_volatile_draw_event()
void raise_volatile_draw_all_event()
{
for( std::deque<context>::iterator i = event_contexts.begin() ; i != event_contexts.end(); i++) {
for( std::deque<context>::iterator i = event_contexts.begin() ; i != event_contexts.end(); ++i) {
const std::vector<sdl_handler*>& event_handlers = (*i).handlers;
for(size_t i1 = 0, i2 = event_handlers.size(); i1 != i2 && i1 < event_handlers.size(); ++i1) {
event_handlers[i1]->volatile_draw();
@ -696,7 +695,7 @@ void peek_for_resize()
{
SDL_Event events[100];
int num = SDL_PeepEvents(events, 100, SDL_PEEKEVENT, SDL_WINDOWEVENT, SDL_WINDOWEVENT);
for (int i = 0; i < num; i++) {
for (int i = 0; i < num; ++i) {
if (events[i].type == SDL_WINDOWEVENT &&
events[i].window.event == SDL_WINDOWEVENT_RESIZED) {
CVideo::get_singleton().update_framebuffer();

View file

@ -1000,6 +1000,15 @@ part_ui::RESULT part_ui::show()
return ret_;
}
void part_ui::handle_event(const SDL_Event &event)
{
if (event.type == DRAW_ALL_EVENT) {
dirty_ = true;
draw();
}
}
#if SDL_VERSION_ATLEAST(2, 0, 0)
void part_ui::handle_window_event(const SDL_Event &event)
{

View file

@ -65,7 +65,8 @@ public:
*/
RESULT show();
virtual void handle_event(const SDL_Event&) {}
virtual void handle_event(const SDL_Event&);
#if SDL_VERSION_ATLEAST(2,0,0)
virtual void handle_window_event(const SDL_Event& event);
#endif

View file

@ -270,7 +270,7 @@ draw_layering::~draw_layering()
event.window.data1 = (*frameBuffer).h;
event.window.data2 = (*frameBuffer).w;
for(std::list<events::sdl_handler*>::iterator it = draw_layers.begin(); it != draw_layers.end(); it++) {
for(std::list<events::sdl_handler*>::iterator it = draw_layers.begin(); it != draw_layers.end(); ++it) {
(*it)->handle_window_event(event);
}
#endif