mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-31 05:31:01 +00:00 
			
		
		
		
	Improve material and mesh preview buttons
This commit is contained in:
		
							parent
							
								
									a7583881af
								
							
						
					
					
						commit
						50f4c298e6
					
				
					 14 changed files with 123 additions and 117 deletions
				
			
		|  | @ -39,9 +39,9 @@ | |||
| #include "scene/3d/light_3d.h" | ||||
| #include "scene/3d/mesh_instance_3d.h" | ||||
| #include "scene/gui/box_container.h" | ||||
| #include "scene/gui/button.h" | ||||
| #include "scene/gui/color_rect.h" | ||||
| #include "scene/gui/subviewport_container.h" | ||||
| #include "scene/gui/texture_button.h" | ||||
| #include "scene/main/viewport.h" | ||||
| #include "scene/resources/fog_material.h" | ||||
| #include "scene/resources/particle_process_material.h" | ||||
|  | @ -63,15 +63,11 @@ void MaterialEditor::gui_input(const Ref<InputEvent> &p_event) { | |||
| void MaterialEditor::_update_theme_item_cache() { | ||||
| 	Control::_update_theme_item_cache(); | ||||
| 
 | ||||
| 	theme_cache.light_1_on = get_theme_icon(SNAME("MaterialPreviewLight1"), SNAME("EditorIcons")); | ||||
| 	theme_cache.light_1_off = get_theme_icon(SNAME("MaterialPreviewLight1Off"), SNAME("EditorIcons")); | ||||
| 	theme_cache.light_2_on = get_theme_icon(SNAME("MaterialPreviewLight2"), SNAME("EditorIcons")); | ||||
| 	theme_cache.light_2_off = get_theme_icon(SNAME("MaterialPreviewLight2Off"), SNAME("EditorIcons")); | ||||
| 	theme_cache.light_1_icon = get_theme_icon(SNAME("MaterialPreviewLight1"), SNAME("EditorIcons")); | ||||
| 	theme_cache.light_2_icon = get_theme_icon(SNAME("MaterialPreviewLight2"), SNAME("EditorIcons")); | ||||
| 
 | ||||
| 	theme_cache.sphere_on = get_theme_icon(SNAME("MaterialPreviewSphere"), SNAME("EditorIcons")); | ||||
| 	theme_cache.sphere_off = get_theme_icon(SNAME("MaterialPreviewSphereOff"), SNAME("EditorIcons")); | ||||
| 	theme_cache.box_on = get_theme_icon(SNAME("MaterialPreviewCube"), SNAME("EditorIcons")); | ||||
| 	theme_cache.box_off = get_theme_icon(SNAME("MaterialPreviewCubeOff"), SNAME("EditorIcons")); | ||||
| 	theme_cache.sphere_icon = get_theme_icon(SNAME("MaterialPreviewSphere"), SNAME("EditorIcons")); | ||||
| 	theme_cache.box_icon = get_theme_icon(SNAME("MaterialPreviewCube"), SNAME("EditorIcons")); | ||||
| 
 | ||||
| 	theme_cache.checkerboard = get_theme_icon(SNAME("Checkerboard"), SNAME("EditorIcons")); | ||||
| } | ||||
|  | @ -79,15 +75,11 @@ void MaterialEditor::_update_theme_item_cache() { | |||
| void MaterialEditor::_notification(int p_what) { | ||||
| 	switch (p_what) { | ||||
| 		case NOTIFICATION_THEME_CHANGED: { | ||||
| 			light_1_switch->set_texture_normal(theme_cache.light_1_on); | ||||
| 			light_1_switch->set_texture_pressed(theme_cache.light_1_off); | ||||
| 			light_2_switch->set_texture_normal(theme_cache.light_2_on); | ||||
| 			light_2_switch->set_texture_pressed(theme_cache.light_2_off); | ||||
| 			light_1_switch->set_icon(theme_cache.light_1_icon); | ||||
| 			light_2_switch->set_icon(theme_cache.light_2_icon); | ||||
| 
 | ||||
| 			sphere_switch->set_texture_normal(theme_cache.sphere_off); | ||||
| 			sphere_switch->set_texture_pressed(theme_cache.sphere_on); | ||||
| 			box_switch->set_texture_normal(theme_cache.box_off); | ||||
| 			box_switch->set_texture_pressed(theme_cache.box_on); | ||||
| 			sphere_switch->set_icon(theme_cache.sphere_icon); | ||||
| 			box_switch->set_icon(theme_cache.box_icon); | ||||
| 		} break; | ||||
| 
 | ||||
| 		case NOTIFICATION_DRAW: { | ||||
|  | @ -135,34 +127,32 @@ void MaterialEditor::edit(Ref<Material> p_material, const Ref<Environment> &p_en | |||
| 	_update_rotation(); | ||||
| } | ||||
| 
 | ||||
| void MaterialEditor::_button_pressed(Node *p_button) { | ||||
| 	if (p_button == light_1_switch) { | ||||
| 		light1->set_visible(!light_1_switch->is_pressed()); | ||||
| 	} | ||||
| void MaterialEditor::_on_light_1_switch_pressed() { | ||||
| 	light1->set_visible(light_1_switch->is_pressed()); | ||||
| } | ||||
| 
 | ||||
| 	if (p_button == light_2_switch) { | ||||
| 		light2->set_visible(!light_2_switch->is_pressed()); | ||||
| 	} | ||||
| void MaterialEditor::_on_light_2_switch_pressed() { | ||||
| 	light2->set_visible(light_2_switch->is_pressed()); | ||||
| } | ||||
| 
 | ||||
| 	if (p_button == box_switch) { | ||||
| 		box_instance->show(); | ||||
| 		sphere_instance->hide(); | ||||
| 		box_switch->set_pressed(true); | ||||
| 		sphere_switch->set_pressed(false); | ||||
| 		EditorSettings::get_singleton()->set_project_metadata("inspector_options", "material_preview_on_sphere", false); | ||||
| 	} | ||||
| void MaterialEditor::_on_sphere_switch_pressed() { | ||||
| 	box_instance->hide(); | ||||
| 	sphere_instance->show(); | ||||
| 	box_switch->set_pressed(false); | ||||
| 	sphere_switch->set_pressed(true); | ||||
| 	EditorSettings::get_singleton()->set_project_metadata("inspector_options", "material_preview_on_sphere", true); | ||||
| } | ||||
| 
 | ||||
| 	if (p_button == sphere_switch) { | ||||
| 		box_instance->hide(); | ||||
| 		sphere_instance->show(); | ||||
| 		box_switch->set_pressed(false); | ||||
| 		sphere_switch->set_pressed(true); | ||||
| 		EditorSettings::get_singleton()->set_project_metadata("inspector_options", "material_preview_on_sphere", true); | ||||
| 	} | ||||
| void MaterialEditor::_on_box_switch_pressed() { | ||||
| 	box_instance->show(); | ||||
| 	sphere_instance->hide(); | ||||
| 	box_switch->set_pressed(true); | ||||
| 	sphere_switch->set_pressed(false); | ||||
| 	EditorSettings::get_singleton()->set_project_metadata("inspector_options", "material_preview_on_sphere", false); | ||||
| } | ||||
| 
 | ||||
| MaterialEditor::MaterialEditor() { | ||||
| 	// canvas item
 | ||||
| 	// Canvas item
 | ||||
| 
 | ||||
| 	vc_2d = memnew(SubViewportContainer); | ||||
| 	vc_2d->set_stretch(true); | ||||
|  | @ -185,7 +175,7 @@ MaterialEditor::MaterialEditor() { | |||
| 
 | ||||
| 	layout_2d->set_visible(false); | ||||
| 
 | ||||
| 	// spatial
 | ||||
| 	// Spatial
 | ||||
| 
 | ||||
| 	vc = memnew(SubViewportContainer); | ||||
| 	vc->set_stretch(true); | ||||
|  | @ -247,32 +237,38 @@ MaterialEditor::MaterialEditor() { | |||
| 	VBoxContainer *vb_shape = memnew(VBoxContainer); | ||||
| 	layout_3d->add_child(vb_shape); | ||||
| 
 | ||||
| 	sphere_switch = memnew(TextureButton); | ||||
| 	sphere_switch = memnew(Button); | ||||
| 	sphere_switch->set_theme_type_variation("PreviewLightButton"); | ||||
| 	sphere_switch->set_toggle_mode(true); | ||||
| 	sphere_switch->set_pressed(true); | ||||
| 	vb_shape->add_child(sphere_switch); | ||||
| 	sphere_switch->connect("pressed", callable_mp(this, &MaterialEditor::_button_pressed).bind(sphere_switch)); | ||||
| 	sphere_switch->connect("pressed", callable_mp(this, &MaterialEditor::_on_sphere_switch_pressed)); | ||||
| 
 | ||||
| 	box_switch = memnew(TextureButton); | ||||
| 	box_switch = memnew(Button); | ||||
| 	box_switch->set_theme_type_variation("PreviewLightButton"); | ||||
| 	box_switch->set_toggle_mode(true); | ||||
| 	box_switch->set_pressed(false); | ||||
| 	vb_shape->add_child(box_switch); | ||||
| 	box_switch->connect("pressed", callable_mp(this, &MaterialEditor::_button_pressed).bind(box_switch)); | ||||
| 	box_switch->connect("pressed", callable_mp(this, &MaterialEditor::_on_box_switch_pressed)); | ||||
| 
 | ||||
| 	layout_3d->add_spacer(); | ||||
| 
 | ||||
| 	VBoxContainer *vb_light = memnew(VBoxContainer); | ||||
| 	layout_3d->add_child(vb_light); | ||||
| 
 | ||||
| 	light_1_switch = memnew(TextureButton); | ||||
| 	light_1_switch = memnew(Button); | ||||
| 	light_1_switch->set_theme_type_variation("PreviewLightButton"); | ||||
| 	light_1_switch->set_toggle_mode(true); | ||||
| 	light_1_switch->set_pressed(true); | ||||
| 	vb_light->add_child(light_1_switch); | ||||
| 	light_1_switch->connect("pressed", callable_mp(this, &MaterialEditor::_button_pressed).bind(light_1_switch)); | ||||
| 	light_1_switch->connect("pressed", callable_mp(this, &MaterialEditor::_on_light_1_switch_pressed)); | ||||
| 
 | ||||
| 	light_2_switch = memnew(TextureButton); | ||||
| 	light_2_switch = memnew(Button); | ||||
| 	light_2_switch->set_theme_type_variation("PreviewLightButton"); | ||||
| 	light_2_switch->set_toggle_mode(true); | ||||
| 	light_2_switch->set_pressed(true); | ||||
| 	vb_light->add_child(light_2_switch); | ||||
| 	light_2_switch->connect("pressed", callable_mp(this, &MaterialEditor::_button_pressed).bind(light_2_switch)); | ||||
| 	light_2_switch->connect("pressed", callable_mp(this, &MaterialEditor::_on_light_2_switch_pressed)); | ||||
| 
 | ||||
| 	if (EditorSettings::get_singleton()->get_project_metadata("inspector_options", "material_preview_on_sphere", true)) { | ||||
| 		box_instance->hide(); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 MewPurPur
						MewPurPur