mirror of
https://github.com/wesnoth/wesnoth
synced 2025-04-28 15:10:28 +00:00
Avoided copying and destroying temporary units when displaying them in dialogs.
This commit is contained in:
parent
5881d1b6ec
commit
0fc601d657
@ -882,29 +882,36 @@ void unit_preview_pane::draw_contents()
|
||||
}
|
||||
}
|
||||
|
||||
units_list_preview_pane::units_list_preview_pane(const unit &u, TYPE type, bool on_left_side) :
|
||||
units_list_preview_pane::units_list_preview_pane(const unit *u, TYPE type, bool on_left_side) :
|
||||
unit_preview_pane(NULL, type, on_left_side),
|
||||
units_(&unit_store_),
|
||||
unit_store_(1, u)
|
||||
units_(1, u)
|
||||
{
|
||||
}
|
||||
|
||||
units_list_preview_pane::units_list_preview_pane(const std::vector<const unit *> &units,
|
||||
const gui::filter_textbox* filter, TYPE type, bool on_left_side) :
|
||||
unit_preview_pane(filter, type, on_left_side),
|
||||
units_(units)
|
||||
{
|
||||
}
|
||||
|
||||
units_list_preview_pane::units_list_preview_pane(const std::vector<unit> &units,
|
||||
const gui::filter_textbox* filter, TYPE type, bool on_left_side) :
|
||||
unit_preview_pane(filter, type, on_left_side),
|
||||
units_(&units),
|
||||
unit_store_()
|
||||
units_(units.size())
|
||||
{
|
||||
for (unsigned i = 0; i < units.size(); ++i)
|
||||
units_[i] = &units[i];
|
||||
}
|
||||
|
||||
size_t units_list_preview_pane::size() const
|
||||
{
|
||||
return (units_!=NULL) ? units_->size() : 0;
|
||||
return units_.size();
|
||||
}
|
||||
|
||||
const unit_preview_pane::details units_list_preview_pane::get_details() const
|
||||
{
|
||||
const unit& u = (*units_)[index_];
|
||||
const unit &u = *units_[index_];
|
||||
details det;
|
||||
|
||||
det.image = u.still_image();
|
||||
@ -943,7 +950,7 @@ const unit_preview_pane::details units_list_preview_pane::get_details() const
|
||||
void units_list_preview_pane::process_event()
|
||||
{
|
||||
if (details_button_.pressed() && index_ >= 0 && index_ < int(size())) {
|
||||
show_unit_description((*units_)[index_]);
|
||||
show_unit_description(*units_[index_]);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -119,18 +119,20 @@ private:
|
||||
class units_list_preview_pane : public dialogs::unit_preview_pane
|
||||
{
|
||||
public:
|
||||
units_list_preview_pane(const unit &u, TYPE type = SHOW_ALL, bool left_side = true);
|
||||
units_list_preview_pane(
|
||||
const std::vector<unit>& units, const gui::filter_textbox* filter=NULL,
|
||||
TYPE type=SHOW_ALL, bool left_side=true);
|
||||
units_list_preview_pane(const unit *u, TYPE type = SHOW_ALL, bool left_side = true);
|
||||
units_list_preview_pane(const std::vector<const unit *> &units,
|
||||
const gui::filter_textbox *filter = NULL,
|
||||
TYPE type = SHOW_ALL, bool left_side = true);
|
||||
units_list_preview_pane(const std::vector<unit> &units,
|
||||
const gui::filter_textbox *filter = NULL,
|
||||
TYPE type = SHOW_ALL, bool left_side = true);
|
||||
|
||||
private:
|
||||
size_t size() const;
|
||||
const details get_details() const;
|
||||
void process_event();
|
||||
|
||||
const std::vector<unit>* units_;
|
||||
std::vector<unit> unit_store_;
|
||||
std::vector<const unit *> units_;
|
||||
};
|
||||
|
||||
|
||||
|
@ -800,8 +800,8 @@ int mouse_handler::show_attack_dialog(const map_location& attacker_loc, const ma
|
||||
|
||||
if (bc_vector.empty())
|
||||
{
|
||||
dialogs::units_list_preview_pane attacker_preview(*attacker, dialogs::unit_preview_pane::SHOW_BASIC, true);
|
||||
dialogs::units_list_preview_pane defender_preview(*defender, dialogs::unit_preview_pane::SHOW_BASIC, false);
|
||||
dialogs::units_list_preview_pane attacker_preview(&*attacker, dialogs::unit_preview_pane::SHOW_BASIC, true);
|
||||
dialogs::units_list_preview_pane defender_preview(&*defender, dialogs::unit_preview_pane::SHOW_BASIC, false);
|
||||
std::vector<gui::preview_pane*> preview_panes;
|
||||
preview_panes.push_back(&attacker_preview);
|
||||
preview_panes.push_back(&defender_preview);
|
||||
@ -880,8 +880,8 @@ int mouse_handler::show_attack_dialog(const map_location& attacker_loc, const ma
|
||||
|
||||
int res = 0;
|
||||
{
|
||||
dialogs::units_list_preview_pane attacker_preview(*attacker, dialogs::unit_preview_pane::SHOW_BASIC, true);
|
||||
dialogs::units_list_preview_pane defender_preview(*defender, dialogs::unit_preview_pane::SHOW_BASIC, false);
|
||||
dialogs::units_list_preview_pane attacker_preview(&*attacker, dialogs::unit_preview_pane::SHOW_BASIC, true);
|
||||
dialogs::units_list_preview_pane defender_preview(&*defender, dialogs::unit_preview_pane::SHOW_BASIC, false);
|
||||
std::vector<gui::preview_pane*> preview_panes;
|
||||
preview_panes.push_back(&attacker_preview);
|
||||
preview_panes.push_back(&defender_preview);
|
||||
|
Loading…
x
Reference in New Issue
Block a user