You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-06 12:20:30 +00:00
Fix multiple usability issues in the texture region editor
- Correctly display atlas textures when used by other objects. - Make region handles easier to hit in ninepatchable objects. - Correctly initialize and restore various visual properties. - Improve code quality.
This commit is contained in:
@@ -1507,6 +1507,11 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
|
|||||||
style_theme_preview_bg_tab->set_expand_margin(SIDE_BOTTOM, 2 * EDSCALE);
|
style_theme_preview_bg_tab->set_expand_margin(SIDE_BOTTOM, 2 * EDSCALE);
|
||||||
theme->set_stylebox("ThemeEditorPreviewBG", "EditorStyles", style_theme_preview_bg_tab);
|
theme->set_stylebox("ThemeEditorPreviewBG", "EditorStyles", style_theme_preview_bg_tab);
|
||||||
|
|
||||||
|
Ref<StyleBoxFlat> style_texture_region_bg = style_tree_bg->duplicate();
|
||||||
|
style_texture_region_bg->set_content_margin_all(0);
|
||||||
|
theme->set_stylebox("TextureRegionPreviewBG", "EditorStyles", style_texture_region_bg);
|
||||||
|
theme->set_stylebox("TextureRegionPreviewFG", "EditorStyles", make_empty_stylebox(0, 0, 0, 0));
|
||||||
|
|
||||||
// Separators
|
// Separators
|
||||||
theme->set_stylebox("separator", "HSeparator", make_line_stylebox(separator_color, MAX(Math::round(EDSCALE), border_width)));
|
theme->set_stylebox("separator", "HSeparator", make_line_stylebox(separator_color, MAX(Math::round(EDSCALE), border_width)));
|
||||||
theme->set_stylebox("separator", "VSeparator", make_line_stylebox(separator_color, MAX(Math::round(EDSCALE), border_width), 0, 0, true));
|
theme->set_stylebox("separator", "VSeparator", make_line_stylebox(separator_color, MAX(Math::round(EDSCALE), border_width), 0, 0, true));
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -42,6 +42,7 @@
|
|||||||
|
|
||||||
class AtlasTexture;
|
class AtlasTexture;
|
||||||
class OptionButton;
|
class OptionButton;
|
||||||
|
class PanelContainer;
|
||||||
class ViewPanner;
|
class ViewPanner;
|
||||||
|
|
||||||
class TextureRegionEditor : public AcceptDialog {
|
class TextureRegionEditor : public AcceptDialog {
|
||||||
@@ -66,16 +67,18 @@ class TextureRegionEditor : public AcceptDialog {
|
|||||||
SpinBox *sb_off_x = nullptr;
|
SpinBox *sb_off_x = nullptr;
|
||||||
SpinBox *sb_sep_y = nullptr;
|
SpinBox *sb_sep_y = nullptr;
|
||||||
SpinBox *sb_sep_x = nullptr;
|
SpinBox *sb_sep_x = nullptr;
|
||||||
Panel *edit_draw = nullptr;
|
|
||||||
|
PanelContainer *texture_preview = nullptr;
|
||||||
|
Panel *texture_overlay = nullptr;
|
||||||
|
|
||||||
VScrollBar *vscroll = nullptr;
|
VScrollBar *vscroll = nullptr;
|
||||||
HScrollBar *hscroll = nullptr;
|
HScrollBar *hscroll = nullptr;
|
||||||
|
|
||||||
Vector2 draw_ofs;
|
Vector2 draw_ofs;
|
||||||
float draw_zoom = 0.0;
|
float draw_zoom = 1.0;
|
||||||
bool updating_scroll = false;
|
bool updating_scroll = false;
|
||||||
|
|
||||||
int snap_mode = 0;
|
SnapMode snap_mode = SNAP_NONE;
|
||||||
Vector2 snap_offset;
|
Vector2 snap_offset;
|
||||||
Vector2 snap_step;
|
Vector2 snap_step;
|
||||||
Vector2 snap_separation;
|
Vector2 snap_separation;
|
||||||
@@ -83,28 +86,28 @@ class TextureRegionEditor : public AcceptDialog {
|
|||||||
Sprite2D *node_sprite_2d = nullptr;
|
Sprite2D *node_sprite_2d = nullptr;
|
||||||
Sprite3D *node_sprite_3d = nullptr;
|
Sprite3D *node_sprite_3d = nullptr;
|
||||||
NinePatchRect *node_ninepatch = nullptr;
|
NinePatchRect *node_ninepatch = nullptr;
|
||||||
Ref<StyleBoxTexture> obj_styleBox;
|
Ref<StyleBoxTexture> res_stylebox;
|
||||||
Ref<AtlasTexture> atlas_tex;
|
Ref<AtlasTexture> res_atlas_texture;
|
||||||
|
|
||||||
Ref<CanvasTexture> preview_tex;
|
|
||||||
|
|
||||||
Rect2 rect;
|
Rect2 rect;
|
||||||
Rect2 rect_prev;
|
Rect2 rect_prev;
|
||||||
float prev_margin = 0.0f;
|
float prev_margin = 0.0f;
|
||||||
int edited_margin = 0;
|
int edited_margin = -1;
|
||||||
HashMap<RID, List<Rect2>> cache_map;
|
HashMap<RID, List<Rect2>> cache_map;
|
||||||
List<Rect2> autoslice_cache;
|
List<Rect2> autoslice_cache;
|
||||||
bool autoslice_is_dirty = false;
|
bool autoslice_is_dirty = true;
|
||||||
|
|
||||||
bool drag = false;
|
bool drag = false;
|
||||||
bool creating = false;
|
bool creating = false;
|
||||||
Vector2 drag_from;
|
Vector2 drag_from;
|
||||||
int drag_index = 0;
|
int drag_index = -1;
|
||||||
bool request_center = false;
|
bool request_center = false;
|
||||||
|
|
||||||
Ref<ViewPanner> panner;
|
Ref<ViewPanner> panner;
|
||||||
void _pan_callback(Vector2 p_scroll_vec, Ref<InputEvent> p_event);
|
void _pan_callback(Vector2 p_scroll_vec, Ref<InputEvent> p_event);
|
||||||
void _zoom_callback(float p_zoom_factor, Vector2 p_origin, Ref<InputEvent> p_event);
|
void _zoom_callback(float p_zoom_factor, Vector2 p_origin, Ref<InputEvent> p_event);
|
||||||
|
void _scroll_changed(float);
|
||||||
|
Transform2D _get_offset_transform() const;
|
||||||
|
|
||||||
void _set_snap_mode(int p_mode);
|
void _set_snap_mode(int p_mode);
|
||||||
void _set_snap_off_x(float p_val);
|
void _set_snap_off_x(float p_val);
|
||||||
@@ -113,35 +116,39 @@ class TextureRegionEditor : public AcceptDialog {
|
|||||||
void _set_snap_step_y(float p_val);
|
void _set_snap_step_y(float p_val);
|
||||||
void _set_snap_sep_x(float p_val);
|
void _set_snap_sep_x(float p_val);
|
||||||
void _set_snap_sep_y(float p_val);
|
void _set_snap_sep_y(float p_val);
|
||||||
|
|
||||||
void _zoom_on_position(float p_zoom, Point2 p_position = Point2());
|
void _zoom_on_position(float p_zoom, Point2 p_position = Point2());
|
||||||
void _zoom_in();
|
void _zoom_in();
|
||||||
void _zoom_reset();
|
void _zoom_reset();
|
||||||
void _zoom_out();
|
void _zoom_out();
|
||||||
void apply_rect(const Rect2 &p_rect);
|
|
||||||
|
void _apply_rect(const Rect2 &p_rect);
|
||||||
void _update_rect();
|
void _update_rect();
|
||||||
void _update_autoslice();
|
void _update_autoslice();
|
||||||
|
|
||||||
|
Ref<Texture2D> _get_edited_object_texture() const;
|
||||||
|
Rect2 _get_edited_object_region() const;
|
||||||
void _texture_changed();
|
void _texture_changed();
|
||||||
|
void _node_removed(Node *p_node);
|
||||||
|
|
||||||
|
void _edit_region();
|
||||||
|
void _clear_edited_object();
|
||||||
|
|
||||||
|
void _draw_margin_line(Vector2 p_from, Vector2 p_to);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void _notification(int p_what);
|
void _notification(int p_what);
|
||||||
void _node_removed(Object *p_obj);
|
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
|
|
||||||
|
void _texture_preview_draw();
|
||||||
|
void _texture_overlay_draw();
|
||||||
|
void _texture_overlay_input(const Ref<InputEvent> &p_input);
|
||||||
|
|
||||||
Vector2 snap_point(Vector2 p_target) const;
|
Vector2 snap_point(Vector2 p_target) const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void _edit_region();
|
|
||||||
void _region_draw();
|
|
||||||
void _region_input(const Ref<InputEvent> &p_input);
|
|
||||||
void _scroll_changed(float);
|
|
||||||
bool is_stylebox();
|
|
||||||
bool is_atlas_texture();
|
|
||||||
bool is_ninepatch();
|
|
||||||
Sprite2D *get_sprite_2d();
|
|
||||||
Sprite3D *get_sprite_3d();
|
|
||||||
|
|
||||||
void edit(Object *p_obj);
|
void edit(Object *p_obj);
|
||||||
|
|
||||||
TextureRegionEditor();
|
TextureRegionEditor();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -245,11 +245,16 @@ bool AtlasTexture::is_pixel_opaque(int p_x, int p_y) const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Ref<Image> AtlasTexture::get_image() const {
|
Ref<Image> AtlasTexture::get_image() const {
|
||||||
if (!atlas.is_valid() || !atlas->get_image().is_valid()) {
|
if (atlas.is_null() || region.size.x <= 0 || region.size.y <= 0) {
|
||||||
return Ref<Image>();
|
return Ref<Image>();
|
||||||
}
|
}
|
||||||
|
|
||||||
return atlas->get_image()->get_region(region);
|
Ref<Image> atlas_image = atlas->get_image();
|
||||||
|
if (atlas_image.is_null()) {
|
||||||
|
return Ref<Image>();
|
||||||
|
}
|
||||||
|
|
||||||
|
return atlas_image->get_region(region);
|
||||||
}
|
}
|
||||||
|
|
||||||
AtlasTexture::AtlasTexture() {}
|
AtlasTexture::AtlasTexture() {}
|
||||||
|
|||||||
Reference in New Issue
Block a user