mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-31 13:41:03 +00:00 
			
		
		
		
	Add thumnails to the tree view
This commit is contained in:
		
							parent
							
								
									5f3bbbdc81
								
							
						
					
					
						commit
						b2633a97b9
					
				
					 11 changed files with 206 additions and 143 deletions
				
			
		|  | @ -78,7 +78,11 @@ bool EditorTexturePreviewPlugin::handles(const String &p_type) const { | |||
| 	return ClassDB::is_parent_class(p_type, "Texture"); | ||||
| } | ||||
| 
 | ||||
| Ref<Texture> EditorTexturePreviewPlugin::generate(const RES &p_from) const { | ||||
| bool EditorTexturePreviewPlugin::should_generate_small_preview() const { | ||||
| 	return true; | ||||
| } | ||||
| 
 | ||||
| Ref<Texture> EditorTexturePreviewPlugin::generate(const RES &p_from, const Size2 p_size) const { | ||||
| 
 | ||||
| 	Ref<Image> img; | ||||
| 	Ref<AtlasTexture> atex = p_from; | ||||
|  | @ -100,8 +104,6 @@ Ref<Texture> EditorTexturePreviewPlugin::generate(const RES &p_from) const { | |||
| 	img = img->duplicate(); | ||||
| 	img->clear_mipmaps(); | ||||
| 
 | ||||
| 	int thumbnail_size = EditorSettings::get_singleton()->get("filesystem/file_dialog/thumbnail_size"); | ||||
| 	thumbnail_size *= EDSCALE; | ||||
| 	if (img->is_compressed()) { | ||||
| 		if (img->decompress() != OK) | ||||
| 			return Ref<Texture>(); | ||||
|  | @ -109,22 +111,15 @@ Ref<Texture> EditorTexturePreviewPlugin::generate(const RES &p_from) const { | |||
| 		img->convert(Image::FORMAT_RGBA8); | ||||
| 	} | ||||
| 
 | ||||
| 	int width, height; | ||||
| 	if (img->get_width() > thumbnail_size && img->get_width() >= img->get_height()) { | ||||
| 
 | ||||
| 		width = thumbnail_size; | ||||
| 		height = img->get_height() * thumbnail_size / img->get_width(); | ||||
| 	} else if (img->get_height() > thumbnail_size && img->get_height() >= img->get_width()) { | ||||
| 
 | ||||
| 		height = thumbnail_size; | ||||
| 		width = img->get_width() * thumbnail_size / img->get_height(); | ||||
| 	} else { | ||||
| 
 | ||||
| 		width = img->get_width(); | ||||
| 		height = img->get_height(); | ||||
| 	Vector2 new_size = img->get_size(); | ||||
| 	if (new_size.x > p_size.x) { | ||||
| 		new_size = Vector2(p_size.x, new_size.y * p_size.x / new_size.x); | ||||
| 	} | ||||
| 	if (new_size.y > p_size.y) { | ||||
| 		new_size = Vector2(new_size.x * p_size.y / new_size.y, p_size.y); | ||||
| 	} | ||||
| 	img->resize(new_size.x, new_size.y, Image::INTERPOLATE_CUBIC); | ||||
| 
 | ||||
| 	img->resize(width, height); | ||||
| 	post_process_preview(img); | ||||
| 
 | ||||
| 	Ref<ImageTexture> ptex = Ref<ImageTexture>(memnew(ImageTexture)); | ||||
|  | @ -143,7 +138,7 @@ bool EditorImagePreviewPlugin::handles(const String &p_type) const { | |||
| 	return p_type == "Image"; | ||||
| } | ||||
| 
 | ||||
| Ref<Texture> EditorImagePreviewPlugin::generate(const RES &p_from) const { | ||||
| Ref<Texture> EditorImagePreviewPlugin::generate(const RES &p_from, const Size2 p_size) const { | ||||
| 
 | ||||
| 	Ref<Image> img = p_from; | ||||
| 
 | ||||
|  | @ -153,8 +148,6 @@ Ref<Texture> EditorImagePreviewPlugin::generate(const RES &p_from) const { | |||
| 	img = img->duplicate(); | ||||
| 	img->clear_mipmaps(); | ||||
| 
 | ||||
| 	int thumbnail_size = EditorSettings::get_singleton()->get("filesystem/file_dialog/thumbnail_size"); | ||||
| 	thumbnail_size *= EDSCALE; | ||||
| 	if (img->is_compressed()) { | ||||
| 		if (img->decompress() != OK) | ||||
| 			return Ref<Image>(); | ||||
|  | @ -162,22 +155,15 @@ Ref<Texture> EditorImagePreviewPlugin::generate(const RES &p_from) const { | |||
| 		img->convert(Image::FORMAT_RGBA8); | ||||
| 	} | ||||
| 
 | ||||
| 	int width, height; | ||||
| 	if (img->get_width() > thumbnail_size && img->get_width() >= img->get_height()) { | ||||
| 
 | ||||
| 		width = thumbnail_size; | ||||
| 		height = img->get_height() * thumbnail_size / img->get_width(); | ||||
| 	} else if (img->get_height() > thumbnail_size && img->get_height() >= img->get_width()) { | ||||
| 
 | ||||
| 		height = thumbnail_size; | ||||
| 		width = img->get_width() * thumbnail_size / img->get_height(); | ||||
| 	} else { | ||||
| 
 | ||||
| 		width = img->get_width(); | ||||
| 		height = img->get_height(); | ||||
| 	Vector2 new_size = img->get_size(); | ||||
| 	if (new_size.x > p_size.x) { | ||||
| 		new_size = Vector2(p_size.x, new_size.y * p_size.x / new_size.x); | ||||
| 	} | ||||
| 	if (new_size.y > p_size.y) { | ||||
| 		new_size = Vector2(new_size.x * p_size.y / new_size.y, p_size.y); | ||||
| 	} | ||||
| 	img->resize(new_size.x, new_size.y, Image::INTERPOLATE_CUBIC); | ||||
| 
 | ||||
| 	img->resize(width, height); | ||||
| 	post_process_preview(img); | ||||
| 
 | ||||
| 	Ref<ImageTexture> ptex; | ||||
|  | @ -190,6 +176,9 @@ Ref<Texture> EditorImagePreviewPlugin::generate(const RES &p_from) const { | |||
| EditorImagePreviewPlugin::EditorImagePreviewPlugin() { | ||||
| } | ||||
| 
 | ||||
| bool EditorImagePreviewPlugin::should_generate_small_preview() const { | ||||
| 	return true; | ||||
| } | ||||
| ////////////////////////////////////////////////////////////////////////////
 | ||||
| /////////////////////////////////////////////////
 | ||||
| bool EditorBitmapPreviewPlugin::handles(const String &p_type) const { | ||||
|  | @ -197,7 +186,7 @@ bool EditorBitmapPreviewPlugin::handles(const String &p_type) const { | |||
| 	return ClassDB::is_parent_class(p_type, "BitMap"); | ||||
| } | ||||
| 
 | ||||
| Ref<Texture> EditorBitmapPreviewPlugin::generate(const RES &p_from) const { | ||||
| Ref<Texture> EditorBitmapPreviewPlugin::generate(const RES &p_from, const Size2 p_size) const { | ||||
| 
 | ||||
| 	Ref<BitMap> bm = p_from; | ||||
| 
 | ||||
|  | @ -227,8 +216,6 @@ Ref<Texture> EditorBitmapPreviewPlugin::generate(const RES &p_from) const { | |||
| 	img.instance(); | ||||
| 	img->create(bm->get_size().width, bm->get_size().height, 0, Image::FORMAT_L8, data); | ||||
| 
 | ||||
| 	int thumbnail_size = EditorSettings::get_singleton()->get("filesystem/file_dialog/thumbnail_size"); | ||||
| 	thumbnail_size *= EDSCALE; | ||||
| 	if (img->is_compressed()) { | ||||
| 		if (img->decompress() != OK) | ||||
| 			return Ref<Texture>(); | ||||
|  | @ -236,22 +223,15 @@ Ref<Texture> EditorBitmapPreviewPlugin::generate(const RES &p_from) const { | |||
| 		img->convert(Image::FORMAT_RGBA8); | ||||
| 	} | ||||
| 
 | ||||
| 	int width, height; | ||||
| 	if (img->get_width() > thumbnail_size && img->get_width() >= img->get_height()) { | ||||
| 
 | ||||
| 		width = thumbnail_size; | ||||
| 		height = img->get_height() * thumbnail_size / img->get_width(); | ||||
| 	} else if (img->get_height() > thumbnail_size && img->get_height() >= img->get_width()) { | ||||
| 
 | ||||
| 		height = thumbnail_size; | ||||
| 		width = img->get_width() * thumbnail_size / img->get_height(); | ||||
| 	} else { | ||||
| 
 | ||||
| 		width = img->get_width(); | ||||
| 		height = img->get_height(); | ||||
| 	Vector2 new_size = img->get_size(); | ||||
| 	if (new_size.x > p_size.x) { | ||||
| 		new_size = Vector2(p_size.x, new_size.y * p_size.x / new_size.x); | ||||
| 	} | ||||
| 	if (new_size.y > p_size.y) { | ||||
| 		new_size = Vector2(new_size.x * p_size.y / new_size.y, p_size.y); | ||||
| 	} | ||||
| 	img->resize(new_size.x, new_size.y, Image::INTERPOLATE_CUBIC); | ||||
| 
 | ||||
| 	img->resize(width, height); | ||||
| 	post_process_preview(img); | ||||
| 
 | ||||
| 	Ref<ImageTexture> ptex = Ref<ImageTexture>(memnew(ImageTexture)); | ||||
|  | @ -260,6 +240,10 @@ Ref<Texture> EditorBitmapPreviewPlugin::generate(const RES &p_from) const { | |||
| 	return ptex; | ||||
| } | ||||
| 
 | ||||
| bool EditorBitmapPreviewPlugin::should_generate_small_preview() const { | ||||
| 	return true; | ||||
| } | ||||
| 
 | ||||
| EditorBitmapPreviewPlugin::EditorBitmapPreviewPlugin() { | ||||
| } | ||||
| 
 | ||||
|  | @ -269,12 +253,12 @@ bool EditorPackedScenePreviewPlugin::handles(const String &p_type) const { | |||
| 
 | ||||
| 	return ClassDB::is_parent_class(p_type, "PackedScene"); | ||||
| } | ||||
| Ref<Texture> EditorPackedScenePreviewPlugin::generate(const RES &p_from) const { | ||||
| Ref<Texture> EditorPackedScenePreviewPlugin::generate(const RES &p_from, const Size2 p_size) const { | ||||
| 
 | ||||
| 	return generate_from_path(p_from->get_path()); | ||||
| 	return generate_from_path(p_from->get_path(), p_size); | ||||
| } | ||||
| 
 | ||||
| Ref<Texture> EditorPackedScenePreviewPlugin::generate_from_path(const String &p_path) const { | ||||
| Ref<Texture> EditorPackedScenePreviewPlugin::generate_from_path(const String &p_path, const Size2 p_size) const { | ||||
| 
 | ||||
| 	String temp_path = EditorSettings::get_singleton()->get_cache_dir(); | ||||
| 	String cache_base = ProjectSettings::get_singleton()->globalize_path(p_path).md5_text(); | ||||
|  | @ -323,7 +307,11 @@ bool EditorMaterialPreviewPlugin::handles(const String &p_type) const { | |||
| 	return ClassDB::is_parent_class(p_type, "Material"); //any material
 | ||||
| } | ||||
| 
 | ||||
| Ref<Texture> EditorMaterialPreviewPlugin::generate(const RES &p_from) const { | ||||
| bool EditorMaterialPreviewPlugin::should_generate_small_preview() const { | ||||
| 	return true; | ||||
| } | ||||
| 
 | ||||
| Ref<Texture> EditorMaterialPreviewPlugin::generate(const RES &p_from, const Size2 p_size) const { | ||||
| 
 | ||||
| 	Ref<Material> material = p_from; | ||||
| 	ERR_FAIL_COND_V(material.is_null(), Ref<Texture>()); | ||||
|  | @ -346,10 +334,9 @@ Ref<Texture> EditorMaterialPreviewPlugin::generate(const RES &p_from) const { | |||
| 
 | ||||
| 		ERR_FAIL_COND_V(!img.is_valid(), Ref<ImageTexture>()); | ||||
| 
 | ||||
| 		int thumbnail_size = EditorSettings::get_singleton()->get("filesystem/file_dialog/thumbnail_size"); | ||||
| 		thumbnail_size *= EDSCALE; | ||||
| 		img->convert(Image::FORMAT_RGBA8); | ||||
| 		img->resize(thumbnail_size, thumbnail_size); | ||||
| 		int thumbnail_size = MAX(p_size.x, p_size.y); | ||||
| 		img->resize(thumbnail_size, thumbnail_size, Image::INTERPOLATE_CUBIC); | ||||
| 		post_process_preview(img); | ||||
| 		Ref<ImageTexture> ptex = Ref<ImageTexture>(memnew(ImageTexture)); | ||||
| 		ptex->create_from_image(img, 0); | ||||
|  | @ -490,7 +477,7 @@ bool EditorScriptPreviewPlugin::handles(const String &p_type) const { | |||
| 	return ClassDB::is_parent_class(p_type, "Script"); | ||||
| } | ||||
| 
 | ||||
| Ref<Texture> EditorScriptPreviewPlugin::generate(const RES &p_from) const { | ||||
| Ref<Texture> EditorScriptPreviewPlugin::generate(const RES &p_from, const Size2 p_size) const { | ||||
| 
 | ||||
| 	Ref<Script> scr = p_from; | ||||
| 	if (scr.is_null()) | ||||
|  | @ -512,10 +499,9 @@ Ref<Texture> EditorScriptPreviewPlugin::generate(const RES &p_from) const { | |||
| 
 | ||||
| 	int line = 0; | ||||
| 	int col = 0; | ||||
| 	int thumbnail_size = EditorSettings::get_singleton()->get("filesystem/file_dialog/thumbnail_size"); | ||||
| 	thumbnail_size *= EDSCALE; | ||||
| 	Ref<Image> img; | ||||
| 	img.instance(); | ||||
| 	int thumbnail_size = MAX(p_size.x, p_size.y); | ||||
| 	img->create(thumbnail_size, thumbnail_size, 0, Image::FORMAT_RGBA8); | ||||
| 
 | ||||
| 	Color bg_color = EditorSettings::get_singleton()->get("text_editor/highlighting/background_color"); | ||||
|  | @ -613,16 +599,15 @@ bool EditorAudioStreamPreviewPlugin::handles(const String &p_type) const { | |||
| 	return ClassDB::is_parent_class(p_type, "AudioStream"); | ||||
| } | ||||
| 
 | ||||
| Ref<Texture> EditorAudioStreamPreviewPlugin::generate(const RES &p_from) const { | ||||
| Ref<Texture> EditorAudioStreamPreviewPlugin::generate(const RES &p_from, const Size2 p_size) const { | ||||
| 
 | ||||
| 	Ref<AudioStream> stream = p_from; | ||||
| 	ERR_FAIL_COND_V(stream.is_null(), Ref<Texture>()); | ||||
| 
 | ||||
| 	int thumbnail_size = EditorSettings::get_singleton()->get("filesystem/file_dialog/thumbnail_size"); | ||||
| 	thumbnail_size *= EDSCALE; | ||||
| 	PoolVector<uint8_t> img; | ||||
| 	int w = thumbnail_size; | ||||
| 	int h = thumbnail_size; | ||||
| 
 | ||||
| 	int w = p_size.x; | ||||
| 	int h = p_size.y; | ||||
| 	img.resize(w * h * 3); | ||||
| 
 | ||||
| 	PoolVector<uint8_t>::Write imgdata = img.write(); | ||||
|  | @ -711,7 +696,7 @@ bool EditorMeshPreviewPlugin::handles(const String &p_type) const { | |||
| 	return ClassDB::is_parent_class(p_type, "Mesh"); //any Mesh
 | ||||
| } | ||||
| 
 | ||||
| Ref<Texture> EditorMeshPreviewPlugin::generate(const RES &p_from) const { | ||||
| Ref<Texture> EditorMeshPreviewPlugin::generate(const RES &p_from, const Size2 p_size) const { | ||||
| 
 | ||||
| 	Ref<Mesh> mesh = p_from; | ||||
| 	ERR_FAIL_COND_V(mesh.is_null(), Ref<Texture>()); | ||||
|  | @ -749,10 +734,17 @@ Ref<Texture> EditorMeshPreviewPlugin::generate(const RES &p_from) const { | |||
| 
 | ||||
| 	VS::get_singleton()->instance_set_base(mesh_instance, RID()); | ||||
| 
 | ||||
| 	int thumbnail_size = EditorSettings::get_singleton()->get("filesystem/file_dialog/thumbnail_size"); | ||||
| 	thumbnail_size *= EDSCALE; | ||||
| 	img->convert(Image::FORMAT_RGBA8); | ||||
| 	img->resize(thumbnail_size, thumbnail_size); | ||||
| 
 | ||||
| 	Vector2 new_size = img->get_size(); | ||||
| 	if (new_size.x > p_size.x) { | ||||
| 		new_size = Vector2(p_size.x, new_size.y * p_size.x / new_size.x); | ||||
| 	} | ||||
| 	if (new_size.y > p_size.y) { | ||||
| 		new_size = Vector2(new_size.x * p_size.y / new_size.y, p_size.y); | ||||
| 	} | ||||
| 	img->resize(new_size.x, new_size.y, Image::INTERPOLATE_CUBIC); | ||||
| 
 | ||||
| 	post_process_preview(img); | ||||
| 
 | ||||
| 	Ref<ImageTexture> ptex = Ref<ImageTexture>(memnew(ImageTexture)); | ||||
|  | @ -825,15 +817,12 @@ bool EditorFontPreviewPlugin::handles(const String &p_type) const { | |||
| 	return ClassDB::is_parent_class(p_type, "DynamicFontData"); | ||||
| } | ||||
| 
 | ||||
| Ref<Texture> EditorFontPreviewPlugin::generate_from_path(const String &p_path) const { | ||||
| Ref<Texture> EditorFontPreviewPlugin::generate_from_path(const String &p_path, const Size2 p_size) const { | ||||
| 
 | ||||
| 	Ref<DynamicFontData> SampledFont; | ||||
| 	SampledFont.instance(); | ||||
| 	SampledFont->set_font_path(p_path); | ||||
| 
 | ||||
| 	int thumbnail_size = EditorSettings::get_singleton()->get("filesystem/file_dialog/thumbnail_size"); | ||||
| 	thumbnail_size *= EDSCALE; | ||||
| 
 | ||||
| 	Ref<DynamicFont> sampled_font; | ||||
| 	sampled_font.instance(); | ||||
| 	sampled_font->set_size(50); | ||||
|  | @ -864,7 +853,15 @@ Ref<Texture> EditorFontPreviewPlugin::generate_from_path(const String &p_path) c | |||
| 	ERR_FAIL_COND_V(img.is_null(), Ref<ImageTexture>()); | ||||
| 
 | ||||
| 	img->convert(Image::FORMAT_RGBA8); | ||||
| 	img->resize(thumbnail_size, thumbnail_size); | ||||
| 
 | ||||
| 	Vector2 new_size = img->get_size(); | ||||
| 	if (new_size.x > p_size.x) { | ||||
| 		new_size = Vector2(p_size.x, new_size.y * p_size.x / new_size.x); | ||||
| 	} | ||||
| 	if (new_size.y > p_size.y) { | ||||
| 		new_size = Vector2(new_size.x * p_size.y / new_size.y, p_size.y); | ||||
| 	} | ||||
| 	img->resize(new_size.x, new_size.y, Image::INTERPOLATE_CUBIC); | ||||
| 
 | ||||
| 	post_process_preview(img); | ||||
| 
 | ||||
|  | @ -874,9 +871,9 @@ Ref<Texture> EditorFontPreviewPlugin::generate_from_path(const String &p_path) c | |||
| 	return ptex; | ||||
| } | ||||
| 
 | ||||
| Ref<Texture> EditorFontPreviewPlugin::generate(const RES &p_from) const { | ||||
| Ref<Texture> EditorFontPreviewPlugin::generate(const RES &p_from, const Size2 p_size) const { | ||||
| 
 | ||||
| 	return generate_from_path(p_from->get_path()); | ||||
| 	return generate_from_path(p_from->get_path(), p_size); | ||||
| } | ||||
| 
 | ||||
| EditorFontPreviewPlugin::EditorFontPreviewPlugin() { | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 groud
						groud