lazarus/lcl/icnstypes.pas

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.