Merge pull request #112426 from MuffinTastic/MuffinTastic/filesystemdock-thumbnail-nearest-point
[Editor] Make FileSystemDock use nearest-neighbor filtering for textures
This commit is contained in:
commit
ccb0b49799
2 changed files with 37 additions and 5 deletions
|
|
@ -863,12 +863,16 @@ void FileSystemDock::navigate_to_path(const String &p_path) {
|
|||
void FileSystemDock::_file_list_thumbnail_done(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, int p_index, const String &p_filename) {
|
||||
if (p_preview.is_valid()) {
|
||||
if (p_index < files->get_item_count() && files->get_item_text(p_index) == p_filename && files->get_item_metadata(p_index) == p_path) {
|
||||
Ref<Texture2D> thumbnail;
|
||||
|
||||
if (file_list_display_mode == FILE_LIST_DISPLAY_LIST) {
|
||||
if (p_small_preview.is_valid()) {
|
||||
files->set_item_icon(p_index, p_small_preview);
|
||||
}
|
||||
thumbnail = p_small_preview;
|
||||
} else {
|
||||
files->set_item_icon(p_index, p_preview);
|
||||
thumbnail = p_preview;
|
||||
}
|
||||
|
||||
if (thumbnail.is_valid()) {
|
||||
files->set_item_icon(p_index, _apply_thumbnail_filter(thumbnail, p_path));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -877,10 +881,37 @@ void FileSystemDock::_file_list_thumbnail_done(const String &p_path, const Ref<T
|
|||
void FileSystemDock::_tree_thumbnail_done(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, int p_update_id, ObjectID p_item) {
|
||||
TreeItem *item = ObjectDB::get_instance<TreeItem>(p_item);
|
||||
if (item && tree_update_id == p_update_id && p_small_preview.is_valid()) {
|
||||
item->set_icon(0, p_small_preview);
|
||||
item->set_icon(0, _apply_thumbnail_filter(p_small_preview, p_path));
|
||||
}
|
||||
}
|
||||
|
||||
Ref<Texture2D> FileSystemDock::_apply_thumbnail_filter(const Ref<Texture2D> &p_thumbnail, const String &p_file_path) const {
|
||||
if (!p_file_path.is_empty()) {
|
||||
int index;
|
||||
EditorFileSystemDirectory *dir = EditorFileSystem::get_singleton()->find_file(p_file_path, &index);
|
||||
|
||||
if (dir) {
|
||||
if (dir->get_file_import_is_valid(index)) {
|
||||
const StringName &file_type = dir->get_file_type(index);
|
||||
|
||||
if (file_type == SNAME("CompressedTexture2D") || file_type == SNAME("Image")) {
|
||||
const String extension = p_file_path.get_extension();
|
||||
|
||||
if (extension != "svg" && extension != "svgz") {
|
||||
Ref<CanvasTexture> thumbnail_wrapped;
|
||||
thumbnail_wrapped.instantiate();
|
||||
thumbnail_wrapped->set_diffuse_texture(p_thumbnail);
|
||||
thumbnail_wrapped->set_texture_filter(CanvasItem::TextureFilter::TEXTURE_FILTER_NEAREST_WITH_MIPMAPS);
|
||||
return thumbnail_wrapped;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return p_thumbnail;
|
||||
}
|
||||
|
||||
void FileSystemDock::_toggle_file_display() {
|
||||
_set_file_display(file_list_display_mode != FILE_LIST_DISPLAY_LIST);
|
||||
emit_signal(SNAME("display_mode_changed"));
|
||||
|
|
|
|||
|
|
@ -367,6 +367,7 @@ private:
|
|||
void _preview_invalidated(const String &p_path);
|
||||
void _file_list_thumbnail_done(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, int p_index, const String &p_filename);
|
||||
void _tree_thumbnail_done(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, int p_update_id, ObjectID p_item);
|
||||
Ref<Texture2D> _apply_thumbnail_filter(const Ref<Texture2D> &p_thumbnail, const String &p_file_path) const;
|
||||
|
||||
void _update_display_mode(bool p_force = false);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue