Pārlūkot izejas kodu

Merge pull request #5307 from MarianoGnu/master

TextureRegion improvements
Rémi Verschelde 9 gadi atpakaļ
vecāks
revīzija
b02d67be30

+ 2 - 0
scene/2d/sprite.cpp

@@ -120,6 +120,7 @@ void Sprite::set_texture(const Ref<Texture>& p_texture) {
 	}
 	}
 #endif
 #endif
 	update();
 	update();
+	emit_signal("texture_changed");
 	item_rect_changed();
 	item_rect_changed();
 }
 }
 
 
@@ -323,6 +324,7 @@ void Sprite::_bind_methods() {
 	ObjectTypeDB::bind_method(_MD("get_modulate"),&Sprite::get_modulate);
 	ObjectTypeDB::bind_method(_MD("get_modulate"),&Sprite::get_modulate);
 
 
 	ADD_SIGNAL(MethodInfo("frame_changed"));
 	ADD_SIGNAL(MethodInfo("frame_changed"));
+	ADD_SIGNAL(MethodInfo("texture_changed"));
 
 
 	ADD_PROPERTYNZ( PropertyInfo( Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE,"Texture"), _SCS("set_texture"),_SCS("get_texture"));
 	ADD_PROPERTYNZ( PropertyInfo( Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE,"Texture"), _SCS("set_texture"),_SCS("get_texture"));
 	ADD_PROPERTYNO( PropertyInfo( Variant::BOOL, "centered"), _SCS("set_centered"),_SCS("is_centered"));
 	ADD_PROPERTYNO( PropertyInfo( Variant::BOOL, "centered"), _SCS("set_centered"),_SCS("is_centered"));

+ 5 - 0
scene/gui/patch_9_frame.cpp

@@ -79,6 +79,8 @@ void Patch9Frame::_bind_methods() {
 	ObjectTypeDB::bind_method(_MD("set_draw_center","draw_center"), & Patch9Frame::set_draw_center );
 	ObjectTypeDB::bind_method(_MD("set_draw_center","draw_center"), & Patch9Frame::set_draw_center );
 	ObjectTypeDB::bind_method(_MD("get_draw_center"), & Patch9Frame::get_draw_center );
 	ObjectTypeDB::bind_method(_MD("get_draw_center"), & Patch9Frame::get_draw_center );
 
 
+	ADD_SIGNAL(MethodInfo("texture_changed"));
+
 	ADD_PROPERTYNZ( PropertyInfo( Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), _SCS("set_texture"),_SCS("get_texture") );
 	ADD_PROPERTYNZ( PropertyInfo( Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), _SCS("set_texture"),_SCS("get_texture") );
 	ADD_PROPERTYNO( PropertyInfo( Variant::COLOR, "modulate"), _SCS("set_modulate"),_SCS("get_modulate") );
 	ADD_PROPERTYNO( PropertyInfo( Variant::COLOR, "modulate"), _SCS("set_modulate"),_SCS("get_modulate") );
 	ADD_PROPERTYNO( PropertyInfo( Variant::BOOL, "draw_center"), _SCS("set_draw_center"),_SCS("get_draw_center") );
 	ADD_PROPERTYNO( PropertyInfo( Variant::BOOL, "draw_center"), _SCS("set_draw_center"),_SCS("get_draw_center") );
@@ -93,11 +95,14 @@ void Patch9Frame::_bind_methods() {
 
 
 void Patch9Frame::set_texture(const Ref<Texture>& p_tex) {
 void Patch9Frame::set_texture(const Ref<Texture>& p_tex) {
 
 
+	if (texture==p_tex)
+		return;
 	texture=p_tex;
 	texture=p_tex;
 	update();
 	update();
 	//if (texture.is_valid())
 	//if (texture.is_valid())
 	//	texture->set_flags(texture->get_flags()&(~Texture::FLAG_REPEAT)); //remove repeat from texture, it looks bad in sprites
 	//	texture->set_flags(texture->get_flags()&(~Texture::FLAG_REPEAT)); //remove repeat from texture, it looks bad in sprites
 	minimum_size_changed();
 	minimum_size_changed();
+	emit_signal("texture_changed");
 }
 }
 
 
 Ref<Texture> Patch9Frame::get_texture() const {
 Ref<Texture> Patch9Frame::get_texture() const {

+ 5 - 0
scene/resources/style_box.cpp

@@ -104,7 +104,10 @@ StyleBox::StyleBox() {
 
 
 void StyleBoxTexture::set_texture(RES p_texture) {
 void StyleBoxTexture::set_texture(RES p_texture) {
 
 
+	if (texture==p_texture)
+		return;
 	texture=p_texture;
 	texture=p_texture;
+	emit_signal("texture_changed");
 	emit_changed();
 	emit_changed();
 
 
 }
 }
@@ -207,6 +210,8 @@ void StyleBoxTexture::_bind_methods() {
 	ObjectTypeDB::bind_method(_MD("set_draw_center","enable"),&StyleBoxTexture::set_draw_center);
 	ObjectTypeDB::bind_method(_MD("set_draw_center","enable"),&StyleBoxTexture::set_draw_center);
 	ObjectTypeDB::bind_method(_MD("get_draw_center"),&StyleBoxTexture::get_draw_center);
 	ObjectTypeDB::bind_method(_MD("get_draw_center"),&StyleBoxTexture::get_draw_center);
 
 
+	ADD_SIGNAL(MethodInfo("texture_changed"));
+
 	ADD_PROPERTY( PropertyInfo( Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture" ), _SCS("set_texture"),_SCS("get_texture") );
 	ADD_PROPERTY( PropertyInfo( Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture" ), _SCS("set_texture"),_SCS("get_texture") );
 	ADD_PROPERTYNZ( PropertyInfo( Variant::RECT2, "region_rect"), _SCS("set_region_rect"),_SCS("get_region_rect"));
 	ADD_PROPERTYNZ( PropertyInfo( Variant::RECT2, "region_rect"), _SCS("set_region_rect"),_SCS("get_region_rect"));
 	ADD_PROPERTYI( PropertyInfo( Variant::REAL, "margin/left", PROPERTY_HINT_RANGE,"0,2048,1" ), _SCS("set_margin_size"),_SCS("get_margin_size"), MARGIN_LEFT );
 	ADD_PROPERTYI( PropertyInfo( Variant::REAL, "margin/left", PROPERTY_HINT_RANGE,"0,2048,1" ), _SCS("set_margin_size"),_SCS("get_margin_size"), MARGIN_LEFT );

+ 5 - 0
scene/resources/texture.cpp

@@ -526,8 +526,11 @@ uint32_t AtlasTexture::get_flags() const{
 
 
 void AtlasTexture::set_atlas(const Ref<Texture>& p_atlas){
 void AtlasTexture::set_atlas(const Ref<Texture>& p_atlas){
 
 
+	if (atlas==p_atlas)
+		return;
 	atlas=p_atlas;
 	atlas=p_atlas;
 	emit_changed();
 	emit_changed();
+	emit_signal("atlas_changed");
 }
 }
 Ref<Texture> AtlasTexture::get_atlas() const{
 Ref<Texture> AtlasTexture::get_atlas() const{
 
 
@@ -569,6 +572,8 @@ void AtlasTexture::_bind_methods() {
 	ObjectTypeDB::bind_method(_MD("set_margin","margin"),&AtlasTexture::set_margin);
 	ObjectTypeDB::bind_method(_MD("set_margin","margin"),&AtlasTexture::set_margin);
 	ObjectTypeDB::bind_method(_MD("get_margin"),&AtlasTexture::get_margin);
 	ObjectTypeDB::bind_method(_MD("get_margin"),&AtlasTexture::get_margin);
 
 
+	ADD_SIGNAL(MethodInfo("atlas_changed"));
+
 	ADD_PROPERTY( PropertyInfo( Variant::OBJECT, "atlas", PROPERTY_HINT_RESOURCE_TYPE,"Texture"), _SCS("set_atlas"),_SCS("get_atlas") );
 	ADD_PROPERTY( PropertyInfo( Variant::OBJECT, "atlas", PROPERTY_HINT_RESOURCE_TYPE,"Texture"), _SCS("set_atlas"),_SCS("get_atlas") );
 	ADD_PROPERTY( PropertyInfo( Variant::RECT2, "region"), _SCS("set_region"),_SCS("get_region") );
 	ADD_PROPERTY( PropertyInfo( Variant::RECT2, "region"), _SCS("set_region"),_SCS("get_region") );
 	ADD_PROPERTY( PropertyInfo( Variant::RECT2, "margin"), _SCS("set_margin"),_SCS("get_margin") );
 	ADD_PROPERTY( PropertyInfo( Variant::RECT2, "margin"), _SCS("set_margin"),_SCS("get_margin") );

BIN
tools/editor/icons/2x/icon_zoom_less.png


BIN
tools/editor/icons/2x/icon_zoom_more.png


BIN
tools/editor/icons/2x/icon_zoom_reset.png


BIN
tools/editor/icons/icon_zoom_less.png


BIN
tools/editor/icons/icon_zoom_more.png


BIN
tools/editor/icons/icon_zoom_reset.png


+ 104 - 0
tools/editor/icons/source/icon_zoom_more.svg

@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16"
+   height="16"
+   viewBox="0 0 16 16"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_zoom.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90"
+   sodipodi:docname="icon_zoom_more.svg">
+  <defs
+     id="defs4" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.627417"
+     inkscape:cx="3.7772222"
+     inkscape:cy="13.690414"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     units="px"
+     inkscape:snap-bbox="true"
+     inkscape:bbox-paths="true"
+     inkscape:bbox-nodes="true"
+     inkscape:snap-bbox-edge-midpoints="true"
+     inkscape:snap-bbox-midpoints="false"
+     inkscape:snap-object-midpoints="true"
+     inkscape:snap-center="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1018"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3336" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1036.3622)">
+    <g
+       id="layer1-6"
+       inkscape:label="Capa 1"
+       transform="translate(-201.5751,205.0256)">
+      <g
+         inkscape:label="Layer 1"
+         id="layer1-0-4"
+         transform="matrix(48.459085,0,0,53.967813,-126.63031,-55835.691)">
+        <g
+           transform="translate(0.51853114,-0.01988754)"
+           id="g4182-8">
+          <rect
+             style="fill:#e0e0e0;fill-opacity:0.99607843"
+             id="rect4167"
+             width="0.042994563"
+             height="0.26204652"
+             x="6.3978949"
+             y="1050.0524"
+             rx="0"
+             ry="0" />
+          <rect
+             ry="0"
+             rx="0"
+             y="1050.165"
+             x="6.2806396"
+             height="0.040943757"
+             width="0.28011176"
+             id="rect4169-6"
+             style="fill:#e0e0e0;fill-opacity:0.99607843" />
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 497 - 296
tools/editor/plugins/texture_region_editor_plugin.cpp


+ 30 - 27
tools/editor/plugins/texture_region_editor_plugin.h

@@ -40,69 +40,73 @@
 #include "scene/resources/style_box.h"
 #include "scene/resources/style_box.h"
 #include "scene/resources/texture.h"
 #include "scene/resources/texture.h"
 
 
-class TextureRegionEditor : public HBoxContainer {
+class TextureRegionEditor : public Control {
 
 
-	OBJ_TYPE(TextureRegionEditor, HBoxContainer );
-	enum RegionType {
-		REGION_TEXTURE_REGION,
-		REGION_PATCH_MARGIN
+	OBJ_TYPE(TextureRegionEditor, Control );
+
+	enum SnapMode {
+		SNAP_NONE,
+		SNAP_PIXEL,
+		SNAP_GRID,
+		SNAP_AUTOSLICE
 	};
 	};
 
 
 	friend class TextureRegionEditorPlugin;
 	friend class TextureRegionEditorPlugin;
-	ToolButton *region_button;
-	ToolButton *margin_button;
-	ToolButton *b_snap_enable;
-	ToolButton *b_snap_grid;
+	MenuButton *snap_mode_button;
 	TextureFrame *icon_zoom;
 	TextureFrame *icon_zoom;
-	HSlider *zoom;
-	SpinBox *zoom_value;
+	ToolButton *zoom_in;
+	ToolButton *zoom_reset;
+	ToolButton *zoom_out;
+	HBoxContainer * hb_grid; //For showing/hiding the grid controls when changing the SnapMode
 	SpinBox *sb_step_y;
 	SpinBox *sb_step_y;
 	SpinBox *sb_step_x;
 	SpinBox *sb_step_x;
 	SpinBox *sb_off_y;
 	SpinBox *sb_off_y;
 	SpinBox *sb_off_x;
 	SpinBox *sb_off_x;
+	SpinBox *sb_sep_y;
+	SpinBox *sb_sep_x;
 	Control *edit_draw;
 	Control *edit_draw;
 
 
 	VScrollBar *vscroll;
 	VScrollBar *vscroll;
 	HScrollBar *hscroll;
 	HScrollBar *hscroll;
 
 
 	EditorNode *editor;
 	EditorNode *editor;
-	AcceptDialog *dlg_editor;
 	UndoRedo* undo_redo;
 	UndoRedo* undo_redo;
 
 
 	Vector2 draw_ofs;
 	Vector2 draw_ofs;
 	float draw_zoom;
 	float draw_zoom;
 	bool updating_scroll;
 	bool updating_scroll;
 
 
-	bool use_snap;
-	bool snap_show_grid;
+	int snap_mode;
 	Vector2 snap_offset;
 	Vector2 snap_offset;
 	Vector2 snap_step;
 	Vector2 snap_step;
+	Vector2 snap_separation;
 
 
-
-	String node_type;
 	Patch9Frame *node_patch9;
 	Patch9Frame *node_patch9;
 	Sprite *node_sprite;
 	Sprite *node_sprite;
-	StyleBoxTexture *obj_styleBox;
-	AtlasTexture *atlas_tex;
+	Ref<StyleBoxTexture> obj_styleBox;
+	Ref<AtlasTexture> atlas_tex;
 
 
-	int editing_region;
 	Rect2 rect;
 	Rect2 rect;
 	Rect2 rect_prev;
 	Rect2 rect_prev;
-	Rect2 tex_region;
+	float prev_margin;
+	int edited_margin;
+	List<Rect2> autoslice_cache;
 
 
 	bool drag;
 	bool drag;
 	bool creating;
 	bool creating;
 	Vector2 drag_from;
 	Vector2 drag_from;
 	int drag_index;
 	int drag_index;
 
 
-	AcceptDialog *error;
-
-	void _set_use_snap(bool p_use);
-	void _set_show_grid(bool p_show);
+	void _set_snap_mode(int p_mode);
 	void _set_snap_off_x(float p_val);
 	void _set_snap_off_x(float p_val);
 	void _set_snap_off_y(float p_val);
 	void _set_snap_off_y(float p_val);
 	void _set_snap_step_x(float p_val);
 	void _set_snap_step_x(float p_val);
 	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_y(float p_val);
+	void _zoom_in();
+	void _zoom_reset();
+	void _zoom_out();
 	void apply_rect(const Rect2& rect);
 	void apply_rect(const Rect2& rect);
 protected:
 protected:
 
 
@@ -114,9 +118,7 @@ protected:
 
 
 public:
 public:
 
 
-	void _edit_node(int tex_region);
 	void _edit_region();
 	void _edit_region();
-	void _edit_margin();
 	void _region_draw();
 	void _region_draw();
 	void _region_input(const InputEvent &p_input);
 	void _region_input(const InputEvent &p_input);
 	void _scroll_changed(float);
 	void _scroll_changed(float);
@@ -130,11 +132,12 @@ class TextureRegionEditorPlugin : public EditorPlugin
 {
 {
 	OBJ_TYPE( TextureRegionEditorPlugin, EditorPlugin );
 	OBJ_TYPE( TextureRegionEditorPlugin, EditorPlugin );
 
 
+	Button *region_button;
 	TextureRegionEditor *region_editor;
 	TextureRegionEditor *region_editor;
 	EditorNode *editor;
 	EditorNode *editor;
 public:
 public:
 
 
-	virtual String get_name() const { return "SpriteRegion"; }
+	virtual String get_name() const { return "TextureRegion"; }
 	bool has_main_screen() const { return false; }
 	bool has_main_screen() const { return false; }
 	virtual void edit(Object *p_node);
 	virtual void edit(Object *p_node);
 	virtual bool handles(Object *p_node) const;
 	virtual bool handles(Object *p_node) const;

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels