瀏覽代碼

Show transparency and accurate color for modulate

volzhs 8 年之前
父節點
當前提交
92363a2afe

二進制
tools/editor/icons/2x/icon_transparent.png


二進制
tools/editor/icons/icon_transparent.png


+ 22 - 2
tools/editor/property_editor.cpp

@@ -2430,7 +2430,7 @@ void PropertyEditor::set_item_text(TreeItem *p_item, int p_type, const String& p
 		} break;
 		case Variant::COLOR: {
 
-			p_item->set_custom_bg_color(1,obj->get(p_name));
+			tree->update();
 			//p_item->set_text(1,obj->get(p_name));
 
 		} break;
@@ -3707,7 +3707,7 @@ void PropertyEditor::update_tree() {
 				item->set_cell_mode( 1, TreeItem::CELL_MODE_CUSTOM );
 				item->set_editable( 1, !read_only );
 				//item->set_text(1,obj->get(p.name));
-				item->set_custom_bg_color(1,obj->get(p.name));
+				item->set_custom_draw(1,this,"_draw_transparency");
 				if (show_type_icons)
 					item->set_icon( 0,get_icon("Color","EditorIcons") );
 
@@ -3855,6 +3855,25 @@ void PropertyEditor::update_tree() {
 	}
 }
 
+void PropertyEditor::_draw_transparency(Object *t, const Rect2& p_rect) {
+
+	TreeItem *ti=t->cast_to<TreeItem>();
+	if (!ti)
+		   return;
+
+	Color color=obj->get(ti->get_metadata(1));
+	Ref<Texture> arrow=tree->get_icon("select_arrow");
+
+	// make a little space between consecutive color fields
+	Rect2 area=p_rect;
+	area.pos.y+=1;
+	area.size.height-=2;
+	area.size.width-=arrow->get_size().width+5;
+	tree->draw_texture_rect(get_icon("Transparent", "EditorIcons"), area, true);
+	tree->draw_rect(area, color);
+
+}
+
 
 void PropertyEditor::_item_selected() {
 
@@ -4365,6 +4384,7 @@ void PropertyEditor::_bind_methods() {
 	ClassDB::bind_method( "update_tree",&PropertyEditor::update_tree);
 	ClassDB::bind_method( "_resource_preview_done",&PropertyEditor::_resource_preview_done);
 	ClassDB::bind_method( "refresh",&PropertyEditor::refresh);
+	ClassDB::bind_method( "_draw_transparency",&PropertyEditor::_draw_transparency);
 
 	ClassDB::bind_method(_MD("get_drag_data_fw"), &PropertyEditor::get_drag_data_fw);
 	ClassDB::bind_method(_MD("can_drop_data_fw"), &PropertyEditor::can_drop_data_fw);

+ 1 - 0
tools/editor/property_editor.h

@@ -245,6 +245,7 @@ friend class ProjectExportDialog;
 	void drop_data_fw(const Point2& p_point,const Variant& p_data,Control* p_from);
 
 	void _resource_preview_done(const String& p_path,const Ref<Texture>& p_preview,Variant p_ud);
+	void _draw_transparency(Object *t, const Rect2& p_rect);
 
 	UndoRedo *undo_redo;
 protected: