mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-05 03:48:07 +02:00
309 lines
9.4 KiB
ObjectPascal
309 lines
9.4 KiB
ObjectPascal
{ $Id$ }
|
|
{
|
|
/***************************************************************************
|
|
IcnsTypes.pas
|
|
---------------
|
|
|
|
***************************************************************************/
|
|
|
|
*****************************************************************************
|
|
This file is part of the Lazarus Component Library (LCL)
|
|
|
|
See the file COPYING.modifiedLGPL.txt, included in this distribution,
|
|
for details about the license.
|
|
*****************************************************************************
|
|
|
|
Author: Paul Ishenin
|
|
|
|
Abstract:
|
|
Types, consts and functions we need to read Mac OS X icon resource files - icns
|
|
Most defines present here were taken from univint package of fpc
|
|
}
|
|
unit IcnsTypes;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
type
|
|
FourCharCode = array[0..3] of char;
|
|
|
|
type
|
|
TIconFamilyElement = record
|
|
elementType: FourCharCode; { 'ICN#', 'icl8', etc... }
|
|
elementSize: LongInt; { Size of this element }
|
|
end;
|
|
|
|
TIconFamilyResource = record
|
|
resourceType: FourCharCode; { Always 'icns' }
|
|
resourceSize: LongInt; { Total size of this resource }
|
|
end;
|
|
|
|
const
|
|
kIconFamilyType = 'icns';
|
|
|
|
kIconServices512PixelDataARGB: FourCharCode = 'ic09';
|
|
kIconServices256PixelDataARGB: FourCharCode = 'ic08';
|
|
kThumbnail32BitData : FourCharCode = 'it32';
|
|
kThumbnail8BitMask : FourCharCode = 't8mk';
|
|
kHuge1BitMask : FourCharCode = 'ich#';
|
|
kHuge4BitData : FourCharCode = 'ich4';
|
|
kHuge8BitData : FourCharCode= 'ich8';
|
|
kHuge32BitData : FourCharCode= 'ih32';
|
|
kHuge8BitMask : FourCharCode= 'h8mk';
|
|
{ The following icon types can be used as a resource type }
|
|
{ or as an icon element type inside a 'icns' icon family }
|
|
kLarge1BitMask : FourCharCode= 'ICN#';
|
|
kLarge4BitData : FourCharCode= 'icl4';
|
|
kLarge8BitData : FourCharCode= 'icl8';
|
|
kLarge32BitData : FourCharCode= 'il32';
|
|
kLarge8BitMask : FourCharCode= 'l8mk';
|
|
kSmall1BitMask : FourCharCode= 'ics#';
|
|
kSmall4BitData : FourCharCode= 'ics4';
|
|
kSmall8BitData : FourCharCode= 'ics8';
|
|
kSmall32BitData : FourCharCode= 'is32';
|
|
kSmall8BitMask : FourCharCode= 's8mk';
|
|
kMini1BitMask : FourCharCode= 'icm#';
|
|
kMini4BitData : FourCharCode= 'icm4';
|
|
kMini8BitData : FourCharCode= 'icm8';
|
|
|
|
type
|
|
// from lower to higher
|
|
TicnsIconType =
|
|
(
|
|
iitNone,
|
|
// data icons
|
|
iitMini4BitData,
|
|
iitMini8BitData,
|
|
iitSmall4BitData,
|
|
iitSmall8BitData,
|
|
iitSmall32BitData,
|
|
iitLarge4BitData,
|
|
iitLarge8BitData,
|
|
iitLarge32BitData,
|
|
iitHuge4BitData,
|
|
iitHuge8BitData,
|
|
iitHuge32BitData,
|
|
iitThumbnail32BitData,
|
|
// mask icons
|
|
iitMini1BitMask,
|
|
iitSmall1BitMask,
|
|
iitSmall8BitMask,
|
|
iitLarge1BitMask,
|
|
iitLarge8BitMask,
|
|
iitHuge1BitMask,
|
|
iitHuge8BitMask,
|
|
iitThumbnail8BitMask,
|
|
// alpha icons
|
|
iit256PixelDataARGB,
|
|
iit512PixelDataARGB
|
|
);
|
|
|
|
TicnsIconTypes = set of TicnsIconType;
|
|
|
|
TicnsIconInfo = record
|
|
Width: Integer;
|
|
Height: Integer;
|
|
Depth: Integer;
|
|
end;
|
|
|
|
const
|
|
icnsDataTypes =
|
|
[
|
|
iitMini4BitData, iitMini8BitData, iitSmall4BitData, iitSmall8BitData,
|
|
iitSmall32BitData, iitLarge4BitData, iitLarge8BitData, iitLarge32BitData,
|
|
iitHuge4BitData, iitHuge8BitData, iitHuge32BitData, iitThumbnail32BitData
|
|
];
|
|
icnsMaskTypes =
|
|
[
|
|
iitMini1BitMask, iitSmall1BitMask, iitSmall8BitMask, iitLarge1BitMask,
|
|
iitLarge8BitMask, iitHuge1BitMask, iitHuge8BitMask, iitThumbnail8BitMask
|
|
];
|
|
icnsRGB =
|
|
[
|
|
iitSmall32BitData, iitLarge32BitData, iitHuge32BitData, iitThumbnail32BitData
|
|
];
|
|
icnsWithAlpha =
|
|
[
|
|
iit256PixelDataARGB, iit512PixelDataARGB
|
|
];
|
|
|
|
icnsIconTypeInfo: array[TicnsIconType] of TicnsIconInfo =
|
|
(
|
|
{ iitNone } (Width: 000; Height: 000; Depth: 00),
|
|
{ iitMini4BitData } (Width: 016; Height: 012; Depth: 04),
|
|
{ iitMini8BitData } (Width: 016; Height: 012; Depth: 08),
|
|
{ iitSmall4BitData } (Width: 016; Height: 016; Depth: 04),
|
|
{ iitSmall8BitData } (Width: 016; Height: 016; Depth: 08),
|
|
{ iitSmall32BitData } (Width: 016; Height: 016; Depth: 32),
|
|
{ iitLarge4BitData } (Width: 032; Height: 032; Depth: 04),
|
|
{ iitLarge8BitData } (Width: 032; Height: 032; Depth: 08),
|
|
{ iitLarge32BitData } (Width: 032; Height: 032; Depth: 32),
|
|
{ iitHuge4BitData } (Width: 048; Height: 048; Depth: 04),
|
|
{ iitHuge8BitData } (Width: 048; Height: 048; Depth: 08),
|
|
{ iitHuge32BitData } (Width: 048; Height: 048; Depth: 32),
|
|
{ iitThumbnail32BitData } (Width: 128; Height: 128; Depth: 32),
|
|
{ iitMini1BitMask } (Width: 016; Height: 012; Depth: 01),
|
|
{ iitSmall1BitMask } (Width: 016; Height: 016; Depth: 01),
|
|
{ iitSmall8BitMask } (Width: 016; Height: 016; Depth: 08),
|
|
{ iitLarge1BitMask } (Width: 032; Height: 032; Depth: 01),
|
|
{ iitLarge8BitMask } (Width: 032; Height: 032; Depth: 08),
|
|
{ iitHuge1BitMask } (Width: 048; Height: 048; Depth: 01),
|
|
{ iitHuge8BitMask } (Width: 048; Height: 048; Depth: 08),
|
|
{ iitThumbnail8BitMask } (Width: 128; Height: 128; Depth: 08),
|
|
{ iit256PixelDataARGB } (Width: 256; Height: 256; Depth: 32),
|
|
{ iit512PixelDataARGB } (Width: 512; Height: 512; Depth: 32)
|
|
);
|
|
|
|
icnsMaskToImageMap: array[iitMini1BitMask..iitThumbnail8BitMask] of TicnsIconTypes =
|
|
(
|
|
{ iitMini1BitMask } [iitMini4BitData, iitMini8BitData],
|
|
{ iitSmall1BitMask } [iitSmall4BitData, iitSmall8BitData, iitSmall32BitData],
|
|
{ iitSmall8BitMask } [iitSmall4BitData, iitSmall8BitData, iitSmall32BitData],
|
|
{ iitLarge1BitMask } [iitLarge4BitData, iitLarge8BitData, iitLarge32BitData],
|
|
{ iitLarge8BitMask } [iitLarge4BitData, iitLarge8BitData, iitLarge32BitData],
|
|
{ iitHuge1BitMask } [iitHuge4BitData, iitHuge8BitData, iitHuge32BitData],
|
|
{ iitHuge8BitMask } [iitHuge4BitData, iitHuge8BitData, iitHuge32BitData],
|
|
{ iitThumbnail8BitMask } [iitThumbnail32BitData]
|
|
);
|
|
|
|
function GetIcnsIconType(const StrIconType: FourCharCode): TicnsIconType;
|
|
|
|
// Returns proper TicnsIconType, or iitNone, if Width/Height is incorrect
|
|
function GetDataTypeRGB(Width, Height: Integer; var FourChar: FourCharCode): TicnsIconType;
|
|
function GetMaskType8bit(Width, Height: Integer; var FourChar: FourCharCode): TicnsIconType;
|
|
|
|
implementation
|
|
|
|
function GetDataTypeRGB(Width, Height: Integer; var FourChar: FourCharCode): TicnsIconType;
|
|
begin
|
|
Result := iitNone;
|
|
if Width <> Height then Exit;
|
|
|
|
case Width of
|
|
16: begin
|
|
Result := iitSmall32BitData;
|
|
FourChar := kSmall32BitData;
|
|
end;
|
|
32: begin
|
|
Result := iitLarge32BitData;
|
|
FourChar := kLarge32BitData;
|
|
end;
|
|
48: begin
|
|
Result := iitHuge32BitData;
|
|
FourChar := kHuge32BitData;
|
|
end;
|
|
128: begin
|
|
Result := iitThumbnail32BitData;
|
|
FourChar := kThumbnail32BitData;
|
|
end;
|
|
256: begin
|
|
Result := iit256PixelDataARGB;
|
|
FourChar := kIconServices256PixelDataARGB;
|
|
end;
|
|
512: begin
|
|
Result := iit512PixelDataARGB;
|
|
FourChar := kIconServices512PixelDataARGB;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
function GetMaskType8bit(Width, Height: Integer; var FourChar: FourCharCode): TicnsIconType;
|
|
begin
|
|
Result := iitNone;
|
|
if Width <> Height then Exit;
|
|
|
|
case Width of
|
|
16: begin
|
|
Result := iitSmall8BitMask;
|
|
FourChar := kSmall8BitMask;
|
|
end;
|
|
32: begin
|
|
Result := iitLarge8BitMask;
|
|
FourChar := kLarge8BitMask;
|
|
end;
|
|
48: begin
|
|
Result := iitHuge8BitMask;
|
|
FourChar := kHuge8BitMask;
|
|
end;
|
|
128: begin
|
|
Result := iitThumbnail8BitMask;
|
|
FourChar := kThumbnail8BitMask;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
function GetIcnsIconType(const StrIconType: FourCharCode): TicnsIconType;
|
|
begin
|
|
Result := iitNone;
|
|
|
|
if StrIconType = kMini4BitData then
|
|
exit(iitMini4BitData);
|
|
|
|
if StrIconType = kMini8BitData then
|
|
exit(iitMini8BitData);
|
|
|
|
if StrIconType = kSmall4BitData then
|
|
exit(iitSmall4BitData);
|
|
|
|
if StrIconType = kSmall8BitData then
|
|
exit(iitSmall8BitData);
|
|
|
|
if StrIconType = kSmall32BitData then
|
|
exit(iitSmall32BitData);
|
|
|
|
if StrIconType = kLarge4BitData then
|
|
exit(iitLarge4BitData);
|
|
|
|
if StrIconType = kLarge8BitData then
|
|
exit(iitLarge8BitData);
|
|
|
|
if StrIconType = kLarge32BitData then
|
|
exit(iitLarge32BitData);
|
|
|
|
if StrIconType = kHuge4BitData then
|
|
exit(iitHuge4BitData);
|
|
|
|
if StrIconType = kHuge8BitData then
|
|
exit(iitHuge8BitData);
|
|
|
|
if StrIconType = kHuge32BitData then
|
|
exit(iitHuge32BitData);
|
|
|
|
if StrIconType = kThumbnail32BitData then
|
|
exit(iitThumbnail32BitData);
|
|
|
|
if StrIconType = kMini1BitMask then
|
|
exit(iitMini1BitMask);
|
|
|
|
if StrIconType = kSmall1BitMask then
|
|
exit(iitSmall1BitMask);
|
|
|
|
if StrIconType = kSmall8BitMask then
|
|
exit(iitSmall8BitMask);
|
|
|
|
if StrIconType = kLarge1BitMask then
|
|
exit(iitLarge1BitMask);
|
|
|
|
if StrIconType = kLarge8BitMask then
|
|
exit(iitLarge8BitMask);
|
|
|
|
if StrIconType = kHuge1BitMask then
|
|
exit(iitHuge1BitMask);
|
|
|
|
if StrIconType = kHuge8BitMask then
|
|
exit(iitHuge8BitMask);
|
|
|
|
if StrIconType = kThumbnail8BitMask then
|
|
exit(iitThumbnail8BitMask);
|
|
|
|
if StrIconType = kIconServices256PixelDataARGB then
|
|
exit(iit256PixelDataARGB);
|
|
|
|
if StrIconType = kIconServices512PixelDataARGB then
|
|
exit(iit512PixelDataARGB);
|
|
end;
|
|
|
|
end.
|
|
|