wesnoth-cvs-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Wesnoth-cvs-commits] wesnoth/src Makefile.am multiplayer.cpp multipl...


From: Philippe Plantier
Subject: [Wesnoth-cvs-commits] wesnoth/src Makefile.am multiplayer.cpp multipl...
Date: Mon, 01 Nov 2004 13:12:35 -0500

CVSROOT:        /cvsroot/wesnoth
Module name:    wesnoth
Branch:         
Changes by:     Philippe Plantier <address@hidden>      04/11/01 18:06:37

Modified files:
        src            : Makefile.am multiplayer.cpp multiplayer.hpp 
                         multiplayer_connect.cpp multiplayer_connect.hpp 
                         multiplayer_lobby.cpp multiplayer_lobby.hpp 
                         sdl_utils.hpp 
        src/widgets    : button.cpp button.hpp file_chooser.cpp 
                         file_chooser.hpp menu.cpp menu.hpp 
                         progressbar.cpp progressbar.hpp scrollbar.cpp 
                         scrollbar.hpp slider.cpp slider.hpp textbox.cpp 
                         textbox.hpp widget.cpp widget.hpp 
Added files:
        src/widgets    : label.cpp label.hpp scrollpane.cpp 
                         scrollpane.hpp 

Log message:
        Fixed bug 10829 (multiplayer setup screen broken in low resolutions) 
