widelands-dev team mailing list archive
-
widelands-dev team
-
Mailing list archive
-
Message #06894
[Merge] lp:~widelands-dev/widelands/infotool_stuck_painting into lp:widelands
Miroslav Remák has proposed merging lp:~widelands-dev/widelands/infotool_stuck_painting into lp:widelands.
Requested reviews:
Widelands Developers (widelands-dev)
For more details, see:
https://code.launchpad.net/~widelands-dev/widelands/infotool_stuck_painting/+merge/290076
After using the info tool, if your mouse pointer is located where the field info window is to be created, the editor remains in painting mode (because the newly created window eats the mouse release event that is required to stop painting). This can get pretty nasty, as moving your mouse to different fields will keep creating new windows (until you click and release somewhere in the map view).
As a consequence of the fix, it will no longer be possible to 'paint' with the info tool, though, frankly, I can't imagine anyone getting upset over that. :)
--
Your team Widelands Developers is requested to review the proposed merge of lp:~widelands-dev/widelands/infotool_stuck_painting into lp:widelands.
=== modified file 'src/editor/editorinteractive.cc'
--- src/editor/editorinteractive.cc 2016-03-19 11:47:00 +0000
+++ src/editor/editorinteractive.cc 2016-03-24 18:26:09 +0000
@@ -104,7 +104,7 @@
InteractiveBase(e, g_options.pull_section("global")),
need_save_(false),
realtime_(SDL_GetTicks()),
- left_mouse_button_is_down_(false),
+ is_painting_(false),
tools_(new Tools()),
history_(new EditorHistory(undo_, redo_)),
@@ -307,14 +307,14 @@
bool EditorInteractive::handle_mouserelease(uint8_t btn, int32_t x, int32_t y) {
if (btn == SDL_BUTTON_LEFT) {
- left_mouse_button_is_down_ = false;
+ stop_painting();
}
return InteractiveBase::handle_mouserelease(btn, x, y);
}
bool EditorInteractive::handle_mousepress(uint8_t btn, int32_t x, int32_t y) {
if (btn == SDL_BUTTON_LEFT) {
- left_mouse_button_is_down_ = true;
+ start_painting();
}
return InteractiveBase::handle_mousepress(btn, x, y);
}
@@ -325,7 +325,7 @@
tools_->current().operates_on_triangles() ?
sel.triangle != get_sel_pos().triangle : sel.node != get_sel_pos().node;
InteractiveBase::set_sel_pos(sel);
- if (target_changed && left_mouse_button_is_down_)
+ if (target_changed && is_painting_)
map_clicked(true);
}
@@ -366,6 +366,16 @@
}
}
+void EditorInteractive::start_painting()
+{
+ is_painting_ = true;
+}
+
+void EditorInteractive::stop_painting()
+{
+ is_painting_ = false;
+}
+
void EditorInteractive::toggle_help() {
if (helpmenu_.window)
delete helpmenu_.window;
=== modified file 'src/editor/editorinteractive.h'
--- src/editor/editorinteractive.h 2016-02-18 18:27:52 +0000
+++ src/editor/editorinteractive.h 2016-03-24 18:26:09 +0000
@@ -100,6 +100,8 @@
void map_clicked(bool draw = false);
void set_sel_pos(Widelands::NodeAndTriangle<>) override;
void set_sel_radius_and_update_menu(uint32_t);
+ void start_painting();
+ void stop_painting();
// Handle UI elements.
bool handle_key(bool down, SDL_Keysym) override;
@@ -155,7 +157,7 @@
bool need_save_;
std::vector<PlayerReferences> player_tribe_references_;
uint32_t realtime_;
- bool left_mouse_button_is_down_;
+ bool is_painting_;
std::unique_ptr<Tools> tools_;
std::unique_ptr<EditorHistory> history_;
=== modified file 'src/editor/tools/editor_info_tool.cc'
--- src/editor/tools/editor_info_tool.cc 2016-02-10 19:50:13 +0000
+++ src/editor/tools/editor_info_tool.cc 2016-03-24 18:26:09 +0000
@@ -39,6 +39,8 @@
EditorInteractive& parent,
EditorActionArgs* /* args */,
Widelands::Map* map) {
+ parent.stop_painting();
+
UI::Window * const w =
new UI::Window
(&parent, "field_information", 30, 30, 400, 200,
Follow ups