Merge pull request #60892 from KoBeWi/fat_selection
Improve tile editor selection appearance
This commit is contained in:
commit
43bef98450
|
@ -0,0 +1,57 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
height="5"
|
||||
viewBox="0 0 5 5"
|
||||
width="5"
|
||||
version="1.1"
|
||||
id="svg10"
|
||||
sodipodi:docname="TileSelection.svg"
|
||||
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs14">
|
||||
<linearGradient
|
||||
id="linearGradient1060"
|
||||
inkscape:swatch="solid">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop1058" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="namedview12"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:pageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
showgrid="false"
|
||||
inkscape:zoom="64"
|
||||
inkscape:cx="4.3125"
|
||||
inkscape:cy="1.984375"
|
||||
inkscape:window-width="3840"
|
||||
inkscape:window-height="2066"
|
||||
inkscape:window-x="-11"
|
||||
inkscape:window-y="-11"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg10" />
|
||||
<rect
|
||||
style="fill:none;stroke:#ffffff;stroke-width:1.00038;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect940"
|
||||
width="3.9996195"
|
||||
height="3.999619"
|
||||
x="0.50019002"
|
||||
y="0.50019002" />
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:0.999543;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect3062"
|
||||
width="2.000457"
|
||||
height="2.000457"
|
||||
x="1.4997715"
|
||||
y="1.4997715" />
|
||||
</svg>
|
After Width: | Height: | Size: 1.7 KiB |
|
@ -1698,7 +1698,7 @@ void TileMapEditorTilesPlugin::_tile_atlas_control_draw() {
|
|||
if (frame > 0) {
|
||||
color.a *= 0.3;
|
||||
}
|
||||
tile_atlas_control->draw_rect(atlas->get_tile_texture_region(E.get_atlas_coords(), frame), color, false);
|
||||
TilesEditorPlugin::draw_selection_rect(tile_atlas_control, atlas->get_tile_texture_region(E.get_atlas_coords(), frame), color);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1706,11 +1706,8 @@ void TileMapEditorTilesPlugin::_tile_atlas_control_draw() {
|
|||
// Draw the hovered tile.
|
||||
if (hovered_tile.get_atlas_coords() != TileSetSource::INVALID_ATLAS_COORDS && hovered_tile.alternative_tile == 0 && !tile_set_dragging_selection) {
|
||||
for (int frame = 0; frame < atlas->get_tile_animation_frames_count(hovered_tile.get_atlas_coords()); frame++) {
|
||||
Color color = Color(1.0, 1.0, 1.0);
|
||||
if (frame > 0) {
|
||||
color.a *= 0.3;
|
||||
}
|
||||
tile_atlas_control->draw_rect(atlas->get_tile_texture_region(hovered_tile.get_atlas_coords(), frame), color, false);
|
||||
Color color = Color(1.0, 0.8, 0.0, frame == 0 ? 0.6 : 0.3);
|
||||
TilesEditorPlugin::draw_selection_rect(tile_atlas_control, atlas->get_tile_texture_region(hovered_tile.get_atlas_coords(), frame), color);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1731,9 +1728,8 @@ void TileMapEditorTilesPlugin::_tile_atlas_control_draw() {
|
|||
}
|
||||
}
|
||||
}
|
||||
Color selection_rect_color = selection_color.lightened(0.2);
|
||||
for (const Vector2i &E : to_draw) {
|
||||
tile_atlas_control->draw_rect(atlas->get_tile_texture_region(E), selection_rect_color, false);
|
||||
TilesEditorPlugin::draw_selection_rect(tile_atlas_control, atlas->get_tile_texture_region(E));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1882,7 +1878,7 @@ void TileMapEditorTilesPlugin::_tile_alternatives_control_draw() {
|
|||
if (E.source_id == source_id && E.get_atlas_coords() != TileSetSource::INVALID_ATLAS_COORDS && E.alternative_tile > 0) {
|
||||
Rect2i rect = tile_atlas_view->get_alternative_tile_rect(E.get_atlas_coords(), E.alternative_tile);
|
||||
if (rect != Rect2i()) {
|
||||
alternative_tiles_control->draw_rect(rect, Color(0.2, 0.2, 1.0), false);
|
||||
TilesEditorPlugin::draw_selection_rect(alternative_tiles_control, rect);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1891,7 +1887,7 @@ void TileMapEditorTilesPlugin::_tile_alternatives_control_draw() {
|
|||
if (hovered_tile.get_atlas_coords() != TileSetSource::INVALID_ATLAS_COORDS && hovered_tile.alternative_tile > 0) {
|
||||
Rect2i rect = tile_atlas_view->get_alternative_tile_rect(hovered_tile.get_atlas_coords(), hovered_tile.alternative_tile);
|
||||
if (rect != Rect2i()) {
|
||||
alternative_tiles_control->draw_rect(rect, Color(1.0, 1.0, 1.0), false);
|
||||
TilesEditorPlugin::draw_selection_rect(alternative_tiles_control, rect, Color(1.0, 0.8, 0.0, 0.5));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1684,10 +1684,6 @@ Array TileSetAtlasSourceEditor::_get_selection_as_array() {
|
|||
}
|
||||
|
||||
void TileSetAtlasSourceEditor::_tile_atlas_control_draw() {
|
||||
// Colors.
|
||||
Color grid_color = EDITOR_GET("editors/tiles_editor/grid_color");
|
||||
Color selection_color = Color().from_hsv(Math::fposmod(grid_color.get_h() + 0.5, 1.0), grid_color.get_s(), grid_color.get_v(), 1.0);
|
||||
|
||||
// Draw the selected tile.
|
||||
if (tools_button_group->get_pressed_button() == tool_select_button) {
|
||||
for (const TileSelection &E : selection) {
|
||||
|
@ -1695,12 +1691,9 @@ void TileSetAtlasSourceEditor::_tile_atlas_control_draw() {
|
|||
if (selected.alternative == 0) {
|
||||
// Draw the rect.
|
||||
for (int frame = 0; frame < tile_set_atlas_source->get_tile_animation_frames_count(selected.tile); frame++) {
|
||||
Color color = selection_color;
|
||||
if (frame > 0) {
|
||||
color.a *= 0.3;
|
||||
}
|
||||
Color color = Color(0.0, 1.0, 0.0, frame == 0 ? 1.0 : 0.3);
|
||||
Rect2 region = tile_set_atlas_source->get_tile_texture_region(selected.tile, frame);
|
||||
tile_atlas_control->draw_rect(region, color, false);
|
||||
TilesEditorPlugin::draw_selection_rect(tile_atlas_control, region, color);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1742,7 +1735,7 @@ void TileSetAtlasSourceEditor::_tile_atlas_control_draw() {
|
|||
// Draw the tiles to be removed.
|
||||
for (const Vector2i &E : drag_modified_tiles) {
|
||||
for (int frame = 0; frame < tile_set_atlas_source->get_tile_animation_frames_count(E); frame++) {
|
||||
tile_atlas_control->draw_rect(tile_set_atlas_source->get_tile_texture_region(E, frame), Color(0.0, 0.0, 0.0), false);
|
||||
TilesEditorPlugin::draw_selection_rect(tile_atlas_control, tile_set_atlas_source->get_tile_texture_region(E, frame), Color(0.0, 0.0, 0.0));
|
||||
}
|
||||
}
|
||||
} else if (drag_type == DRAG_TYPE_RECT_SELECT || drag_type == DRAG_TYPE_REMOVE_TILES_USING_RECT) {
|
||||
|
@ -1754,7 +1747,7 @@ void TileSetAtlasSourceEditor::_tile_atlas_control_draw() {
|
|||
|
||||
Color color = Color(0.0, 0.0, 0.0);
|
||||
if (drag_type == DRAG_TYPE_RECT_SELECT) {
|
||||
color = selection_color.lightened(0.2);
|
||||
color = Color(1.0, 1.0, 0.0);
|
||||
}
|
||||
|
||||
RBSet<Vector2i> to_paint;
|
||||
|
@ -1769,7 +1762,7 @@ void TileSetAtlasSourceEditor::_tile_atlas_control_draw() {
|
|||
|
||||
for (const Vector2i &E : to_paint) {
|
||||
Vector2i coords = E;
|
||||
tile_atlas_control->draw_rect(tile_set_atlas_source->get_tile_texture_region(coords), color, false);
|
||||
TilesEditorPlugin::draw_selection_rect(tile_atlas_control, tile_set_atlas_source->get_tile_texture_region(coords), color);
|
||||
}
|
||||
} else if (drag_type == DRAG_TYPE_CREATE_TILES_USING_RECT) {
|
||||
// Draw tiles to be created.
|
||||
|
@ -1786,7 +1779,7 @@ void TileSetAtlasSourceEditor::_tile_atlas_control_draw() {
|
|||
Vector2i coords = Vector2i(x, y);
|
||||
if (tile_set_atlas_source->get_tile_at_coords(coords) == TileSetSource::INVALID_ATLAS_COORDS) {
|
||||
Vector2i origin = margins + (coords * (tile_size + separation));
|
||||
tile_atlas_control->draw_rect(Rect2i(origin, tile_size), Color(1.0, 1.0, 1.0), false);
|
||||
TilesEditorPlugin::draw_selection_rect(tile_atlas_control, Rect2i(origin, tile_size));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1803,7 +1796,7 @@ void TileSetAtlasSourceEditor::_tile_atlas_control_draw() {
|
|||
Vector2i separation = tile_set_atlas_source->get_separation();
|
||||
Vector2i tile_size = tile_set_atlas_source->get_texture_region_size();
|
||||
Vector2i origin = margins + (area.position * (tile_size + separation));
|
||||
tile_atlas_control->draw_rect(Rect2i(origin, area.size * tile_size), Color(1.0, 1.0, 1.0), false);
|
||||
TilesEditorPlugin::draw_selection_rect(tile_atlas_control, Rect2i(origin, area.size * tile_size));
|
||||
} else {
|
||||
Vector2i grid_size = tile_set_atlas_source->get_atlas_grid_size();
|
||||
if (hovered_base_tile_coords.x >= 0 && hovered_base_tile_coords.y >= 0 && hovered_base_tile_coords.x < grid_size.x && hovered_base_tile_coords.y < grid_size.y) {
|
||||
|
@ -1811,11 +1804,8 @@ void TileSetAtlasSourceEditor::_tile_atlas_control_draw() {
|
|||
if (hovered_tile != TileSetSource::INVALID_ATLAS_COORDS) {
|
||||
// Draw existing hovered tile.
|
||||
for (int frame = 0; frame < tile_set_atlas_source->get_tile_animation_frames_count(hovered_tile); frame++) {
|
||||
Color color = Color(1.0, 1.0, 1.0);
|
||||
if (frame > 0) {
|
||||
color.a *= 0.3;
|
||||
}
|
||||
tile_atlas_control->draw_rect(tile_set_atlas_source->get_tile_texture_region(hovered_tile, frame), color, false);
|
||||
Color color = Color(1.0, 0.8, 0.0, frame == 0 ? 0.6 : 0.3);
|
||||
TilesEditorPlugin::draw_selection_rect(tile_atlas_control, tile_set_atlas_source->get_tile_texture_region(hovered_tile, frame), color);
|
||||
}
|
||||
} else {
|
||||
// Draw empty tile, only in add/remove tiles mode.
|
||||
|
@ -1824,7 +1814,7 @@ void TileSetAtlasSourceEditor::_tile_atlas_control_draw() {
|
|||
Vector2i separation = tile_set_atlas_source->get_separation();
|
||||
Vector2i tile_size = tile_set_atlas_source->get_texture_region_size();
|
||||
Vector2i origin = margins + (hovered_base_tile_coords * (tile_size + separation));
|
||||
tile_atlas_control->draw_rect(Rect2i(origin, tile_size), Color(1.0, 1.0, 1.0), false);
|
||||
TilesEditorPlugin::draw_selection_rect(tile_atlas_control, Rect2i(origin, tile_size));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1976,9 +1966,6 @@ void TileSetAtlasSourceEditor::_tile_alternatives_control_mouse_exited() {
|
|||
}
|
||||
|
||||
void TileSetAtlasSourceEditor::_tile_alternatives_control_draw() {
|
||||
Color grid_color = EDITOR_GET("editors/tiles_editor/grid_color");
|
||||
Color selection_color = Color().from_hsv(Math::fposmod(grid_color.get_h() + 0.5, 1.0), grid_color.get_s(), grid_color.get_v(), 1.0);
|
||||
|
||||
// Update the hovered alternative tile.
|
||||
if (tools_button_group->get_pressed_button() == tool_select_button) {
|
||||
// Draw hovered tile.
|
||||
|
@ -1986,7 +1973,7 @@ void TileSetAtlasSourceEditor::_tile_alternatives_control_draw() {
|
|||
if (coords != TileSetSource::INVALID_ATLAS_COORDS) {
|
||||
Rect2i rect = tile_atlas_view->get_alternative_tile_rect(coords, hovered_alternative_tile_coords.z);
|
||||
if (rect != Rect2i()) {
|
||||
alternative_tiles_control->draw_rect(rect, Color(1.0, 1.0, 1.0), false);
|
||||
TilesEditorPlugin::draw_selection_rect(alternative_tiles_control, rect, Color(1.0, 0.8, 0.0, 0.5));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1996,7 +1983,7 @@ void TileSetAtlasSourceEditor::_tile_alternatives_control_draw() {
|
|||
if (selected.alternative >= 1) {
|
||||
Rect2i rect = tile_atlas_view->get_alternative_tile_rect(selected.tile, selected.alternative);
|
||||
if (rect != Rect2i()) {
|
||||
alternative_tiles_control->draw_rect(rect, selection_color, false);
|
||||
TilesEditorPlugin::draw_selection_rect(alternative_tiles_control, rect);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -385,6 +385,15 @@ bool TilesEditorPlugin::handles(Object *p_object) const {
|
|||
return p_object->is_class("TileMap") || p_object->is_class("TileSet");
|
||||
}
|
||||
|
||||
void TilesEditorPlugin::draw_selection_rect(CanvasItem *p_ci, const Rect2 &p_rect, const Color &p_color) {
|
||||
real_t scale = p_ci->get_global_transform().get_scale().x * 0.5;
|
||||
p_ci->draw_set_transform(p_rect.position, 0, Vector2(1, 1) / scale);
|
||||
RS::get_singleton()->canvas_item_add_nine_patch(
|
||||
p_ci->get_canvas_item(), Rect2(Vector2(), p_rect.size * scale), Rect2(), EditorNode::get_singleton()->get_gui_base()->get_theme_icon(SNAME("TileSelection"), SNAME("EditorIcons"))->get_rid(),
|
||||
Vector2(2, 2), Vector2(2, 2), RS::NINE_PATCH_STRETCH, RS::NINE_PATCH_STRETCH, false, p_color);
|
||||
p_ci->draw_set_transform_matrix(Transform2D());
|
||||
}
|
||||
|
||||
TilesEditorPlugin::TilesEditorPlugin() {
|
||||
set_process_internal(true);
|
||||
|
||||
|
|
|
@ -128,6 +128,8 @@ public:
|
|||
virtual bool handles(Object *p_object) const override;
|
||||
virtual void make_visible(bool p_visible) override;
|
||||
|
||||
static void draw_selection_rect(CanvasItem *p_ci, const Rect2 &p_rect, const Color &p_color = Color(1.0, 1.0, 1.0));
|
||||
|
||||
TilesEditorPlugin();
|
||||
~TilesEditorPlugin();
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue