mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-15 20:39:14 +02:00
IconFinder: Workaround for failure to detect size of new icons if BGRABitmap is installed.
This commit is contained in:
parent
2412720001
commit
0cc2f18c78
@ -18,8 +18,8 @@ unit IconThumbNails;
|
|||||||
interface
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, fgl, contnrs, FPImage, FPReadBMP, StrUtils, LazLoggerBase,
|
Classes, SysUtils, fgl, contnrs, FPImage, FPReadBMP, FPReadPNG, StrUtils,
|
||||||
laz2_dom, laz2_xmlread, laz2_xmlwrite, IntfGraphics,
|
LazLoggerBase, laz2_dom, laz2_xmlread, laz2_xmlwrite, IntfGraphics,
|
||||||
FileUtil, LazFileUtils, Graphics, Controls, Dialogs, Menus, Forms,
|
FileUtil, LazFileUtils, Graphics, Controls, Dialogs, Menus, Forms,
|
||||||
IconFinderStrConsts, BasicThumbnails;
|
IconFinderStrConsts, BasicThumbnails;
|
||||||
|
|
||||||
@ -144,6 +144,7 @@ type
|
|||||||
function AcceptIcon(AIcon: TIconItem): Boolean; virtual;
|
function AcceptIcon(AIcon: TIconItem): Boolean; virtual;
|
||||||
function AcceptKeywords(AIcon: TIconItem): Boolean;
|
function AcceptKeywords(AIcon: TIconItem): Boolean;
|
||||||
function AddIcon(AFileName, AKeywords: String; AStyle: TIconStyle; AWidth, AHeight: Integer): TIconItem;
|
function AddIcon(AFileName, AKeywords: String; AStyle: TIconStyle; AWidth, AHeight: Integer): TIconItem;
|
||||||
|
procedure AddIconToMetafile(AFileName: String; AHidden: Boolean);
|
||||||
procedure DeleteIconFolder(AFolder: String);
|
procedure DeleteIconFolder(AFolder: String);
|
||||||
procedure FilterIcons;
|
procedure FilterIcons;
|
||||||
function MetadataDirty: Boolean;
|
function MetadataDirty: Boolean;
|
||||||
@ -710,6 +711,43 @@ begin
|
|||||||
SelectedIndex := -1;
|
SelectedIndex := -1;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TIconThumbnailViewer.AddIconToMetaFile(AFileName: String; AHidden: Boolean);
|
||||||
|
var
|
||||||
|
stream: TStream;
|
||||||
|
reader: TFPCustomImageReaderClass;
|
||||||
|
w, h: Integer;
|
||||||
|
begin
|
||||||
|
stream := TFileStream.Create(AFileName, fmOpenRead or fmShareDenyNone);
|
||||||
|
try
|
||||||
|
reader := TFPCustomImage.FindReaderFromStream(stream);
|
||||||
|
if reader <> nil then
|
||||||
|
begin
|
||||||
|
// Workaround for failure to get the image size when BGRABitmap is
|
||||||
|
// installed since the bgra readers do not implement the ImageSize
|
||||||
|
// method.
|
||||||
|
case Lowercase(reader.ClassName) of
|
||||||
|
'tbgrareaderpng': reader := TFPReaderPNG;
|
||||||
|
'tbgrareaderbmp': reader := TFPReaderBMP;
|
||||||
|
end;
|
||||||
|
{$if FPC_FullVersion < 30301}
|
||||||
|
// Workaround for FPReaderBMP not implementing "ImageSize"
|
||||||
|
if reader = TFPReaderBMP then
|
||||||
|
reader := TLazReaderBMP;
|
||||||
|
{$ifend}
|
||||||
|
|
||||||
|
stream.Position := 0;
|
||||||
|
with reader.ImageSize(stream) do
|
||||||
|
begin
|
||||||
|
w := X;
|
||||||
|
h := Y;
|
||||||
|
end;
|
||||||
|
AddIcon(AFileName, '', isAnyStyle, w, h).Hidden := AHidden;
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
stream.Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TIconThumbnailViewer.Clear;
|
procedure TIconThumbnailViewer.Clear;
|
||||||
begin
|
begin
|
||||||
SelectedIndex := -1;
|
SelectedIndex := -1;
|
||||||
@ -1142,37 +1180,13 @@ end;
|
|||||||
procedure TIconThumbnailViewer.ReadIcons(AFolder: String; AHidden: Boolean);
|
procedure TIconThumbnailViewer.ReadIcons(AFolder: String; AHidden: Boolean);
|
||||||
var
|
var
|
||||||
files: TStrings;
|
files: TStrings;
|
||||||
reader: TFPCustomImageReaderClass;
|
i: Integer;
|
||||||
stream: TStream;
|
|
||||||
i, w, h: Integer;
|
|
||||||
begin
|
begin
|
||||||
files := TStringList.Create;
|
files := TStringList.Create;
|
||||||
try
|
try
|
||||||
FindAllFiles(files, AFolder, IMAGES_MASK, false);
|
FindAllFiles(files, AFolder, IMAGES_MASK, false);
|
||||||
for i := 0 to files.Count-1 do
|
for i := 0 to files.Count-1 do
|
||||||
begin
|
AddIconToMetaFile(files[i], AHidden);
|
||||||
stream := TFileStream.Create(files[i], fmOpenRead or fmShareDenyNone);
|
|
||||||
try
|
|
||||||
reader := TFPCustomImage.FindReaderFromStream(stream);
|
|
||||||
if reader <> nil then
|
|
||||||
begin
|
|
||||||
{$if FPC_FullVersion < 30301}
|
|
||||||
// Workaround for FPReaderBMP not implementing "ImageSize"
|
|
||||||
if reader = TFPReaderBMP then
|
|
||||||
reader := TLazReaderBMP;
|
|
||||||
{$ifend}
|
|
||||||
stream.Position := 0;
|
|
||||||
with reader.ImageSize(stream) do
|
|
||||||
begin
|
|
||||||
w := X;
|
|
||||||
h := Y;
|
|
||||||
end;
|
|
||||||
AddIcon(files[i], '', isAnyStyle, w, h).Hidden := AHidden;
|
|
||||||
end;
|
|
||||||
finally
|
|
||||||
stream.Free;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
finally
|
finally
|
||||||
files.Free;
|
files.Free;
|
||||||
end;
|
end;
|
||||||
@ -1268,27 +1282,9 @@ begin
|
|||||||
|
|
||||||
// Every image which exists in the metadata file has been deleted from
|
// Every image which exists in the metadata file has been deleted from
|
||||||
// the files list. The entries which are left identify new files. Add them
|
// the files list. The entries which are left identify new files. Add them
|
||||||
// to the metafile
|
// to the metafile.
|
||||||
for i := 0 to files.Count-1 do
|
for i := 0 to files.Count-1 do
|
||||||
begin
|
AddIconToMetafile(files[i], AHidden);
|
||||||
fn := files[i];
|
|
||||||
stream := TFileStream.Create(files[i], fmOpenRead or fmShareDenyNone);
|
|
||||||
try
|
|
||||||
reader := TFPCustomImage.FindReaderFromStream(stream);
|
|
||||||
if reader <> nil then
|
|
||||||
begin
|
|
||||||
stream.Position := 0;
|
|
||||||
with reader.ImageSize(stream) do
|
|
||||||
begin
|
|
||||||
w := X;
|
|
||||||
h := Y;
|
|
||||||
end;
|
|
||||||
AddIcon(files[i], '', isAnyStyle, w, h).Hidden := AHidden;
|
|
||||||
end;
|
|
||||||
finally
|
|
||||||
stream.Free;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
{$ifdef SPEED_TIMER}
|
{$ifdef SPEED_TIMER}
|
||||||
t2 := Now()-t2;
|
t2 := Now()-t2;
|
||||||
|
Loading…
Reference in New Issue
Block a user