From 599e76d53ee46bd6571afcdf777122d1ce5fe6ee Mon Sep 17 00:00:00 2001 From: cxl Date: Sun, 5 Dec 2010 13:37:25 +0000 Subject: [PATCH] CtrlLib:FileSel icons optimizations... git-svn-id: svn://ultimatepp.org/upp/trunk@2890 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/CtrlLib/FileSel.cpp | 35 ++++++++++++++++++----------------- uppsrc/CtrlLib/FileSel.h | 4 +++- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/uppsrc/CtrlLib/FileSel.cpp b/uppsrc/CtrlLib/FileSel.cpp index c7459e7c9..8932b446c 100644 --- a/uppsrc/CtrlLib/FileSel.cpp +++ b/uppsrc/CtrlLib/FileSel.cpp @@ -330,14 +330,14 @@ bool Load(FileList& list, const String& dir, const char *patterns, bool dirs, : lazyicons ? fi.is_directory ? CtrlImg::Dir() : CtrlImg::File() : GetFileIcon(dir, fi.filename, fi.is_directory, fi.unix_mode & 0111, false); #else - Image img = lazyicons ? fi.is_directory ? CtrlImg::Dir() : CtrlImg::File() - : GetFileIcon(AppendFileName(dir, fi.filename), fi.is_directory, fi.unix_mode & 0111, false); -// Image img = GetFileIcon(AppendFileName(dir, fi.filename), fi.is_directory, false, false, lazyicons); +// Image img = lazyicons ? fi.is_directory ? CtrlImg::Dir() : CtrlImg::File() +// : GetFileIcon(AppendFileName(dir, fi.filename), fi.is_directory, fi.unix_mode & 0111, false); + Image img = GetFileIcon(AppendFileName(dir, fi.filename), fi.is_directory, false, false, lazyicons); #endif if(IsNull(img)) img = fi.is_directory ? CtrlImg::Dir() : CtrlImg::File(); WhenIcon(fi.is_directory, fi.filename, img); - list.Add(fi.filename, fi.is_hidden && !lazyicons ? Contrast(img, 200) : img, + list.Add(fi.filename, fi.is_hidden ? Contrast(img, 200) : img, StdFont().Bold(fi.is_directory), nd ? SColorDisabled : fi.is_hidden ? Blend(SColorText, Gray, 200) : SColorText, fi.is_directory, fi.is_directory ? -1 : fi.length, @@ -373,31 +373,32 @@ void LazyFileIcons::Do() return; } const FileList::File& f = list->Get(pos); - if(f.icon.IsSame(CtrlImg::Dir()) || f.icon.IsSame(CtrlImg::File())) { - int t0 = GetTickCount(); - String n = f.name; + int t0 = GetTickCount(); + String n = f.name; #ifdef PLATFORM_WIN32 - Image img = GetFileIcon(AppendFileName(dir, f.name), f.isdir, f.unixexe, false, quick); + Image img = GetFileIcon(AppendFileName(dir, f.name), f.isdir, f.unixexe, false, quick); #else - Image img = GetFileIcon(dir, f.name, f.isdir, f.unixexe, false); + Image img = GetFileIcon(dir, f.name, f.isdir, f.unixexe, false); #endif - if(f.hidden) - img = Contrast(img, 200); - list->SetIcon(pos, img); - if(GetTickCount() - t0 > 500) - quick = true; - } + WhenIcon(f.isdir, f.name, img); + if(f.hidden) + img = Contrast(img, 200); + list->SetIcon(pos, img); + if(GetTickCount() - t0 > 100 || GetTickCount() - start > 1500) + return; pos++; } } -void LazyFileIcons::Start(FileList& list_, const String& dir_) +void LazyFileIcons::Start(FileList& list_, const String& dir_, Callback3 WhenIcon_) { list = &list_; dir = dir_; + WhenIcon = WhenIcon_; pos = 0; quick = false; ptime = 150; + start = GetTickCount(); Restart(0); } @@ -568,7 +569,7 @@ void FileSel::SearchLoad() SearchLoad(); } - lazyicons.Start(list, d); + lazyicons.Start(list, d, WhenIcon); places.KillCursor(); if(d.GetCount()) places.FindSetCursor(d); diff --git a/uppsrc/CtrlLib/FileSel.h b/uppsrc/CtrlLib/FileSel.h index 33924d426..c3ef186a2 100644 --- a/uppsrc/CtrlLib/FileSel.h +++ b/uppsrc/CtrlLib/FileSel.h @@ -127,12 +127,14 @@ class LazyFileIcons { int pos; bool quick; int ptime; + int start; + Callback3 WhenIcon; void Do(); void Restart(int delay) { tm.KillSet(delay, callback(this, &LazyFileIcons::Do)); } public: - void Start(FileList& list_, const String& dir_); + void Start(FileList& list_, const String& dir_, Callback3 WhenIcon_); }; String DirectoryUp(String& dir, bool basedir = false);