and bug
        9868 (resizing in multiplayer lobby creates some glitches.
        
        Added 2 new widgets:
        * The scrollpane, which contains other widgets and makes them scroll
        * The label, a basic text label
        
        Added a "clip box" parameter to widgets.
        Factored the hidden(), dirty() checks, and background restoration in 
the widget
        system. Now, draw() is implemented in widgets.cpp, and widgets implement
        draw_contents();

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/Makefile.am.diff?tr1=1.57&tr2=1.58&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/multiplayer.cpp.diff?tr1=1.126&tr2=1.127&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/multiplayer.hpp.diff?tr1=1.23&tr2=1.24&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/multiplayer_connect.cpp.diff?tr1=1.84&tr2=1.85&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/multiplayer_connect.hpp.diff?tr1=1.19&tr2=1.20&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/multiplayer_lobby.cpp.diff?tr1=1.47&tr2=1.48&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/multiplayer_lobby.hpp.diff?tr1=1.7&tr2=1.8&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/sdl_utils.hpp.diff?tr1=1.48&tr2=1.49&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/widgets/label.cpp?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/widgets/label.hpp?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/widgets/scrollpane.cpp?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/widgets/scrollpane.hpp?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/widgets/button.cpp.diff?tr1=1.46&tr2=1.47&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/widgets/button.hpp.diff?tr1=1.27&tr2=1.28&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/widgets/file_chooser.cpp.diff?tr1=1.8&tr2=1.9&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/widgets/file_chooser.hpp.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/widgets/menu.cpp.diff?tr1=1.66&tr2=1.67&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/widgets/menu.hpp.diff?tr1=1.25&tr2=1.26&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/widgets/progressbar.cpp.diff?tr1=1.3&tr2=1.4&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/widgets/progressbar.hpp.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/widgets/scrollbar.cpp.diff?tr1=1.17&tr2=1.18&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/widgets/scrollbar.hpp.diff?tr1=1.7&tr2=1.8&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/widgets/slider.cpp.diff?tr1=1.31&tr2=1.32&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/widgets/slider.hpp.diff?tr1=1.19&tr2=1.20&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/widgets/textbox.cpp.diff?tr1=1.60&tr2=1.61&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/widgets/textbox.hpp.diff?tr1=1.33&tr2=1.34&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/widgets/widget.cpp.diff?tr1=1.21&tr2=1.22&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/widgets/widget.hpp.diff?tr1=1.18&tr2=1.19&r1=text&r2=text

Patches:
Index: wesnoth/src/Makefile.am
diff -u wesnoth/src/Makefile.am:1.57 wesnoth/src/Makefile.am:1.58
--- wesnoth/src/Makefile.am:1.57        Sun Oct 31 12:45:50 2004
+++ wesnoth/src/Makefile.am     Mon Nov  1 18:06:36 2004
@@ -94,9 +94,11 @@
                  widgets/button.cpp \
                  widgets/file_chooser.cpp \
                  widgets/combo.cpp \
+                 widgets/label.cpp \
                  widgets/menu.cpp \
                  widgets/progressbar.cpp \
                  widgets/scrollbar.cpp \
+                 widgets/scrollpane.cpp \
                  widgets/slider.cpp \
                  widgets/textbox.cpp \
                  widgets/widget.cpp \
@@ -171,9 +173,11 @@
                  widgets/button.hpp \
                  widgets/file_chooser.hpp \
                  widgets/combo.hpp \
+                 widgets/label.hpp \
                  widgets/menu.hpp \
                  widgets/progressbar.hpp \
                  widgets/scrollbar.hpp \
+                 widgets/scrollpane.hpp \
                  widgets/slider.hpp \
                  widgets/textbox.hpp \
                  widgets/widget.hpp \
Index: wesnoth/src/multiplayer.cpp
diff -u wesnoth/src/multiplayer.cpp:1.126 wesnoth/src/multiplayer.cpp:1.127
--- wesnoth/src/multiplayer.cpp:1.126   Sun Oct 31 20:50:13 2004
+++ wesnoth/src/multiplayer.cpp Mon Nov  1 18:06:36 2004
@@ -1,4 +1,4 @@
-/* $Id: multiplayer.cpp,v 1.126 2004/10/31 20:50:13 silene Exp $ */
+/* $Id: multiplayer.cpp,v 1.127 2004/11/01 18:06:36 gruikya Exp $ */
 /*
    Copyright (C) 2003 by David White <address@hidden>
    Part of the Battle for Wesnoth Project http://wesnoth.whitevine.net
@@ -287,9 +287,42 @@
        SDL_Rect minimap_rect = {xpos,ypos,minimap_width,minimap_width};
        minimap_restorer_ = surface_restorer(&disp_.video(),minimap_rect);
 
+       name_entry_->hide(false);
+       maps_menu_->hide(false);
+       turns_slider_->hide(false);
+       village_gold_slider_->hide(false);
+       xp_modifier_slider_->hide(false);
+       fog_game_->hide(false);
+       shroud_game_->hide(false);
+       observers_game_->hide(false);
+       vision_combo_->hide(false);
+       right_button->hide(false);
+       left_button->hide(false);
+       regenerate_map_->hide(false);
+       generator_settings_->hide(false);
+       era_combo_->hide(false);
+
        std::cerr << "setup dialog end set_area\n";
 }
 
+void multiplayer_game_setup_dialog::clear_area()
+{
+       name_entry_->hide();
+       maps_menu_->hide();
+       turns_slider_->hide();
+       village_gold_slider_->hide();
+       xp_modifier_slider_->hide();
+       fog_game_->hide();
+       shroud_game_->hide();
+       observers_game_->hide();
+       vision_combo_->hide();
+       launch_game_->hide();
+       cancel_game_->hide();
+       regenerate_map_->hide();
+       generator_settings_->hide();
+       era_combo_->hide();
+}
+
 lobby::RESULT multiplayer_game_setup_dialog::process()
 {
        CKey key;
Index: wesnoth/src/multiplayer.hpp
diff -u wesnoth/src/multiplayer.hpp:1.23 wesnoth/src/multiplayer.hpp:1.24
--- wesnoth/src/multiplayer.hpp:1.23    Sat Oct  9 21:14:47 2004
+++ wesnoth/src/multiplayer.hpp Mon Nov  1 18:06:36 2004
@@ -1,4 +1,4 @@
-/* $Id: multiplayer.hpp,v 1.23 2004/10/09 21:14:47 Sirp Exp $ */
+/* $Id: multiplayer.hpp,v 1.24 2004/11/01 18:06:36 gruikya Exp $ */
 /*
    Copyright (C) 2003 by David White <address@hidden>
    Part of the Battle for Wesnoth Project http://wesnoth.whitevine.net
@@ -42,7 +42,9 @@
        multiplayer_game_setup_dialog(display& disp, game_data& units_data,
                       const config& cfg, game_state& state, bool server=false, 
const std::string& controller="ai");
 
-       void set_area(const SDL_Rect& area);
+       virtual void set_area(const SDL_Rect& area);
+       virtual void clear_area();
+
        lobby::RESULT process();
 
        void start_game();
Index: wesnoth/src/multiplayer_connect.cpp
diff -u wesnoth/src/multiplayer_connect.cpp:1.84 
wesnoth/src/multiplayer_connect.cpp:1.85
--- wesnoth/src/multiplayer_connect.cpp:1.84    Sun Oct 31 20:50:13 2004
+++ wesnoth/src/multiplayer_connect.cpp Mon Nov  1 18:06:36 2004
@@ -1,4 +1,4 @@
-/* $Id: multiplayer_connect.cpp,v 1.84 2004/10/31 20:50:13 silene Exp $ */
+/* $Id: multiplayer_connect.cpp,v 1.85 2004/11/01 18:06:36 gruikya Exp $ */
 /*
    Copyright (C) 2003 by David White <address@hidden>
    Part of the Battle for Wesnoth Project http://wesnoth.whitevine.net
@@ -43,12 +43,13 @@
            disp_(&disp), cfg_(&cfg), data_(&data), state_(&state),
            show_replay_(false), save_(false), join_(join),
            player_types_(), player_races_(), player_teams_(),
-           player_colors_(), combos_type_(), combos_race_(),
+           player_colors_(), scroll_pane_(disp), combos_type_(), 
combos_race_(),
            combos_leader_(), combos_team_(), combos_color_(), sliders_gold_(),
-           ai_(gui::button(disp, _(" Computer vs Computer "))),
-           launch_(gui::button(disp, _("I'm Ready"))),
-           cancel_(gui::button(disp, _("Cancel"))),
-               message_full_(true), default_controller_(default_controller)
+           ai_(disp, _(" Computer vs Computer ")),
+           launch_(disp, _("I'm Ready")),
+           cancel_(disp, _("Cancel")),
+           waiting_label_(disp, ""),
+           message_full_(true), default_controller_(default_controller)
 {
        // Send Initial information
        config response;
@@ -359,7 +360,8 @@
        right_button->set_location(right - right_button->width() - 
gui::ButtonHPadding,bottom-right_button->height()-gui::ButtonVPadding);
        left_button->set_location(right - right_button->width() - 
left_button->width() - 
gui::ButtonHPadding*2,bottom-left_button->height()-gui::ButtonVPadding);
        
-       ai_.set_location(left+30,bottom-60);
+       ai_.set_location(left+30, 
bottom-left_button->height()-gui::ButtonVPadding);
+       waiting_label_.set_location(ai_.location().x + ai_.location().w + 10, 
bottom-left_button->height()-gui::ButtonVPadding);
 
        //Title and labels
        gui::draw_dialog_title(left,top,disp_,_("Game Lobby"));
@@ -395,44 +397,46 @@
                return;
        }
 
-       combos_type_.clear();
-       combos_race_.clear();
-       combos_leader_.clear();
-       combos_team_.clear();
-       combos_color_.clear();
-       sliders_gold_.clear();
+       //Show buttons
+       ai_.hide(false);
+       launch_.hide(false);
+       cancel_.hide(false);
+       waiting_label_.hide(false);
+       scroll_pane_.hide(false);
+
+       SDL_Rect scroll_pane_rect;
+       scroll_pane_rect.x = rect.x;
+       scroll_pane_rect.y = rect.y + 50;
+       scroll_pane_rect.w = rect.w;
+       scroll_pane_rect.h = launch_.location().y - scroll_pane_rect.y - 
gui::ButtonVPadding;
 
+       scroll_pane_.set_location(scroll_pane_rect);
        config::child_iterator sd;
 
        for(sd = sides.first; sd != sides.second; ++sd) {
                const int side_num = sd - sides.first;
 
                //Player number
-               font::draw_text(disp_,rect, font::SIZE_XLARGE, 
font::GOOD_COLOUR,
-                               (*sd)->values["side"], left+10, 
top+53+(60*side_num));
+               player_numbers_.push_back(gui::label(*disp_, 
(*sd)->values["side"],
+                                       font::SIZE_XLARGE, font::GOOD_COLOUR));
 
                //Player type
                combos_type_.push_back(gui::combo(*disp_, player_types_));
-               combos_type_.back().set_location(left+30,top+55+(60*side_num));
 
                //Player race
                combos_race_.push_back(gui::combo(*disp_, player_races_));
-               combos_race_.back().set_location(left+145,top+55+(60*side_num));
 
                //Player leader
                std::vector<std::string> dummy_leaders;
                dummy_leaders.push_back("-");
                combos_leader_.push_back(gui::combo(*disp_, dummy_leaders));
-               
combos_leader_.back().set_location(left+145,top+85+(60*side_num));
 
                //Player team
                combos_team_.push_back(gui::combo(*disp_, player_teams_));
-               combos_team_.back().set_location(left+260,top+55+(60*side_num));
                combos_team_.back().set_selected(side_num);
 
                //Player color
                combos_color_.push_back(gui::combo(*disp_, player_colors_));
-               
combos_color_.back().set_location(left+375,top+55+(60*side_num));
                combos_color_.back().set_selected(side_num);
 
                SDL_Rect r;
@@ -442,15 +446,15 @@
                r.y = top+55+(60*side_num);
                r.w = launch_.width()-5;
                r.h = launch_.height();
+
                sliders_gold_.push_back(gui::slider(*disp_));
-               sliders_gold_.back().set_location(r);
                sliders_gold_.back().set_min(20);
                sliders_gold_.back().set_max(1000);
                sliders_gold_.back().set_increment(25);
                
sliders_gold_.back().set_value(lexical_cast_default<int>((**sd)["gold"],100));
-               r.w = 30;
-               r.x = left+603;
-               gold_bg_.push_back(surface_restorer(&disp_->video(),r));
+               sliders_gold_.back().set_location(r);
+
+               labels_gold_.push_back(gui::label(*disp_, "100", 
font::SIZE_NORMAL, font::GOOD_COLOUR));
 
                combos_race_.back().enable(!save_);
                combos_leader_.back().enable(!save_);
@@ -464,6 +468,17 @@
        if (!save_) {
                for(sd = sides.first; sd != sides.second; ++sd) {
                        const int side_num = sd - sides.first;
+                       const int spos = 60 * side_num;
+
+                       scroll_pane_.add_widget(&player_numbers_[side_num], 10, 
3 + spos);
+                       scroll_pane_.add_widget(&combos_type_[side_num], 30, 5 
+ spos);
+                       scroll_pane_.add_widget(&combos_race_[side_num], 145, 5 
+ spos);
+                       scroll_pane_.add_widget(&combos_leader_[side_num], 145, 
35 + spos);
+                       scroll_pane_.add_widget(&combos_team_[side_num], 260, 5 
+ spos);
+                       scroll_pane_.add_widget(&combos_color_[side_num], 375, 
5 + spos);
+                       scroll_pane_.add_widget(&sliders_gold_[side_num], 490, 
5 + spos);
+                       scroll_pane_.add_widget(&labels_gold_[side_num], 500 + 
sliders_gold_[side_num].width(), 5 + spos);
+
                        
player_leaders_[side_num].set_combo(&combos_leader_[side_num]);
                }
        }
@@ -473,6 +488,25 @@
        update_whole_screen();
 }
 
+void mp_connect::clear_area()
+{
+       scroll_pane_.clear();
+
+       combos_type_.clear();
+       combos_race_.clear();
+       combos_leader_.clear();
+       combos_team_.clear();
+       combos_color_.clear();
+       sliders_gold_.clear();
+       labels_gold_.clear();
+
+       ai_.hide();
+       launch_.hide();
+       cancel_.hide();
+       waiting_label_.hide();
+       scroll_pane_.hide();
+}
+
 void mp_connect::gui_update()
 {
        //Update the GUI based on current config settings.
@@ -538,30 +572,16 @@
                        player_leaders_[n].set_leader(side["type"]);
 
                //Player Gold
-               rect.x = rect_.x + 603;
-               rect.y = rect_.y + 55 + (60 * n);
-               rect.w = 30;
-               rect.h = launch_.height();
-               gold_bg_[n].restore();
-               font::draw_text(disp_, disp_->screen_area(), font::SIZE_SMALL,
-                               font::GOOD_COLOUR,
-                               side["gold"],
-                               rect.x, rect.y);
-               update_rect(rect);
+               labels_gold_[n].set_text(side["gold"]);
        }
 
        const bool full = is_full();
        if(full != message_full_) {
                message_full_ = full;
                if(full) {
-                       message_bg_.restore();
-                       message_bg_ = surface_restorer();
+                       waiting_label_.set_text("");
                } else {
-                       SDL_Rect rect = 
font::draw_text(NULL,rect_,font::SIZE_SMALL,font::NORMAL_COLOUR,_("Waiting for 
network players to join"),0,0);
-                       rect.x = ai_.location().x + ai_.location().w + 10;
-                       rect.y = ai_.location().y;
-                       message_bg_ = surface_restorer(&disp_->video(),rect);
-                       
font::draw_text(disp_,rect,font::SIZE_SMALL,font::NORMAL_COLOUR,_("Waiting for 
network players to join"),rect.x,rect.y);
+                       waiting_label_.set_text(_("Waiting for network players 
to join"));
                }
        }
 }
@@ -680,15 +700,8 @@
                        {
                                side["gold"] = playergold.str();
 
-                               SDL_Rect rect;
-                               rect.x = rect_.x + 603;
-                               rect.y = rect_.y + 55 + (60 * n);
-                               rect.w = 30;
-                               rect.h = launch_.height();
-                               gold_bg_[n].restore();
-                               font::draw_text(disp_, rect_, 
font::SIZE_SMALL,font::GOOD_COLOUR,(*sides.first[n])["gold"],
-                                                       rect.x, rect.y);
-                               update_rect(rect);
+                               //Player Gold
+                               labels_gold_[n].set_text(side["gold"]);
                                level_changed = true;
                        }
                }
@@ -794,18 +807,7 @@
 
 void mp_connect::start_game()
 {
-       combos_type_.clear();
-       combos_race_.clear();
-       combos_leader_.clear();
-       combos_team_.clear();
-       combos_color_.clear();
-       sliders_gold_.clear();
-
-       ai_.hide();
-       launch_.hide();
-       cancel_.hide();
-       gold_bg_.clear();
-
+       clear_area();
 
        //Tell everyone to start
        config cfg;
Index: wesnoth/src/multiplayer_connect.hpp
diff -u wesnoth/src/multiplayer_connect.hpp:1.19 
wesnoth/src/multiplayer_connect.hpp:1.20
--- wesnoth/src/multiplayer_connect.hpp:1.19    Sat Oct  9 21:14:47 2004
+++ wesnoth/src/multiplayer_connect.hpp Mon Nov  1 18:06:36 2004
@@ -1,4 +1,4 @@
-/* $Id: multiplayer_connect.hpp,v 1.19 2004/10/09 21:14:47 Sirp Exp $ */
+/* $Id: multiplayer_connect.hpp,v 1.20 2004/11/01 18:06:36 gruikya Exp $ */
 /*
    Copyright (C) 2003 by David White <address@hidden>
    Part of the Battle for Wesnoth Project http://wesnoth.whitevine.net
@@ -21,6 +21,8 @@
 #include "widgets/combo.hpp"
 #include "widgets/menu.hpp"
 #include "widgets/slider.hpp"
+#include "widgets/scrollpane.hpp"
+#include "widgets/label.hpp"
 
 #include <deque>
 #include <iostream>
@@ -44,7 +46,9 @@
        void start_game();
 
 private:
-       void set_area(const SDL_Rect& rect);
+       virtual void set_area(const SDL_Rect& rect);
+       virtual void clear_area();
+
        lobby::RESULT process();
        bool manages_network() const { return true; }
        bool get_network_data(config& cfg);
@@ -86,20 +90,22 @@
        //std::vector<std::vector<std::string> > player_leaders_;
        std::vector<leader_list_manager> player_leaders_;
 
+       gui::scrollpane scroll_pane_;
+
+       std::vector<gui::label> player_numbers_;
        std::vector<gui::combo> combos_type_;
        std::vector<gui::combo> combos_race_;
        std::vector<gui::combo> combos_leader_;
        std::vector<gui::combo> combos_team_;
        std::vector<gui::combo> combos_color_;
        std::vector<gui::slider> sliders_gold_;
+       std::vector<gui::label> labels_gold_;
 
        gui::button ai_;
        gui::button launch_;
        gui::button cancel_;
 
-       std::vector<surface_restorer> gold_bg_;
-
-       surface_restorer message_bg_;
+       gui::label waiting_label_;
        bool message_full_;
 
        std::deque<config> network_data_;
Index: wesnoth/src/multiplayer_lobby.cpp
diff -u wesnoth/src/multiplayer_lobby.cpp:1.47 
wesnoth/src/multiplayer_lobby.cpp:1.48
--- wesnoth/src/multiplayer_lobby.cpp:1.47      Sun Oct 31 20:50:13 2004
+++ wesnoth/src/multiplayer_lobby.cpp   Mon Nov  1 18:06:36 2004
@@ -387,6 +387,7 @@
                        }
 
                        if(disp.video().modeChanged()) {
+                               dlg->clear_area();
                                return CONTINUE;
                        }
 
Index: wesnoth/src/multiplayer_lobby.hpp
diff -u wesnoth/src/multiplayer_lobby.hpp:1.7 
wesnoth/src/multiplayer_lobby.hpp:1.8
--- wesnoth/src/multiplayer_lobby.hpp:1.7       Sun Aug 29 11:12:20 2004
+++ wesnoth/src/multiplayer_lobby.hpp   Mon Nov  1 18:06:36 2004
@@ -16,6 +16,7 @@
 {
 public:
        virtual void set_area(const SDL_Rect& area) = 0;
+       virtual void clear_area() {};
        virtual RESULT process() = 0;
        virtual bool manages_network() const { return false; }
        virtual bool get_network_data(config& out) { return false; }
Index: wesnoth/src/sdl_utils.hpp
diff -u wesnoth/src/sdl_utils.hpp:1.48 wesnoth/src/sdl_utils.hpp:1.49
--- wesnoth/src/sdl_utils.hpp:1.48      Sun Oct 31 20:50:13 2004
+++ wesnoth/src/sdl_utils.hpp   Mon Nov  1 18:06:36 2004
@@ -1,4 +1,4 @@
-/* $Id: sdl_utils.hpp,v 1.48 2004/10/31 20:50:13 silene Exp $ */
+/* $Id: sdl_utils.hpp,v 1.49 2004/11/01 18:06:36 gruikya Exp $ */
 /*
    Copyright (C) 2003 by David White <address@hidden>
    Part of the Battle for Wesnoth Project http://wesnoth.whitevine.net
@@ -199,7 +199,7 @@
 
 struct clip_rect_setter
 {
-       clip_rect_setter(surface surf, SDL_Rect& r) : surface_(surf)
+       clip_rect_setter(surface surf, const SDL_Rect& r) : surface_(surf)
        {
                SDL_GetClipRect(surface_,&rect);
                SDL_SetClipRect(surface_,&r);
Index: wesnoth/src/widgets/button.cpp
diff -u wesnoth/src/widgets/button.cpp:1.46 wesnoth/src/widgets/button.cpp:1.47
--- wesnoth/src/widgets/button.cpp:1.46 Sun Oct 31 21:42:56 2004
+++ wesnoth/src/widgets/button.cpp      Mon Nov  1 18:06:37 2004
@@ -1,4 +1,4 @@
-/* $Id: button.cpp,v 1.46 2004/10/31 21:42:56 silene Exp $ */
+/* $Id: button.cpp,v 1.47 2004/11/01 18:06:37 gruikya Exp $ */
 /*
    Copyright (C) 2003 by David White <address@hidden>
    Part of the Battle for Wesnoth Project http://wesnoth.whitevine.net
@@ -136,14 +136,8 @@
        return enabled_;
 }
 
-void button::draw()
+void button::draw_contents()
 {
-       if (hidden() || !dirty())
-               return;
-
-       if (type_ == TYPE_CHECK)
-               bg_restore();
-
        surface image = image_;
        const int image_w = image_->w;
        
@@ -182,8 +176,6 @@
        font::draw_text(&disp(), clipArea, font_size, font::BUTTON_COLOUR, 
etext, textx, texty);
 
        update_rect(loc);
-
-       set_dirty(false);
 }
 
 bool button::hit(int x, int y) const
Index: wesnoth/src/widgets/button.hpp
diff -u wesnoth/src/widgets/button.hpp:1.27 wesnoth/src/widgets/button.hpp:1.28
--- wesnoth/src/widgets/button.hpp:1.27 Sun Oct 31 20:50:13 2004
+++ wesnoth/src/widgets/button.hpp      Mon Nov  1 18:06:37 2004
@@ -1,4 +1,4 @@
-/* $Id: button.hpp,v 1.27 2004/10/31 20:50:13 silene Exp $ */
+/* $Id: button.hpp,v 1.28 2004/11/01 18:06:37 gruikya Exp $ */
 /*
    Copyright (C) 2003 by David White <address@hidden>
    Part of the Battle for Wesnoth Project http://wesnoth.whitevine.net
@@ -58,7 +58,7 @@
        virtual void mouse_motion(const SDL_MouseMotionEvent& event);
        virtual void mouse_down(const SDL_MouseButtonEvent& event);
        virtual void mouse_up(const SDL_MouseButtonEvent& event);
-       virtual void draw();
+       virtual void draw_contents();
 
 private:
 
Index: wesnoth/src/widgets/file_chooser.cpp
diff -u wesnoth/src/widgets/file_chooser.cpp:1.8 
wesnoth/src/widgets/file_chooser.cpp:1.9
--- wesnoth/src/widgets/file_chooser.cpp:1.8    Sun Oct 31 20:50:13 2004
+++ wesnoth/src/widgets/file_chooser.cpp        Mon Nov  1 18:06:37 2004
@@ -72,7 +72,6 @@
 }
 
 void file_chooser::display_current_files() {
-       bg_restore();
        std::vector<std::string> to_show;
        if (!is_root(current_dir_)) {
                to_show.push_back("..");
@@ -116,16 +115,12 @@
        }
 }
 
-void file_chooser::draw() {
-       if (!dirty()) {
-               return;
-       }
+void file_chooser::draw_contents() {
        display_current_files();
        display_chosen_file();
        font::draw_text(&disp_, current_path_rect_, font::SIZE_NORMAL, 
font::NORMAL_COLOUR,
                                        current_dir_, current_path_rect_.x, 
current_path_rect_.y,
                                        disp_.video().getSurface());
-       set_dirty(false);
 }
 
 void file_chooser::process() {
Index: wesnoth/src/widgets/file_chooser.hpp
diff -u wesnoth/src/widgets/file_chooser.hpp:1.2 
wesnoth/src/widgets/file_chooser.hpp:1.3
--- wesnoth/src/widgets/file_chooser.hpp:1.2    Wed Jun  2 22:08:06 2004
+++ wesnoth/src/widgets/file_chooser.hpp        Mon Nov  1 18:06:37 2004
@@ -32,7 +32,7 @@
        /// the one the file is in.
        file_chooser(display &disp, std::string start_file="");
 
-       void draw();
+       void draw_contents();
        void process();
 
        void set_dirty(bool dirty=true);
Index: wesnoth/src/widgets/menu.cpp
diff -u wesnoth/src/widgets/menu.cpp:1.66 wesnoth/src/widgets/menu.cpp:1.67
--- wesnoth/src/widgets/menu.cpp:1.66   Sun Oct 31 20:50:13 2004
+++ wesnoth/src/widgets/menu.cpp        Mon Nov  1 18:06:37 2004
@@ -125,7 +125,8 @@
 void menu::change_item(int pos1, int pos2,std::string str)
 {
        items_[pos1][pos2] = str;
-       undrawn_items_.insert(pos1);
+       //undrawn_items_.insert(pos1);
+       set_dirty();
 }
 
 void menu::erase_item(size_t index)
@@ -150,7 +151,8 @@
        items_.clear();
        itemRects_.clear();
        column_widths_.clear();
-       undrawn_items_.clear();
+       //undrawn_items_.clear();
+       set_dirty();
        max_items_ = -1; // Force recalculation of the max items.
        item_height_ = -1; // Force recalculation of the item height.
        // Scrollbar will be reenabled if it is needed.
@@ -221,8 +223,9 @@
        if (new_selected == selected_ || new_selected >= items_.size())
                return;
 
-       undrawn_items_.insert(selected_);
-       undrawn_items_.insert(new_selected);
+       //undrawn_items_.insert(selected_);
+       //undrawn_items_.insert(new_selected);
+       set_dirty();
        selected_ = new_selected;
        adjust_viewport_to_selection();
 }
@@ -452,9 +455,10 @@
        }
 }
 
-void menu::draw()
+void menu::draw_contents()
 {
-       if (hidden() || !dirty() && undrawn_items_.empty())
+#if 0
+       if (undrawn_items_.empty())
                return;
 
        if (!dirty()) {
@@ -470,7 +474,7 @@
        }
 
        undrawn_items_.clear();
-       set_dirty(false);
+#endif
 
        for(size_t i = 0; i != items_.size(); ++i)
                draw_item(i);
Index: wesnoth/src/widgets/menu.hpp
diff -u wesnoth/src/widgets/menu.hpp:1.25 wesnoth/src/widgets/menu.hpp:1.26
--- wesnoth/src/widgets/menu.hpp:1.25   Sun Oct 31 20:50:13 2004
+++ wesnoth/src/widgets/menu.hpp        Mon Nov  1 18:06:37 2004
@@ -84,7 +84,7 @@
        size_t selected_;
        bool click_selects_;
        bool previous_button_;
-       std::set<size_t> undrawn_items_;
+       //std::set<size_t> undrawn_items_;
 
        bool show_result_;
 
@@ -93,7 +93,7 @@
        const std::vector<int>& column_widths() const;
        void draw_item(int item);
        void clear_item(int item);
-       void draw();
+       void draw_contents();
        int hit(int x, int y) const;
 
        std::pair<int,int> hit_cell(int x, int y) const;
Index: wesnoth/src/widgets/progressbar.cpp
diff -u wesnoth/src/widgets/progressbar.cpp:1.3 
wesnoth/src/widgets/progressbar.cpp:1.4
--- wesnoth/src/widgets/progressbar.cpp:1.3     Fri Sep 24 23:25:09 2004
+++ wesnoth/src/widgets/progressbar.cpp Mon Nov  1 18:06:37 2004
@@ -15,7 +15,7 @@
        set_dirty(true);
 }
 
-void progress_bar::draw()
+void progress_bar::draw_contents()
 {
        surface const surf = disp().video().getSurface();
        SDL_Rect area = location();
Index: wesnoth/src/widgets/progressbar.hpp
diff -u wesnoth/src/widgets/progressbar.hpp:1.2 
wesnoth/src/widgets/progressbar.hpp:1.3
--- wesnoth/src/widgets/progressbar.hpp:1.2     Sun Jul 18 19:02:25 2004
+++ wesnoth/src/widgets/progressbar.hpp Mon Nov  1 18:06:37 2004
@@ -12,7 +12,7 @@
 
        void set_progress_percent(int progress);
 
-       void draw();
+       void draw_contents();
 
 private:
        int progress_;
Index: wesnoth/src/widgets/scrollbar.cpp
diff -u wesnoth/src/widgets/scrollbar.cpp:1.17 
wesnoth/src/widgets/scrollbar.cpp:1.18
--- wesnoth/src/widgets/scrollbar.cpp:1.17      Sun Oct 31 20:50:13 2004
+++ wesnoth/src/widgets/scrollbar.cpp   Mon Nov  1 18:06:37 2004
@@ -1,4 +1,4 @@
-/* $Id: scrollbar.cpp,v 1.17 2004/10/31 20:50:13 silene Exp $*/
+/* $Id: scrollbar.cpp,v 1.18 2004/11/01 18:06:37 gruikya Exp $*/
 /*
    Copyright (C) 2003 by David White <address@hidden>
    Part of the Battle for Wesnoth Project http://wesnoth.whitevine.net
@@ -161,11 +161,8 @@
        return res;
 }
 
-void scrollbar::draw()
+void scrollbar::draw_contents()
 {
-       if (hidden() || !dirty())
-               return;
-
        const surface mid_img(image::get_image(state_ != NORMAL ? 
                                        scrollbar_mid_hl : scrollbar_mid, 
image::UNSCALED));
        const surface bottom_img(image::get_image(state_ != NORMAL ? 
@@ -218,8 +215,6 @@
 
        surface const screen = disp().video().getSurface();
 
-       bg_restore();
-
        // draw scrollbar "groove"
        disp().blit_surface(groove.x, groove.y, top_grv);
        disp().blit_surface(groove.x, groove.y + top_grv->h, groove_scaled_);
@@ -230,7 +225,6 @@
        disp().blit_surface(grip.x, grip.y + top_img->h, mid_scaled_);
        disp().blit_surface(grip.x, grip.y + top_img->h + mid_height, 
bottom_img);
 
-       set_dirty(false);
        update_rect(groove);
 }      
 
Index: wesnoth/src/widgets/scrollbar.hpp
diff -u wesnoth/src/widgets/scrollbar.hpp:1.7 
wesnoth/src/widgets/scrollbar.hpp:1.8
--- wesnoth/src/widgets/scrollbar.hpp:1.7       Sun Oct 31 20:50:13 2004
+++ wesnoth/src/widgets/scrollbar.hpp   Mon Nov  1 18:06:37 2004
@@ -1,4 +1,4 @@
-/* $Id: scrollbar.hpp,v 1.7 2004/10/31 20:50:13 silene Exp $ */
+/* $Id: scrollbar.hpp,v 1.8 2004/11/01 18:06:37 gruikya Exp $ */
 /*
    Copyright (C) 2003 by David White <address@hidden>
    Part of the Battle for Wesnoth Project http://wesnoth.whitevine.net
@@ -63,7 +63,7 @@
 protected:
        virtual void handle_event(const SDL_Event& event);
        virtual void process_event();
-       virtual void draw();
+       virtual void draw_contents();
 
 private:
        SDL_Rect grip_area() const;
Index: wesnoth/src/widgets/slider.cpp
diff -u wesnoth/src/widgets/slider.cpp:1.31 wesnoth/src/widgets/slider.cpp:1.32
--- wesnoth/src/widgets/slider.cpp:1.31 Sun Oct 31 20:50:13 2004
+++ wesnoth/src/widgets/slider.cpp      Mon Nov  1 18:06:37 2004
@@ -1,4 +1,4 @@
-/* $Id: slider.cpp,v 1.31 2004/10/31 20:50:13 silene Exp $ */
+/* $Id: slider.cpp,v 1.32 2004/11/01 18:06:37 gruikya Exp $ */
 /*
    Copyright (C) 2003 by David White <address@hidden>
    Part of the Battle for Wesnoth Project http://wesnoth.whitevine.net
@@ -108,11 +108,8 @@
        return res;
 }
 
-void slider::draw()
+void slider::draw_contents()
 {
-       if (!dirty() || hidden())
-               return;
-
        const surface image(state_ != NORMAL ? highlightedImage_ : image_);
        if (image == NULL)
                return;
@@ -123,16 +120,11 @@
 
        surface const screen = disp().video().getSurface();
 
-       bg_restore();
-
        SDL_Rect line_rect = { loc.x + image->w / 2, loc.y + loc.h / 2, loc.w - 
image->w, 1 };
        SDL_FillRect(screen, &line_rect, SDL_MapRGB(screen->format, 255, 255, 
255));
 
        SDL_Rect const &slider = slider_area();
        disp().blit_surface(slider.x, slider.y, image);
-
-       set_dirty(false);
-       update_rect(loc);
 }
 
 void slider::set_slider_position(int x)
Index: wesnoth/src/widgets/slider.hpp
diff -u wesnoth/src/widgets/slider.hpp:1.19 wesnoth/src/widgets/slider.hpp:1.20
--- wesnoth/src/widgets/slider.hpp:1.19 Sun Oct 31 20:50:13 2004
+++ wesnoth/src/widgets/slider.hpp      Mon Nov  1 18:06:37 2004
@@ -1,4 +1,4 @@
-/* $Id: slider.hpp,v 1.19 2004/10/31 20:50:13 silene Exp $ */
+/* $Id: slider.hpp,v 1.20 2004/11/01 18:06:37 gruikya Exp $ */
 /*
    Copyright (C) 2003 by David White <address@hidden>
    Part of the Battle for Wesnoth Project http://wesnoth.whitevine.net
@@ -41,7 +41,7 @@
 
 protected:
        virtual void handle_event(const SDL_Event& event);
-       virtual void draw();
+       virtual void draw_contents();
 
 private:
        void mouse_motion(const SDL_MouseMotionEvent& event);
Index: wesnoth/src/widgets/textbox.cpp
diff -u wesnoth/src/widgets/textbox.cpp:1.60 
wesnoth/src/widgets/textbox.cpp:1.61
--- wesnoth/src/widgets/textbox.cpp:1.60        Sun Oct 31 23:12:07 2004
+++ wesnoth/src/widgets/textbox.cpp     Mon Nov  1 18:06:37 2004
@@ -1,4 +1,4 @@
-/* $Id: textbox.cpp,v 1.60 2004/10/31 23:12:07 silene Exp $ */
+/* $Id: textbox.cpp,v 1.61 2004/11/01 18:06:37 gruikya Exp $ */
 /*
    Copyright (C) 2003 by David White <address@hidden>
    Part of the Battle for Wesnoth Project http://wesnoth.whitevine.net
@@ -115,13 +115,8 @@
        }
 }
 
-void textbox::draw()
+void textbox::draw_contents()
 {
-       if (hidden() || !dirty())
-               return;
-
-       bg_restore();
-
        const bool has_scrollbar = show_scrollbar();
        SDL_Rect loc = location();
        if (has_scrollbar)
@@ -177,7 +172,6 @@
 
        draw_cursor((cursor_pos_ == 0 ? 0 : cursor_pos_ - 1), disp());
 
-       set_dirty(false);
        update_rect(loc);
 }
 
Index: wesnoth/src/widgets/textbox.hpp
diff -u wesnoth/src/widgets/textbox.hpp:1.33 
wesnoth/src/widgets/textbox.hpp:1.34
--- wesnoth/src/widgets/textbox.hpp:1.33        Sun Oct 31 23:12:07 2004
+++ wesnoth/src/widgets/textbox.hpp     Mon Nov  1 18:06:37 2004
@@ -1,4 +1,4 @@
-/* $Id: textbox.hpp,v 1.33 2004/10/31 23:12:07 silene Exp $ */
+/* $Id: textbox.hpp,v 1.34 2004/11/01 18:06:37 gruikya Exp $ */
 /*
    Copyright (C) 2003 by David White <address@hidden>
    Part of the Battle for Wesnoth Project http://wesnoth.whitevine.net
@@ -45,7 +45,7 @@
 
        void set_wrap(bool val);
 
-       void draw();
+       void draw_contents();
        virtual void set_location(SDL_Rect const &);
        using widget::set_location;
 
Index: wesnoth/src/widgets/widget.cpp
diff -u wesnoth/src/widgets/widget.cpp:1.21 wesnoth/src/widgets/widget.cpp:1.22
--- wesnoth/src/widgets/widget.cpp:1.21 Sun Oct 31 20:50:13 2004
+++ wesnoth/src/widgets/widget.cpp      Mon Nov  1 18:06:37 2004
@@ -9,7 +9,7 @@
 
 widget::widget(const widget &o)
        : events::handler(), disp_(o.disp_), restorer_(o.restorer_), 
rect_(o.rect_),
-         focus_(o.focus_), needs_restore_(o.needs_restore_),
+         clip_rect_(o.clip_rect_), focus_(o.focus_), 
needs_restore_(o.needs_restore_),
          state_(o.state_), volatile_(o.volatile_),
          help_text_(o.help_text_), help_string_(o.help_string_)
 {
@@ -19,6 +19,10 @@
        : disp_(&disp), rect_(EmptyRect), focus_(true), needs_restore_(false),
          state_(UNINIT), volatile_(false), help_string_(0)
 {
+       clip_rect_.x = 0;
+       clip_rect_.y = 0;
+       clip_rect_.w = disp.screen_area().w;
+       clip_rect_.h = disp.screen_area().h;
 }
 
 widget::~widget()
@@ -110,6 +114,12 @@
        }
 }
 
+void widget::set_clip_rect(const SDL_Rect& rect)
+{
+       clip_rect_ = rect;
+       set_dirty(true);
+}
+
 bool widget::hidden() const
 {
        return state_ == HIDDEN || state_ == UNINIT;
@@ -139,6 +149,8 @@
 
 void widget::bg_restore() const
 {
+       clip_rect_setter set_clip_rect(disp().video().getSurface(), clip_rect_);
+
        if (needs_restore_) {
                for(std::vector< surface_restorer >::const_iterator i = 
restorer_.begin(),
                    i_end = restorer_.end(); i != i_end; ++i)
@@ -153,6 +165,8 @@
 
 void widget::bg_restore(SDL_Rect const &rect) const
 {
+       clip_rect_setter set_clip_rect(disp().video().getSurface(), clip_rect_);
+
        for(std::vector< surface_restorer >::const_iterator i = 
restorer_.begin(),
            i_end = restorer_.end(); i != i_end; ++i)
                i->restore(rect);
@@ -165,6 +179,20 @@
                state_ = DRAWN;
 }
 
+void widget::draw()
+{
+       if (hidden() || !dirty())
+               return;
+
+       bg_restore();
+
+       clip_rect_setter set_clip_rect(disp().video().getSurface(), clip_rect_);
+       draw_contents();
+
+       update_rect(rect_);
+       set_dirty(false);
+}
+
 void widget::volatile_draw()
 {
        if (!volatile_ || state_ != DRAWN)
Index: wesnoth/src/widgets/widget.hpp
diff -u wesnoth/src/widgets/widget.hpp:1.18 wesnoth/src/widgets/widget.hpp:1.19
--- wesnoth/src/widgets/widget.hpp:1.18 Sun Oct 31 20:50:13 2004
+++ wesnoth/src/widgets/widget.hpp      Mon Nov  1 18:06:37 2004
@@ -30,6 +30,8 @@
        virtual void hide(bool value = true);
        bool hidden() const;
 
+       void set_clip_rect(const SDL_Rect& rect);
+       
        //Function to set the widget to draw in 'volatile' mode.
        //When in 'volatile' mode, instead of using the normal
        //save-background-redraw-when-dirty procedure, redrawing is done
@@ -62,6 +64,9 @@
 
        virtual void handle_event(SDL_Event const &event) {}
 
+       virtual void draw();
+       virtual void draw_contents() {};
+
 private:
        void volatile_draw();
        void volatile_undraw();
@@ -76,6 +81,7 @@
        mutable bool needs_restore_; // Have we drawn ourselves, so that if 
moved, we need to restore the background?
 
        enum { UNINIT, HIDDEN, DIRTY, DRAWN } state_;
+       SDL_Rect clip_rect_;
 
        bool volatile_;
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]