Стартовый пул
This commit is contained in:
123
bgracontrols/test/test_extra/Plugins/SamplePlugin1/grayscale.lpi
Normal file
123
bgracontrols/test/test_extra/Plugins/SamplePlugin1/grayscale.lpi
Normal file
@@ -0,0 +1,123 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="9"/>
|
||||
<PathDelim Value="\"/>
|
||||
<General>
|
||||
<Flags>
|
||||
<MainUnitHasCreateFormStatements Value="False"/>
|
||||
<MainUnitHasTitleStatement Value="False"/>
|
||||
</Flags>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<MainUnit Value="0"/>
|
||||
<Title Value="grayscale"/>
|
||||
<UseAppBundle Value="False"/>
|
||||
<ResourceType Value="res"/>
|
||||
</General>
|
||||
<i18n>
|
||||
<EnableI18N LFM="False"/>
|
||||
</i18n>
|
||||
<VersionInfo>
|
||||
<StringTable ProductVersion=""/>
|
||||
</VersionInfo>
|
||||
<BuildModes Count="2">
|
||||
<Item1 Name="Release" Default="True"/>
|
||||
<Item2 Name="Debug">
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="grayscale"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<Parsing>
|
||||
<SyntaxOptions>
|
||||
<IncludeAssertionCode Value="True"/>
|
||||
</SyntaxOptions>
|
||||
</Parsing>
|
||||
<CodeGeneration>
|
||||
<RelocatableUnit Value="True"/>
|
||||
<Checks>
|
||||
<IOChecks Value="True"/>
|
||||
<RangeChecks Value="True"/>
|
||||
<OverflowChecks Value="True"/>
|
||||
<StackChecks Value="True"/>
|
||||
</Checks>
|
||||
</CodeGeneration>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<DebugInfoType Value="dsDwarf2Set"/>
|
||||
<UseHeaptrc Value="True"/>
|
||||
<UseExternalDbgSyms Value="True"/>
|
||||
</Debugging>
|
||||
<Options>
|
||||
<ExecutableType Value="Library"/>
|
||||
</Options>
|
||||
</Linking>
|
||||
</CompilerOptions>
|
||||
</Item2>
|
||||
</BuildModes>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<local>
|
||||
<FormatVersion Value="1"/>
|
||||
</local>
|
||||
</RunParams>
|
||||
<RequiredPackages Count="1">
|
||||
<Item1>
|
||||
<PackageName Value="BGRABitmapPack"/>
|
||||
</Item1>
|
||||
</RequiredPackages>
|
||||
<Units Count="1">
|
||||
<Unit0>
|
||||
<Filename Value="grayscale.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit0>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="grayscale"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<CodeGeneration>
|
||||
<SmartLinkUnit Value="True"/>
|
||||
<RelocatableUnit Value="True"/>
|
||||
<Optimizations>
|
||||
<OptimizationLevel Value="3"/>
|
||||
</Optimizations>
|
||||
</CodeGeneration>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<GenerateDebugInfo Value="False"/>
|
||||
</Debugging>
|
||||
<LinkSmart Value="True"/>
|
||||
<Options>
|
||||
<ExecutableType Value="Library"/>
|
||||
</Options>
|
||||
</Linking>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
<Exceptions Count="3">
|
||||
<Item1>
|
||||
<Name Value="EAbort"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<Name Value="ECodetoolError"/>
|
||||
</Item2>
|
||||
<Item3>
|
||||
<Name Value="EFOpenError"/>
|
||||
</Item3>
|
||||
</Exceptions>
|
||||
</Debugging>
|
||||
</CONFIG>
|
@@ -0,0 +1,24 @@
|
||||
library grayscale;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
uses
|
||||
Classes, strings, BGRABitmap, BGRABitmapTypes;
|
||||
|
||||
procedure FilterName(s: pchar); cdecl;
|
||||
begin
|
||||
StrCopy(s, 'Grayscale');
|
||||
end;
|
||||
|
||||
procedure ApplyFilter(BGRA: TBGRABitmap); cdecl;
|
||||
begin
|
||||
BGRA.InplaceGrayscale();
|
||||
end;
|
||||
|
||||
exports
|
||||
FilterName,
|
||||
ApplyFilter;
|
||||
|
||||
begin
|
||||
end.
|
||||
|
123
bgracontrols/test/test_extra/Plugins/SamplePlugin2/invert.lpi
Normal file
123
bgracontrols/test/test_extra/Plugins/SamplePlugin2/invert.lpi
Normal file
@@ -0,0 +1,123 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="9"/>
|
||||
<PathDelim Value="\"/>
|
||||
<General>
|
||||
<Flags>
|
||||
<MainUnitHasCreateFormStatements Value="False"/>
|
||||
<MainUnitHasTitleStatement Value="False"/>
|
||||
</Flags>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<MainUnit Value="0"/>
|
||||
<Title Value="invert"/>
|
||||
<UseAppBundle Value="False"/>
|
||||
<ResourceType Value="res"/>
|
||||
</General>
|
||||
<i18n>
|
||||
<EnableI18N LFM="False"/>
|
||||
</i18n>
|
||||
<VersionInfo>
|
||||
<StringTable ProductVersion=""/>
|
||||
</VersionInfo>
|
||||
<BuildModes Count="2">
|
||||
<Item1 Name="Release" Default="True"/>
|
||||
<Item2 Name="Debug">
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="invert"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<Parsing>
|
||||
<SyntaxOptions>
|
||||
<IncludeAssertionCode Value="True"/>
|
||||
</SyntaxOptions>
|
||||
</Parsing>
|
||||
<CodeGeneration>
|
||||
<RelocatableUnit Value="True"/>
|
||||
<Checks>
|
||||
<IOChecks Value="True"/>
|
||||
<RangeChecks Value="True"/>
|
||||
<OverflowChecks Value="True"/>
|
||||
<StackChecks Value="True"/>
|
||||
</Checks>
|
||||
</CodeGeneration>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<DebugInfoType Value="dsDwarf2Set"/>
|
||||
<UseHeaptrc Value="True"/>
|
||||
<UseExternalDbgSyms Value="True"/>
|
||||
</Debugging>
|
||||
<Options>
|
||||
<ExecutableType Value="Library"/>
|
||||
</Options>
|
||||
</Linking>
|
||||
</CompilerOptions>
|
||||
</Item2>
|
||||
</BuildModes>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<local>
|
||||
<FormatVersion Value="1"/>
|
||||
</local>
|
||||
</RunParams>
|
||||
<RequiredPackages Count="1">
|
||||
<Item1>
|
||||
<PackageName Value="BGRABitmapPack"/>
|
||||
</Item1>
|
||||
</RequiredPackages>
|
||||
<Units Count="1">
|
||||
<Unit0>
|
||||
<Filename Value="invert.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit0>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="invert"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<CodeGeneration>
|
||||
<SmartLinkUnit Value="True"/>
|
||||
<RelocatableUnit Value="True"/>
|
||||
<Optimizations>
|
||||
<OptimizationLevel Value="3"/>
|
||||
</Optimizations>
|
||||
</CodeGeneration>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<GenerateDebugInfo Value="False"/>
|
||||
</Debugging>
|
||||
<LinkSmart Value="True"/>
|
||||
<Options>
|
||||
<ExecutableType Value="Library"/>
|
||||
</Options>
|
||||
</Linking>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
<Exceptions Count="3">
|
||||
<Item1>
|
||||
<Name Value="EAbort"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<Name Value="ECodetoolError"/>
|
||||
</Item2>
|
||||
<Item3>
|
||||
<Name Value="EFOpenError"/>
|
||||
</Item3>
|
||||
</Exceptions>
|
||||
</Debugging>
|
||||
</CONFIG>
|
@@ -0,0 +1,36 @@
|
||||
library invert;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
uses
|
||||
Classes, strings, BGRABitmap, BGRABitmapTypes;
|
||||
|
||||
procedure FilterName(s: pchar); cdecl;
|
||||
begin
|
||||
StrCopy(s, 'Invert');
|
||||
end;
|
||||
|
||||
procedure ApplyFilter(BGRA: TBGRABitmap); cdecl;
|
||||
var
|
||||
i: integer;
|
||||
p: PBGRAPixel;
|
||||
begin
|
||||
p := BGRA.Data;
|
||||
|
||||
for i := BGRA.NBPixels - 1 downto 0 do
|
||||
begin
|
||||
p^.red := not p^.red;
|
||||
p^.green := not p^.green;
|
||||
p^.blue := not p^.blue;
|
||||
p^.alpha := p^.alpha;
|
||||
Inc(p);
|
||||
end;
|
||||
end;
|
||||
|
||||
exports
|
||||
FilterName,
|
||||
ApplyFilter;
|
||||
|
||||
begin
|
||||
end.
|
||||
|
133
bgracontrols/test/test_extra/Plugins/TestPlugins/plugins.lpi
Normal file
133
bgracontrols/test/test_extra/Plugins/TestPlugins/plugins.lpi
Normal file
@@ -0,0 +1,133 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="9"/>
|
||||
<PathDelim Value="\"/>
|
||||
<General>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<MainUnit Value="0"/>
|
||||
<Title Value="plugins"/>
|
||||
<ResourceType Value="res"/>
|
||||
<UseXPManifest Value="True"/>
|
||||
<Icon Value="0"/>
|
||||
</General>
|
||||
<i18n>
|
||||
<EnableI18N LFM="False"/>
|
||||
</i18n>
|
||||
<VersionInfo>
|
||||
<StringTable ProductVersion=""/>
|
||||
</VersionInfo>
|
||||
<BuildModes Count="2">
|
||||
<Item1 Name="Release" Default="True"/>
|
||||
<Item2 Name="Debug">
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="plugins"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<Parsing>
|
||||
<SyntaxOptions>
|
||||
<IncludeAssertionCode Value="True"/>
|
||||
</SyntaxOptions>
|
||||
</Parsing>
|
||||
<CodeGeneration>
|
||||
<Checks>
|
||||
<IOChecks Value="True"/>
|
||||
<RangeChecks Value="True"/>
|
||||
<OverflowChecks Value="True"/>
|
||||
<StackChecks Value="True"/>
|
||||
</Checks>
|
||||
</CodeGeneration>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<DebugInfoType Value="dsDwarf2Set"/>
|
||||
<UseHeaptrc Value="True"/>
|
||||
<UseExternalDbgSyms Value="True"/>
|
||||
</Debugging>
|
||||
<Options>
|
||||
<Win32>
|
||||
<GraphicApplication Value="True"/>
|
||||
</Win32>
|
||||
</Options>
|
||||
</Linking>
|
||||
</CompilerOptions>
|
||||
</Item2>
|
||||
</BuildModes>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<local>
|
||||
<FormatVersion Value="1"/>
|
||||
</local>
|
||||
</RunParams>
|
||||
<RequiredPackages Count="2">
|
||||
<Item1>
|
||||
<PackageName Value="bgracontrols"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<PackageName Value="LCL"/>
|
||||
</Item2>
|
||||
</RequiredPackages>
|
||||
<Units Count="2">
|
||||
<Unit0>
|
||||
<Filename Value="plugins.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit0>
|
||||
<Unit1>
|
||||
<Filename Value="unit1.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<ComponentName Value="Form1"/>
|
||||
<HasResources Value="True"/>
|
||||
<ResourceBaseClass Value="Form"/>
|
||||
<UnitName Value="Unit1"/>
|
||||
</Unit1>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="plugins"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<CodeGeneration>
|
||||
<SmartLinkUnit Value="True"/>
|
||||
<Optimizations>
|
||||
<OptimizationLevel Value="3"/>
|
||||
</Optimizations>
|
||||
</CodeGeneration>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<GenerateDebugInfo Value="False"/>
|
||||
</Debugging>
|
||||
<LinkSmart Value="True"/>
|
||||
<Options>
|
||||
<Win32>
|
||||
<GraphicApplication Value="True"/>
|
||||
</Win32>
|
||||
</Options>
|
||||
</Linking>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
<Exceptions Count="3">
|
||||
<Item1>
|
||||
<Name Value="EAbort"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<Name Value="ECodetoolError"/>
|
||||
</Item2>
|
||||
<Item3>
|
||||
<Name Value="EFOpenError"/>
|
||||
</Item3>
|
||||
</Exceptions>
|
||||
</Debugging>
|
||||
</CONFIG>
|
21
bgracontrols/test/test_extra/Plugins/TestPlugins/plugins.lpr
Normal file
21
bgracontrols/test/test_extra/Plugins/TestPlugins/plugins.lpr
Normal file
@@ -0,0 +1,21 @@
|
||||
program plugins;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
uses
|
||||
{$IFDEF UNIX}{$IFDEF UseCThreads}
|
||||
cthreads,
|
||||
{$ENDIF}{$ENDIF}
|
||||
Interfaces, // this includes the LCL widgetset
|
||||
Forms, Unit1
|
||||
{ you can add units after this };
|
||||
|
||||
{$R *.res}
|
||||
|
||||
begin
|
||||
RequireDerivedFormResource:=True;
|
||||
Application.Initialize;
|
||||
Application.CreateForm(TForm1, Form1);
|
||||
Application.Run;
|
||||
end.
|
||||
|
35
bgracontrols/test/test_extra/Plugins/TestPlugins/unit1.lfm
Normal file
35
bgracontrols/test/test_extra/Plugins/TestPlugins/unit1.lfm
Normal file
@@ -0,0 +1,35 @@
|
||||
object Form1: TForm1
|
||||
Left = 470
|
||||
Height = 240
|
||||
Top = 181
|
||||
Width = 320
|
||||
Caption = 'Form1'
|
||||
ClientHeight = 240
|
||||
ClientWidth = 320
|
||||
OnCreate = FormCreate
|
||||
OnDestroy = FormDestroy
|
||||
LCLVersion = '1.6.0.4'
|
||||
object BGRAVirtualScreen1: TBGRAVirtualScreen
|
||||
Left = 0
|
||||
Height = 240
|
||||
Top = 0
|
||||
Width = 320
|
||||
OnRedraw = BGRAVirtualScreen1Redraw
|
||||
Align = alClient
|
||||
Alignment = taLeftJustify
|
||||
ClientHeight = 240
|
||||
ClientWidth = 320
|
||||
Color = clWhite
|
||||
ParentColor = False
|
||||
TabOrder = 0
|
||||
object ComboBox1: TComboBox
|
||||
Left = 8
|
||||
Height = 28
|
||||
Top = 8
|
||||
Width = 100
|
||||
ItemHeight = 20
|
||||
OnSelect = ComboBox1Select
|
||||
TabOrder = 0
|
||||
end
|
||||
end
|
||||
end
|
112
bgracontrols/test/test_extra/Plugins/TestPlugins/unit1.pas
Normal file
112
bgracontrols/test/test_extra/Plugins/TestPlugins/unit1.pas
Normal file
@@ -0,0 +1,112 @@
|
||||
unit Unit1;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, FileUtil, strings, Forms, Controls, Graphics, Dialogs, StdCtrls,
|
||||
BGRABitmap, BGRABitmapTypes, BGRAVirtualScreen, dynlibs;
|
||||
|
||||
const
|
||||
{$IFDEF WINDOWS}
|
||||
LIBRARYEXT = '*.dll';
|
||||
{$ENDIF}
|
||||
{$IFDEF LINUX}
|
||||
LIBRARYEXT = '*.so';
|
||||
{$ENDIF}
|
||||
{$IFDEF DARWIN}
|
||||
LIBRARYEXT = '*.dylib';
|
||||
{$ENDIF}
|
||||
|
||||
type
|
||||
TFilterName = procedure(s: PChar); cdecl;
|
||||
TApplyFilter = procedure(BGRA: TBGRABitmap); cdecl;
|
||||
|
||||
type
|
||||
|
||||
{ TForm1 }
|
||||
|
||||
TForm1 = class(TForm)
|
||||
BGRAVirtualScreen1: TBGRAVirtualScreen;
|
||||
ComboBox1: TComboBox;
|
||||
procedure BGRAVirtualScreen1Redraw(Sender: TObject; Bitmap: TBGRABitmap);
|
||||
procedure ComboBox1Select(Sender: TObject);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure FormDestroy(Sender: TObject);
|
||||
private
|
||||
{ private declarations }
|
||||
DLLnames: TStringList;
|
||||
CurrentFilter: TApplyFilter;
|
||||
dll: TLibHandle;
|
||||
public
|
||||
{ public declarations }
|
||||
end;
|
||||
|
||||
var
|
||||
Form1: TForm1;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.lfm}
|
||||
|
||||
{ TForm1 }
|
||||
|
||||
procedure TForm1.BGRAVirtualScreen1Redraw(Sender: TObject; Bitmap: TBGRABitmap);
|
||||
begin
|
||||
Bitmap.Fill(BGRA(255, 0, 0));
|
||||
if Assigned(CurrentFilter) then
|
||||
CurrentFilter(Bitmap);
|
||||
end;
|
||||
|
||||
procedure TForm1.ComboBox1Select(Sender: TObject);
|
||||
begin
|
||||
if dll <> dynlibs.NilHandle then
|
||||
if FreeLibrary(dll) then
|
||||
dll := dynlibs.NilHandle;
|
||||
dll := LoadLibrary(DLLnames[ComboBox1.ItemIndex]);
|
||||
if dll <> dynlibs.NilHandle then
|
||||
begin
|
||||
CurrentFilter := TApplyFilter(GetProcAddress(dll, 'ApplyFilter'));
|
||||
end;
|
||||
BGRAVirtualScreen1.DiscardBitmap;
|
||||
end;
|
||||
|
||||
procedure TForm1.FormCreate(Sender: TObject);
|
||||
var
|
||||
i: integer;
|
||||
GetName: TFilterName;
|
||||
s: PChar;
|
||||
begin
|
||||
DLLnames := FindAllFiles(ProgramDirectory, LIBRARYEXT, False);
|
||||
for i := 0 to DLLnames.Count - 1 do
|
||||
begin
|
||||
DLLnames[i] := ExtractFileName(DLLnames[i]);
|
||||
end;
|
||||
|
||||
s := stralloc(50);
|
||||
for i := 0 to DLLnames.Count - 1 do
|
||||
begin
|
||||
dll := LoadLibrary(DLLnames[i]);
|
||||
if dll <> dynlibs.NilHandle then
|
||||
begin
|
||||
GetName := TFilterName(GetProcAddress(dll, 'FilterName'));
|
||||
if Assigned(GetName) then
|
||||
begin
|
||||
GetName(s);
|
||||
ComboBox1.Items.Add(string(s));
|
||||
end;
|
||||
if FreeLibrary(dll) then
|
||||
dll := dynlibs.NilHandle;
|
||||
end;
|
||||
end;
|
||||
strdispose(s);
|
||||
end;
|
||||
|
||||
procedure TForm1.FormDestroy(Sender: TObject);
|
||||
begin
|
||||
DLLnames.Free;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
147
bgracontrols/test/test_extra/effect_fading/fading.lpi
Normal file
147
bgracontrols/test/test_extra/effect_fading/fading.lpi
Normal file
@@ -0,0 +1,147 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="9"/>
|
||||
<PathDelim Value="\"/>
|
||||
<General>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<MainUnit Value="0"/>
|
||||
<Title Value="fading"/>
|
||||
<ResourceType Value="res"/>
|
||||
<UseXPManifest Value="True"/>
|
||||
</General>
|
||||
<i18n>
|
||||
<EnableI18N LFM="False"/>
|
||||
</i18n>
|
||||
<VersionInfo>
|
||||
<StringTable ProductVersion=""/>
|
||||
</VersionInfo>
|
||||
<BuildModes Count="2">
|
||||
<Item1 Name="Debug" Default="True"/>
|
||||
<Item2 Name="Release">
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="fading"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<CodeGeneration>
|
||||
<SmartLinkUnit Value="True"/>
|
||||
<Optimizations>
|
||||
<OptimizationLevel Value="3"/>
|
||||
</Optimizations>
|
||||
</CodeGeneration>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<GenerateDebugInfo Value="False"/>
|
||||
</Debugging>
|
||||
<LinkSmart Value="True"/>
|
||||
<Options>
|
||||
<Win32>
|
||||
<GraphicApplication Value="True"/>
|
||||
</Win32>
|
||||
</Options>
|
||||
</Linking>
|
||||
<Other>
|
||||
<CompilerMessages>
|
||||
<MsgFileName Value=""/>
|
||||
</CompilerMessages>
|
||||
<CompilerPath Value="$(CompPath)"/>
|
||||
</Other>
|
||||
</CompilerOptions>
|
||||
</Item2>
|
||||
</BuildModes>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
<IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
|
||||
<ExcludeFileFilter Value="*.(bak|ppu|o|so);*~;backup"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<local>
|
||||
<FormatVersion Value="1"/>
|
||||
</local>
|
||||
</RunParams>
|
||||
<RequiredPackages Count="2">
|
||||
<Item1>
|
||||
<PackageName Value="bgracontrols"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<PackageName Value="LCL"/>
|
||||
</Item2>
|
||||
</RequiredPackages>
|
||||
<Units Count="2">
|
||||
<Unit0>
|
||||
<Filename Value="fading.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<UnitName Value="fading"/>
|
||||
</Unit0>
|
||||
<Unit1>
|
||||
<Filename Value="unit1.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<ComponentName Value="Form1"/>
|
||||
<HasResources Value="True"/>
|
||||
<ResourceBaseClass Value="Form"/>
|
||||
<UnitName Value="Unit1"/>
|
||||
</Unit1>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="fading"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<Parsing>
|
||||
<SyntaxOptions>
|
||||
<IncludeAssertionCode Value="True"/>
|
||||
</SyntaxOptions>
|
||||
</Parsing>
|
||||
<CodeGeneration>
|
||||
<Checks>
|
||||
<IOChecks Value="True"/>
|
||||
<RangeChecks Value="True"/>
|
||||
<OverflowChecks Value="True"/>
|
||||
<StackChecks Value="True"/>
|
||||
</Checks>
|
||||
</CodeGeneration>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<DebugInfoType Value="dsDwarf2Set"/>
|
||||
<UseHeaptrc Value="True"/>
|
||||
<UseExternalDbgSyms Value="True"/>
|
||||
</Debugging>
|
||||
<Options>
|
||||
<Win32>
|
||||
<GraphicApplication Value="True"/>
|
||||
</Win32>
|
||||
</Options>
|
||||
</Linking>
|
||||
<Other>
|
||||
<CompilerMessages>
|
||||
<MsgFileName Value=""/>
|
||||
</CompilerMessages>
|
||||
<CompilerPath Value="$(CompPath)"/>
|
||||
</Other>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
<Exceptions Count="3">
|
||||
<Item1>
|
||||
<Name Value="EAbort"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<Name Value="ECodetoolError"/>
|
||||
</Item2>
|
||||
<Item3>
|
||||
<Name Value="EFOpenError"/>
|
||||
</Item3>
|
||||
</Exceptions>
|
||||
</Debugging>
|
||||
</CONFIG>
|
21
bgracontrols/test/test_extra/effect_fading/fading.lpr
Normal file
21
bgracontrols/test/test_extra/effect_fading/fading.lpr
Normal file
@@ -0,0 +1,21 @@
|
||||
program fading;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
uses
|
||||
{$IFDEF UNIX}{$IFDEF UseCThreads}
|
||||
cthreads,
|
||||
{$ENDIF}{$ENDIF}
|
||||
Interfaces, // this includes the LCL widgetset
|
||||
Forms, Unit1
|
||||
{ you can add units after this };
|
||||
|
||||
{$R *.res}
|
||||
|
||||
begin
|
||||
RequireDerivedFormResource := True;
|
||||
Application.Initialize;
|
||||
Application.CreateForm(TForm1, Form1);
|
||||
Application.Run;
|
||||
end.
|
||||
|
104
bgracontrols/test/test_extra/effect_fading/unit1.lfm
Normal file
104
bgracontrols/test/test_extra/effect_fading/unit1.lfm
Normal file
@@ -0,0 +1,104 @@
|
||||
object Form1: TForm1
|
||||
Left = 353
|
||||
Height = 240
|
||||
Top = 169
|
||||
Width = 501
|
||||
Caption = 'Fading'
|
||||
ClientHeight = 240
|
||||
ClientWidth = 501
|
||||
OnCloseQuery = FormCloseQuery
|
||||
OnCreate = FormCreate
|
||||
OnDestroy = FormDestroy
|
||||
LCLVersion = '1.1'
|
||||
object bgImage: TBGRAGraphicControl
|
||||
Left = 15
|
||||
Height = 108
|
||||
Top = 16
|
||||
Width = 185
|
||||
OnRedraw = bgImageRedraw
|
||||
Color = clWhite
|
||||
ColorOpacity = 128
|
||||
Alignment = taCenter
|
||||
Caption = 'bgImage'
|
||||
end
|
||||
object cbFadingMode: TComboBox
|
||||
Left = 208
|
||||
Height = 23
|
||||
Top = 16
|
||||
Width = 180
|
||||
ItemHeight = 15
|
||||
OnChange = cbFadingModeChange
|
||||
Style = csDropDownList
|
||||
TabOrder = 0
|
||||
end
|
||||
object seFadingStep: TSpinEdit
|
||||
Left = 208
|
||||
Height = 23
|
||||
Top = 45
|
||||
Width = 114
|
||||
MaxValue = 255
|
||||
MinValue = 1
|
||||
OnChange = seFadingStepChange
|
||||
TabOrder = 1
|
||||
Value = 5
|
||||
end
|
||||
object seTimerInterval: TSpinEdit
|
||||
Left = 208
|
||||
Height = 23
|
||||
Top = 73
|
||||
Width = 114
|
||||
MaxValue = 1000
|
||||
MinValue = 1
|
||||
OnChange = seTimerIntervalChange
|
||||
TabOrder = 2
|
||||
Value = 16
|
||||
end
|
||||
object Label1: TLabel
|
||||
Left = 336
|
||||
Height = 15
|
||||
Top = 49
|
||||
Width = 62
|
||||
Caption = 'Fading Step'
|
||||
ParentColor = False
|
||||
end
|
||||
object Label2: TLabel
|
||||
Left = 336
|
||||
Height = 15
|
||||
Top = 77
|
||||
Width = 73
|
||||
Caption = 'Timer Interval'
|
||||
ParentColor = False
|
||||
end
|
||||
object Label3: TLabel
|
||||
Left = 15
|
||||
Height = 15
|
||||
Top = 144
|
||||
Width = 31
|
||||
Caption = 'Alpha'
|
||||
ParentColor = False
|
||||
end
|
||||
object seDuration: TSpinEdit
|
||||
Left = 208
|
||||
Height = 23
|
||||
Top = 101
|
||||
Width = 114
|
||||
Increment = 100
|
||||
MaxValue = 10000
|
||||
OnChange = seDurationChange
|
||||
TabOrder = 3
|
||||
end
|
||||
object Label4: TLabel
|
||||
Left = 336
|
||||
Height = 15
|
||||
Top = 105
|
||||
Width = 73
|
||||
Caption = 'Duration (ms)'
|
||||
ParentColor = False
|
||||
end
|
||||
object Timer1: TTimer
|
||||
Interval = 33
|
||||
OnTimer = Timer1Timer
|
||||
left = 16
|
||||
top = 16
|
||||
end
|
||||
end
|
149
bgracontrols/test/test_extra/effect_fading/unit1.pas
Normal file
149
bgracontrols/test/test_extra/effect_fading/unit1.pas
Normal file
@@ -0,0 +1,149 @@
|
||||
unit Unit1;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
|
||||
StdCtrls, BGRAGraphicControl, BGRABitmap, BGRABitmapTypes, BCFilters, Spin, BCEffect;
|
||||
|
||||
type
|
||||
{ TForm1 }
|
||||
|
||||
TForm1 = class(TForm)
|
||||
bgImage: TBGRAGraphicControl;
|
||||
cbFadingMode: TComboBox;
|
||||
Label1: TLabel;
|
||||
Label2: TLabel;
|
||||
Label3: TLabel;
|
||||
Label4: TLabel;
|
||||
seFadingStep: TSpinEdit;
|
||||
seTimerInterval: TSpinEdit;
|
||||
seDuration: TSpinEdit;
|
||||
Timer1: TTimer;
|
||||
procedure bgImageRedraw(Sender: TObject; Bitmap: TBGRABitmap);
|
||||
procedure cbFadingModeChange(Sender: TObject);
|
||||
procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure FormDestroy(Sender: TObject);
|
||||
procedure seDurationChange(Sender: TObject);
|
||||
procedure seFadingStepChange(Sender: TObject);
|
||||
procedure seTimerIntervalChange(Sender: TObject);
|
||||
procedure Timer1Timer(Sender: TObject);
|
||||
private
|
||||
{ private declarations }
|
||||
public
|
||||
{ public declarations }
|
||||
Fade: TFading;
|
||||
{$ifdef Windows}
|
||||
FadeForm: TFading;
|
||||
{$endif}
|
||||
Image: TBGRABitmap;
|
||||
end;
|
||||
|
||||
var
|
||||
Form1: TForm1;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.lfm}
|
||||
|
||||
{ TForm1 }
|
||||
|
||||
procedure TForm1.bgImageRedraw(Sender: TObject; Bitmap: TBGRABitmap);
|
||||
begin
|
||||
// set black background
|
||||
Bitmap.Fill(BGRABlack);
|
||||
// draw image with fading alpha
|
||||
Bitmap.BlendImageOver(0, 0, Image, boLinearBlend, Fade.Alpha);
|
||||
end;
|
||||
|
||||
procedure TForm1.cbFadingModeChange(Sender: TObject);
|
||||
begin
|
||||
// set fading mode
|
||||
Fade.Mode := StrToTFadingMode(cbFadingMode.Caption);
|
||||
// reset
|
||||
Fade.Reset;
|
||||
end;
|
||||
|
||||
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: boolean);
|
||||
begin
|
||||
{$ifdef Windows}
|
||||
if (FadeForm.Alpha > 0) then
|
||||
begin
|
||||
FadeForm.Mode := fmFadeOut;
|
||||
CanClose := False;
|
||||
end
|
||||
else
|
||||
CanClose := True;
|
||||
{$endif}
|
||||
end;
|
||||
|
||||
procedure TForm1.FormCreate(Sender: TObject);
|
||||
begin
|
||||
// add items to combo box
|
||||
FadingModeStrList(cbFadingMode.Items);
|
||||
// load step from spin edit
|
||||
Fade.Step := seFadingStep.Value;
|
||||
// load interval from spin edit
|
||||
Timer1.Interval := seTimerInterval.Value;
|
||||
|
||||
// create test image
|
||||
Image := TBGRABitmap.Create(bgImage.Width, bgImage.Height);
|
||||
NoiseBWA(Image);
|
||||
|
||||
// fade form Windows
|
||||
{$ifdef Windows}
|
||||
Self.DoubleBuffered := True;
|
||||
Self.AlphaBlend := True;
|
||||
Self.AlphaBlendValue := 0;
|
||||
FadeForm.Mode := fmFadeIn;
|
||||
FadeForm.Duration := 300;
|
||||
{$endif}
|
||||
end;
|
||||
|
||||
procedure TForm1.FormDestroy(Sender: TObject);
|
||||
begin
|
||||
// free test image
|
||||
Image.Free;
|
||||
end;
|
||||
|
||||
procedure TForm1.seDurationChange(Sender: TObject);
|
||||
begin
|
||||
Fade.Duration := seDuration.Value;
|
||||
end;
|
||||
|
||||
procedure TForm1.seFadingStepChange(Sender: TObject);
|
||||
begin
|
||||
// set fading step
|
||||
Fade.Step := seFadingStep.Value;
|
||||
end;
|
||||
|
||||
procedure TForm1.seTimerIntervalChange(Sender: TObject);
|
||||
begin
|
||||
// change timer interval
|
||||
Timer1.Interval := seTimerInterval.Value;
|
||||
end;
|
||||
|
||||
procedure TForm1.Timer1Timer(Sender: TObject);
|
||||
begin
|
||||
Timer1.Enabled:= false; //avoid freezing application
|
||||
|
||||
{ calculate fading // display alpha }
|
||||
Label3.Caption := concat('FadingAlpha: ', IntToStr(Fade.Execute));
|
||||
|
||||
// update bitmap
|
||||
bgImage.RedrawBitmap;
|
||||
|
||||
{$ifdef Windows}
|
||||
if FadeForm.Mode <> fmSuspended then
|
||||
Self.AlphaBlendValue := FadeForm.Execute;
|
||||
|
||||
if (FadeForm.Mode = fmSuspended) and (FadeForm.Alpha = 0) then
|
||||
Close;
|
||||
{$endif}
|
||||
Timer1.Enabled:= true;
|
||||
end;
|
||||
|
||||
end.
|
BIN
bgracontrols/test/test_extra/game_maze/background.jpg
Normal file
BIN
bgracontrols/test/test_extra/game_maze/background.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 29 KiB |
624
bgracontrols/test/test_extra/game_maze/bgragame.pas
Normal file
624
bgracontrols/test/test_extra/game_maze/bgragame.pas
Normal file
@@ -0,0 +1,624 @@
|
||||
unit bgragame;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, Graphics, LCLType, BGRABitmap, BGRABitmapTypes,
|
||||
SysUtils, Forms, Controls;
|
||||
|
||||
const
|
||||
L1 = VK_LEFT;
|
||||
R1 = VK_RIGHT;
|
||||
U1 = VK_UP;
|
||||
D1 = VK_DOWN;
|
||||
L2 = VK_A;
|
||||
R2 = VK_D;
|
||||
U2 = VK_W;
|
||||
D2 = VK_S;
|
||||
|
||||
type
|
||||
TGameKey = (gkLeft, gkUp, gkRight, gkDown);
|
||||
|
||||
PGameMap = ^TGameMap;
|
||||
|
||||
TGameMap = record
|
||||
mapGraphics: string;
|
||||
mapProperty: string;
|
||||
mapSolve: string;
|
||||
mapPrevPos: string;
|
||||
mapKeyChar: char;
|
||||
mapSolidChar: char;
|
||||
mapWidth: integer;
|
||||
mapHeight: integer;
|
||||
blockWidth: integer;
|
||||
blockHeight: integer;
|
||||
background: TBGRABitmap;
|
||||
ballSphereMap: TBGRABitmap;
|
||||
ballPosition,ballSpeed: TPointF;
|
||||
ballPositionDefined: boolean;
|
||||
mouseDown: boolean;
|
||||
mousePos: TPointF;
|
||||
mapKeysDown: set of TGameKey;
|
||||
end;
|
||||
|
||||
procedure DrawMap(var map: TGameMap; bitmap: TBGRABitmap; redrawAll: boolean);
|
||||
function ClickMapCell(var map: TGameMap; pos: TPoint): boolean;
|
||||
procedure MouseDownMap(var map: TGameMap; pos: TPoint);
|
||||
procedure MouseUpMap(var map: TGameMap; pos: TPoint);
|
||||
function GetGameKey(var Key: word; invertLR, invertUD: boolean): TGameKey;
|
||||
procedure KeyDownMap(var map: TGameMap; var Key: word);
|
||||
procedure KeyUpMap(var map: TGameMap; var Key: word);
|
||||
function KeyPressMapCell(var map: TGameMap; Key: TGameKey): boolean;
|
||||
function KeyPressMapCell(var map: TGameMap; var Key: word): boolean;
|
||||
function IsMapSolved(var map: TGameMap): boolean;
|
||||
|
||||
procedure ToggleFullScreen(Form: TForm; ARect: TRect);
|
||||
procedure CenterControl(Control: TControl);
|
||||
function CalculateAspectRatioH(const W1, H1, W2: integer): integer; //result H2
|
||||
function CalculateAspectRatioW(const W1, H1, H2: integer): integer; //result W2
|
||||
function CalculateDestRect(ImageW, ImageH, DestW, DestH: integer;
|
||||
Stretch, Proportional, Center: boolean): TRect;
|
||||
procedure HighDPI(FromDPI: integer);
|
||||
procedure ScaleDPI(Control: TControl; FromDPI: integer);
|
||||
procedure ScaleAspectRatio(Control: TControl; OriginalParentW, OriginalParentH: integer);
|
||||
procedure ScaleAspectRatio(Control: TControl; DestW, DestH: integer;
|
||||
Stretch, Proportional, Center: boolean);
|
||||
|
||||
implementation
|
||||
|
||||
uses BGRAGradients;
|
||||
|
||||
procedure DrawMap(var map: TGameMap; bitmap: TBGRABitmap; minx,miny,maxx,maxy: integer; fullbackground: boolean); forward;
|
||||
procedure DrawBall(var map: TGameMap; bitmap: TBGRABitmap); forward;
|
||||
procedure InvalidateMap(var map: TGameMap; ARect: TRect);
|
||||
var minx,miny,maxx,maxy,xb,yb: integer;
|
||||
begin
|
||||
if map.blockWidth <> 0 then
|
||||
minx := ARect.Left div map.blockWidth;
|
||||
if map.blockWidth <> 0 then
|
||||
maxx := (ARect.Right div map.blockWidth) +1;
|
||||
if map.blockHeight <> 0 then
|
||||
miny := ARect.top div map.blockHeight;
|
||||
if map.blockHeight <> 0 then
|
||||
maxy := (ARect.bottom div map.blockHeight) +1;
|
||||
if miny < 0 then miny :=0;
|
||||
if minx < 0 then minx := 0;
|
||||
if maxx > map.mapWidth-1 then maxx := map.mapWidth-1;
|
||||
if maxy > map.mapHeight-1 then maxy := map.mapHeight-1;
|
||||
for yb := miny to maxy do
|
||||
for xb := minx to maxx do
|
||||
map.mapPrevPos[xb+yb*map.mapWidth+1] := '1';
|
||||
end;
|
||||
|
||||
const acceleration = 0.01;
|
||||
maxSpeed = 0.1;
|
||||
|
||||
procedure MoveBall(var map: TGameMap);
|
||||
var speed: single;
|
||||
ix,iy,nix,niy: integer;
|
||||
|
||||
dir: TPointF;
|
||||
dirlen: single;
|
||||
begin
|
||||
if map.ballPositionDefined then
|
||||
begin
|
||||
if map.mouseDown then
|
||||
begin
|
||||
dir := map.mousePos-map.ballPosition;
|
||||
dirlen := sqrt(dir*dir);
|
||||
if dirlen > acceleration then dir *= acceleration/dirlen;
|
||||
map.ballSpeed += dir;
|
||||
end else
|
||||
begin
|
||||
if gkLeft in map.mapKeysDown then map.ballSpeed.x -= acceleration;
|
||||
if gkRight in map.mapKeysDown then map.ballSpeed.x += acceleration;
|
||||
if gkUp in map.mapKeysDown then map.ballSpeed.y -= acceleration;
|
||||
if gkDown in map.mapKeysDown then map.ballSpeed.y += acceleration;
|
||||
end;
|
||||
|
||||
speed := sqrt(map.ballSpeed*map.ballSpeed);
|
||||
if speed > maxSpeed then map.ballSpeed *= maxSpeed/speed;
|
||||
ix := round(map.ballPosition.x);
|
||||
iy := round(map.ballPosition.y);
|
||||
map.ballPosition += map.ballSpeed;
|
||||
nix := round(map.ballPosition.x);
|
||||
niy := round(map.ballPosition.y);
|
||||
if nix > ix then
|
||||
begin
|
||||
if not KeyPressMapCell(map, gkRight) then
|
||||
begin
|
||||
map.ballPosition.X := ix+0.499;
|
||||
map.ballSpeed.X := -abs(map.ballSpeed.X);
|
||||
end;
|
||||
end;
|
||||
if nix < ix then
|
||||
begin
|
||||
if not KeyPressMapCell(map, gkLeft) then
|
||||
begin
|
||||
map.ballPosition.X := ix-0.499;
|
||||
map.ballSpeed.X := abs(map.ballSpeed.X);
|
||||
end;
|
||||
end;
|
||||
if niy > iy then
|
||||
begin
|
||||
if not KeyPressMapCell(map, gkDown) then
|
||||
begin
|
||||
map.ballPosition.y := iy+0.499;
|
||||
map.ballSpeed.y := -abs(map.ballSpeed.y);
|
||||
end;
|
||||
end;
|
||||
if niy < iy then
|
||||
begin
|
||||
if not KeyPressMapCell(map, gkUp) then
|
||||
begin
|
||||
map.ballPosition.y := iy-0.499;
|
||||
map.ballSpeed.y := abs(map.ballSpeed.y);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure DrawMap(var map: TGameMap; bitmap: TBGRABitmap; redrawAll: boolean);
|
||||
begin
|
||||
MoveBall(map);
|
||||
if redrawAll then
|
||||
DrawMap(map,bitmap,0,0,map.mapWidth-1,map.mapHeight-1,true)
|
||||
else
|
||||
DrawMap(map,bitmap,0,0,map.mapWidth-1,map.mapHeight-1,false);
|
||||
DrawBall(map, bitmap);
|
||||
end;
|
||||
|
||||
procedure DrawBall(var map: TGameMap; bitmap: TBGRABitmap);
|
||||
var phong: TPhongShading;
|
||||
radius,xi,yi: integer;
|
||||
r: TRect;
|
||||
begin
|
||||
if map.ballPositionDefined then
|
||||
begin
|
||||
phong := TPhongShading.Create;
|
||||
phong.LightPosition := point(bitmap.Width div 2, bitmap.Height div 2);
|
||||
radius := map.blockWidth;
|
||||
if map.blockHeight < radius then radius := map.blockHeight;
|
||||
radius := round(radius*0.3);
|
||||
xi := round((map.ballPosition.X+0.5)*map.blockWidth);
|
||||
yi := round((map.ballPosition.Y+0.5)*map.blockHeight);
|
||||
r := rect(xi-radius,yi-radius,xi+radius+1,yi+radius+1);
|
||||
if (map.ballSphereMap <> nil) and ((map.ballSphereMap.Width <> r.right-r.left) or (map.ballSphereMap.Height <> r.bottom-r.top)) then
|
||||
FreeAndNil(map.ballSphereMap);
|
||||
if map.ballSphereMap = nil then map.ballSphereMap := CreateSpherePreciseMap(r.right-r.left,r.bottom-r.top);
|
||||
phong.Draw(bitmap,map.ballSphereMap,radius,r.left,r.top,CSSLightGray);
|
||||
phong.Free;
|
||||
InvalidateMap(map, rect(xi-radius,yi-radius,xi+radius+1,yi+radius+1));
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure DrawMap(var map: TGameMap; bitmap: TBGRABitmap; minx,miny,maxx,maxy: integer; fullbackground: boolean);
|
||||
var
|
||||
n, nx, ny: integer;
|
||||
r: TRect;
|
||||
colorOscillation: single;
|
||||
oldClip: TRect;
|
||||
shouldRedraw: boolean;
|
||||
|
||||
begin
|
||||
colorOscillation:= sin(frac(Now)*24*60*60 * 2*Pi)*0.5+0.5;
|
||||
|
||||
if minx < 0 then minx := 0;
|
||||
if miny < 0 then miny := 0;
|
||||
if maxx > map.mapWidth-1 then maxx := map.mapWidth-1;
|
||||
if maxy > map.mapHeight-1 then maxy := map.mapHeight-1;
|
||||
|
||||
oldClip := bitmap.ClipRect;
|
||||
bitmap.ClipRect := rect(map.blockWidth * minx, map.blockHeight * miny,
|
||||
map.blockWidth * (maxx+1), map.blockHeight * (maxy+1));
|
||||
if fullbackground then bitmap.PutImage(0, 0, map.background, dmSet);
|
||||
|
||||
if map.mapPrevPos = '' then
|
||||
begin
|
||||
setlength(map.mapPrevPos, map.mapWidth*map.mapHeight);
|
||||
for n := 1 to length(map.mapPrevPos) do
|
||||
map.mapPrevPos[n] := '0';
|
||||
end;
|
||||
|
||||
r.Top := map.blockHeight * miny;
|
||||
r.Bottom := r.Top + map.blockHeight;
|
||||
for ny := miny to maxy do
|
||||
begin
|
||||
r.Left := map.blockWidth * minx;
|
||||
r.Right := r.Left + map.blockWidth;
|
||||
n := ny*map.mapWidth+minx+1;
|
||||
for nx := minx to maxx do
|
||||
begin
|
||||
shouldRedraw:= (map.mapProperty[n] = map.mapKeyChar) or (map.mapGraphics[n] = 'X');
|
||||
if fullbackground or shouldRedraw or (map.mapPrevPos[n] = '1') then
|
||||
begin
|
||||
if shouldRedraw then map.mapPrevPos[n] := '1' else map.mapPrevPos[n] := '0';
|
||||
// begin to draw here
|
||||
if not fullbackground then bitmap.PutImagePart(r.left, r.top, map.background, r, dmSet);
|
||||
|
||||
if map.mapProperty[n] = map.mapKeyChar then
|
||||
begin
|
||||
bitmap.Rectangle(r, BGRAPixelTransparent, BGRA(0, 255, 0, round(200*colorOscillation)),
|
||||
dmDrawWithTransparency);
|
||||
if not map.ballPositionDefined then
|
||||
begin
|
||||
map.ballPosition := pointF(nx,ny);
|
||||
map.ballPositionDefined := true;
|
||||
end;
|
||||
end
|
||||
else if map.mapProperty[n] = map.mapSolidChar then
|
||||
bitmap.Rectangle(r, BGRAPixelTransparent, BGRA(0, 0, 0, 100),
|
||||
dmDrawWithTransparency)
|
||||
else
|
||||
bitmap.Rectangle(r, BGRAPixelTransparent, BGRA(255, 255, 255, 200),
|
||||
dmDrawWithTransparency);
|
||||
|
||||
if map.blockWidth > map.blockHeight then
|
||||
bitmap.FontHeight := map.blockHeight
|
||||
else
|
||||
bitmap.FontHeight := map.blockWidth;
|
||||
|
||||
if map.mapGraphics[n] = 'X' then
|
||||
bitmap.Rectangle(r, BGRAPixelTransparent, BGRA(255, 0, 0, round(200*colorOscillation)),
|
||||
dmDrawWithTransparency);
|
||||
// end to draw here
|
||||
end;
|
||||
Inc(n);
|
||||
inc(r.Left,map.blockWidth);
|
||||
inc(r.right,map.blockWidth);
|
||||
end;
|
||||
inc(r.top,map.blockHeight);
|
||||
inc(r.bottom,map.blockHeight);
|
||||
end;
|
||||
bitmap.ClipRect := oldClip;
|
||||
end;
|
||||
|
||||
function ClickMapCell(var map: TGameMap; pos: TPoint): boolean;
|
||||
var
|
||||
n, nx, ny: integer;
|
||||
r: TRect;
|
||||
begin
|
||||
Result := False;
|
||||
n := 1;
|
||||
for ny := 0 to map.mapHeight - 1 do
|
||||
begin
|
||||
for nx := 0 to map.mapWidth - 1 do
|
||||
begin
|
||||
r.Left := map.blockWidth * nx;
|
||||
r.Top := map.blockHeight * ny;
|
||||
r.Right := r.Left + map.blockWidth;
|
||||
r.Bottom := r.Top + map.blockHeight;
|
||||
|
||||
if (pos.x >= r.Left) and (pos.x <= r.Right) and (pos.y >= r.Top) and
|
||||
(pos.y <= r.Bottom) then
|
||||
begin
|
||||
// begin here
|
||||
|
||||
// mapKeyChar is n
|
||||
if (map.mapProperty[n] = map.mapKeyChar) then
|
||||
exit;
|
||||
|
||||
// mapSolidChar is n
|
||||
if (map.mapProperty[n] = map.mapSolidChar) then
|
||||
exit;
|
||||
|
||||
// mapKeyChar is on the left, move to n
|
||||
if (nx <> 0) then
|
||||
if (map.mapProperty[n - 1] = map.mapKeyChar) then
|
||||
begin
|
||||
map.mapProperty[n - 1] := map.mapProperty[n];
|
||||
map.mapProperty[n] := map.mapKeyChar;
|
||||
end;
|
||||
|
||||
// mapKeyChar is on the right, move to n
|
||||
if (nx <> map.mapWidth - 1) then
|
||||
if (map.mapProperty[n + 1] = map.mapKeyChar) then
|
||||
begin
|
||||
map.mapProperty[n + 1] := map.mapProperty[n];
|
||||
map.mapProperty[n] := map.mapKeyChar;
|
||||
end;
|
||||
|
||||
// mapKeyChar is on top, move to n
|
||||
if (map.mapProperty[n - map.mapWidth] = map.mapKeyChar) then
|
||||
begin
|
||||
map.mapProperty[n - map.mapWidth] := map.mapProperty[n];
|
||||
map.mapProperty[n] := map.mapKeyChar;
|
||||
end;
|
||||
|
||||
// mapKeyChar is on bottom, move to n
|
||||
if (map.mapProperty[n + map.mapWidth] = map.mapKeyChar) then
|
||||
begin
|
||||
map.mapProperty[n + map.mapWidth] := map.mapProperty[n];
|
||||
map.mapProperty[n] := map.mapKeyChar;
|
||||
end;
|
||||
|
||||
// end here
|
||||
Result := True;
|
||||
exit;
|
||||
end;
|
||||
|
||||
Inc(n);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure MouseDownMap(var map: TGameMap; pos: TPoint);
|
||||
begin
|
||||
map.mouseDown := true;
|
||||
map.mousePos := pointf(pos.x/map.blockWidth-0.5,pos.y/map.blockHeight-0.5);
|
||||
end;
|
||||
|
||||
procedure MouseUpMap(var map: TGameMap; pos: TPoint);
|
||||
begin
|
||||
map.mouseDown := false;
|
||||
map.mousePos := pointf(pos.x/map.blockWidth-0.5,pos.y/map.blockHeight-0.5);
|
||||
end;
|
||||
|
||||
function GetGameKey(var Key: word; invertLR, invertUD: boolean): TGameKey;
|
||||
begin
|
||||
if (Key = L1) or (Key = L2) then
|
||||
Result := gkLeft;
|
||||
if (Key = R1) or (Key = R2) then
|
||||
Result := gkRight;
|
||||
if (Key = U1) or (Key = U2) then
|
||||
Result := gkUp;
|
||||
if (Key = D1) or (Key = D2) then
|
||||
Result := gkDown;
|
||||
|
||||
if invertLR then
|
||||
case Result of
|
||||
gkLeft: Result := gkRight;
|
||||
gkRight: Result := gkLeft;
|
||||
end;
|
||||
|
||||
if invertUD then
|
||||
case Result of
|
||||
gkUp: Result := gkDown;
|
||||
gkDown: Result := gkUp;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure KeyDownMap(var map: TGameMap; var Key: word);
|
||||
begin
|
||||
map.mapKeysDown := map.mapKeysDown + [GetGameKey(Key,false,false)];
|
||||
end;
|
||||
|
||||
procedure KeyUpMap(var map: TGameMap; var Key: word);
|
||||
begin
|
||||
map.mapKeysDown := map.mapKeysDown - [GetGameKey(Key,false,false)];
|
||||
end;
|
||||
|
||||
function KeyPressMapCell(var map: TGameMap; Key: TGameKey): boolean;
|
||||
var
|
||||
n, nx, ny: integer;
|
||||
begin
|
||||
Result := False;
|
||||
n := 1;
|
||||
for ny := 0 to map.mapHeight - 1 do
|
||||
begin
|
||||
for nx := 0 to map.mapWidth - 1 do
|
||||
begin
|
||||
if map.mapProperty[n] = map.mapKeyChar then
|
||||
begin
|
||||
|
||||
// begin here
|
||||
|
||||
case Key of
|
||||
gkLeft:
|
||||
if (nx <> 0) and (map.mapProperty[n - 1] <> map.mapSolidChar) then
|
||||
begin
|
||||
map.mapProperty[n] := map.mapProperty[n - 1];
|
||||
map.mapProperty[n - 1] := map.mapKeyChar;
|
||||
Result := True;
|
||||
end;
|
||||
|
||||
gkRight:
|
||||
if (nx <> map.mapWidth - 1) and (map.mapProperty[n + 1] <>
|
||||
map.mapSolidChar) then
|
||||
begin
|
||||
map.mapProperty[n] := map.mapProperty[n + 1];
|
||||
map.mapProperty[n + 1] := map.mapKeyChar;
|
||||
Result := True;
|
||||
end;
|
||||
|
||||
gkUp:
|
||||
if (ny <> 0) and (map.mapProperty[n - map.mapWidth] <> map.mapSolidChar) then
|
||||
begin
|
||||
map.mapProperty[n] := map.mapProperty[n - map.mapWidth];
|
||||
map.mapProperty[n - map.mapWidth] := map.mapKeyChar;
|
||||
Result := True;
|
||||
end;
|
||||
|
||||
gkDown:
|
||||
if (ny <> map.mapHeight - 1) and
|
||||
(map.mapProperty[n + map.mapHeight] <> map.mapSolidChar) then
|
||||
begin
|
||||
map.mapProperty[n] := map.mapProperty[n + map.mapWidth];
|
||||
map.mapProperty[n + map.mapWidth] := map.mapKeyChar;
|
||||
Result := True;
|
||||
end;
|
||||
end;
|
||||
|
||||
// end here
|
||||
|
||||
if Result then
|
||||
exit;
|
||||
|
||||
end;
|
||||
Inc(n);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
function KeyPressMapCell(var map: TGameMap; var Key: word): boolean;
|
||||
begin
|
||||
Result := KeyPressMapCell(map, GetGameKey(Key, False, False));
|
||||
if result then Key := 0;
|
||||
end;
|
||||
|
||||
function IsMapSolved(var map: TGameMap): boolean;
|
||||
begin
|
||||
Result := map.mapProperty = map.mapSolve;
|
||||
end;
|
||||
|
||||
procedure ToggleFullScreen(Form: TForm; ARect: TRect);
|
||||
begin
|
||||
Form.SetBounds(ARect.Left, ARect.Top, ARect.Right, ARect.Bottom);
|
||||
if Form.BorderStyle <> bsNone then
|
||||
begin
|
||||
Form.BorderStyle := bsNone;
|
||||
Form.WindowState := wsMaximized;
|
||||
end
|
||||
else
|
||||
begin
|
||||
Form.BorderStyle := bsSizeable;
|
||||
Form.WindowState := wsMaximized;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure CenterControl(Control: TControl);
|
||||
begin
|
||||
if not Control.HasParent then
|
||||
Exit;
|
||||
Control.SetBounds(
|
||||
Round((Control.Parent.Width - Control.Width) div 2),
|
||||
Round((Control.Parent.Height - Control.Height) div 2),
|
||||
Control.Width, Control.Height);
|
||||
end;
|
||||
|
||||
function CalculateAspectRatioH(const W1, H1, W2: integer): integer;
|
||||
begin
|
||||
Result := Round(H1 / W1 * W2);
|
||||
end;
|
||||
|
||||
function CalculateAspectRatioW(const W1, H1, H2: integer): integer;
|
||||
begin
|
||||
Result := Round(W1 / H1 * H2);
|
||||
end;
|
||||
|
||||
function CalculateDestRect(ImageW, ImageH, DestW, DestH: integer;
|
||||
Stretch, Proportional, Center: boolean): TRect;
|
||||
var
|
||||
w: integer;
|
||||
h: integer;
|
||||
begin
|
||||
// Stretch or Proportional when Image (Width or Height) is bigger than Destination
|
||||
if Stretch or (Proportional and ((ImageW > DestW) or (ImageH > DestH))) then
|
||||
begin
|
||||
// Proportional when Image (Width or Height) is bigger than 0
|
||||
if Proportional and (ImageW > 0) and (ImageH > 0) then
|
||||
begin
|
||||
w := DestW;
|
||||
h := CalculateAspectRatioH(ImageW, ImageH, DestW);
|
||||
if h > DestH then
|
||||
begin
|
||||
h := DestH;
|
||||
w := CalculateAspectRatioW(ImageW, ImageH, DestH);
|
||||
end;
|
||||
ImageW := w;
|
||||
ImageH := h;
|
||||
end
|
||||
// Stretch not Proportional or when Image (Width or Height) is 0
|
||||
else
|
||||
begin
|
||||
ImageW := DestW;
|
||||
ImageH := DestH;
|
||||
end;
|
||||
end;
|
||||
|
||||
Result := Rect(0, 0, ImageW, ImageH);
|
||||
|
||||
// Center: Destination (Width or Height) - Image divided by 2
|
||||
if Center then
|
||||
begin
|
||||
Result.Left := Round((DestW - ImageW) div 2);
|
||||
Result.Top := Round((DestH - ImageH) div 2);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure HighDPI(FromDPI: integer);
|
||||
var
|
||||
i: integer;
|
||||
begin
|
||||
if Screen.PixelsPerInch = FromDPI then
|
||||
exit;
|
||||
|
||||
for i := 0 to Screen.FormCount - 1 do
|
||||
ScaleDPI(Screen.Forms[i], FromDPI);
|
||||
end;
|
||||
|
||||
procedure ScaleDPI(Control: TControl; FromDPI: integer);
|
||||
var
|
||||
i: integer;
|
||||
WinControl: TWinControl;
|
||||
begin
|
||||
if Screen.PixelsPerInch = FromDPI then
|
||||
exit;
|
||||
|
||||
with Control do
|
||||
begin
|
||||
Left := ScaleX(Left, FromDPI);
|
||||
Top := ScaleY(Top, FromDPI);
|
||||
Width := ScaleX(Width, FromDPI);
|
||||
Height := ScaleY(Height, FromDPI);
|
||||
end;
|
||||
|
||||
if Control is TWinControl then
|
||||
begin
|
||||
WinControl := TWinControl(Control);
|
||||
if WinControl.ControlCount = 0 then
|
||||
exit;
|
||||
|
||||
with WinControl.ChildSizing do
|
||||
begin
|
||||
HorizontalSpacing := ScaleX(HorizontalSpacing, FromDPI);
|
||||
LeftRightSpacing := ScaleX(LeftRightSpacing, FromDPI);
|
||||
TopBottomSpacing := ScaleY(TopBottomSpacing, FromDPI);
|
||||
VerticalSpacing := ScaleY(VerticalSpacing, FromDPI);
|
||||
end;
|
||||
|
||||
for i := 0 to WinControl.ControlCount - 1 do
|
||||
ScaleDPI(WinControl.Controls[i], FromDPI);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure ScaleAspectRatio(Control: TControl; OriginalParentW, OriginalParentH: integer);
|
||||
var
|
||||
l, t, w, h: integer;
|
||||
begin
|
||||
l := MulDiv(Control.Left, Control.Parent.Width, OriginalParentW);
|
||||
t := MulDiv(Control.Top, Control.Parent.Height, OriginalParentH);
|
||||
w := MulDiv(Control.Width, Control.Parent.Width, OriginalParentW);
|
||||
h := MulDiv(Control.Height, Control.Parent.Height, OriginalParentH);
|
||||
Control.SetBounds(l, t, w, h);
|
||||
end;
|
||||
|
||||
procedure ScaleAspectRatio(Control: TControl; DestW, DestH: integer;
|
||||
Stretch, Proportional, Center: boolean);
|
||||
var
|
||||
i: integer;
|
||||
r: TRect;
|
||||
WinControl: TWinControl;
|
||||
w, h: integer;
|
||||
begin
|
||||
if Control is TWinControl then
|
||||
begin
|
||||
WinControl := TWinControl(Control);
|
||||
w := WinControl.Width;
|
||||
h := WinControl.Height;
|
||||
|
||||
r := CalculateDestRect(WinControl.Width, WinControl.Height, DestW,
|
||||
DestH, Stretch, Proportional, Center);
|
||||
WinControl.SetBounds(r.Left, r.Top, r.Right, r.Bottom);
|
||||
|
||||
if WinControl.ControlCount = 0 then
|
||||
exit;
|
||||
|
||||
for i := 0 to WinControl.ControlCount - 1 do
|
||||
ScaleAspectRatio(WinControl.Controls[i], w, h);
|
||||
end;
|
||||
end;
|
||||
|
||||
end.
|
144
bgracontrols/test/test_extra/game_maze/testbgragame.lpi
Normal file
144
bgracontrols/test/test_extra/game_maze/testbgragame.lpi
Normal file
@@ -0,0 +1,144 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="12"/>
|
||||
<PathDelim Value="\"/>
|
||||
<General>
|
||||
<Flags>
|
||||
<CompatibilityMode Value="True"/>
|
||||
</Flags>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<Title Value="testbgragame"/>
|
||||
<ResourceType Value="res"/>
|
||||
<UseXPManifest Value="True"/>
|
||||
<XPManifest>
|
||||
<DpiAware Value="True"/>
|
||||
</XPManifest>
|
||||
</General>
|
||||
<i18n>
|
||||
<EnableI18N LFM="False"/>
|
||||
</i18n>
|
||||
<BuildModes Count="2">
|
||||
<Item1 Name="Debug" Default="True"/>
|
||||
<Item2 Name="Release">
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="testbgragame"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<CodeGeneration>
|
||||
<SmartLinkUnit Value="True"/>
|
||||
<Optimizations>
|
||||
<OptimizationLevel Value="3"/>
|
||||
<VariablesInRegisters Value="True"/>
|
||||
</Optimizations>
|
||||
</CodeGeneration>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<GenerateDebugInfo Value="False"/>
|
||||
<StripSymbols Value="True"/>
|
||||
</Debugging>
|
||||
<LinkSmart Value="True"/>
|
||||
<Options>
|
||||
<Win32>
|
||||
<GraphicApplication Value="True"/>
|
||||
</Win32>
|
||||
</Options>
|
||||
</Linking>
|
||||
</CompilerOptions>
|
||||
</Item2>
|
||||
</BuildModes>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<FormatVersion Value="2"/>
|
||||
<Modes Count="1">
|
||||
<Mode0 Name="default"/>
|
||||
</Modes>
|
||||
</RunParams>
|
||||
<RequiredPackages Count="2">
|
||||
<Item1>
|
||||
<PackageName Value="bgracontrols"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<PackageName Value="LCL"/>
|
||||
</Item2>
|
||||
</RequiredPackages>
|
||||
<Units Count="3">
|
||||
<Unit0>
|
||||
<Filename Value="testbgragame.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit0>
|
||||
<Unit1>
|
||||
<Filename Value="utestbgragame.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<ComponentName Value="Form1"/>
|
||||
<HasResources Value="True"/>
|
||||
<ResourceBaseClass Value="Form"/>
|
||||
</Unit1>
|
||||
<Unit2>
|
||||
<Filename Value="bgragame.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit2>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="testbgragame"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<Parsing>
|
||||
<SyntaxOptions>
|
||||
<IncludeAssertionCode Value="True"/>
|
||||
</SyntaxOptions>
|
||||
</Parsing>
|
||||
<CodeGeneration>
|
||||
<Checks>
|
||||
<IOChecks Value="True"/>
|
||||
<RangeChecks Value="True"/>
|
||||
<OverflowChecks Value="True"/>
|
||||
<StackChecks Value="True"/>
|
||||
</Checks>
|
||||
<Optimizations>
|
||||
<VariablesInRegisters Value="True"/>
|
||||
</Optimizations>
|
||||
</CodeGeneration>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<DebugInfoType Value="dsDwarf2Set"/>
|
||||
<UseHeaptrc Value="True"/>
|
||||
<StripSymbols Value="True"/>
|
||||
<UseExternalDbgSyms Value="True"/>
|
||||
</Debugging>
|
||||
<Options>
|
||||
<Win32>
|
||||
<GraphicApplication Value="True"/>
|
||||
</Win32>
|
||||
</Options>
|
||||
</Linking>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
<Exceptions Count="3">
|
||||
<Item1>
|
||||
<Name Value="EAbort"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<Name Value="ECodetoolError"/>
|
||||
</Item2>
|
||||
<Item3>
|
||||
<Name Value="EFOpenError"/>
|
||||
</Item3>
|
||||
</Exceptions>
|
||||
</Debugging>
|
||||
</CONFIG>
|
21
bgracontrols/test/test_extra/game_maze/testbgragame.lpr
Normal file
21
bgracontrols/test/test_extra/game_maze/testbgragame.lpr
Normal file
@@ -0,0 +1,21 @@
|
||||
program testbgragame;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
uses
|
||||
{$IFDEF UNIX}{$IFDEF UseCThreads}
|
||||
cthreads,
|
||||
{$ENDIF}{$ENDIF}
|
||||
Interfaces, // this includes the LCL widgetset
|
||||
Forms, utestbgragame, bgragame
|
||||
{ you can add units after this };
|
||||
|
||||
{$R *.res}
|
||||
|
||||
begin
|
||||
RequireDerivedFormResource := True;
|
||||
Application.Initialize;
|
||||
Application.CreateForm(TForm1, Form1);
|
||||
Application.Run;
|
||||
end.
|
||||
|
35
bgracontrols/test/test_extra/game_maze/utestbgragame.lfm
Normal file
35
bgracontrols/test/test_extra/game_maze/utestbgragame.lfm
Normal file
@@ -0,0 +1,35 @@
|
||||
object Form1: TForm1
|
||||
Left = 328
|
||||
Height = 480
|
||||
Top = 135
|
||||
Width = 640
|
||||
ClientHeight = 480
|
||||
ClientWidth = 640
|
||||
Color = clBlack
|
||||
OnCreate = FormCreate
|
||||
OnDestroy = FormDestroy
|
||||
OnKeyDown = FormKeyDown
|
||||
OnKeyUp = FormKeyUp
|
||||
OnResize = FormResize
|
||||
LCLVersion = '1.0.1.3'
|
||||
object BGRAVirtualScreen1: TBGRAVirtualScreen
|
||||
Left = 0
|
||||
Height = 480
|
||||
Top = 0
|
||||
Width = 640
|
||||
OnRedraw = BGRAVirtualScreen1Redraw
|
||||
Alignment = taLeftJustify
|
||||
Color = clWhite
|
||||
ParentColor = False
|
||||
TabOrder = 0
|
||||
OnMouseDown = BGRAVirtualScreen1MouseDown
|
||||
OnMouseMove = BGRAVirtualScreen1MouseMove
|
||||
OnMouseUp = BGRAVirtualScreen1MouseUp
|
||||
end
|
||||
object Timer2: TTimer
|
||||
Interval = 200
|
||||
OnTimer = Timer2Timer
|
||||
left = 24
|
||||
top = 8
|
||||
end
|
||||
end
|
155
bgracontrols/test/test_extra/game_maze/utestbgragame.pas
Normal file
155
bgracontrols/test/test_extra/game_maze/utestbgragame.pas
Normal file
@@ -0,0 +1,155 @@
|
||||
unit utestbgragame;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, Forms, Controls, LCLType, ExtCtrls, BGRAVirtualScreen, BGRABitmap,
|
||||
BGRABitmapTypes, Dialogs, bgragame;
|
||||
|
||||
type
|
||||
|
||||
{ TForm1 }
|
||||
|
||||
TForm1 = class(TForm)
|
||||
BGRAVirtualScreen1: TBGRAVirtualScreen;
|
||||
Timer2: TTimer;
|
||||
procedure BGRAVirtualScreen1MouseDown(Sender: TObject;
|
||||
Button: TMouseButton; {%H-}Shift: TShiftState; X, Y: integer);
|
||||
procedure BGRAVirtualScreen1MouseMove(Sender: TObject; Shift: TShiftState;
|
||||
X, Y: integer);
|
||||
procedure BGRAVirtualScreen1MouseUp(Sender: TObject; Button: TMouseButton;
|
||||
{%H-}Shift: TShiftState; X, Y: Integer);
|
||||
procedure BGRAVirtualScreen1Redraw(Sender: TObject; Bitmap: TBGRABitmap);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure FormDestroy(Sender: TObject);
|
||||
procedure FormKeyDown(Sender: TObject; var Key: word; {%H-}Shift: TShiftState);
|
||||
procedure FormKeyUp(Sender: TObject; var Key: Word; {%H-}Shift: TShiftState);
|
||||
procedure FormResize(Sender: TObject);
|
||||
procedure Timer2Timer(Sender: TObject);
|
||||
private
|
||||
{ private declarations }
|
||||
procedure UpdateVirtualScreen;
|
||||
public
|
||||
{ public declarations }
|
||||
level1: TGameMap;
|
||||
size: TRect;
|
||||
end;
|
||||
|
||||
var
|
||||
Form1: TForm1;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.lfm}
|
||||
|
||||
{ TForm1 }
|
||||
|
||||
procedure TForm1.BGRAVirtualScreen1Redraw(Sender: TObject; Bitmap: TBGRABitmap);
|
||||
begin
|
||||
DrawMap(level1, bitmap, True);
|
||||
end;
|
||||
|
||||
procedure TForm1.FormCreate(Sender: TObject);
|
||||
begin
|
||||
Size := Rect(0, 0, 640, 480);
|
||||
ToggleFullScreen(Self, Size);
|
||||
|
||||
level1.mapWidth := 20;
|
||||
level1.mapHeight := 20;
|
||||
level1.mapGraphics :=
|
||||
'000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000X000000000000000000000000000000000000000000000000000000000000000000000000000000';
|
||||
level1.mapProperty :=
|
||||
'2222222222222222222220002020220200022022212022000020020000022020202022002202202220200000200202020002200202200020000220222200220022002020200220200020202220020022202022002002020002022200200000200022000220020200220020002022202220202002202000222000000020200020220222220222002020200002202020200200220220222200002020220000002220202020020222220002202020022000020002022000220000020002000222222222222222222222';
|
||||
level1.mapSolve :=
|
||||
'2222222222222222222220002020220200022022202022000020020000022020202022002202202220200000200202020002200202200020000220222200220022002020200220200020202220020022202022002002020002022200200000200022000220020200220020002022202220202002202000222000000020200020220222220222002020200002202020200200220220222200002020220000002221202020020222220002202020022000020002022000220000020002000222222222222222222222';
|
||||
level1.mapKeyChar := '1'; // Player
|
||||
level1.mapSolidChar := '2'; // Wall
|
||||
level1.ballPositionDefined := false;
|
||||
//see FormResize
|
||||
|
||||
Timer2.Interval:= 16;
|
||||
end;
|
||||
|
||||
procedure TForm1.FormDestroy(Sender: TObject);
|
||||
begin
|
||||
level1.background.Free;
|
||||
level1.ballSphereMap.free;
|
||||
end;
|
||||
|
||||
procedure TForm1.FormKeyDown(Sender: TObject; var Key: word; Shift: TShiftState);
|
||||
begin
|
||||
if (Key = VK_ESCAPE) then
|
||||
Application.Terminate;
|
||||
|
||||
if (Key = VK_F11) then
|
||||
ToggleFullScreen(Self, Size);
|
||||
|
||||
KeyDownMap(level1, Key);
|
||||
end;
|
||||
|
||||
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||||
begin
|
||||
KeyUpMap(level1, Key);
|
||||
end;
|
||||
|
||||
procedure TForm1.FormResize(Sender: TObject);
|
||||
begin
|
||||
Size := Rect(0, 0, Width, Height);
|
||||
ScaleAspectRatio(BGRAVirtualScreen1, Size.Right, Size.Bottom, True, True, True);
|
||||
|
||||
// this has scaling
|
||||
level1.blockWidth := BGRAVirtualScreen1.Width div level1.mapWidth;
|
||||
level1.blockHeight := BGRAVirtualScreen1.Height div level1.mapHeight;
|
||||
|
||||
// this has scaling
|
||||
level1.background.Free;
|
||||
level1.background := TBGRABitmap.Create('background.jpg');
|
||||
BGRAReplace(level1.background, level1.background.Resample(BGRAVirtualScreen1.Width, BGRAVirtualScreen1.Height));
|
||||
end;
|
||||
|
||||
procedure TForm1.Timer2Timer(Sender: TObject);
|
||||
begin
|
||||
Timer2.Enabled:= false;
|
||||
UpdateVirtualScreen;
|
||||
if IsMapSolved(level1) then
|
||||
begin
|
||||
Timer2.Enabled := False;
|
||||
ShowMessage('Win!');
|
||||
Application.Terminate;
|
||||
end;
|
||||
Timer2.Enabled:= true;
|
||||
end;
|
||||
|
||||
procedure TForm1.UpdateVirtualScreen;
|
||||
begin
|
||||
if Assigned(BGRAVirtualScreen1.Bitmap) then
|
||||
begin
|
||||
DrawMap(level1, BGRAVirtualScreen1.bitmap, false);
|
||||
BGRAVirtualScreen1.Invalidate;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TForm1.BGRAVirtualScreen1MouseDown(Sender: TObject;
|
||||
Button: TMouseButton; Shift: TShiftState; X, Y: integer);
|
||||
begin
|
||||
if Button = mbLeft then
|
||||
MouseDownMap(level1, Point(x, y));
|
||||
end;
|
||||
|
||||
procedure TForm1.BGRAVirtualScreen1MouseMove(Sender: TObject;
|
||||
Shift: TShiftState; X, Y: integer);
|
||||
begin
|
||||
if ssLeft in shift then
|
||||
MouseDownMap(level1, Point(x, y));
|
||||
end;
|
||||
|
||||
procedure TForm1.BGRAVirtualScreen1MouseUp(Sender: TObject;
|
||||
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
||||
begin
|
||||
if Button = mbLeft then
|
||||
MouseUpMap(level1, Point(x, y));
|
||||
end;
|
||||
|
||||
end.
|
143
bgracontrols/test/test_extra/game_puzzle/maparray.lpi
Normal file
143
bgracontrols/test/test_extra/game_puzzle/maparray.lpi
Normal file
@@ -0,0 +1,143 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="12"/>
|
||||
<PathDelim Value="\"/>
|
||||
<General>
|
||||
<Flags>
|
||||
<CompatibilityMode Value="True"/>
|
||||
</Flags>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<Title Value="Puzzle!"/>
|
||||
<ResourceType Value="res"/>
|
||||
<UseXPManifest Value="True"/>
|
||||
<XPManifest>
|
||||
<DpiAware Value="True"/>
|
||||
</XPManifest>
|
||||
</General>
|
||||
<i18n>
|
||||
<EnableI18N LFM="False"/>
|
||||
</i18n>
|
||||
<BuildModes Count="2">
|
||||
<Item1 Name="Debug" Default="True"/>
|
||||
<Item2 Name="Release">
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="puzzle"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<CodeGeneration>
|
||||
<SmartLinkUnit Value="True"/>
|
||||
<Optimizations>
|
||||
<OptimizationLevel Value="3"/>
|
||||
</Optimizations>
|
||||
</CodeGeneration>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<GenerateDebugInfo Value="False"/>
|
||||
</Debugging>
|
||||
<LinkSmart Value="True"/>
|
||||
<Options>
|
||||
<Win32>
|
||||
<GraphicApplication Value="True"/>
|
||||
</Win32>
|
||||
</Options>
|
||||
</Linking>
|
||||
</CompilerOptions>
|
||||
</Item2>
|
||||
</BuildModes>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<FormatVersion Value="2"/>
|
||||
<Modes Count="1">
|
||||
<Mode0 Name="default"/>
|
||||
</Modes>
|
||||
</RunParams>
|
||||
<RequiredPackages Count="2">
|
||||
<Item1>
|
||||
<PackageName Value="bgracontrols"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<PackageName Value="LCL"/>
|
||||
</Item2>
|
||||
</RequiredPackages>
|
||||
<Units Count="4">
|
||||
<Unit0>
|
||||
<Filename Value="maparray.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit0>
|
||||
<Unit1>
|
||||
<Filename Value="unit1.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<ComponentName Value="Form1"/>
|
||||
<HasResources Value="True"/>
|
||||
<ResourceBaseClass Value="Form"/>
|
||||
<UnitName Value="Unit1"/>
|
||||
</Unit1>
|
||||
<Unit2>
|
||||
<Filename Value="ugraph.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit2>
|
||||
<Unit3>
|
||||
<Filename Value="ugame.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit3>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="puzzle"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<Parsing>
|
||||
<SyntaxOptions>
|
||||
<IncludeAssertionCode Value="True"/>
|
||||
</SyntaxOptions>
|
||||
</Parsing>
|
||||
<CodeGeneration>
|
||||
<Checks>
|
||||
<IOChecks Value="True"/>
|
||||
<RangeChecks Value="True"/>
|
||||
<OverflowChecks Value="True"/>
|
||||
<StackChecks Value="True"/>
|
||||
</Checks>
|
||||
</CodeGeneration>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<DebugInfoType Value="dsDwarf2Set"/>
|
||||
<UseHeaptrc Value="True"/>
|
||||
<UseExternalDbgSyms Value="True"/>
|
||||
</Debugging>
|
||||
<Options>
|
||||
<Win32>
|
||||
<GraphicApplication Value="True"/>
|
||||
</Win32>
|
||||
</Options>
|
||||
</Linking>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
<Exceptions Count="3">
|
||||
<Item1>
|
||||
<Name Value="EAbort"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<Name Value="ECodetoolError"/>
|
||||
</Item2>
|
||||
<Item3>
|
||||
<Name Value="EFOpenError"/>
|
||||
</Item3>
|
||||
</Exceptions>
|
||||
</Debugging>
|
||||
</CONFIG>
|
21
bgracontrols/test/test_extra/game_puzzle/maparray.lpr
Normal file
21
bgracontrols/test/test_extra/game_puzzle/maparray.lpr
Normal file
@@ -0,0 +1,21 @@
|
||||
program maparray;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
uses
|
||||
{$IFDEF UNIX}{$IFDEF UseCThreads}
|
||||
cthreads,
|
||||
{$ENDIF}{$ENDIF}
|
||||
Interfaces, // this includes the LCL widgetset
|
||||
Forms, Unit1, ugraph, ugame;
|
||||
|
||||
{$R *.res}
|
||||
|
||||
begin
|
||||
Application.Title:='Puzzle!';
|
||||
RequireDerivedFormResource := True;
|
||||
Application.Initialize;
|
||||
Application.CreateForm(TForm1, Form1);
|
||||
Application.Run;
|
||||
end.
|
||||
|
BIN
bgracontrols/test/test_extra/game_puzzle/move.wav
Normal file
BIN
bgracontrols/test/test_extra/game_puzzle/move.wav
Normal file
Binary file not shown.
218
bgracontrols/test/test_extra/game_puzzle/ugame.pas
Normal file
218
bgracontrols/test/test_extra/game_puzzle/ugame.pas
Normal file
@@ -0,0 +1,218 @@
|
||||
unit ugame;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
{$IFDEF WINDOWS}Windows,{$ENDIF} Classes, SysUtils, Forms, Graphics, Controls, LCLType;
|
||||
|
||||
procedure ToggleFullScreen(Form: TForm; ARect: TRect);
|
||||
procedure CenterControl(Control: TControl);
|
||||
function CalculateAspectRatioH(const W1, H1, W2: integer): integer; //result H2
|
||||
function CalculateAspectRatioW(const W1, H1, H2: integer): integer; //result W2
|
||||
function CalculateDestRect(ImageW, ImageH, DestW, DestH: integer;
|
||||
Stretch, Proportional, Center: boolean): TRect;
|
||||
procedure HighDPI(FromDPI: integer);
|
||||
procedure ScaleDPI(Control: TControl; FromDPI: integer);
|
||||
procedure ScaleAspectRatio(Control: TControl; OriginalParentW, OriginalParentH: integer);
|
||||
procedure ScaleAspectRatio(Control: TControl; DestW, DestH: integer;
|
||||
Stretch, Proportional, Center: boolean);
|
||||
{$IFDEF WINDOWS}
|
||||
procedure SetScreenResolution(
|
||||
const Width, Height: integer); overload;
|
||||
procedure SetScreenResolution(const Width, Height, colorDepth: integer); overload;
|
||||
{$ENDIF}
|
||||
|
||||
implementation
|
||||
|
||||
procedure ToggleFullScreen(Form: TForm; ARect: TRect);
|
||||
begin
|
||||
Form.SetBounds(ARect.Left, ARect.Top, ARect.Right, ARect.Bottom);
|
||||
if Form.BorderStyle <> bsNone then
|
||||
begin
|
||||
Form.BorderStyle := bsNone;
|
||||
Form.WindowState := wsMaximized;
|
||||
end
|
||||
else
|
||||
begin
|
||||
Form.BorderStyle := bsDialog;
|
||||
Form.WindowState := wsNormal;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure CenterControl(Control: TControl);
|
||||
begin
|
||||
if not Control.HasParent then
|
||||
Exit;
|
||||
Control.SetBounds(
|
||||
Round((Control.Parent.Width - Control.Width) div 2),
|
||||
Round((Control.Parent.Height - Control.Height) div 2),
|
||||
Control.Width, Control.Height);
|
||||
end;
|
||||
|
||||
function CalculateAspectRatioH(const W1, H1, W2: integer): integer;
|
||||
begin
|
||||
Result := Round(H1 / W1 * W2);
|
||||
end;
|
||||
|
||||
function CalculateAspectRatioW(const W1, H1, H2: integer): integer;
|
||||
begin
|
||||
Result := Round(W1 / H1 * H2);
|
||||
end;
|
||||
|
||||
function CalculateDestRect(ImageW, ImageH, DestW, DestH: integer;
|
||||
Stretch, Proportional, Center: boolean): TRect;
|
||||
var
|
||||
w: integer;
|
||||
h: integer;
|
||||
begin
|
||||
// Stretch or Proportional when Image (Width or Height) is bigger than Destination
|
||||
if Stretch or (Proportional and ((ImageW > DestW) or (ImageH > DestH))) then
|
||||
begin
|
||||
// Proportional when Image (Width or Height) is bigger than 0
|
||||
if Proportional and (ImageW > 0) and (ImageH > 0) then
|
||||
begin
|
||||
w := DestW;
|
||||
h := CalculateAspectRatioH(ImageW, ImageH, DestW);
|
||||
if h > DestH then
|
||||
begin
|
||||
h := DestH;
|
||||
w := CalculateAspectRatioW(ImageW, ImageH, DestH);
|
||||
end;
|
||||
ImageW := w;
|
||||
ImageH := h;
|
||||
end
|
||||
// Stretch not Proportional or when Image (Width or Height) is 0
|
||||
else
|
||||
begin
|
||||
ImageW := DestW;
|
||||
ImageH := DestH;
|
||||
end;
|
||||
end;
|
||||
|
||||
Result := Rect(0, 0, ImageW, ImageH);
|
||||
|
||||
// Center: Destination (Width or Height) - Image divided by 2
|
||||
if Center then
|
||||
begin
|
||||
Result.Left := Round((DestW - ImageW) div 2);
|
||||
Result.Top := Round((DestH - ImageH) div 2);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure HighDPI(FromDPI: integer);
|
||||
var
|
||||
i: integer;
|
||||
begin
|
||||
if Screen.PixelsPerInch = FromDPI then
|
||||
exit;
|
||||
|
||||
for i := 0 to Screen.FormCount - 1 do
|
||||
ScaleDPI(Screen.Forms[i], FromDPI);
|
||||
end;
|
||||
|
||||
procedure ScaleDPI(Control: TControl; FromDPI: integer);
|
||||
var
|
||||
i: integer;
|
||||
WinControl: TWinControl;
|
||||
begin
|
||||
if Screen.PixelsPerInch = FromDPI then
|
||||
exit;
|
||||
|
||||
with Control do
|
||||
begin
|
||||
Left := ScaleX(Left, FromDPI);
|
||||
Top := ScaleY(Top, FromDPI);
|
||||
Width := ScaleX(Width, FromDPI);
|
||||
Height := ScaleY(Height, FromDPI);
|
||||
end;
|
||||
|
||||
if Control is TWinControl then
|
||||
begin
|
||||
WinControl := TWinControl(Control);
|
||||
if WinControl.ControlCount = 0 then
|
||||
exit;
|
||||
|
||||
with WinControl.ChildSizing do
|
||||
begin
|
||||
HorizontalSpacing := ScaleX(HorizontalSpacing, FromDPI);
|
||||
LeftRightSpacing := ScaleX(LeftRightSpacing, FromDPI);
|
||||
TopBottomSpacing := ScaleY(TopBottomSpacing, FromDPI);
|
||||
VerticalSpacing := ScaleY(VerticalSpacing, FromDPI);
|
||||
end;
|
||||
|
||||
for i := 0 to WinControl.ControlCount - 1 do
|
||||
ScaleDPI(WinControl.Controls[i], FromDPI);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure ScaleAspectRatio(Control: TControl; OriginalParentW, OriginalParentH: integer);
|
||||
var
|
||||
l, t, w, h: integer;
|
||||
begin
|
||||
l := MulDiv(Control.Left, Control.Parent.Width, OriginalParentW);
|
||||
t := MulDiv(Control.Top, Control.Parent.Height, OriginalParentH);
|
||||
w := MulDiv(Control.Width, Control.Parent.Width, OriginalParentW);
|
||||
h := MulDiv(Control.Height, Control.Parent.Height, OriginalParentH);
|
||||
Control.SetBounds(l, t, w, h);
|
||||
end;
|
||||
|
||||
procedure ScaleAspectRatio(Control: TControl; DestW, DestH: integer;
|
||||
Stretch, Proportional, Center: boolean);
|
||||
var
|
||||
i: integer;
|
||||
r: TRect;
|
||||
WinControl: TWinControl;
|
||||
w, h: integer;
|
||||
begin
|
||||
if Control is TWinControl then
|
||||
begin
|
||||
WinControl := TWinControl(Control);
|
||||
w := WinControl.Width;
|
||||
h := WinControl.Height;
|
||||
|
||||
r := CalculateDestRect(WinControl.Width, WinControl.Height, DestW,
|
||||
DestH, Stretch, Proportional, Center);
|
||||
WinControl.SetBounds(r.Left, r.Top, r.Right, r.Bottom);
|
||||
|
||||
if WinControl.ControlCount = 0 then
|
||||
exit;
|
||||
|
||||
for i := 0 to WinControl.ControlCount - 1 do
|
||||
ScaleAspectRatio(WinControl.Controls[i], w, h);
|
||||
end;
|
||||
end;
|
||||
|
||||
{$IFDEF WINDOWS}
|
||||
procedure SetScreenResolution(
|
||||
const Width, Height: integer); overload;
|
||||
var
|
||||
mode: TDevMode;
|
||||
begin
|
||||
zeroMemory(@mode, sizeof(TDevMode));
|
||||
mode.dmSize := sizeof(TDevMode);
|
||||
mode.dmPelsWidth := Width;
|
||||
mode.dmPelsHeight := Height;
|
||||
mode.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT;
|
||||
ChangeDisplaySettings(mode, 0);
|
||||
end;
|
||||
|
||||
procedure SetScreenResolution(const Width, Height, colorDepth: integer); overload;
|
||||
var
|
||||
mode: TDevMode;
|
||||
begin
|
||||
zeroMemory(@mode, sizeof(TDevMode));
|
||||
mode.dmSize := sizeof(TDevMode);
|
||||
mode.dmPelsWidth := Width;
|
||||
mode.dmPelsHeight := Height;
|
||||
mode.dmBitsPerPel := colorDepth;
|
||||
mode.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT or DM_BITSPERPEL;
|
||||
ChangeDisplaySettings(mode, 0);
|
||||
end;
|
||||
|
||||
{$ENDIF}
|
||||
|
||||
end.
|
||||
|
||||
|
1235
bgracontrols/test/test_extra/game_puzzle/ugraph.pas
Normal file
1235
bgracontrols/test/test_extra/game_puzzle/ugraph.pas
Normal file
File diff suppressed because it is too large
Load Diff
35
bgracontrols/test/test_extra/game_puzzle/unit1.lfm
Normal file
35
bgracontrols/test/test_extra/game_puzzle/unit1.lfm
Normal file
@@ -0,0 +1,35 @@
|
||||
object Form1: TForm1
|
||||
Left = 342
|
||||
Height = 256
|
||||
Top = 166
|
||||
Width = 256
|
||||
BorderStyle = bsDialog
|
||||
Caption = 'Puzzle!'
|
||||
ClientHeight = 256
|
||||
ClientWidth = 256
|
||||
Color = clBlack
|
||||
OnCreate = FormCreate
|
||||
OnDestroy = FormDestroy
|
||||
OnKeyDown = FormKeyDown
|
||||
OnResize = FormResize
|
||||
Position = poDesktopCenter
|
||||
LCLVersion = '1.1'
|
||||
object BGRAVirtualScreen1: TBGRAVirtualScreen
|
||||
Left = 0
|
||||
Height = 256
|
||||
Top = 0
|
||||
Width = 256
|
||||
OnRedraw = BGRAVirtualScreen1Redraw
|
||||
Alignment = taLeftJustify
|
||||
Color = clBlack
|
||||
ParentColor = False
|
||||
TabOrder = 0
|
||||
OnClick = BGRAVirtualScreen1Click
|
||||
end
|
||||
object Timer1: TTimer
|
||||
Interval = 100
|
||||
OnTimer = Timer1Timer
|
||||
left = 44
|
||||
top = 34
|
||||
end
|
||||
end
|
734
bgracontrols/test/test_extra/game_puzzle/unit1.pas
Normal file
734
bgracontrols/test/test_extra/game_puzzle/unit1.pas
Normal file
@@ -0,0 +1,734 @@
|
||||
{ Puzzle! is a puzzle game using BGRABitmap
|
||||
|
||||
originally written in 2012 by lainz http://sourceforge.net/users/lainz
|
||||
|
||||
Thanks to circular and eny from the Lazarus forum for their contributions.
|
||||
|
||||
This library is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU Library General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public License
|
||||
along with this library; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
}
|
||||
unit Unit1;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, Forms, Controls, Graphics, Dialogs,
|
||||
BGRAVirtualScreen, BGRABitmap, BGRABitmapTypes, ugame, LCLType,
|
||||
ExtCtrls{$IFDEF WINDOWS},
|
||||
mmsystem{$ENDIF};
|
||||
|
||||
const
|
||||
// controls
|
||||
L1 = VK_LEFT;
|
||||
R1 = VK_RIGHT;
|
||||
U1 = VK_UP;
|
||||
D1 = VK_DOWN;
|
||||
L2 = VK_A;
|
||||
R2 = VK_D;
|
||||
U2 = VK_W;
|
||||
D2 = VK_S;
|
||||
|
||||
type
|
||||
TArrayOfString = array of string;
|
||||
|
||||
TGameKey = (gkLeft, gkUp, gkRight, gkDown);
|
||||
|
||||
PGameMap = ^TGameMap;
|
||||
|
||||
TGameMap = record
|
||||
map, solve: string;
|
||||
mapW: integer;
|
||||
mapH: integer;
|
||||
blockW: integer;
|
||||
blockH: integer;
|
||||
background: TBGRABitmap;
|
||||
end;
|
||||
|
||||
var
|
||||
Game: array [1..12] of TGameMap;
|
||||
GameOver: TGameMap = (map: 'Game-Over'; solve: 'GameOver-'; mapW: 3;
|
||||
mapH: 3; blockW: 85; blockH: 85; background: nil);
|
||||
|
||||
procedure DrawMap(var map: TGameMap; bitmap: TBGRABitmap; texture: TBGRABitmap);
|
||||
function ClickMap(var map: TGameMap; pos: TPoint): boolean;
|
||||
function KeyPressMap(var map: TGameMap; var Key: word): boolean;
|
||||
function IsMapSolved(var map: TGameMap): boolean;
|
||||
|
||||
function CalcularPosibles(str: string; showDebug: boolean = False): TarrayOfString;
|
||||
|
||||
type
|
||||
|
||||
{ TForm1 }
|
||||
|
||||
TForm1 = class(TForm)
|
||||
BGRAVirtualScreen1: TBGRAVirtualScreen;
|
||||
Timer1: TTimer;
|
||||
procedure BGRAVirtualScreen1Click(Sender: TObject);
|
||||
procedure BGRAVirtualScreen1Redraw(Sender: TObject; Bitmap: TBGRABitmap);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure FormDestroy(Sender: TObject);
|
||||
procedure FormKeyDown(Sender: TObject; var Key: word; Shift: TShiftState);
|
||||
procedure FormResize(Sender: TObject);
|
||||
procedure Timer1Timer(Sender: TObject);
|
||||
private
|
||||
{ private declarations }
|
||||
public
|
||||
{ public declarations }
|
||||
Size: TRect;
|
||||
map: PGameMap;
|
||||
current: integer;
|
||||
texture: TBGRABitmap;
|
||||
procedure OpenMap(num: integer);
|
||||
procedure CloseMap;
|
||||
procedure ScaleBlocks;
|
||||
procedure GenerateTexture;
|
||||
procedure PlayBlockSound;
|
||||
end;
|
||||
|
||||
var
|
||||
Form1: TForm1;
|
||||
|
||||
implementation
|
||||
|
||||
uses BGRAGradients, ugraph;
|
||||
|
||||
{ DRAWMAP }
|
||||
|
||||
procedure DrawMap(var map: TGameMap; bitmap: TBGRABitmap; texture: TBGRABitmap);
|
||||
var
|
||||
r: TRect;
|
||||
n, n1, n2: integer;
|
||||
phong: TPhongShading;
|
||||
tile3D, empty3D: TBGRABitmap;
|
||||
h: integer;
|
||||
begin
|
||||
if (bitmap = nil) or (texture = nil) then
|
||||
exit;
|
||||
phong := TPhongShading.Create;
|
||||
|
||||
if map.background = nil then
|
||||
begin
|
||||
map.background := TBGRABitmap.Create(map.BlockW * map.mapW, map.BlockH * map.mapH);
|
||||
empty3D := TBGRABitmap.Create(texture.Width, texture.Height, BGRABlack);
|
||||
for n1 := 1 to (map.background.Width + texture.Width - 1) div texture.Width do
|
||||
for n2 := 1 to (map.background.Height + texture.Height - 1) div texture.Height do
|
||||
phong.Draw(map.background, empty3D, 0, (n1 - 1) * texture.Width,
|
||||
(n2 - 1) * texture.Height, texture);
|
||||
empty3D.Free;
|
||||
end;
|
||||
h := (map.blockW + map.blockH) div 16;
|
||||
tile3D := CreateRectanglePreciseMap(map.BlockW, map.BlockH, h, []);
|
||||
|
||||
bitmap.PutImage(0, 0, map.background, dmDrawWithTransparency);
|
||||
n1 := 0;
|
||||
n2 := 0;
|
||||
for n := 1 to length(map.map) do
|
||||
begin
|
||||
r.Left := map.blockW * n1;
|
||||
r.Top := map.blockH * n2;
|
||||
r.Right := r.Left + map.blockW;
|
||||
r.Bottom := r.Top + map.blockH;
|
||||
|
||||
// begin to draw here //
|
||||
|
||||
if map.map[n] <> '0' then
|
||||
begin
|
||||
phong.Draw(bitmap, tile3D, h, r.left, r.top, texture);
|
||||
|
||||
if map.blockH > map.blockW then
|
||||
bitmap.FontHeight := round(map.blockW * 0.75)
|
||||
else
|
||||
bitmap.FontHeight := round(map.blockH * 0.75);
|
||||
|
||||
bitmap.TextRect(Rect(r.Left + 10, r.Top + 10, r.Right, r.Bottom),
|
||||
map.map[n], taCenter, tlCenter, BGRA(0, 0, 0, 175));
|
||||
bitmap.TextRect(r, map.map[n], taCenter, tlCenter, BGRABlack);
|
||||
end;
|
||||
{
|
||||
if map.map[n] = '0' then
|
||||
begin
|
||||
bitmap.FontHeight := map.blockH div 4;
|
||||
if (n1 <> 0) then
|
||||
bitmap.TextRect(r, '►', taLeftJustify, tlCenter, BGRA(192, 192, 192));
|
||||
|
||||
if (n1 <> map.mapW - 1) then
|
||||
bitmap.TextRect(r, '◄', taRightJustify, tlCenter, BGRA(192, 192, 192));
|
||||
|
||||
if (n2 <> 0) then
|
||||
bitmap.TextRect(r, '▼', taCenter, tlTop, BGRA(192, 192, 192));
|
||||
|
||||
if (n2 <> map.mapH - 1) then
|
||||
bitmap.TextRect(r, '▲', taCenter, tlBottom, BGRA(192, 192, 192));
|
||||
end;
|
||||
}
|
||||
|
||||
// end to draw here //
|
||||
|
||||
if n1 = map.mapW - 1 then
|
||||
begin
|
||||
n1 := -1;
|
||||
Inc(n2);
|
||||
end;
|
||||
|
||||
Inc(n1);
|
||||
end;
|
||||
|
||||
tile3D.Free;
|
||||
phong.Free;
|
||||
end;
|
||||
|
||||
function ClickMap(var map: TGameMap; pos: TPoint): boolean;
|
||||
var
|
||||
n, n1, n2: integer;
|
||||
r: TRect;
|
||||
begin
|
||||
Result := False;
|
||||
n1 := 0;
|
||||
n2 := 0;
|
||||
|
||||
for n := 1 to length(map.map) do
|
||||
begin
|
||||
r.Left := map.blockW * n1;
|
||||
r.Top := map.blockH * n2;
|
||||
r.Right := r.Left + map.blockW;
|
||||
r.Bottom := r.Top + map.blockH;
|
||||
|
||||
{ SCALING }
|
||||
r.Left += Form1.BGRAVirtualScreen1.Left;
|
||||
r.Top += Form1.BGRAVirtualScreen1.Top;
|
||||
r.Right += Form1.BGRAVirtualScreen1.Left;
|
||||
r.Bottom += Form1.BGRAVirtualScreen1.Top;
|
||||
|
||||
if (pos.x >= r.Left) and (pos.x <= r.Right) and (pos.y >= r.Top) and
|
||||
(pos.y <= r.Bottom) then
|
||||
begin
|
||||
// vacio
|
||||
if map.map[n] = '0' then
|
||||
exit;
|
||||
|
||||
// el vacio esta a la izquierda
|
||||
if (n1 <> 0) then
|
||||
if map.map[n - 1] = '0' then
|
||||
begin
|
||||
map.map[n - 1] := map.map[n];
|
||||
map.map[n] := '0';
|
||||
end;
|
||||
|
||||
// el vacio esta a la derecha
|
||||
if (n1 <> map.mapW - 1) then
|
||||
if map.map[n + 1] = '0' then
|
||||
begin
|
||||
map.map[n + 1] := map.map[n];
|
||||
map.map[n] := '0';
|
||||
end;
|
||||
|
||||
// el vacio esta arriba
|
||||
if map.map[n - map.mapW] = '0' then
|
||||
begin
|
||||
map.map[n - map.mapW] := map.map[n];
|
||||
map.map[n] := '0';
|
||||
end;
|
||||
|
||||
// el vacio esta abajo
|
||||
if map.map[n + map.mapW] = '0' then
|
||||
begin
|
||||
map.map[n + map.mapW] := map.map[n];
|
||||
map.map[n] := '0';
|
||||
end;
|
||||
|
||||
Result := True;
|
||||
exit;
|
||||
end;
|
||||
|
||||
if n1 = map.mapW - 1 then
|
||||
begin
|
||||
n1 := -1;
|
||||
Inc(n2);
|
||||
end;
|
||||
|
||||
Inc(n1);
|
||||
end;
|
||||
end;
|
||||
|
||||
function KeyPressMap(var map: TGameMap; var Key: word): boolean;
|
||||
|
||||
function GetGameKey(var Key: word; invertLR, invertUD: boolean): TGameKey;
|
||||
begin
|
||||
if (Key = L1) or (Key = L2) then
|
||||
Result := gkLeft;
|
||||
if (Key = R1) or (Key = R2) then
|
||||
Result := gkRight;
|
||||
if (Key = U1) or (Key = U2) then
|
||||
Result := gkUp;
|
||||
if (Key = D1) or (Key = D2) then
|
||||
Result := gkDown;
|
||||
|
||||
if invertLR then
|
||||
case Result of
|
||||
gkLeft: Result := gkRight;
|
||||
gkRight: Result := gkLeft;
|
||||
end;
|
||||
|
||||
if invertUD then
|
||||
case Result of
|
||||
gkUp: Result := gkDown;
|
||||
gkDown: Result := gkUp;
|
||||
end;
|
||||
end;
|
||||
|
||||
var
|
||||
n, n1, n2: integer;
|
||||
begin
|
||||
n1 := 0;
|
||||
n2 := 0;
|
||||
Result := False;
|
||||
|
||||
for n := 1 to length(map.map) do
|
||||
begin
|
||||
if map.map[n] = '0' then
|
||||
begin
|
||||
|
||||
case GetGameKey(Key, True, True) of
|
||||
gkLeft:
|
||||
// el de la izquierda
|
||||
if (n1 <> 0) then
|
||||
begin
|
||||
map.map[n] := map.map[n - 1];
|
||||
map.map[n - 1] := '0';
|
||||
Result := True;
|
||||
Key := 0;
|
||||
end;
|
||||
|
||||
gkRight:
|
||||
// el de la derecha
|
||||
if (n1 <> map.mapW - 1) then
|
||||
begin
|
||||
map.map[n] := map.map[n + 1];
|
||||
map.map[n + 1] := '0';
|
||||
Result := True;
|
||||
Key := 0;
|
||||
end;
|
||||
|
||||
gkUp:
|
||||
// el de arriba
|
||||
if (n2 <> 0) then
|
||||
begin
|
||||
map.map[n] := map.map[n - map.mapW];
|
||||
map.map[n - map.mapW] := '0';
|
||||
Result := True;
|
||||
Key := 0;
|
||||
end;
|
||||
|
||||
gkDown:
|
||||
// el de abajo
|
||||
if (n2 <> map.mapH - 1) then
|
||||
begin
|
||||
map.map[n] := map.map[n + map.mapW];
|
||||
map.map[n + map.mapW] := '0';
|
||||
Result := True;
|
||||
Key := 0;
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
if Result then
|
||||
exit;
|
||||
end;
|
||||
|
||||
if n1 = map.mapW - 1 then
|
||||
begin
|
||||
n1 := -1;
|
||||
Inc(n2);
|
||||
end;
|
||||
|
||||
Inc(n1);
|
||||
end;
|
||||
end;
|
||||
|
||||
function IsMapSolved(var map: TGameMap): boolean;
|
||||
begin
|
||||
Result := map.map = map.solve;
|
||||
end;
|
||||
|
||||
function CalcularPosibles(str: string; showDebug: boolean = False): TarrayOfString;
|
||||
|
||||
function Factorial(number: integer): integer;
|
||||
var
|
||||
i: integer;
|
||||
begin
|
||||
Result := number;
|
||||
for i := number - 1 downto 1 do
|
||||
begin
|
||||
Result := Result * i;
|
||||
end;
|
||||
end;
|
||||
|
||||
function MoverIzq(str: string; pos: integer): string;
|
||||
var
|
||||
s1, s2: char;
|
||||
begin
|
||||
Result := str;
|
||||
s1 := Result[pos];
|
||||
s2 := Result[pos - 1];
|
||||
Result[pos] := s2;
|
||||
Result[pos - 1] := s1;
|
||||
end;
|
||||
|
||||
function MoverIni(str: string; pos: integer): string;
|
||||
var
|
||||
s1, s2: char;
|
||||
begin
|
||||
Result := str;
|
||||
s1 := Result[pos];
|
||||
s2 := Result[1];
|
||||
Result[pos] := s2;
|
||||
Result[1] := s1;
|
||||
end;
|
||||
|
||||
var
|
||||
nLargo, // numero de char en la string
|
||||
nFactorial, // numero de combinaciones
|
||||
nFactorialDivLargo, // primer char veces repetido
|
||||
nFactorialm1DivLargom1, // segundo char veces repetido
|
||||
nPosibles: integer; // numero de combinaciones jugables
|
||||
n: integer;
|
||||
|
||||
rstr: string;
|
||||
begin
|
||||
// Los comentarios de los numeros son para str:=1230;
|
||||
|
||||
nLargo := length(str); // 4
|
||||
|
||||
if nLargo <= 1 then
|
||||
exit;
|
||||
|
||||
nFactorial := Factorial(nLargo); // 24
|
||||
//nFactorialDivLargo := nFactorial div nLargo; // 6
|
||||
//nFactorialm1DivLargom1 := Factorial(nLargo - 1) div (nLargo - 1); // 2
|
||||
|
||||
nPosibles := nFactorial div 2; // 12
|
||||
|
||||
SetLength(Result, nPosibles);
|
||||
|
||||
//0 to 11
|
||||
for n := 0 to nPosibles - 1 do
|
||||
begin
|
||||
// create a function here ;)
|
||||
|
||||
// start with '1'
|
||||
if n = 0 then
|
||||
Result[n] := str // 1230 (no clic)
|
||||
else
|
||||
if n = 1 then // 1203 (clic 3)
|
||||
Result[n] := MoverIzq(Result[n - 1], nLargo); // 1203
|
||||
if n = 2 then // 1032 (clic 2)
|
||||
begin
|
||||
Result[n] := MoverIzq(Result[n - 1], nLargo - 1); // 1023
|
||||
Result[n] := MoverIzq(Result[n], nLargo); // 1032
|
||||
end;
|
||||
|
||||
// start with '2' (the 2 positioned char)
|
||||
if n = 3 then // 2310 (clic 3 2 1 3)
|
||||
begin
|
||||
Result[n] := MoverIni(Result[0], 2); // 2130
|
||||
Result[n] := MoverIzq(Result[n], nLargo - 1); // 2310
|
||||
end;
|
||||
if n = 4 then // 2301
|
||||
begin
|
||||
Result[n] := MoverIzq(Result[n - 1], nLargo); // 2301
|
||||
end;
|
||||
if n = 5 then // 2013
|
||||
begin
|
||||
Result[n] := MoverIzq(Result[n - 1], nLargo - 1); // 2031
|
||||
Result[n] := MoverIzq(Result[n], nLargo); // 2013
|
||||
end;
|
||||
|
||||
// start with '3' (the 3 positioned char)
|
||||
if n = 6 then // 3120
|
||||
begin
|
||||
Result[n] := MoverIni(Result[0], 3);
|
||||
Result[n] := MoverIzq(Result[n], nLargo - 1); // 3120
|
||||
end;
|
||||
if n = 7 then // 3102
|
||||
begin
|
||||
Result[n] := MoverIzq(Result[n - 1], nLargo); // 3102
|
||||
end;
|
||||
if n = 8 then // 3021
|
||||
begin
|
||||
Result[n] := MoverIzq(Result[n - 1], nLargo - 1);
|
||||
Result[n] := MoverIzq(Result[n], nLargo); // 3021
|
||||
end;
|
||||
|
||||
// start with '0' (the 4 positioned char)
|
||||
if n = 9 then // 0321
|
||||
begin
|
||||
Result[n] := MoverIni(Result[0], 4);
|
||||
Result[n] := MoverIzq(Result[n], nLargo - 1); // 0321
|
||||
end;
|
||||
if n = 10 then // 0213
|
||||
begin
|
||||
Result[n] := MoverIzq(Result[n - 1], nLargo - 1);
|
||||
Result[n] := MoverIzq(Result[n], nLargo); // 0213
|
||||
end;
|
||||
if n = 11 then // 0132
|
||||
begin
|
||||
Result[n] := MoverIzq(Result[n - 1], nLargo - 1);
|
||||
Result[n] := MoverIzq(Result[n], nLargo); // 0232
|
||||
end;
|
||||
end;
|
||||
|
||||
// Debug
|
||||
if showDebug then
|
||||
begin
|
||||
rstr := '';
|
||||
for n := 0 to nPosibles - 1 do
|
||||
begin
|
||||
rstr := concat(rstr, LineEnding, Result[n]);
|
||||
end;
|
||||
|
||||
ShowMessage(rstr);
|
||||
|
||||
ShowMessage(
|
||||
concat('numero de char en la string: ', IntToStr(nLargo), LineEnding,
|
||||
'numero de combinaciones: ', IntToStr(nFactorial), LineEnding,
|
||||
//'primer char veces repetido: ', IntToStr(nFactorialDivLargo),
|
||||
//LineEnding, 'segundo char veces repetido: ', IntToStr(nFactorialm1DivLargom1), LineEnding,
|
||||
'numero de combinaciones jugables: ', IntToStr(nPosibles))
|
||||
);
|
||||
end;
|
||||
end;
|
||||
|
||||
{$R *.lfm}
|
||||
|
||||
{ TForm1 }
|
||||
|
||||
procedure TForm1.BGRAVirtualScreen1Redraw(Sender: TObject; Bitmap: TBGRABitmap);
|
||||
begin
|
||||
DrawMap(map^, bitmap, texture);
|
||||
end;
|
||||
|
||||
{ MOUSE }
|
||||
|
||||
procedure TForm1.BGRAVirtualScreen1Click(Sender: TObject);
|
||||
var
|
||||
pos: TPoint;
|
||||
begin
|
||||
pos := ScreenToClient(Mouse.CursorPos);
|
||||
if ClickMap(map^, pos) then
|
||||
begin
|
||||
PlayBlockSound;
|
||||
BGRAVirtualScreen1.DiscardBitmap;
|
||||
end;
|
||||
end;
|
||||
|
||||
{ CREATE }
|
||||
|
||||
procedure TForm1.FormCreate(Sender: TObject);
|
||||
var
|
||||
a: TArrayOfString;
|
||||
i: integer;
|
||||
begin
|
||||
a := CalcularPosibles('1230'{, True});
|
||||
|
||||
// 0 is 1230 the solve
|
||||
// 1 to 11
|
||||
for i := 1 to length(a) - 1 do
|
||||
begin
|
||||
Game[i].map := a[i];
|
||||
Game[i].solve := a[0];
|
||||
Game[i].mapW := length(a[0]) div 2;
|
||||
Game[i].mapH := length(a[0]) div 2;
|
||||
Game[i].blockW := 128;
|
||||
Game[i].blockH := 128;
|
||||
end;
|
||||
|
||||
Game[length(Game)] := GameOver;
|
||||
|
||||
{ SCALING }
|
||||
// FullScreen with current screen resolution
|
||||
//Size := Rect(0, 0, Screen.Width, Screen.Height);
|
||||
|
||||
|
||||
|
||||
Size := Rect(0, 0, 640, 480);
|
||||
|
||||
SetBounds(Size.Left, Size.Top, Size.Right, Size.Bottom);
|
||||
|
||||
ScaleAspectRatio(BGRAVirtualScreen1, Size.Right, Size.Bottom, True, True, True);
|
||||
|
||||
ToggleFullScreen(Self, Size);
|
||||
|
||||
ScaleBlocks;
|
||||
|
||||
{ OPEN }
|
||||
randomize; // to randomize the skin
|
||||
|
||||
OpenMap(1);
|
||||
current := 1;
|
||||
end;
|
||||
|
||||
procedure TForm1.FormDestroy(Sender: TObject);
|
||||
begin
|
||||
CloseMap;
|
||||
end;
|
||||
|
||||
{ KEYBOARD }
|
||||
|
||||
procedure TForm1.FormKeyDown(Sender: TObject; var Key: word; Shift: TShiftState);
|
||||
begin
|
||||
if (Key = VK_ESCAPE) then
|
||||
Application.Terminate;
|
||||
|
||||
if (Key = VK_F11) then
|
||||
ToggleFullScreen(Self, Size);
|
||||
|
||||
if KeyPressMap(map^, Key) then
|
||||
begin
|
||||
PlayBlockSound;
|
||||
BGRAVirtualScreen1.DiscardBitmap;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TForm1.FormResize(Sender: TObject);
|
||||
begin
|
||||
CenterControl(BGRAVirtualScreen1);
|
||||
end;
|
||||
|
||||
{ TIMER }
|
||||
|
||||
procedure TForm1.Timer1Timer(Sender: TObject);
|
||||
|
||||
{$IFDEF WINDOWS}
|
||||
procedure JoyDown(const pKey: word);
|
||||
var
|
||||
Key: word;
|
||||
begin
|
||||
Key := pKey;
|
||||
FormKeyDown(nil, Key, []);
|
||||
end;
|
||||
|
||||
{$ENDIF}
|
||||
|
||||
var
|
||||
nextGame: boolean;
|
||||
{$IFDEF WINDOWS}
|
||||
myJoy: TJoyInfoEx;
|
||||
myJoyCaps: TJoyCaps;
|
||||
ErrorResultC, ErrorResultP: MMRESULT;
|
||||
{$ENDIF}
|
||||
begin
|
||||
if map <> nil then
|
||||
begin
|
||||
Caption := 'Level ' + IntToStr(current);
|
||||
|
||||
nextGame := IsMapSolved(map^);
|
||||
if (current = length(Game)) and nextGame then
|
||||
begin
|
||||
Timer1.Enabled := False;
|
||||
//ShowMessage('Game Win!');
|
||||
exit;
|
||||
end;
|
||||
|
||||
if nextGame then
|
||||
begin
|
||||
Timer1.Enabled := False;
|
||||
OpenMap(current + 1);
|
||||
//ShowMessage('Next: Level ' + IntToStr(current));
|
||||
BGRAVirtualScreen1.DiscardBitmap;
|
||||
Timer1.Enabled := True;
|
||||
end;
|
||||
|
||||
{$IFDEF WINDOWS}
|
||||
ErrorResultC := joyGetDevCaps(joystickid1, @myJoyCaps, sizeof(myJoyCaps));
|
||||
ErrorResultP := joyGetPosEx(joystickid1, @MyJoy);
|
||||
if (ErrorResultC = JOYERR_NOERROR) and (ErrorResultP = JOYERR_NOERROR) then
|
||||
begin
|
||||
if (myJoy.dwPOV = JOY_POVFORWARD) or (myJoy.wYpos = myJoyCaps.wYmin) then
|
||||
JoyDown(U1)
|
||||
else if (myJoy.dwPOV = JOY_POVBACKWARD) or (myJoy.wYpos = myJoyCaps.wYmax) then
|
||||
JoyDown(D1)
|
||||
else if (myJoy.dwPOV = JOY_POVLEFT) or (myJoy.wXpos = myJoyCaps.wXmin) then
|
||||
JoyDown(L1)
|
||||
else if (myJoy.dwPOV = JOY_POVRIGHT) or (myJoy.wXpos = myJoyCaps.wXmax) then
|
||||
JoyDown(R1);
|
||||
end;
|
||||
{$ENDIF}
|
||||
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TForm1.OpenMap(num: integer);
|
||||
begin
|
||||
CloseMap;
|
||||
if (num < low(Game)) or (num > high(Game)) then
|
||||
halt;
|
||||
current := num;
|
||||
map := @Game[current];
|
||||
GenerateTexture;
|
||||
end;
|
||||
|
||||
procedure TForm1.CloseMap;
|
||||
begin
|
||||
if map <> nil then
|
||||
FreeAndNil(map^.background);
|
||||
FreeAndNil(texture);
|
||||
map := nil;
|
||||
end;
|
||||
|
||||
procedure TForm1.ScaleBlocks;
|
||||
var
|
||||
i: integer;
|
||||
begin
|
||||
for i := low(game) to high(game) do
|
||||
begin
|
||||
Game[i].blockW := BGRAVirtualScreen1.Width div Game[i].mapW;
|
||||
Game[i].blockH := BGRAVirtualScreen1.Height div Game[i].mapH;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TForm1.GenerateTexture;
|
||||
begin
|
||||
if texture <> nil then
|
||||
raise Exception.Create('Texture not freed');
|
||||
case random(9) of
|
||||
0: texture := CreatePlastikTexture(BGRAVirtualScreen1.Width,
|
||||
BGRAVirtualScreen1.Height);
|
||||
1: texture := CreateCamouflageTexture(BGRAVirtualScreen1.Width,
|
||||
BGRAVirtualScreen1.Height);
|
||||
2: texture := CreateSnowPrintTexture(BGRAVirtualScreen1.Width,
|
||||
BGRAVirtualScreen1.Height);
|
||||
3: texture := CreateRoundStoneTexture(BGRAVirtualScreen1.Width,
|
||||
BGRAVirtualScreen1.Height);
|
||||
4: texture := CreateStoneTexture(BGRAVirtualScreen1.Width,
|
||||
BGRAVirtualScreen1.Height);
|
||||
5: texture := CreateWaterTexture(BGRAVirtualScreen1.Width,
|
||||
BGRAVirtualScreen1.Height);
|
||||
6: texture := CreateMarbleTexture(BGRAVirtualScreen1.Width,
|
||||
BGRAVirtualScreen1.Height);
|
||||
7: texture := CreateWoodTexture(BGRAVirtualScreen1.Width, BGRAVirtualScreen1.Height);
|
||||
8: texture := CreateVerticalWoodTexture(BGRAVirtualScreen1.Width,
|
||||
BGRAVirtualScreen1.Height);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TForm1.PlayBlockSound;
|
||||
begin
|
||||
{$IFDEF WINDOWS}
|
||||
PlaySound(PChar('move.wav'), 0, SND_ASYNC);
|
||||
{$ENDIF}
|
||||
end;
|
||||
|
||||
end.
|
@@ -0,0 +1,89 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="12"/>
|
||||
<PathDelim Value="\"/>
|
||||
<General>
|
||||
<Flags>
|
||||
<CompatibilityMode Value="True"/>
|
||||
</Flags>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<Title Value="circleanimation"/>
|
||||
<ResourceType Value="res"/>
|
||||
<UseXPManifest Value="True"/>
|
||||
<XPManifest>
|
||||
<DpiAware Value="True"/>
|
||||
</XPManifest>
|
||||
</General>
|
||||
<i18n>
|
||||
<EnableI18N LFM="False"/>
|
||||
</i18n>
|
||||
<BuildModes Count="1">
|
||||
<Item1 Name="Default" Default="True"/>
|
||||
</BuildModes>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<FormatVersion Value="2"/>
|
||||
<Modes Count="1">
|
||||
<Mode0 Name="default"/>
|
||||
</Modes>
|
||||
</RunParams>
|
||||
<RequiredPackages Count="2">
|
||||
<Item1>
|
||||
<PackageName Value="bgracontrols"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<PackageName Value="LCL"/>
|
||||
</Item2>
|
||||
</RequiredPackages>
|
||||
<Units Count="2">
|
||||
<Unit0>
|
||||
<Filename Value="circleanimation.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit0>
|
||||
<Unit1>
|
||||
<Filename Value="umain.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<ComponentName Value="Form1"/>
|
||||
<HasResources Value="True"/>
|
||||
<ResourceBaseClass Value="Form"/>
|
||||
</Unit1>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="circleanimation"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<DebugInfoType Value="dsDwarf2Set"/>
|
||||
</Debugging>
|
||||
<Options>
|
||||
<Win32>
|
||||
<GraphicApplication Value="True"/>
|
||||
</Win32>
|
||||
</Options>
|
||||
</Linking>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
<Exceptions Count="3">
|
||||
<Item1>
|
||||
<Name Value="EAbort"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<Name Value="ECodetoolError"/>
|
||||
</Item2>
|
||||
<Item3>
|
||||
<Name Value="EFOpenError"/>
|
||||
</Item3>
|
||||
</Exceptions>
|
||||
</Debugging>
|
||||
</CONFIG>
|
@@ -0,0 +1,21 @@
|
||||
program circleanimation;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
uses
|
||||
{$IFDEF UNIX}{$IFDEF UseCThreads}
|
||||
cthreads,
|
||||
{$ENDIF}{$ENDIF}
|
||||
Interfaces, // this includes the LCL widgetset
|
||||
Forms, umain
|
||||
{ you can add units after this };
|
||||
|
||||
{$R *.res}
|
||||
|
||||
begin
|
||||
RequireDerivedFormResource:=True;
|
||||
Application.Initialize;
|
||||
Application.CreateForm(TForm1, Form1);
|
||||
Application.Run;
|
||||
end.
|
||||
|
@@ -0,0 +1,59 @@
|
||||
object Form1: TForm1
|
||||
Left = 465
|
||||
Height = 343
|
||||
Top = 182
|
||||
Width = 538
|
||||
Caption = 'Form1'
|
||||
ClientHeight = 343
|
||||
ClientWidth = 538
|
||||
Color = clWhite
|
||||
LCLVersion = '1.6.0.4'
|
||||
object Button1: TBGRAGraphicControl
|
||||
Left = 48
|
||||
Height = 57
|
||||
Top = 48
|
||||
Width = 196
|
||||
OnRedraw = Button1Redraw
|
||||
Color = clWhite
|
||||
ColorOpacity = 128
|
||||
Alignment = taCenter
|
||||
OnMouseDown = Button1MouseDown
|
||||
end
|
||||
object BCMaterialDesignButton1: TBCMaterialDesignButton
|
||||
Left = 48
|
||||
Height = 152
|
||||
Top = 112
|
||||
Width = 414
|
||||
TextColor = 8404992
|
||||
TextSize = 22
|
||||
TextStyle = [fsItalic]
|
||||
TextFont = 'default'
|
||||
Anchors = [akTop, akLeft, akRight, akBottom]
|
||||
Caption = 'Material Design'
|
||||
OnClick = BCMaterialDesignButton1Click
|
||||
end
|
||||
object BCMaterialDesignButton2: TBCMaterialDesignButton
|
||||
Left = 458
|
||||
Height = 53
|
||||
Top = 284
|
||||
Width = 66
|
||||
RoundBorders = 25
|
||||
NormalColor = 8404992
|
||||
NormalColorEffect = clWhite
|
||||
ShadowColor = clBlack
|
||||
ShadowSize = 8
|
||||
TextColor = clWhite
|
||||
TextSize = 30
|
||||
TextFont = 'default'
|
||||
Anchors = [akRight, akBottom]
|
||||
Caption = '@'
|
||||
end
|
||||
object Timer1: TTimer
|
||||
Enabled = False
|
||||
Interval = 15
|
||||
OnTimer = Timer1Timer
|
||||
OnStartTimer = Timer1StartTimer
|
||||
left = 28
|
||||
top = 14
|
||||
end
|
||||
end
|
103
bgracontrols/test/test_extra/material_design_animation/umain.pas
Normal file
103
bgracontrols/test/test_extra/material_design_animation/umain.pas
Normal file
@@ -0,0 +1,103 @@
|
||||
unit umain;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, Forms, Controls, ExtCtrls, Dialogs,
|
||||
BGRAGraphicControl, BGRABitmap, BGRABitmapTypes,
|
||||
BGRATextFX, bcmaterialdesignbutton;
|
||||
|
||||
type
|
||||
|
||||
{ TForm1 }
|
||||
|
||||
TForm1 = class(TForm)
|
||||
BCMaterialDesignButton1: TBCMaterialDesignButton;
|
||||
BCMaterialDesignButton2: TBCMaterialDesignButton;
|
||||
Button1: TBGRAGraphicControl;
|
||||
Timer1: TTimer;
|
||||
procedure BCMaterialDesignButton1Click(Sender: TObject);
|
||||
procedure Button1MouseDown(Sender: TObject; Button: TMouseButton;
|
||||
Shift: TShiftState; X, Y: integer);
|
||||
procedure Button1Redraw(Sender: TObject; Bitmap: TBGRABitmap);
|
||||
procedure Timer1StartTimer(Sender: TObject);
|
||||
procedure Timer1Timer(Sender: TObject);
|
||||
private
|
||||
{ private declarations }
|
||||
public
|
||||
{ public declarations }
|
||||
MouseP: TPoint;
|
||||
CircleX: single;
|
||||
CircleAlpha: byte;
|
||||
end;
|
||||
|
||||
var
|
||||
Form1: TForm1;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.lfm}
|
||||
|
||||
{ TForm1 }
|
||||
|
||||
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
|
||||
Shift: TShiftState; X, Y: integer);
|
||||
begin
|
||||
Timer1.Enabled := False;
|
||||
MouseP := Point(X, Y);
|
||||
Timer1.Enabled := True;
|
||||
end;
|
||||
|
||||
procedure TForm1.BCMaterialDesignButton1Click(Sender: TObject);
|
||||
begin
|
||||
//ShowMessage('Click');
|
||||
end;
|
||||
|
||||
procedure TForm1.Button1Redraw(Sender: TObject; Bitmap: TBGRABitmap);
|
||||
var
|
||||
temp: TBGRABitmap;
|
||||
begin
|
||||
{ Shadow }
|
||||
Bitmap.Fill(BGRAPixelTransparent);
|
||||
Bitmap.RoundRect(5, 5, Button1.Width - 5, Button1.Height - 5, 5, 5,
|
||||
BGRA(100, 100, 100), BGRA(100, 100, 100));
|
||||
|
||||
temp := Bitmap.FilterBlurRadial(5, 5, rbFast) as TBGRABitmap;
|
||||
Bitmap.Fill(BGRAPixelTransparent);
|
||||
Bitmap.PutImage(0, 0, temp, dmDrawWithTransparency);
|
||||
temp.Free;
|
||||
|
||||
{ Round Rectangle }
|
||||
temp := TBGRABitmap.Create(Button1.Width, Button1.Height, BGRAWhite);
|
||||
{ Circle Effect }
|
||||
temp.EllipseAntialias(MouseP.X, MouseP.Y, CircleX, CircleX,
|
||||
BGRA(100, 100, 100, CircleAlpha), 1, BGRA(100, 100, 100, CircleAlpha));
|
||||
Bitmap.FillRoundRectAntialias(5, 0, Button1.Width - 5, Button1.Height -
|
||||
5, 5, 5, temp, [rrDefault], False);
|
||||
temp.Free;
|
||||
|
||||
{ Text }
|
||||
temp := TextShadow(Button1.Width, Button1.Height, 'Material Design',
|
||||
20, BGRABlack, BGRABlack, 2, 2, 2) as TBGRABitmap;
|
||||
Bitmap.PutImage(0, 0, temp, dmDrawWithTransparency);
|
||||
temp.Free;
|
||||
end;
|
||||
|
||||
procedure TForm1.Timer1StartTimer(Sender: TObject);
|
||||
begin
|
||||
CircleAlpha := 255;
|
||||
CircleX := 5;
|
||||
end;
|
||||
|
||||
procedure TForm1.Timer1Timer(Sender: TObject);
|
||||
begin
|
||||
CircleX := CircleX + 4;
|
||||
CircleAlpha := CircleAlpha - 5;
|
||||
if CircleAlpha <= 0 then
|
||||
Timer1.Enabled := False;
|
||||
Button1.DiscardBitmap;
|
||||
end;
|
||||
|
||||
end.
|
BIN
bgracontrols/test/test_extra/pix2svg/lazpaint.png
Normal file
BIN
bgracontrols/test/test_extra/pix2svg/lazpaint.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.4 KiB |
713
bgracontrols/test/test_extra/pix2svg/lazpaint.svg
Normal file
713
bgracontrols/test/test_extra/pix2svg/lazpaint.svg
Normal file
@@ -0,0 +1,713 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
|
||||
<g>
|
||||
<polygon points="16 1.75, 16.5 2, 16.5 2.5, 16 2.75, 15.5 2.5, 15.5 2" style="fill:rgb(254,229,202); fill-opacity:0.0470588235294118;" />
|
||||
<polygon points="17 1.75, 17.5 2, 17.5 2.5, 17 2.75, 16.5 2.5, 16.5 2" style="fill:rgb(255,231,207); fill-opacity:0.207843137254902;" />
|
||||
<polygon points="18 1.75, 18.5 2, 18.5 2.5, 18 2.75, 17.5 2.5, 17.5 2" style="fill:rgb(255,233,213); fill-opacity:0.392156862745098;" />
|
||||
<polygon points="19 1.75, 19.5 2, 19.5 2.5, 19 2.75, 18.5 2.5, 18.5 2" style="fill:rgb(255,234,214); fill-opacity:0.549019607843137;" />
|
||||
<polygon points="20 1.75, 20.5 2, 20.5 2.5, 20 2.75, 19.5 2.5, 19.5 2" style="fill:rgb(255,231,206); fill-opacity:0.674509803921569;" />
|
||||
<polygon points="21 1.75, 21.5 2, 21.5 2.5, 21 2.75, 20.5 2.5, 20.5 2" style="fill:rgb(253,228,201); fill-opacity:0.745098039215686;" />
|
||||
<polygon points="22 1.75, 22.5 2, 22.5 2.5, 22 2.75, 21.5 2.5, 21.5 2" style="fill:rgb(254,229,204); fill-opacity:0.737254901960784;" />
|
||||
<polygon points="23 1.75, 23.5 2, 23.5 2.5, 23 2.75, 22.5 2.5, 22.5 2" style="fill:rgb(253,227,202); fill-opacity:0.654901960784314;" />
|
||||
<polygon points="24 1.75, 24.5 2, 24.5 2.5, 24 2.75, 23.5 2.5, 23.5 2" style="fill:rgb(254,229,204); fill-opacity:0.490196078431373;" />
|
||||
<polygon points="25 1.75, 25.5 2, 25.5 2.5, 25 2.75, 24.5 2.5, 24.5 2" style="fill:rgb(244,219,195); fill-opacity:0.266666666666667;" />
|
||||
<polygon points="26 1.75, 26.5 2, 26.5 2.5, 26 2.75, 25.5 2.5, 25.5 2" style="fill:rgb(190,172,152); fill-opacity:0.0392156862745098;" />
|
||||
<polygon points="12.5 2.5, 13 2.75, 13 3.25, 12.5 3.5, 12 3.25, 12 2.75" style="fill:rgb(254,228,202); fill-opacity:0.0980392156862745;" />
|
||||
<polygon points="13.5 2.5, 14 2.75, 14 3.25, 13.5 3.5, 13 3.25, 13 2.75" style="fill:rgb(254,229,206); fill-opacity:0.325490196078431;" />
|
||||
<polygon points="14.5 2.5, 15 2.75, 15 3.25, 14.5 3.5, 14 3.25, 14 2.75" style="fill:rgb(252,230,207); fill-opacity:0.596078431372549;" />
|
||||
<polygon points="15.5 2.5, 16 2.75, 16 3.25, 15.5 3.5, 15 3.25, 15 2.75" style="fill:rgb(250,227,207); fill-opacity:0.815686274509804;" />
|
||||
<polygon points="16.5 2.5, 17 2.75, 17 3.25, 16.5 3.5, 16 3.25, 16 2.75" style="fill:rgb(236,216,188); fill-opacity:0.929411764705882;" />
|
||||
<polygon points="17.5 2.5, 18 2.75, 18 3.25, 17.5 3.5, 17 3.25, 17 2.75" style="fill:rgb(210,203,145); fill-opacity:1;" />
|
||||
<polygon points="18.5 2.5, 19 2.75, 19 3.25, 18.5 3.5, 18 3.25, 18 2.75" style="fill:rgb(204,199,137); fill-opacity:1;" />
|
||||
<polygon points="19.5 2.5, 20 2.75, 20 3.25, 19.5 3.5, 19 3.25, 19 2.75" style="fill:rgb(235,213,184); fill-opacity:1;" />
|
||||
<polygon points="20.5 2.5, 21 2.75, 21 3.25, 20.5 3.5, 20 3.25, 20 2.75" style="fill:rgb(253,228,204); fill-opacity:1;" />
|
||||
<polygon points="21.5 2.5, 22 2.75, 22 3.25, 21.5 3.5, 21 3.25, 21 2.75" style="fill:rgb(252,227,201); fill-opacity:1;" />
|
||||
<polygon points="22.5 2.5, 23 2.75, 23 3.25, 22.5 3.5, 22 3.25, 22 2.75" style="fill:rgb(252,227,201); fill-opacity:1;" />
|
||||
<polygon points="23.5 2.5, 24 2.75, 24 3.25, 23.5 3.5, 23 3.25, 23 2.75" style="fill:rgb(254,229,203); fill-opacity:1;" />
|
||||
<polygon points="24.5 2.5, 25 2.75, 25 3.25, 24.5 3.5, 24 3.25, 24 2.75" style="fill:rgb(252,227,202); fill-opacity:0.956862745098039;" />
|
||||
<polygon points="25.5 2.5, 26 2.75, 26 3.25, 25.5 3.5, 25 3.25, 25 2.75" style="fill:rgb(235,215,191); fill-opacity:0.796078431372549;" />
|
||||
<polygon points="26.5 2.5, 27 2.75, 27 3.25, 26.5 3.5, 26 3.25, 26 2.75" style="fill:rgb(180,167,148); fill-opacity:0.423529411764706;" />
|
||||
<polygon points="27.5 2.5, 28 2.75, 28 3.25, 27.5 3.5, 27 3.25, 27 2.75" style="fill:rgb(92,80,69); fill-opacity:0.0431372549019608;" />
|
||||
<polygon points="11 3.25, 11.5 3.5, 11.5 4, 11 4.25, 10.5 4, 10.5 3.5" style="fill:rgb(254,227,202); fill-opacity:0.156862745098039;" />
|
||||
<polygon points="12 3.25, 12.5 3.5, 12.5 4, 12 4.25, 11.5 4, 11.5 3.5" style="fill:rgb(250,227,204); fill-opacity:0.533333333333333;" />
|
||||
<polygon points="13 3.25, 13.5 3.5, 13.5 4, 13 4.25, 12.5 4, 12.5 3.5" style="fill:rgb(243,223,202); fill-opacity:0.854901960784314;" />
|
||||
<polygon points="14 3.25, 14.5 3.5, 14.5 4, 14 4.25, 13.5 4, 13.5 3.5" style="fill:rgb(238,217,197); fill-opacity:1;" />
|
||||
<polygon points="15 3.25, 15.5 3.5, 15.5 4, 15 4.25, 14.5 4, 14.5 3.5" style="fill:rgb(236,214,193); fill-opacity:1;" />
|
||||
<polygon points="16 3.25, 16.5 3.5, 16.5 4, 16 4.25, 15.5 4, 15.5 3.5" style="fill:rgb(243,216,195); fill-opacity:1;" />
|
||||
<polygon points="17 3.25, 17.5 3.5, 17.5 4, 17 4.25, 16.5 4, 16.5 3.5" style="fill:rgb(204,188,151); fill-opacity:1;" />
|
||||
<polygon points="18 3.25, 18.5 3.5, 18.5 4, 18 4.25, 17.5 4, 17.5 3.5" style="fill:rgb(132,143,56); fill-opacity:1;" />
|
||||
<polygon points="19 3.25, 19.5 3.5, 19.5 4, 19 4.25, 18.5 4, 18.5 3.5" style="fill:rgb(110,125,34); fill-opacity:1;" />
|
||||
<polygon points="20 3.25, 20.5 3.5, 20.5 4, 20 4.25, 19.5 4, 19.5 3.5" style="fill:rgb(203,188,152); fill-opacity:1;" />
|
||||
<polygon points="21 3.25, 21.5 3.5, 21.5 4, 21 4.25, 20.5 4, 20.5 3.5" style="fill:rgb(255,231,208); fill-opacity:1;" />
|
||||
<polygon points="22 3.25, 22.5 3.5, 22.5 4, 22 4.25, 21.5 4, 21.5 3.5" style="fill:rgb(248,224,198); fill-opacity:1;" />
|
||||
<polygon points="23 3.25, 23.5 3.5, 23.5 4, 23 4.25, 22.5 4, 22.5 3.5" style="fill:rgb(251,226,200); fill-opacity:1;" />
|
||||
<polygon points="24 3.25, 24.5 3.5, 24.5 4, 24 4.25, 23.5 4, 23.5 3.5" style="fill:rgb(252,226,201); fill-opacity:1;" />
|
||||
<polygon points="25 3.25, 25.5 3.5, 25.5 4, 25 4.25, 24.5 4, 24.5 3.5" style="fill:rgb(253,227,202); fill-opacity:1;" />
|
||||
<polygon points="26 3.25, 26.5 3.5, 26.5 4, 26 4.25, 25.5 4, 25.5 3.5" style="fill:rgb(255,232,206); fill-opacity:1;" />
|
||||
<polygon points="27 3.25, 27.5 3.5, 27.5 4, 27 4.25, 26.5 4, 26.5 3.5" style="fill:rgb(255,236,210); fill-opacity:1;" />
|
||||
<polygon points="28 3.25, 28.5 3.5, 28.5 4, 28 4.25, 27.5 4, 27.5 3.5" style="fill:rgb(174,163,144); fill-opacity:0.741176470588235;" />
|
||||
<polygon points="29 3.25, 29.5 3.5, 29.5 4, 29 4.25, 28.5 4, 28.5 3.5" style="fill:rgb(70,56,49); fill-opacity:0.125490196078431;" />
|
||||
<polygon points="8.5 4, 9 4.25, 9 4.75, 8.5 5, 8 4.75, 8 4.25" style="fill:rgb(253,227,201); fill-opacity:0.0431372549019608;" />
|
||||
<polygon points="9.5 4, 10 4.25, 10 4.75, 9.5 5, 9 4.75, 9 4.25" style="fill:rgb(252,227,202); fill-opacity:0.47843137254902;" />
|
||||
<polygon points="10.5 4, 11 4.25, 11 4.75, 10.5 5, 10 4.75, 10 4.25" style="fill:rgb(239,216,196); fill-opacity:0.905882352941176;" />
|
||||
<polygon points="11.5 4, 12 4.25, 12 4.75, 11.5 5, 11 4.75, 11 4.25" style="fill:rgb(226,205,186); fill-opacity:1;" />
|
||||
<polygon points="12.5 4, 13 4.25, 13 4.75, 12.5 5, 12 4.75, 12 4.25" style="fill:rgb(226,203,181); fill-opacity:1;" />
|
||||
<polygon points="13.5 4, 14 4.25, 14 4.75, 13.5 5, 13 4.75, 13 4.25" style="fill:rgb(231,206,183); fill-opacity:1;" />
|
||||
<polygon points="14.5 4, 15 4.25, 15 4.75, 14.5 5, 14 4.75, 14 4.25" style="fill:rgb(236,212,187); fill-opacity:1;" />
|
||||
<polygon points="15.5 4, 16 4.25, 16 4.75, 15.5 5, 15 4.75, 15 4.25" style="fill:rgb(242,216,192); fill-opacity:1;" />
|
||||
<polygon points="16.5 4, 17 4.25, 17 4.75, 16.5 5, 16 4.75, 16 4.25" style="fill:rgb(236,213,186); fill-opacity:1;" />
|
||||
<polygon points="17.5 4, 18 4.25, 18 4.75, 17.5 5, 17 4.75, 17 4.25" style="fill:rgb(220,198,171); fill-opacity:1;" />
|
||||
<polygon points="18.5 4, 19 4.25, 19 4.75, 18.5 5, 18 4.75, 18 4.25" style="fill:rgb(200,183,149); fill-opacity:1;" />
|
||||
<polygon points="19.5 4, 20 4.25, 20 4.75, 19.5 5, 19 4.75, 19 4.25" style="fill:rgb(234,212,183); fill-opacity:1;" />
|
||||
<polygon points="20.5 4, 21 4.25, 21 4.75, 20.5 5, 20 4.75, 20 4.25" style="fill:rgb(249,223,199); fill-opacity:1;" />
|
||||
<polygon points="21.5 4, 22 4.25, 22 4.75, 21.5 5, 21 4.75, 21 4.25" style="fill:rgb(248,223,199); fill-opacity:1;" />
|
||||
<polygon points="22.5 4, 23 4.25, 23 4.75, 22.5 5, 22 4.75, 22 4.25" style="fill:rgb(250,224,199); fill-opacity:1;" />
|
||||
<polygon points="23.5 4, 24 4.25, 24 4.75, 23.5 5, 23 4.75, 23 4.25" style="fill:rgb(250,224,199); fill-opacity:1;" />
|
||||
<polygon points="24.5 4, 25 4.25, 25 4.75, 24.5 5, 24 4.75, 24 4.25" style="fill:rgb(251,225,200); fill-opacity:1;" />
|
||||
<polygon points="25.5 4, 26 4.25, 26 4.75, 25.5 5, 25 4.75, 25 4.25" style="fill:rgb(250,224,199); fill-opacity:1;" />
|
||||
<polygon points="26.5 4, 27 4.25, 27 4.75, 26.5 5, 26 4.75, 26 4.25" style="fill:rgb(252,226,201); fill-opacity:1;" />
|
||||
<polygon points="27.5 4, 28 4.25, 28 4.75, 27.5 5, 27 4.75, 27 4.25" style="fill:rgb(255,247,219); fill-opacity:1;" />
|
||||
<polygon points="28.5 4, 29 4.25, 29 4.75, 28.5 5, 28 4.75, 28 4.25" style="fill:rgb(150,135,120); fill-opacity:0.690196078431373;" />
|
||||
<polygon points="29.5 4, 30 4.25, 30 4.75, 29.5 5, 29 4.75, 29 4.25" style="fill:rgb(67,51,45); fill-opacity:0.0235294117647059;" />
|
||||
<polygon points="8 4.75, 8.5 5, 8.5 5.5, 8 5.75, 7.5 5.5, 7.5 5" style="fill:rgb(250,223,199); fill-opacity:0.164705882352941;" />
|
||||
<polygon points="9 4.75, 9.5 5, 9.5 5.5, 9 5.75, 8.5 5.5, 8.5 5" style="fill:rgb(243,218,196); fill-opacity:0.737254901960784;" />
|
||||
<polygon points="10 4.75, 10.5 5, 10.5 5.5, 10 5.75, 9.5 5.5, 9.5 5" style="fill:rgb(229,198,177); fill-opacity:1;" />
|
||||
<polygon points="11 4.75, 11.5 5, 11.5 5.5, 11 5.75, 10.5 5.5, 10.5 5" style="fill:rgb(223,194,172); fill-opacity:1;" />
|
||||
<polygon points="12 4.75, 12.5 5, 12.5 5.5, 12 5.75, 11.5 5.5, 11.5 5" style="fill:rgb(225,199,177); fill-opacity:1;" />
|
||||
<polygon points="13 4.75, 13.5 5, 13.5 5.5, 13 5.75, 12.5 5.5, 12.5 5" style="fill:rgb(230,205,182); fill-opacity:1;" />
|
||||
<polygon points="14 4.75, 14.5 5, 14.5 5.5, 14 5.75, 13.5 5.5, 13.5 5" style="fill:rgb(234,209,186); fill-opacity:1;" />
|
||||
<polygon points="15 4.75, 15.5 5, 15.5 5.5, 15 5.75, 14.5 5.5, 14.5 5" style="fill:rgb(237,211,188); fill-opacity:1;" />
|
||||
<polygon points="16 4.75, 16.5 5, 16.5 5.5, 16 5.75, 15.5 5.5, 15.5 5" style="fill:rgb(239,213,189); fill-opacity:1;" />
|
||||
<polygon points="17 4.75, 17.5 5, 17.5 5.5, 17 5.75, 16.5 5.5, 16.5 5" style="fill:rgb(252,225,201); fill-opacity:1;" />
|
||||
<polygon points="18 4.75, 18.5 5, 18.5 5.5, 18 5.75, 17.5 5.5, 17.5 5" style="fill:rgb(255,234,210); fill-opacity:1;" />
|
||||
<polygon points="19 4.75, 19.5 5, 19.5 5.5, 19 5.75, 18.5 5.5, 18.5 5" style="fill:rgb(255,237,212); fill-opacity:1;" />
|
||||
<polygon points="20 4.75, 20.5 5, 20.5 5.5, 20 5.75, 19.5 5.5, 19.5 5" style="fill:rgb(249,223,199); fill-opacity:1;" />
|
||||
<polygon points="21 4.75, 21.5 5, 21.5 5.5, 21 5.75, 20.5 5.5, 20.5 5" style="fill:rgb(245,220,195); fill-opacity:1;" />
|
||||
<polygon points="22 4.75, 22.5 5, 22.5 5.5, 22 5.75, 21.5 5.5, 21.5 5" style="fill:rgb(249,223,198); fill-opacity:1;" />
|
||||
<polygon points="23 4.75, 23.5 5, 23.5 5.5, 23 5.75, 22.5 5.5, 22.5 5" style="fill:rgb(248,221,197); fill-opacity:1;" />
|
||||
<polygon points="24 4.75, 24.5 5, 24.5 5.5, 24 5.75, 23.5 5.5, 23.5 5" style="fill:rgb(246,221,196); fill-opacity:1;" />
|
||||
<polygon points="25 4.75, 25.5 5, 25.5 5.5, 25 5.75, 24.5 5.5, 24.5 5" style="fill:rgb(246,219,195); fill-opacity:1;" />
|
||||
<polygon points="26 4.75, 26.5 5, 26.5 5.5, 26 5.75, 25.5 5.5, 25.5 5" style="fill:rgb(254,227,202); fill-opacity:1;" />
|
||||
<polygon points="27 4.75, 27.5 5, 27.5 5.5, 27 5.75, 26.5 5.5, 26.5 5" style="fill:rgb(255,233,208); fill-opacity:1;" />
|
||||
<polygon points="28 4.75, 28.5 5, 28.5 5.5, 28 5.75, 27.5 5.5, 27.5 5" style="fill:rgb(255,241,215); fill-opacity:1;" />
|
||||
<polygon points="29 4.75, 29.5 5, 29.5 5.5, 29 5.75, 28.5 5.5, 28.5 5" style="fill:rgb(165,148,133); fill-opacity:0.894117647058824;" />
|
||||
<polygon points="30 4.75, 30.5 5, 30.5 5.5, 30 5.75, 29.5 5.5, 29.5 5" style="fill:rgb(82,65,57); fill-opacity:0.0901960784313725;" />
|
||||
<polygon points="6.5 5.5, 7 5.75, 7 6.25, 6.5 6.5, 6 6.25, 6 5.75" style="fill:rgb(246,219,195); fill-opacity:0.219607843137255;" />
|
||||
<polygon points="7.5 5.5, 8 5.75, 8 6.25, 7.5 6.5, 7 6.25, 7 5.75" style="fill:rgb(230,206,185); fill-opacity:0.854901960784314;" />
|
||||
<polygon points="8.5 5.5, 9 5.75, 9 6.25, 8.5 6.5, 8 6.25, 8 5.75" style="fill:rgb(198,182,169); fill-opacity:1;" />
|
||||
<polygon points="9.5 5.5, 10 5.75, 10 6.25, 9.5 6.5, 9 6.25, 9 5.75" style="fill:rgb(130,194,197); fill-opacity:1;" />
|
||||
<polygon points="10.5 5.5, 11 5.75, 11 6.25, 10.5 6.5, 10 6.25, 10 5.75" style="fill:rgb(87,202,210); fill-opacity:1;" />
|
||||
<polygon points="11.5 5.5, 12 5.75, 12 6.25, 11.5 6.5, 11 6.25, 11 5.75" style="fill:rgb(211,198,178); fill-opacity:1;" />
|
||||
<polygon points="12.5 5.5, 13 5.75, 13 6.25, 12.5 6.5, 12 6.25, 12 5.75" style="fill:rgb(237,208,183); fill-opacity:1;" />
|
||||
<polygon points="13.5 5.5, 14 5.75, 14 6.25, 13.5 6.5, 13 6.25, 13 5.75" style="fill:rgb(231,206,183); fill-opacity:1;" />
|
||||
<polygon points="14.5 5.5, 15 5.75, 15 6.25, 14.5 6.5, 14 6.25, 14 5.75" style="fill:rgb(233,208,184); fill-opacity:1;" />
|
||||
<polygon points="15.5 5.5, 16 5.75, 16 6.25, 15.5 6.5, 15 6.25, 15 5.75" style="fill:rgb(235,209,186); fill-opacity:1;" />
|
||||
<polygon points="16.5 5.5, 17 5.75, 17 6.25, 16.5 6.5, 16 6.25, 16 5.75" style="fill:rgb(194,171,153); fill-opacity:0.996078431372549;" />
|
||||
<polygon points="17.5 5.5, 18 5.75, 18 6.25, 17.5 6.5, 17 6.25, 17 5.75" style="fill:rgb(160,142,128); fill-opacity:0.886274509803922;" />
|
||||
<polygon points="18.5 5.5, 19 5.75, 19 6.25, 18.5 6.5, 18 6.25, 18 5.75" style="fill:rgb(183,163,147); fill-opacity:0.937254901960784;" />
|
||||
<polygon points="19.5 5.5, 20 5.75, 20 6.25, 19.5 6.5, 19 6.25, 19 5.75" style="fill:rgb(242,216,192); fill-opacity:1;" />
|
||||
<polygon points="20.5 5.5, 21 5.75, 21 6.25, 20.5 6.5, 20 6.25, 20 5.75" style="fill:rgb(249,222,197); fill-opacity:1;" />
|
||||
<polygon points="21.5 5.5, 22 5.75, 22 6.25, 21.5 6.5, 21 6.25, 21 5.75" style="fill:rgb(243,217,193); fill-opacity:1;" />
|
||||
<polygon points="22.5 5.5, 23 5.75, 23 6.25, 22.5 6.5, 22 6.25, 22 5.75" style="fill:rgb(238,213,189); fill-opacity:1;" />
|
||||
<polygon points="23.5 5.5, 24 5.75, 24 6.25, 23.5 6.5, 23 6.25, 23 5.75" style="fill:rgb(238,212,189); fill-opacity:1;" />
|
||||
<polygon points="24.5 5.5, 25 5.75, 25 6.25, 24.5 6.5, 24 6.25, 24 5.75" style="fill:rgb(247,222,197); fill-opacity:1;" />
|
||||
<polygon points="25.5 5.5, 26 5.75, 26 6.25, 25.5 6.5, 25 6.25, 25 5.75" style="fill:rgb(229,205,182); fill-opacity:1;" />
|
||||
<polygon points="26.5 5.5, 27 5.75, 27 6.25, 26.5 6.5, 26 6.25, 26 5.75" style="fill:rgb(188,167,148); fill-opacity:0.862745098039216;" />
|
||||
<polygon points="27.5 5.5, 28 5.75, 28 6.25, 27.5 6.5, 27 6.25, 27 5.75" style="fill:rgb(143,124,111); fill-opacity:0.658823529411765;" />
|
||||
<polygon points="28.5 5.5, 29 5.75, 29 6.25, 28.5 6.5, 28 6.25, 28 5.75" style="fill:rgb(98,79,71); fill-opacity:0.301960784313725;" />
|
||||
<polygon points="29.5 5.5, 30 5.75, 30 6.25, 29.5 6.5, 29 6.25, 29 5.75" style="fill:rgb(92,74,65); fill-opacity:0.00392156862745098;" />
|
||||
<polygon points="6 6.25, 6.5 6.5, 6.5 7, 6 7.25, 5.5 7, 5.5 6.5" style="fill:rgb(246,219,194); fill-opacity:0.235294117647059;" />
|
||||
<polygon points="7 6.25, 7.5 6.5, 7.5 7, 7 7.25, 6.5 7, 6.5 6.5" style="fill:rgb(228,202,182); fill-opacity:0.901960784313726;" />
|
||||
<polygon points="8 6.25, 8.5 6.5, 8.5 7, 8 7.25, 7.5 7, 7.5 6.5" style="fill:rgb(181,174,165); fill-opacity:1;" />
|
||||
<polygon points="9 6.25, 9.5 6.5, 9.5 7, 9 7.25, 8.5 7, 8.5 6.5" style="fill:rgb(91,180,197); fill-opacity:1;" />
|
||||
<polygon points="10 6.25, 10.5 6.5, 10.5 7, 10 7.25, 9.5 7, 9.5 6.5" style="fill:rgb(2,189,225); fill-opacity:1;" />
|
||||
<polygon points="11 6.25, 11.5 6.5, 11.5 7, 11 7.25, 10.5 7, 10.5 6.5" style="fill:rgb(11,167,195); fill-opacity:1;" />
|
||||
<polygon points="12 6.25, 12.5 6.5, 12.5 7, 12 7.25, 11.5 7, 11.5 6.5" style="fill:rgb(203,190,173); fill-opacity:1;" />
|
||||
<polygon points="13 6.25, 13.5 6.5, 13.5 7, 13 7.25, 12.5 7, 12.5 6.5" style="fill:rgb(240,209,184); fill-opacity:1;" />
|
||||
<polygon points="14 6.25, 14.5 6.5, 14.5 7, 14 7.25, 13.5 7, 13.5 6.5" style="fill:rgb(233,208,184); fill-opacity:1;" />
|
||||
<polygon points="15 6.25, 15.5 6.5, 15.5 7, 15 7.25, 14.5 7, 14.5 6.5" style="fill:rgb(217,192,171); fill-opacity:1;" />
|
||||
<polygon points="16 6.25, 16.5 6.5, 16.5 7, 16 7.25, 15.5 7, 15.5 6.5" style="fill:rgb(115,100,91); fill-opacity:0.752941176470588;" />
|
||||
<polygon points="17 6.25, 17.5 6.5, 17.5 7, 17 7.25, 16.5 7, 16.5 6.5" style="fill:rgb(55,48,46); fill-opacity:0.309803921568627;" />
|
||||
<polygon points="18 6.25, 18.5 6.5, 18.5 7, 18 7.25, 17.5 7, 17.5 6.5" style="fill:rgb(41,36,37); fill-opacity:0.129411764705882;" />
|
||||
<polygon points="19 6.25, 19.5 6.5, 19.5 7, 19 7.25, 18.5 7, 18.5 6.5" style="fill:rgb(28,24,27); fill-opacity:0.192156862745098;" />
|
||||
<polygon points="20 6.25, 20.5 6.5, 20.5 7, 20 7.25, 19.5 7, 19.5 6.5" style="fill:rgb(152,136,124); fill-opacity:0.717647058823529;" />
|
||||
<polygon points="21 6.25, 21.5 6.5, 21.5 7, 21 7.25, 20.5 7, 20.5 6.5" style="fill:rgb(255,227,202); fill-opacity:1;" />
|
||||
<polygon points="22 6.25, 22.5 6.5, 22.5 7, 22 7.25, 21.5 7, 21.5 6.5" style="fill:rgb(233,208,185); fill-opacity:1;" />
|
||||
<polygon points="23 6.25, 23.5 6.5, 23.5 7, 23 7.25, 22.5 7, 22.5 6.5" style="fill:rgb(232,207,184); fill-opacity:1;" />
|
||||
<polygon points="24 6.25, 24.5 6.5, 24.5 7, 24 7.25, 23.5 7, 23.5 6.5" style="fill:rgb(218,194,173); fill-opacity:1;" />
|
||||
<polygon points="25 6.25, 25.5 6.5, 25.5 7, 25 7.25, 24.5 7, 24.5 6.5" style="fill:rgb(155,134,119); fill-opacity:0.776470588235294;" />
|
||||
<polygon points="26 6.25, 26.5 6.5, 26.5 7, 26 7.25, 25.5 7, 25.5 6.5" style="fill:rgb(108,88,78); fill-opacity:0.384313725490196;" />
|
||||
<polygon points="27 6.25, 27.5 6.5, 27.5 7, 27 7.25, 26.5 7, 26.5 6.5" style="fill:rgb(90,73,64); fill-opacity:0.105882352941176;" />
|
||||
<polygon points="4.5 7, 5 7.25, 5 7.75, 4.5 8, 4 7.75, 4 7.25" style="fill:rgb(247,218,195); fill-opacity:0.137254901960784;" />
|
||||
<polygon points="5.5 7, 6 7.25, 6 7.75, 5.5 8, 5 7.75, 5 7.25" style="fill:rgb(233,206,182); fill-opacity:0.870588235294118;" />
|
||||
<polygon points="6.5 7, 7 7.25, 7 7.75, 6.5 8, 6 7.75, 6 7.25" style="fill:rgb(198,180,163); fill-opacity:1;" />
|
||||
<polygon points="7.5 7, 8 7.25, 8 7.75, 7.5 8, 7 7.75, 7 7.25" style="fill:rgb(118,167,181); fill-opacity:1;" />
|
||||
<polygon points="8.5 7, 9 7.25, 9 7.75, 8.5 8, 8 7.75, 8 7.25" style="fill:rgb(9,150,195); fill-opacity:1;" />
|
||||
<polygon points="9.5 7, 10 7.25, 10 7.75, 9.5 8, 9 7.75, 9 7.25" style="fill:rgb(9,132,171); fill-opacity:1;" />
|
||||
<polygon points="10.5 7, 11 7.25, 11 7.75, 10.5 8, 10 7.75, 10 7.25" style="fill:rgb(101,150,160); fill-opacity:1;" />
|
||||
<polygon points="11.5 7, 12 7.25, 12 7.75, 11.5 8, 11 7.75, 11 7.25" style="fill:rgb(231,203,181); fill-opacity:1;" />
|
||||
<polygon points="12.5 7, 13 7.25, 13 7.75, 12.5 8, 12 7.75, 12 7.25" style="fill:rgb(236,209,185); fill-opacity:1;" />
|
||||
<polygon points="13.5 7, 14 7.25, 14 7.75, 13.5 8, 13 7.75, 13 7.25" style="fill:rgb(237,210,187); fill-opacity:1;" />
|
||||
<polygon points="14.5 7, 15 7.25, 15 7.75, 14.5 8, 14 7.75, 14 7.25" style="fill:rgb(119,105,95); fill-opacity:0.764705882352941;" />
|
||||
<polygon points="15.5 7, 16 7.25, 16 7.75, 15.5 8, 15 7.75, 15 7.25" style="fill:rgb(32,28,31); fill-opacity:0.0745098039215686;" />
|
||||
<polygon points="19.5 7, 20 7.25, 20 7.75, 19.5 8, 19 7.75, 19 7.25" style="fill:rgb(131,118,108); fill-opacity:0.407843137254902;" />
|
||||
<polygon points="20.5 7, 21 7.25, 21 7.75, 20.5 8, 20 7.75, 20 7.25" style="fill:rgb(246,219,194); fill-opacity:1;" />
|
||||
<polygon points="21.5 7, 22 7.25, 22 7.75, 21.5 8, 21 7.75, 21 7.25" style="fill:rgb(229,205,182); fill-opacity:1;" />
|
||||
<polygon points="22.5 7, 23 7.25, 23 7.75, 22.5 8, 22 7.75, 22 7.25" style="fill:rgb(200,176,157); fill-opacity:0.992156862745098;" />
|
||||
<polygon points="23.5 7, 24 7.25, 24 7.75, 23.5 8, 23 7.75, 23 7.25" style="fill:rgb(108,89,79); fill-opacity:0.529411764705882;" />
|
||||
<polygon points="24.5 7, 25 7.25, 25 7.75, 24.5 8, 24 7.75, 24 7.25" style="fill:rgb(75,58,50); fill-opacity:0.0470588235294118;" />
|
||||
<polygon points="4 7.75, 4.5 8, 4.5 8.5, 4 8.75, 3.5 8.5, 3.5 8" style="fill:rgb(243,215,192); fill-opacity:0.0352941176470588;" />
|
||||
<polygon points="5 7.75, 5.5 8, 5.5 8.5, 5 8.75, 4.5 8.5, 4.5 8" style="fill:rgb(236,208,186); fill-opacity:0.72156862745098;" />
|
||||
<polygon points="6 7.75, 6.5 8, 6.5 8.5, 6 8.75, 5.5 8.5, 5.5 8" style="fill:rgb(215,188,167); fill-opacity:1;" />
|
||||
<polygon points="7 7.75, 7.5 8, 7.5 8.5, 7 8.75, 6.5 8.5, 6.5 8" style="fill:rgb(188,181,169); fill-opacity:1;" />
|
||||
<polygon points="8 7.75, 8.5 8, 8.5 8.5, 8 8.75, 7.5 8.5, 7.5 8" style="fill:rgb(60,134,169); fill-opacity:1;" />
|
||||
<polygon points="9 7.75, 9.5 8, 9.5 8.5, 9 8.75, 8.5 8.5, 8.5 8" style="fill:rgb(25,106,148); fill-opacity:1;" />
|
||||
<polygon points="10 7.75, 10.5 8, 10.5 8.5, 10 8.75, 9.5 8.5, 9.5 8" style="fill:rgb(140,156,160); fill-opacity:1;" />
|
||||
<polygon points="11 7.75, 11.5 8, 11.5 8.5, 11 8.75, 10.5 8.5, 10.5 8" style="fill:rgb(222,199,180); fill-opacity:1;" />
|
||||
<polygon points="12 7.75, 12.5 8, 12.5 8.5, 12 8.75, 11.5 8.5, 11.5 8" style="fill:rgb(237,208,185); fill-opacity:1;" />
|
||||
<polygon points="13 7.75, 13.5 8, 13.5 8.5, 13 8.75, 12.5 8.5, 12.5 8" style="fill:rgb(237,209,188); fill-opacity:1;" />
|
||||
<polygon points="14 7.75, 14.5 8, 14.5 8.5, 14 8.75, 13.5 8.5, 13.5 8" style="fill:rgb(227,200,179); fill-opacity:1;" />
|
||||
<polygon points="15 7.75, 15.5 8, 15.5 8.5, 15 8.75, 14.5 8.5, 14.5 8" style="fill:rgb(73,65,62); fill-opacity:0.427450980392157;" />
|
||||
<polygon points="19 7.75, 19.5 8, 19.5 8.5, 19 8.75, 18.5 8.5, 18.5 8" style="fill:rgb(159,144,129); fill-opacity:0.0470588235294118;" />
|
||||
<polygon points="20 7.75, 20.5 8, 20.5 8.5, 20 8.75, 19.5 8.5, 19.5 8" style="fill:rgb(204,182,163); fill-opacity:0.72156862745098;" />
|
||||
<polygon points="21 7.75, 21.5 8, 21.5 8.5, 21 8.75, 20.5 8.5, 20.5 8" style="fill:rgb(225,199,177); fill-opacity:1;" />
|
||||
<polygon points="22 7.75, 22.5 8, 22.5 8.5, 22 8.75, 21.5 8.5, 21.5 8" style="fill:rgb(204,181,162); fill-opacity:1;" />
|
||||
<polygon points="23 7.75, 23.5 8, 23.5 8.5, 23 8.75, 22.5 8.5, 22.5 8" style="fill:rgb(111,92,81); fill-opacity:0.588235294117647;" />
|
||||
<polygon points="3.5 8.5, 4 8.75, 4 9.25, 3.5 9.5, 3 9.25, 3 8.75" style="fill:rgb(238,211,187); fill-opacity:0.470588235294118;" />
|
||||
<polygon points="4.5 8.5, 5 8.75, 5 9.25, 4.5 9.5, 4 9.25, 4 8.75" style="fill:rgb(217,191,171); fill-opacity:1;" />
|
||||
<polygon points="5.5 8.5, 6 8.75, 6 9.25, 5.5 9.5, 5 9.25, 5 8.75" style="fill:rgb(214,189,169); fill-opacity:1;" />
|
||||
<polygon points="6.5 8.5, 7 8.75, 7 9.25, 6.5 9.5, 6 9.25, 6 8.75" style="fill:rgb(207,189,172); fill-opacity:1;" />
|
||||
<polygon points="7.5 8.5, 8 8.75, 8 9.25, 7.5 9.5, 7 9.25, 7 8.75" style="fill:rgb(165,166,163); fill-opacity:1;" />
|
||||
<polygon points="8.5 8.5, 9 8.75, 9 9.25, 8.5 9.5, 8 9.25, 8 8.75" style="fill:rgb(175,173,166); fill-opacity:1;" />
|
||||
<polygon points="9.5 8.5, 10 8.75, 10 9.25, 9.5 9.5, 9 9.25, 9 8.75" style="fill:rgb(228,201,181); fill-opacity:1;" />
|
||||
<polygon points="10.5 8.5, 11 8.75, 11 9.25, 10.5 9.5, 10 9.25, 10 8.75" style="fill:rgb(242,208,184); fill-opacity:1;" />
|
||||
<polygon points="11.5 8.5, 12 8.75, 12 9.25, 11.5 9.5, 11 9.25, 11 8.75" style="fill:rgb(233,206,184); fill-opacity:1;" />
|
||||
<polygon points="12.5 8.5, 13 8.75, 13 9.25, 12.5 9.5, 12 9.25, 12 8.75" style="fill:rgb(233,206,184); fill-opacity:1;" />
|
||||
<polygon points="13.5 8.5, 14 8.75, 14 9.25, 13.5 9.5, 13 9.25, 13 8.75" style="fill:rgb(234,207,185); fill-opacity:1;" />
|
||||
<polygon points="14.5 8.5, 15 8.75, 15 9.25, 14.5 9.5, 14 9.25, 14 8.75" style="fill:rgb(189,166,149); fill-opacity:0.592156862745098;" />
|
||||
<polygon points="15.5 8.5, 16 8.75, 16 9.25, 15.5 9.5, 15 9.25, 15 8.75" style="fill:rgb(198,175,157); fill-opacity:0.0980392156862745;" />
|
||||
<polygon points="16.5 8.5, 17 8.75, 17 9.25, 16.5 9.5, 16 9.25, 16 8.75" style="fill:rgb(159,143,130); fill-opacity:0.117647058823529;" />
|
||||
<polygon points="17.5 8.5, 18 8.75, 18 9.25, 17.5 9.5, 17 9.25, 17 8.75" style="fill:rgb(181,161,146); fill-opacity:0.282352941176471;" />
|
||||
<polygon points="18.5 8.5, 19 8.75, 19 9.25, 18.5 9.5, 18 9.25, 18 8.75" style="fill:rgb(211,187,168); fill-opacity:0.717647058823529;" />
|
||||
<polygon points="19.5 8.5, 20 8.75, 20 9.25, 19.5 9.5, 19 9.25, 19 8.75" style="fill:rgb(230,203,182); fill-opacity:1;" />
|
||||
<polygon points="20.5 8.5, 21 8.75, 21 9.25, 20.5 9.5, 20 9.25, 20 8.75" style="fill:rgb(204,179,160); fill-opacity:1;" />
|
||||
<polygon points="21.5 8.5, 22 8.75, 22 9.25, 21.5 9.5, 21 9.25, 21 8.75" style="fill:rgb(179,156,140); fill-opacity:0.992156862745098;" />
|
||||
<polygon points="22.5 8.5, 23 8.75, 23 9.25, 22.5 9.5, 22 9.25, 22 8.75" style="fill:rgb(67,53,46); fill-opacity:0.247058823529412;" />
|
||||
<polygon points="3 9.25, 3.5 9.5, 3.5 10, 3 10.25, 2.5 10, 2.5 9.5" style="fill:rgb(235,207,185); fill-opacity:0.156862745098039;" />
|
||||
<polygon points="4 9.25, 4.5 9.5, 4.5 10, 4 10.25, 3.5 10, 3.5 9.5" style="fill:rgb(227,199,178); fill-opacity:0.913725490196078;" />
|
||||
<polygon points="5 9.25, 5.5 9.5, 5.5 10, 5 10.25, 4.5 10, 4.5 9.5" style="fill:rgb(211,187,168); fill-opacity:1;" />
|
||||
<polygon points="6 9.25, 6.5 9.5, 6.5 10, 6 10.25, 5.5 10, 5.5 9.5" style="fill:rgb(146,170,169); fill-opacity:1;" />
|
||||
<polygon points="7 9.25, 7.5 9.5, 7.5 10, 7 10.25, 6.5 10, 6.5 9.5" style="fill:rgb(200,182,168); fill-opacity:1;" />
|
||||
<polygon points="8 9.25, 8.5 9.5, 8.5 10, 8 10.25, 7.5 10, 7.5 9.5" style="fill:rgb(223,198,179); fill-opacity:1;" />
|
||||
<polygon points="9 9.25, 9.5 9.5, 9.5 10, 9 10.25, 8.5 10, 8.5 9.5" style="fill:rgb(229,198,176); fill-opacity:1;" />
|
||||
<polygon points="10 9.25, 10.5 9.5, 10.5 10, 10 10.25, 9.5 10, 9.5 9.5" style="fill:rgb(216,204,187); fill-opacity:1;" />
|
||||
<polygon points="11 9.25, 11.5 9.5, 11.5 10, 11 10.25, 10.5 10, 10.5 9.5" style="fill:rgb(211,204,186); fill-opacity:1;" />
|
||||
<polygon points="12 9.25, 12.5 9.5, 12.5 10, 12 10.25, 11.5 10, 11.5 9.5" style="fill:rgb(236,205,183); fill-opacity:1;" />
|
||||
<polygon points="13 9.25, 13.5 9.5, 13.5 10, 13 10.25, 12.5 10, 12.5 9.5" style="fill:rgb(233,205,184); fill-opacity:1;" />
|
||||
<polygon points="14 9.25, 14.5 9.5, 14.5 10, 14 10.25, 13.5 10, 13.5 9.5" style="fill:rgb(235,207,185); fill-opacity:1;" />
|
||||
<polygon points="15 9.25, 15.5 9.5, 15.5 10, 15 10.25, 14.5 10, 14.5 9.5" style="fill:rgb(240,211,189); fill-opacity:0.984313725490196;" />
|
||||
<polygon points="16 9.25, 16.5 9.5, 16.5 10, 16 10.25, 15.5 10, 15.5 9.5" style="fill:rgb(227,200,179); fill-opacity:0.894117647058824;" />
|
||||
<polygon points="17 9.25, 17.5 9.5, 17.5 10, 17 10.25, 16.5 10, 16.5 9.5" style="fill:rgb(226,200,183); fill-opacity:0.909803921568627;" />
|
||||
<polygon points="18 9.25, 18.5 9.5, 18.5 10, 18 10.25, 17.5 10, 17.5 9.5" style="fill:rgb(233,208,191); fill-opacity:0.980392156862745;" />
|
||||
<polygon points="19 9.25, 19.5 9.5, 19.5 10, 19 10.25, 18.5 10, 18.5 9.5" style="fill:rgb(242,213,193); fill-opacity:1;" />
|
||||
<polygon points="20 9.25, 20.5 9.5, 20.5 10, 20 10.25, 19.5 10, 19.5 9.5" style="fill:rgb(215,189,168); fill-opacity:1;" />
|
||||
<polygon points="21 9.25, 21.5 9.5, 21.5 10, 21 10.25, 20.5 10, 20.5 9.5" style="fill:rgb(193,169,151); fill-opacity:1;" />
|
||||
<polygon points="22 9.25, 22.5 9.5, 22.5 10, 22 10.25, 21.5 10, 21.5 9.5" style="fill:rgb(191,167,149); fill-opacity:0.996078431372549;" />
|
||||
<polygon points="23 9.25, 23.5 9.5, 23.5 10, 23 10.25, 22.5 10, 22.5 9.5" style="fill:rgb(101,88,79); fill-opacity:0.541176470588235;" />
|
||||
<polygon points="24 9.25, 24.5 9.5, 24.5 10, 24 10.25, 23.5 10, 23.5 9.5" style="fill:rgb(196,188,181); fill-opacity:0.0313725490196078;" />
|
||||
<polygon points="25 9.25, 25.5 9.5, 25.5 10, 25 10.25, 24.5 10, 24.5 9.5" style="fill:rgb(255,252,243); fill-opacity:0.0196078431372549;" />
|
||||
<polygon points="26 9.25, 26.5 9.5, 26.5 10, 26 10.25, 25.5 10, 25.5 9.5" style="fill:rgb(242,224,210); fill-opacity:0.12156862745098;" />
|
||||
<polygon points="27 9.25, 27.5 9.5, 27.5 10, 27 10.25, 26.5 10, 26.5 9.5" style="fill:rgb(250,233,221); fill-opacity:0.149019607843137;" />
|
||||
<polygon points="28 9.25, 28.5 9.5, 28.5 10, 28 10.25, 27.5 10, 27.5 9.5" style="fill:rgb(179,164,153); fill-opacity:0.0470588235294118;" />
|
||||
<polygon points="2.5 10, 3 10.25, 3 10.75, 2.5 11, 2 10.75, 2 10.25" style="fill:rgb(231,202,182); fill-opacity:0.572549019607843;" />
|
||||
<polygon points="3.5 10, 4 10.25, 4 10.75, 3.5 11, 3 10.75, 3 10.25" style="fill:rgb(214,188,169); fill-opacity:1;" />
|
||||
<polygon points="4.5 10, 5 10.25, 5 10.75, 4.5 11, 4 10.75, 4 10.25" style="fill:rgb(211,187,168); fill-opacity:1;" />
|
||||
<polygon points="5.5 10, 6 10.25, 6 10.75, 5.5 11, 5 10.75, 5 10.25" style="fill:rgb(160,175,173); fill-opacity:1;" />
|
||||
<polygon points="6.5 10, 7 10.25, 7 10.75, 6.5 11, 6 10.75, 6 10.25" style="fill:rgb(132,181,184); fill-opacity:1;" />
|
||||
<polygon points="7.5 10, 8 10.25, 8 10.75, 7.5 11, 7 10.75, 7 10.25" style="fill:rgb(133,185,187); fill-opacity:1;" />
|
||||
<polygon points="8.5 10, 9 10.25, 9 10.75, 8.5 11, 8 10.75, 8 10.25" style="fill:rgb(123,203,205); fill-opacity:1;" />
|
||||
<polygon points="9.5 10, 10 10.25, 10 10.75, 9.5 11, 9 10.75, 9 10.25" style="fill:rgb(85,203,213); fill-opacity:1;" />
|
||||
<polygon points="10.5 10, 11 10.25, 11 10.75, 10.5 11, 10 10.75, 10 10.25" style="fill:rgb(150,189,181); fill-opacity:1;" />
|
||||
<polygon points="11.5 10, 12 10.25, 12 10.75, 11.5 11, 11 10.75, 11 10.25" style="fill:rgb(247,207,181); fill-opacity:1;" />
|
||||
<polygon points="12.5 10, 13 10.25, 13 10.75, 12.5 11, 12 10.75, 12 10.25" style="fill:rgb(232,205,183); fill-opacity:1;" />
|
||||
<polygon points="13.5 10, 14 10.25, 14 10.75, 13.5 11, 13 10.75, 13 10.25" style="fill:rgb(232,203,181); fill-opacity:1;" />
|
||||
<polygon points="14.5 10, 15 10.25, 15 10.75, 14.5 11, 14 10.75, 14 10.25" style="fill:rgb(224,196,173); fill-opacity:1;" />
|
||||
<polygon points="15.5 10, 16 10.25, 16 10.75, 15.5 11, 15 10.75, 15 10.25" style="fill:rgb(229,202,181); fill-opacity:1;" />
|
||||
<polygon points="16.5 10, 17 10.25, 17 10.75, 16.5 11, 16 10.75, 16 10.25" style="fill:rgb(234,199,167); fill-opacity:1;" />
|
||||
<polygon points="17.5 10, 18 10.25, 18 10.75, 17.5 11, 17 10.75, 17 10.25" style="fill:rgb(229,187,145); fill-opacity:1;" />
|
||||
<polygon points="18.5 10, 19 10.25, 19 10.75, 18.5 11, 18 10.75, 18 10.25" style="fill:rgb(220,185,156); fill-opacity:1;" />
|
||||
<polygon points="19.5 10, 20 10.25, 20 10.75, 19.5 11, 19 10.75, 19 10.25" style="fill:rgb(220,193,172); fill-opacity:1;" />
|
||||
<polygon points="20.5 10, 21 10.25, 21 10.75, 20.5 11, 20 10.75, 20 10.25" style="fill:rgb(204,179,160); fill-opacity:1;" />
|
||||
<polygon points="21.5 10, 22 10.25, 22 10.75, 21.5 11, 21 10.75, 21 10.25" style="fill:rgb(202,177,157); fill-opacity:1;" />
|
||||
<polygon points="22.5 10, 23 10.25, 23 10.75, 22.5 11, 22 10.75, 22 10.25" style="fill:rgb(210,187,169); fill-opacity:0.984313725490196;" />
|
||||
<polygon points="23.5 10, 24 10.25, 24 10.75, 23.5 11, 23 10.75, 23 10.25" style="fill:rgb(219,201,188); fill-opacity:0.737254901960784;" />
|
||||
<polygon points="24.5 10, 25 10.25, 25 10.75, 24.5 11, 24 10.75, 24 10.25" style="fill:rgb(229,211,196); fill-opacity:0.733333333333333;" />
|
||||
<polygon points="25.5 10, 26 10.25, 26 10.75, 25.5 11, 25 10.75, 25 10.25" style="fill:rgb(213,190,173); fill-opacity:0.874509803921569;" />
|
||||
<polygon points="26.5 10, 27 10.25, 27 10.75, 26.5 11, 26 10.75, 26 10.25" style="fill:rgb(220,196,178); fill-opacity:0.901960784313726;" />
|
||||
<polygon points="27.5 10, 28 10.25, 28 10.75, 27.5 11, 27 10.75, 27 10.25" style="fill:rgb(216,192,174); fill-opacity:0.788235294117647;" />
|
||||
<polygon points="28.5 10, 29 10.25, 29 10.75, 28.5 11, 28 10.75, 28 10.25" style="fill:rgb(117,102,90); fill-opacity:0.333333333333333;" />
|
||||
<polygon points="2 10.75, 2.5 11, 2.5 11.5, 2 11.75, 1.5 11.5, 1.5 11" style="fill:rgb(223,196,176); fill-opacity:0.125490196078431;" />
|
||||
<polygon points="3 10.75, 3.5 11, 3.5 11.5, 3 11.75, 2.5 11.5, 2.5 11" style="fill:rgb(221,194,175); fill-opacity:0.894117647058824;" />
|
||||
<polygon points="4 10.75, 4.5 11, 4.5 11.5, 4 11.75, 3.5 11.5, 3.5 11" style="fill:rgb(214,183,166); fill-opacity:1;" />
|
||||
<polygon points="5 10.75, 5.5 11, 5.5 11.5, 5 11.75, 4.5 11.5, 4.5 11" style="fill:rgb(165,194,190); fill-opacity:1;" />
|
||||
<polygon points="6 10.75, 6.5 11, 6.5 11.5, 6 11.75, 5.5 11.5, 5.5 11" style="fill:rgb(47,204,226); fill-opacity:1;" />
|
||||
<polygon points="7 10.75, 7.5 11, 7.5 11.5, 7 11.75, 6.5 11.5, 6.5 11" style="fill:rgb(40,184,206); fill-opacity:1;" />
|
||||
<polygon points="8 10.75, 8.5 11, 8.5 11.5, 8 11.75, 7.5 11.5, 7.5 11" style="fill:rgb(68,188,207); fill-opacity:1;" />
|
||||
<polygon points="9 10.75, 9.5 11, 9.5 11.5, 9 11.75, 8.5 11.5, 8.5 11" style="fill:rgb(0,201,231); fill-opacity:1;" />
|
||||
<polygon points="10 10.75, 10.5 11, 10.5 11.5, 10 11.75, 9.5 11.5, 9.5 11" style="fill:rgb(55,173,188); fill-opacity:1;" />
|
||||
<polygon points="11 10.75, 11.5 11, 11.5 11.5, 11 11.75, 10.5 11.5, 10.5 11" style="fill:rgb(219,192,173); fill-opacity:1;" />
|
||||
<polygon points="12 10.75, 12.5 11, 12.5 11.5, 12 11.75, 11.5 11.5, 11.5 11" style="fill:rgb(236,206,184); fill-opacity:1;" />
|
||||
<polygon points="13 10.75, 13.5 11, 13.5 11.5, 13 11.75, 12.5 11.5, 12.5 11" style="fill:rgb(229,200,178); fill-opacity:1;" />
|
||||
<polygon points="14 10.75, 14.5 11, 14.5 11.5, 14 11.75, 13.5 11.5, 13.5 11" style="fill:rgb(215,183,158); fill-opacity:1;" />
|
||||
<polygon points="15 10.75, 15.5 11, 15.5 11.5, 15 11.75, 14.5 11.5, 14.5 11" style="fill:rgb(201,167,139); fill-opacity:1;" />
|
||||
<polygon points="16 10.75, 16.5 11, 16.5 11.5, 16 11.75, 15.5 11.5, 15.5 11" style="fill:rgb(222,164,101); fill-opacity:1;" />
|
||||
<polygon points="17 10.75, 17.5 11, 17.5 11.5, 17 11.75, 16.5 11.5, 16.5 11" style="fill:rgb(238,139,36); fill-opacity:1;" />
|
||||
<polygon points="18 10.75, 18.5 11, 18.5 11.5, 18 11.75, 17.5 11.5, 17.5 11" style="fill:rgb(217,122,25); fill-opacity:1;" />
|
||||
<polygon points="19 10.75, 19.5 11, 19.5 11.5, 19 11.75, 18.5 11.5, 18.5 11" style="fill:rgb(201,155,113); fill-opacity:1;" />
|
||||
<polygon points="20 10.75, 20.5 11, 20.5 11.5, 20 11.75, 19.5 11.5, 19.5 11" style="fill:rgb(220,192,171); fill-opacity:1;" />
|
||||
<polygon points="21 10.75, 21.5 11, 21.5 11.5, 21 11.75, 20.5 11.5, 20.5 11" style="fill:rgb(217,191,171); fill-opacity:1;" />
|
||||
<polygon points="22 10.75, 22.5 11, 22.5 11.5, 22 11.75, 21.5 11.5, 21.5 11" style="fill:rgb(218,193,173); fill-opacity:1;" />
|
||||
<polygon points="23 10.75, 23.5 11, 23.5 11.5, 23 11.75, 22.5 11.5, 22.5 11" style="fill:rgb(223,196,176); fill-opacity:1;" />
|
||||
<polygon points="24 10.75, 24.5 11, 24.5 11.5, 24 11.75, 23.5 11.5, 23.5 11" style="fill:rgb(217,191,171); fill-opacity:1;" />
|
||||
<polygon points="25 10.75, 25.5 11, 25.5 11.5, 25 11.75, 24.5 11.5, 24.5 11" style="fill:rgb(204,178,159); fill-opacity:1;" />
|
||||
<polygon points="26 10.75, 26.5 11, 26.5 11.5, 26 11.75, 25.5 11.5, 25.5 11" style="fill:rgb(204,179,160); fill-opacity:1;" />
|
||||
<polygon points="27 10.75, 27.5 11, 27.5 11.5, 27 11.75, 26.5 11.5, 26.5 11" style="fill:rgb(216,189,169); fill-opacity:1;" />
|
||||
<polygon points="28 10.75, 28.5 11, 28.5 11.5, 28 11.75, 27.5 11.5, 27.5 11" style="fill:rgb(244,214,192); fill-opacity:1;" />
|
||||
<polygon points="29 10.75, 29.5 11, 29.5 11.5, 29 11.75, 28.5 11.5, 28.5 11" style="fill:rgb(207,182,163); fill-opacity:0.952941176470588;" />
|
||||
<polygon points="30 10.75, 30.5 11, 30.5 11.5, 30 11.75, 29.5 11.5, 29.5 11" style="fill:rgb(84,68,60); fill-opacity:0.235294117647059;" />
|
||||
<polygon points="1.5 11.5, 2 11.75, 2 12.25, 1.5 12.5, 1 12.25, 1 11.75" style="fill:rgb(228,200,179); fill-opacity:0.396078431372549;" />
|
||||
<polygon points="2.5 11.5, 3 11.75, 3 12.25, 2.5 12.5, 2 12.25, 2 11.75" style="fill:rgb(219,186,165); fill-opacity:1;" />
|
||||
<polygon points="3.5 11.5, 4 11.75, 4 12.25, 3.5 12.5, 3 12.25, 3 11.75" style="fill:rgb(149,185,184); fill-opacity:1;" />
|
||||
<polygon points="4.5 11.5, 5 11.75, 5 12.25, 4.5 12.5, 4 12.25, 4 11.75" style="fill:rgb(29,185,215); fill-opacity:1;" />
|
||||
<polygon points="5.5 11.5, 6 11.75, 6 12.25, 5.5 12.5, 5 12.25, 5 11.75" style="fill:rgb(13,179,211); fill-opacity:1;" />
|
||||
<polygon points="6.5 11.5, 7 11.75, 7 12.25, 6.5 12.5, 6 12.25, 6 11.75" style="fill:rgb(21,179,209); fill-opacity:1;" />
|
||||
<polygon points="7.5 11.5, 8 11.75, 8 12.25, 7.5 12.5, 7 12.25, 7 11.75" style="fill:rgb(21,170,199); fill-opacity:1;" />
|
||||
<polygon points="8.5 11.5, 9 11.75, 9 12.25, 8.5 12.5, 8 12.25, 8 11.75" style="fill:rgb(68,158,174); fill-opacity:1;" />
|
||||
<polygon points="9.5 11.5, 10 11.75, 10 12.25, 9.5 12.5, 9 12.25, 9 11.75" style="fill:rgb(196,182,170); fill-opacity:1;" />
|
||||
<polygon points="10.5 11.5, 11 11.75, 11 12.25, 10.5 12.5, 10 12.25, 10 11.75" style="fill:rgb(238,204,183); fill-opacity:1;" />
|
||||
<polygon points="11.5 11.5, 12 11.75, 12 12.25, 11.5 12.5, 11 12.25, 11 11.75" style="fill:rgb(230,203,182); fill-opacity:1;" />
|
||||
<polygon points="12.5 11.5, 13 11.75, 13 12.25, 12.5 12.5, 12 12.25, 12 11.75" style="fill:rgb(220,190,169); fill-opacity:1;" />
|
||||
<polygon points="13.5 11.5, 14 11.75, 14 12.25, 13.5 12.5, 13 12.25, 13 11.75" style="fill:rgb(200,159,121); fill-opacity:1;" />
|
||||
<polygon points="14.5 11.5, 15 11.75, 15 12.25, 14.5 12.5, 14 12.25, 14 11.75" style="fill:rgb(201,140,78); fill-opacity:1;" />
|
||||
<polygon points="15.5 11.5, 16 11.75, 16 12.25, 15.5 12.5, 15 12.25, 15 11.75" style="fill:rgb(218,124,28); fill-opacity:1;" />
|
||||
<polygon points="16.5 11.5, 17 11.75, 17 12.25, 16.5 12.5, 16 12.25, 16 11.75" style="fill:rgb(210,111,16); fill-opacity:1;" />
|
||||
<polygon points="17.5 11.5, 18 11.75, 18 12.25, 17.5 12.5, 17 12.25, 17 11.75" style="fill:rgb(186,115,49); fill-opacity:1;" />
|
||||
<polygon points="18.5 11.5, 19 11.75, 19 12.25, 18.5 12.5, 18 12.25, 18 11.75" style="fill:rgb(193,140,91); fill-opacity:1;" />
|
||||
<polygon points="19.5 11.5, 20 11.75, 20 12.25, 19.5 12.5, 19 12.25, 19 11.75" style="fill:rgb(216,186,164); fill-opacity:1;" />
|
||||
<polygon points="20.5 11.5, 21 11.75, 21 12.25, 20.5 12.5, 20 12.25, 20 11.75" style="fill:rgb(229,201,182); fill-opacity:1;" />
|
||||
<polygon points="21.5 11.5, 22 11.75, 22 12.25, 21.5 12.5, 21 12.25, 21 11.75" style="fill:rgb(231,204,185); fill-opacity:1;" />
|
||||
<polygon points="22.5 11.5, 23 11.75, 23 12.25, 22.5 12.5, 22 12.25, 22 11.75" style="fill:rgb(230,203,184); fill-opacity:1;" />
|
||||
<polygon points="23.5 11.5, 24 11.75, 24 12.25, 23.5 12.5, 23 12.25, 23 11.75" style="fill:rgb(223,197,179); fill-opacity:1;" />
|
||||
<polygon points="24.5 11.5, 25 11.75, 25 12.25, 24.5 12.5, 24 12.25, 24 11.75" style="fill:rgb(220,194,177); fill-opacity:1;" />
|
||||
<polygon points="25.5 11.5, 26 11.75, 26 12.25, 25.5 12.5, 25 12.25, 25 11.75" style="fill:rgb(223,197,178); fill-opacity:1;" />
|
||||
<polygon points="26.5 11.5, 27 11.75, 27 12.25, 26.5 12.5, 26 12.25, 26 11.75" style="fill:rgb(231,202,182); fill-opacity:1;" />
|
||||
<polygon points="27.5 11.5, 28 11.75, 28 12.25, 27.5 12.5, 27 12.25, 27 11.75" style="fill:rgb(233,204,183); fill-opacity:1;" />
|
||||
<polygon points="28.5 11.5, 29 11.75, 29 12.25, 28.5 12.5, 28 12.25, 28 11.75" style="fill:rgb(238,208,187); fill-opacity:1;" />
|
||||
<polygon points="29.5 11.5, 30 11.75, 30 12.25, 29.5 12.5, 29 12.25, 29 11.75" style="fill:rgb(124,103,93); fill-opacity:0.580392156862745;" />
|
||||
<polygon points="2 12.25, 2.5 12.5, 2.5 13, 2 13.25, 1.5 13, 1.5 12.5" style="fill:rgb(224,196,175); fill-opacity:0.654901960784314;" />
|
||||
<polygon points="3 12.25, 3.5 12.5, 3.5 13, 3 13.25, 2.5 13, 2.5 12.5" style="fill:rgb(212,182,163); fill-opacity:1;" />
|
||||
<polygon points="4 12.25, 4.5 12.5, 4.5 13, 4 13.25, 3.5 13, 3.5 12.5" style="fill:rgb(133,171,176); fill-opacity:1;" />
|
||||
<polygon points="5 12.25, 5.5 12.5, 5.5 13, 5 13.25, 4.5 13, 4.5 12.5" style="fill:rgb(16,159,195); fill-opacity:1;" />
|
||||
<polygon points="6 12.25, 6.5 12.5, 6.5 13, 6 13.25, 5.5 13, 5.5 12.5" style="fill:rgb(23,163,198); fill-opacity:1;" />
|
||||
<polygon points="7 12.25, 7.5 12.5, 7.5 13, 7 13.25, 6.5 13, 6.5 12.5" style="fill:rgb(43,140,170); fill-opacity:1;" />
|
||||
<polygon points="8 12.25, 8.5 12.5, 8.5 13, 8 13.25, 7.5 13, 7.5 12.5" style="fill:rgb(99,146,164); fill-opacity:1;" />
|
||||
<polygon points="9 12.25, 9.5 12.5, 9.5 13, 9 13.25, 8.5 13, 8.5 12.5" style="fill:rgb(181,178,174); fill-opacity:1;" />
|
||||
<polygon points="10 12.25, 10.5 12.5, 10.5 13, 10 13.25, 9.5 13, 9.5 12.5" style="fill:rgb(224,199,182); fill-opacity:1;" />
|
||||
<polygon points="11 12.25, 11.5 12.5, 11.5 13, 11 13.25, 10.5 13, 10.5 12.5" style="fill:rgb(228,201,182); fill-opacity:1;" />
|
||||
<polygon points="12 12.25, 12.5 12.5, 12.5 13, 12 13.25, 11.5 13, 11.5 12.5" style="fill:rgb(226,199,181); fill-opacity:1;" />
|
||||
<polygon points="13 12.25, 13.5 12.5, 13.5 13, 13 13.25, 12.5 13, 12.5 12.5" style="fill:rgb(213,183,161); fill-opacity:1;" />
|
||||
<polygon points="14 12.25, 14.5 12.5, 14.5 13, 14 13.25, 13.5 13, 13.5 12.5" style="fill:rgb(193,140,92); fill-opacity:1;" />
|
||||
<polygon points="15 12.25, 15.5 12.5, 15.5 13, 15 13.25, 14.5 13, 14.5 12.5" style="fill:rgb(195,111,27); fill-opacity:1;" />
|
||||
<polygon points="16 12.25, 16.5 12.5, 16.5 13, 16 13.25, 15.5 13, 15.5 12.5" style="fill:rgb(199,112,28); fill-opacity:1;" />
|
||||
<polygon points="17 12.25, 17.5 12.5, 17.5 13, 17 13.25, 16.5 13, 16.5 12.5" style="fill:rgb(180,108,39); fill-opacity:1;" />
|
||||
<polygon points="18 12.25, 18.5 12.5, 18.5 13, 18 13.25, 17.5 13, 17.5 12.5" style="fill:rgb(176,130,85); fill-opacity:1;" />
|
||||
<polygon points="19 12.25, 19.5 12.5, 19.5 13, 19 13.25, 18.5 13, 18.5 12.5" style="fill:rgb(197,159,126); fill-opacity:1;" />
|
||||
<polygon points="20 12.25, 20.5 12.5, 20.5 13, 20 13.25, 19.5 13, 19.5 12.5" style="fill:rgb(220,191,169); fill-opacity:1;" />
|
||||
<polygon points="21 12.25, 21.5 12.5, 21.5 13, 21 13.25, 20.5 13, 20.5 12.5" style="fill:rgb(230,203,186); fill-opacity:1;" />
|
||||
<polygon points="22 12.25, 22.5 12.5, 22.5 13, 22 13.25, 21.5 13, 21.5 12.5" style="fill:rgb(231,205,188); fill-opacity:1;" />
|
||||
<polygon points="23 12.25, 23.5 12.5, 23.5 13, 23 13.25, 22.5 13, 22.5 12.5" style="fill:rgb(227,202,185); fill-opacity:1;" />
|
||||
<polygon points="24 12.25, 24.5 12.5, 24.5 13, 24 13.25, 23.5 13, 23.5 12.5" style="fill:rgb(224,199,183); fill-opacity:1;" />
|
||||
<polygon points="25 12.25, 25.5 12.5, 25.5 13, 25 13.25, 24.5 13, 24.5 12.5" style="fill:rgb(224,199,182); fill-opacity:1;" />
|
||||
<polygon points="26 12.25, 26.5 12.5, 26.5 13, 26 13.25, 25.5 13, 25.5 12.5" style="fill:rgb(229,202,183); fill-opacity:1;" />
|
||||
<polygon points="27 12.25, 27.5 12.5, 27.5 13, 27 13.25, 26.5 13, 26.5 12.5" style="fill:rgb(230,200,180); fill-opacity:1;" />
|
||||
<polygon points="28 12.25, 28.5 12.5, 28.5 13, 28 13.25, 27.5 13, 27.5 12.5" style="fill:rgb(230,200,180); fill-opacity:1;" />
|
||||
<polygon points="29 12.25, 29.5 12.5, 29.5 13, 29 13.25, 28.5 13, 28.5 12.5" style="fill:rgb(236,206,186); fill-opacity:1;" />
|
||||
<polygon points="30 12.25, 30.5 12.5, 30.5 13, 30 13.25, 29.5 13, 29.5 12.5" style="fill:rgb(134,114,102); fill-opacity:0.713725490196078;" />
|
||||
<polygon points="31 12.25, 31.5 12.5, 31.5 13, 31 13.25, 30.5 13, 30.5 12.5" style="fill:rgb(85,69,61); fill-opacity:0.00392156862745098;" />
|
||||
<polygon points="1.5 13, 2 13.25, 2 13.75, 1.5 14, 1 13.75, 1 13.25" style="fill:rgb(216,187,168); fill-opacity:0.83921568627451;" />
|
||||
<polygon points="2.5 13, 3 13.25, 3 13.75, 2.5 14, 2 13.75, 2 13.25" style="fill:rgb(199,174,158); fill-opacity:1;" />
|
||||
<polygon points="3.5 13, 4 13.25, 4 13.75, 3.5 14, 3 13.75, 3 13.25" style="fill:rgb(164,166,163); fill-opacity:1;" />
|
||||
<polygon points="4.5 13, 5 13.25, 5 13.75, 4.5 14, 4 13.75, 4 13.25" style="fill:rgb(49,151,186); fill-opacity:1;" />
|
||||
<polygon points="5.5 13, 6 13.25, 6 13.75, 5.5 14, 5 13.75, 5 13.25" style="fill:rgb(17,142,186); fill-opacity:1;" />
|
||||
<polygon points="6.5 13, 7 13.25, 7 13.75, 6.5 14, 6 13.75, 6 13.25" style="fill:rgb(58,137,168); fill-opacity:1;" />
|
||||
<polygon points="7.5 13, 8 13.25, 8 13.75, 7.5 14, 7 13.75, 7 13.25" style="fill:rgb(137,165,178); fill-opacity:1;" />
|
||||
<polygon points="8.5 13, 9 13.25, 9 13.75, 8.5 14, 8 13.75, 8 13.25" style="fill:rgb(190,185,179); fill-opacity:1;" />
|
||||
<polygon points="9.5 13, 10 13.25, 10 13.75, 9.5 14, 9 13.75, 9 13.25" style="fill:rgb(225,198,180); fill-opacity:1;" />
|
||||
<polygon points="10.5 13, 11 13.25, 11 13.75, 10.5 14, 10 13.75, 10 13.25" style="fill:rgb(226,199,181); fill-opacity:1;" />
|
||||
<polygon points="11.5 13, 12 13.25, 12 13.75, 11.5 14, 11 13.75, 11 13.25" style="fill:rgb(221,195,178); fill-opacity:1;" />
|
||||
<polygon points="12.5 13, 13 13.25, 13 13.75, 12.5 14, 12 13.75, 12 13.25" style="fill:rgb(213,179,153); fill-opacity:1;" />
|
||||
<polygon points="13.5 13, 14 13.25, 14 13.75, 13.5 14, 13 13.75, 13 13.25" style="fill:rgb(185,140,99); fill-opacity:1;" />
|
||||
<polygon points="14.5 13, 15 13.25, 15 13.75, 14.5 14, 14 13.75, 14 13.25" style="fill:rgb(174,113,51); fill-opacity:1;" />
|
||||
<polygon points="15.5 13, 16 13.25, 16 13.75, 15.5 14, 15 13.75, 15 13.25" style="fill:rgb(166,98,31); fill-opacity:1;" />
|
||||
<polygon points="16.5 13, 17 13.25, 17 13.75, 16.5 14, 16 13.75, 16 13.25" style="fill:rgb(170,122,77); fill-opacity:1;" />
|
||||
<polygon points="17.5 13, 18 13.25, 18 13.75, 17.5 14, 17 13.75, 17 13.25" style="fill:rgb(190,153,119); fill-opacity:1;" />
|
||||
<polygon points="18.5 13, 19 13.25, 19 13.75, 18.5 14, 18 13.75, 18 13.25" style="fill:rgb(209,177,152); fill-opacity:1;" />
|
||||
<polygon points="19.5 13, 20 13.25, 20 13.75, 19.5 14, 19 13.75, 19 13.25" style="fill:rgb(225,200,182); fill-opacity:1;" />
|
||||
<polygon points="20.5 13, 21 13.25, 21 13.75, 20.5 14, 20 13.75, 20 13.25" style="fill:rgb(230,206,190); fill-opacity:1;" />
|
||||
<polygon points="21.5 13, 22 13.25, 22 13.75, 21.5 14, 21 13.75, 21 13.25" style="fill:rgb(229,205,190); fill-opacity:1;" />
|
||||
<polygon points="22.5 13, 23 13.25, 23 13.75, 22.5 14, 22 13.75, 22 13.25" style="fill:rgb(225,202,187); fill-opacity:1;" />
|
||||
<polygon points="23.5 13, 24 13.25, 24 13.75, 23.5 14, 23 13.75, 23 13.25" style="fill:rgb(223,199,183); fill-opacity:1;" />
|
||||
<polygon points="24.5 13, 25 13.25, 25 13.75, 24.5 14, 24 13.75, 24 13.25" style="fill:rgb(226,198,179); fill-opacity:1;" />
|
||||
<polygon points="25.5 13, 26 13.25, 26 13.75, 25.5 14, 25 13.75, 25 13.25" style="fill:rgb(226,196,177); fill-opacity:1;" />
|
||||
<polygon points="26.5 13, 27 13.25, 27 13.75, 26.5 14, 26 13.75, 26 13.25" style="fill:rgb(225,195,175); fill-opacity:1;" />
|
||||
<polygon points="27.5 13, 28 13.25, 28 13.75, 27.5 14, 27 13.75, 27 13.25" style="fill:rgb(226,197,176); fill-opacity:1;" />
|
||||
<polygon points="28.5 13, 29 13.25, 29 13.75, 28.5 14, 28 13.75, 28 13.25" style="fill:rgb(231,201,180); fill-opacity:1;" />
|
||||
<polygon points="29.5 13, 30 13.25, 30 13.75, 29.5 14, 29 13.75, 29 13.25" style="fill:rgb(128,108,97); fill-opacity:0.690196078431373;" />
|
||||
<polygon points="30.5 13, 31 13.25, 31 13.75, 30.5 14, 30 13.75, 30 13.25" style="fill:rgb(84,68,60); fill-opacity:0.00392156862745098;" />
|
||||
<polygon points="2 13.75, 2.5 14, 2.5 14.5, 2 14.75, 1.5 14.5, 1.5 14" style="fill:rgb(208,180,161); fill-opacity:0.917647058823529;" />
|
||||
<polygon points="3 13.75, 3.5 14, 3.5 14.5, 3 14.75, 2.5 14.5, 2.5 14" style="fill:rgb(186,161,144); fill-opacity:1;" />
|
||||
<polygon points="4 13.75, 4.5 14, 4.5 14.5, 4 14.75, 3.5 14.5, 3.5 14" style="fill:rgb(107,148,164); fill-opacity:1;" />
|
||||
<polygon points="5 13.75, 5.5 14, 5.5 14.5, 5 14.75, 4.5 14.5, 4.5 14" style="fill:rgb(21,123,172); fill-opacity:1;" />
|
||||
<polygon points="6 13.75, 6.5 14, 6.5 14.5, 6 14.75, 5.5 14.5, 5.5 14" style="fill:rgb(16,120,169); fill-opacity:1;" />
|
||||
<polygon points="7 13.75, 7.5 14, 7.5 14.5, 7 14.75, 6.5 14.5, 6.5 14" style="fill:rgb(44,126,164); fill-opacity:1;" />
|
||||
<polygon points="8 13.75, 8.5 14, 8.5 14.5, 8 14.75, 7.5 14.5, 7.5 14" style="fill:rgb(157,170,170); fill-opacity:1;" />
|
||||
<polygon points="9 13.75, 9.5 14, 9.5 14.5, 9 14.75, 8.5 14.5, 8.5 14" style="fill:rgb(207,190,177); fill-opacity:1;" />
|
||||
<polygon points="10 13.75, 10.5 14, 10.5 14.5, 10 14.75, 9.5 14.5, 9.5 14" style="fill:rgb(226,196,178); fill-opacity:1;" />
|
||||
<polygon points="11 13.75, 11.5 14, 11.5 14.5, 11 14.75, 10.5 14.5, 10.5 14" style="fill:rgb(220,193,176); fill-opacity:1;" />
|
||||
<polygon points="12 13.75, 12.5 14, 12.5 14.5, 12 14.75, 11.5 14.5, 11.5 14" style="fill:rgb(225,198,181); fill-opacity:1;" />
|
||||
<polygon points="13 13.75, 13.5 14, 13.5 14.5, 13 14.75, 12.5 14.5, 12.5 14" style="fill:rgb(217,186,164); fill-opacity:1;" />
|
||||
<polygon points="14 13.75, 14.5 14, 14.5 14.5, 14 14.75, 13.5 14.5, 13.5 14" style="fill:rgb(196,156,119); fill-opacity:1;" />
|
||||
<polygon points="15 13.75, 15.5 14, 15.5 14.5, 15 14.75, 14.5 14.5, 14.5 14" style="fill:rgb(162,114,69); fill-opacity:1;" />
|
||||
<polygon points="16 13.75, 16.5 14, 16.5 14.5, 16 14.75, 15.5 14.5, 15.5 14" style="fill:rgb(164,124,88); fill-opacity:1;" />
|
||||
<polygon points="17 13.75, 17.5 14, 17.5 14.5, 17 14.75, 16.5 14.5, 16.5 14" style="fill:rgb(203,174,151); fill-opacity:1;" />
|
||||
<polygon points="18 13.75, 18.5 14, 18.5 14.5, 18 14.75, 17.5 14.5, 17.5 14" style="fill:rgb(222,195,177); fill-opacity:1;" />
|
||||
<polygon points="19 13.75, 19.5 14, 19.5 14.5, 19 14.75, 18.5 14.5, 18.5 14" style="fill:rgb(224,200,182); fill-opacity:1;" />
|
||||
<polygon points="20 13.75, 20.5 14, 20.5 14.5, 20 14.75, 19.5 14.5, 19.5 14" style="fill:rgb(230,206,191); fill-opacity:1;" />
|
||||
<polygon points="21 13.75, 21.5 14, 21.5 14.5, 21 14.75, 20.5 14.5, 20.5 14" style="fill:rgb(229,206,193); fill-opacity:1;" />
|
||||
<polygon points="22 13.75, 22.5 14, 22.5 14.5, 22 14.75, 21.5 14.5, 21.5 14" style="fill:rgb(222,200,184); fill-opacity:1;" />
|
||||
<polygon points="23 13.75, 23.5 14, 23.5 14.5, 23 14.75, 22.5 14.5, 22.5 14" style="fill:rgb(217,192,175); fill-opacity:1;" />
|
||||
<polygon points="24 13.75, 24.5 14, 24.5 14.5, 24 14.75, 23.5 14.5, 23.5 14" style="fill:rgb(220,190,172); fill-opacity:1;" />
|
||||
<polygon points="25 13.75, 25.5 14, 25.5 14.5, 25 14.75, 24.5 14.5, 24.5 14" style="fill:rgb(224,192,172); fill-opacity:1;" />
|
||||
<polygon points="26 13.75, 26.5 14, 26.5 14.5, 26 14.75, 25.5 14.5, 25.5 14" style="fill:rgb(223,193,173); fill-opacity:1;" />
|
||||
<polygon points="27 13.75, 27.5 14, 27.5 14.5, 27 14.75, 26.5 14.5, 26.5 14" style="fill:rgb(223,193,173); fill-opacity:1;" />
|
||||
<polygon points="28 13.75, 28.5 14, 28.5 14.5, 28 14.75, 27.5 14.5, 27.5 14" style="fill:rgb(226,195,175); fill-opacity:1;" />
|
||||
<polygon points="29 13.75, 29.5 14, 29.5 14.5, 29 14.75, 28.5 14.5, 28.5 14" style="fill:rgb(221,191,172); fill-opacity:1;" />
|
||||
<polygon points="30 13.75, 30.5 14, 30.5 14.5, 30 14.75, 29.5 14.5, 29.5 14" style="fill:rgb(113,93,83); fill-opacity:0.576470588235294;" />
|
||||
<polygon points="1.5 14.5, 2 14.75, 2 15.25, 1.5 15.5, 1 15.25, 1 14.75" style="fill:rgb(201,172,154); fill-opacity:0.929411764705882;" />
|
||||
<polygon points="2.5 14.5, 3 14.75, 3 15.25, 2.5 15.5, 2 15.25, 2 14.75" style="fill:rgb(174,152,136); fill-opacity:1;" />
|
||||
<polygon points="3.5 14.5, 4 14.75, 4 15.25, 3.5 15.5, 3 15.25, 3 14.75" style="fill:rgb(76,117,141); fill-opacity:1;" />
|
||||
<polygon points="4.5 14.5, 5 14.75, 5 15.25, 4.5 15.5, 4 15.25, 4 14.75" style="fill:rgb(78,120,142); fill-opacity:1;" />
|
||||
<polygon points="5.5 14.5, 6 14.75, 6 15.25, 5.5 15.5, 5 15.25, 5 14.75" style="fill:rgb(70,126,156); fill-opacity:1;" />
|
||||
<polygon points="6.5 14.5, 7 14.75, 7 15.25, 6.5 15.5, 6 15.25, 6 14.75" style="fill:rgb(80,124,147); fill-opacity:1;" />
|
||||
<polygon points="7.5 14.5, 8 14.75, 8 15.25, 7.5 15.5, 7 15.25, 7 14.75" style="fill:rgb(189,179,169); fill-opacity:1;" />
|
||||
<polygon points="8.5 14.5, 9 14.75, 9 15.25, 8.5 15.5, 8 15.25, 8 14.75" style="fill:rgb(217,190,172); fill-opacity:1;" />
|
||||
<polygon points="9.5 14.5, 10 14.75, 10 15.25, 9.5 15.5, 9 15.25, 9 14.75" style="fill:rgb(219,190,172); fill-opacity:1;" />
|
||||
<polygon points="10.5 14.5, 11 14.75, 11 15.25, 10.5 15.5, 10 15.25, 10 14.75" style="fill:rgb(222,193,177); fill-opacity:1;" />
|
||||
<polygon points="11.5 14.5, 12 14.75, 12 15.25, 11.5 15.5, 11 15.25, 11 14.75" style="fill:rgb(225,196,179); fill-opacity:1;" />
|
||||
<polygon points="12.5 14.5, 13 14.75, 13 15.25, 12.5 15.5, 12 15.25, 12 14.75" style="fill:rgb(218,190,169); fill-opacity:1;" />
|
||||
<polygon points="13.5 14.5, 14 14.75, 14 15.25, 13.5 15.5, 13 15.25, 13 14.75" style="fill:rgb(212,180,158); fill-opacity:1;" />
|
||||
<polygon points="14.5 14.5, 15 14.75, 15 15.25, 14.5 15.5, 14 15.25, 14 14.75" style="fill:rgb(201,169,146); fill-opacity:1;" />
|
||||
<polygon points="15.5 14.5, 16 14.75, 16 15.25, 15.5 15.5, 15 15.25, 15 14.75" style="fill:rgb(216,189,169); fill-opacity:1;" />
|
||||
<polygon points="16.5 14.5, 17 14.75, 17 15.25, 16.5 15.5, 16 15.25, 16 14.75" style="fill:rgb(223,198,181); fill-opacity:1;" />
|
||||
<polygon points="17.5 14.5, 18 14.75, 18 15.25, 17.5 15.5, 17 15.25, 17 14.75" style="fill:rgb(222,197,182); fill-opacity:1;" />
|
||||
<polygon points="18.5 14.5, 19 14.75, 19 15.25, 18.5 15.5, 18 15.25, 18 14.75" style="fill:rgb(224,198,183); fill-opacity:1;" />
|
||||
<polygon points="19.5 14.5, 20 14.75, 20 15.25, 19.5 15.5, 19 15.25, 19 14.75" style="fill:rgb(222,194,179); fill-opacity:1;" />
|
||||
<polygon points="20.5 14.5, 21 14.75, 21 15.25, 20.5 15.5, 20 15.25, 20 14.75" style="fill:rgb(214,183,169); fill-opacity:1;" />
|
||||
<polygon points="21.5 14.5, 22 14.75, 22 15.25, 21.5 15.5, 21 15.25, 21 14.75" style="fill:rgb(209,173,160); fill-opacity:1;" />
|
||||
<polygon points="22.5 14.5, 23 14.75, 23 15.25, 22.5 15.5, 22 15.25, 22 14.75" style="fill:rgb(210,178,161); fill-opacity:1;" />
|
||||
<polygon points="23.5 14.5, 24 14.75, 24 15.25, 23.5 15.5, 23 15.25, 23 14.75" style="fill:rgb(219,193,170); fill-opacity:1;" />
|
||||
<polygon points="24.5 14.5, 25 14.75, 25 15.25, 24.5 15.5, 24 15.25, 24 14.75" style="fill:rgb(221,189,171); fill-opacity:1;" />
|
||||
<polygon points="25.5 14.5, 26 14.75, 26 15.25, 25.5 15.5, 25 15.25, 25 14.75" style="fill:rgb(221,189,171); fill-opacity:1;" />
|
||||
<polygon points="26.5 14.5, 27 14.75, 27 15.25, 26.5 15.5, 26 15.25, 26 14.75" style="fill:rgb(219,189,170); fill-opacity:1;" />
|
||||
<polygon points="27.5 14.5, 28 14.75, 28 15.25, 27.5 15.5, 27 15.25, 27 14.75" style="fill:rgb(227,195,176); fill-opacity:1;" />
|
||||
<polygon points="28.5 14.5, 29 14.75, 29 15.25, 28.5 15.5, 28 15.25, 28 14.75" style="fill:rgb(198,170,153); fill-opacity:0.996078431372549;" />
|
||||
<polygon points="29.5 14.5, 30 14.75, 30 15.25, 29.5 15.5, 29 15.25, 29 14.75" style="fill:rgb(98,81,71); fill-opacity:0.356862745098039;" />
|
||||
<polygon points="2 15.25, 2.5 15.5, 2.5 16, 2 16.25, 1.5 16, 1.5 15.5" style="fill:rgb(198,168,151); fill-opacity:0.929411764705882;" />
|
||||
<polygon points="3 15.25, 3.5 15.5, 3.5 16, 3 16.25, 2.5 16, 2.5 15.5" style="fill:rgb(168,146,131); fill-opacity:1;" />
|
||||
<polygon points="4 15.25, 4.5 15.5, 4.5 16, 4 16.25, 3.5 16, 3.5 15.5" style="fill:rgb(131,123,118); fill-opacity:1;" />
|
||||
<polygon points="5 15.25, 5.5 15.5, 5.5 16, 5 16.25, 4.5 16, 4.5 15.5" style="fill:rgb(156,149,143); fill-opacity:1;" />
|
||||
<polygon points="6 15.25, 6.5 15.5, 6.5 16, 6 16.25, 5.5 16, 5.5 15.5" style="fill:rgb(168,166,161); fill-opacity:1;" />
|
||||
<polygon points="7 15.25, 7.5 15.5, 7.5 16, 7 16.25, 6.5 16, 6.5 15.5" style="fill:rgb(185,171,161); fill-opacity:1;" />
|
||||
<polygon points="8 15.25, 8.5 15.5, 8.5 16, 8 16.25, 7.5 16, 7.5 15.5" style="fill:rgb(203,179,161); fill-opacity:1;" />
|
||||
<polygon points="9 15.25, 9.5 15.5, 9.5 16, 9 16.25, 8.5 16, 8.5 15.5" style="fill:rgb(208,178,159); fill-opacity:1;" />
|
||||
<polygon points="10 15.25, 10.5 15.5, 10.5 16, 10 16.25, 9.5 16, 9.5 15.5" style="fill:rgb(200,173,153); fill-opacity:1;" />
|
||||
<polygon points="11 15.25, 11.5 15.5, 11.5 16, 11 16.25, 10.5 16, 10.5 15.5" style="fill:rgb(199,174,150); fill-opacity:1;" />
|
||||
<polygon points="12 15.25, 12.5 15.5, 12.5 16, 12 16.25, 11.5 16, 11.5 15.5" style="fill:rgb(206,180,156); fill-opacity:1;" />
|
||||
<polygon points="13 15.25, 13.5 15.5, 13.5 16, 13 16.25, 12.5 16, 12.5 15.5" style="fill:rgb(214,183,167); fill-opacity:1;" />
|
||||
<polygon points="14 15.25, 14.5 15.5, 14.5 16, 14 16.25, 13.5 16, 13.5 15.5" style="fill:rgb(213,186,164); fill-opacity:1;" />
|
||||
<polygon points="15 15.25, 15.5 15.5, 15.5 16, 15 16.25, 14.5 16, 14.5 15.5" style="fill:rgb(214,188,165); fill-opacity:1;" />
|
||||
<polygon points="16 15.25, 16.5 15.5, 16.5 16, 16 16.25, 15.5 16, 15.5 15.5" style="fill:rgb(214,185,168); fill-opacity:1;" />
|
||||
<polygon points="17 15.25, 17.5 15.5, 17.5 16, 17 16.25, 16.5 16, 16.5 15.5" style="fill:rgb(215,185,168); fill-opacity:1;" />
|
||||
<polygon points="18 15.25, 18.5 15.5, 18.5 16, 18 16.25, 17.5 16, 17.5 15.5" style="fill:rgb(215,186,168); fill-opacity:1;" />
|
||||
<polygon points="19 15.25, 19.5 15.5, 19.5 16, 19 16.25, 18.5 16, 18.5 15.5" style="fill:rgb(215,182,166); fill-opacity:1;" />
|
||||
<polygon points="20 15.25, 20.5 15.5, 20.5 16, 20 16.25, 19.5 16, 19.5 15.5" style="fill:rgb(209,172,159); fill-opacity:1;" />
|
||||
<polygon points="21 15.25, 21.5 15.5, 21.5 16, 21 16.25, 20.5 16, 20.5 15.5" style="fill:rgb(201,154,151); fill-opacity:1;" />
|
||||
<polygon points="22 15.25, 22.5 15.5, 22.5 16, 22 16.25, 21.5 16, 21.5 15.5" style="fill:rgb(200,149,149); fill-opacity:1;" />
|
||||
<polygon points="23 15.25, 23.5 15.5, 23.5 16, 23 16.25, 22.5 16, 22.5 15.5" style="fill:rgb(214,141,161); fill-opacity:1;" />
|
||||
<polygon points="24 15.25, 24.5 15.5, 24.5 16, 24 16.25, 23.5 16, 23.5 15.5" style="fill:rgb(221,134,163); fill-opacity:1;" />
|
||||
<polygon points="25 15.25, 25.5 15.5, 25.5 16, 25 16.25, 24.5 16, 24.5 15.5" style="fill:rgb(216,183,166); fill-opacity:1;" />
|
||||
<polygon points="26 15.25, 26.5 15.5, 26.5 16, 26 16.25, 25.5 16, 25.5 15.5" style="fill:rgb(217,185,168); fill-opacity:1;" />
|
||||
<polygon points="27 15.25, 27.5 15.5, 27.5 16, 27 16.25, 26.5 16, 26.5 15.5" style="fill:rgb(216,185,167); fill-opacity:1;" />
|
||||
<polygon points="28 15.25, 28.5 15.5, 28.5 16, 28 16.25, 27.5 16, 27.5 15.5" style="fill:rgb(229,197,177); fill-opacity:1;" />
|
||||
<polygon points="29 15.25, 29.5 15.5, 29.5 16, 29 16.25, 28.5 16, 28.5 15.5" style="fill:rgb(155,132,118); fill-opacity:0.882352941176471;" />
|
||||
<polygon points="30 15.25, 30.5 15.5, 30.5 16, 30 16.25, 29.5 16, 29.5 15.5" style="fill:rgb(74,60,52); fill-opacity:0.105882352941176;" />
|
||||
<polygon points="1.5 16, 2 16.25, 2 16.75, 1.5 17, 1 16.75, 1 16.25" style="fill:rgb(197,168,151); fill-opacity:0.905882352941176;" />
|
||||
<polygon points="2.5 16, 3 16.25, 3 16.75, 2.5 17, 2 16.75, 2 16.25" style="fill:rgb(167,144,130); fill-opacity:1;" />
|
||||
<polygon points="3.5 16, 4 16.25, 4 16.75, 3.5 17, 3 16.75, 3 16.25" style="fill:rgb(150,128,115); fill-opacity:1;" />
|
||||
<polygon points="4.5 16, 5 16.25, 5 16.75, 4.5 17, 4 16.75, 4 16.25" style="fill:rgb(163,143,131); fill-opacity:1;" />
|
||||
<polygon points="5.5 16, 6 16.25, 6 16.75, 5.5 17, 5 16.75, 5 16.25" style="fill:rgb(196,170,154); fill-opacity:1;" />
|
||||
<polygon points="6.5 16, 7 16.25, 7 16.75, 6.5 17, 6 16.75, 6 16.25" style="fill:rgb(203,176,158); fill-opacity:1;" />
|
||||
<polygon points="7.5 16, 8 16.25, 8 16.75, 7.5 17, 7 16.75, 7 16.25" style="fill:rgb(199,170,151); fill-opacity:1;" />
|
||||
<polygon points="8.5 16, 9 16.25, 9 16.75, 8.5 17, 8 16.75, 8 16.25" style="fill:rgb(180,158,132); fill-opacity:1;" />
|
||||
<polygon points="9.5 16, 10 16.25, 10 16.75, 9.5 17, 9 16.75, 9 16.25" style="fill:rgb(164,153,108); fill-opacity:1;" />
|
||||
<polygon points="10.5 16, 11 16.25, 11 16.75, 10.5 17, 10 16.75, 10 16.25" style="fill:rgb(155,147,96); fill-opacity:1;" />
|
||||
<polygon points="11.5 16, 12 16.25, 12 16.75, 11.5 17, 11 16.75, 11 16.25" style="fill:rgb(163,149,111); fill-opacity:1;" />
|
||||
<polygon points="12.5 16, 13 16.25, 13 16.75, 12.5 17, 12 16.75, 12 16.25" style="fill:rgb(200,178,148); fill-opacity:1;" />
|
||||
<polygon points="13.5 16, 14 16.25, 14 16.75, 13.5 17, 13 16.75, 13 16.25" style="fill:rgb(175,172,112); fill-opacity:1;" />
|
||||
<polygon points="14.5 16, 15 16.25, 15 16.75, 14.5 17, 14 16.75, 14 16.25" style="fill:rgb(193,168,145); fill-opacity:1;" />
|
||||
<polygon points="15.5 16, 16 16.25, 16 16.75, 15.5 17, 15 16.75, 15 16.25" style="fill:rgb(214,182,166); fill-opacity:1;" />
|
||||
<polygon points="16.5 16, 17 16.25, 17 16.75, 16.5 17, 16 16.75, 16 16.25" style="fill:rgb(212,181,163); fill-opacity:1;" />
|
||||
<polygon points="17.5 16, 18 16.25, 18 16.75, 17.5 17, 17 16.75, 17 16.25" style="fill:rgb(213,182,164); fill-opacity:1;" />
|
||||
<polygon points="18.5 16, 19 16.25, 19 16.75, 18.5 17, 18 16.75, 18 16.25" style="fill:rgb(208,175,160); fill-opacity:1;" />
|
||||
<polygon points="19.5 16, 20 16.25, 20 16.75, 19.5 17, 19 16.75, 19 16.25" style="fill:rgb(201,156,152); fill-opacity:1;" />
|
||||
<polygon points="20.5 16, 21 16.25, 21 16.75, 20.5 17, 20 16.75, 20 16.25" style="fill:rgb(193,125,141); fill-opacity:1;" />
|
||||
<polygon points="21.5 16, 22 16.25, 22 16.75, 21.5 17, 21 16.75, 21 16.25" style="fill:rgb(191,111,137); fill-opacity:1;" />
|
||||
<polygon points="22.5 16, 23 16.25, 23 16.75, 22.5 17, 22 16.75, 22 16.25" style="fill:rgb(223,68,157); fill-opacity:1;" />
|
||||
<polygon points="23.5 16, 24 16.25, 24 16.75, 23.5 17, 23 16.75, 23 16.25" style="fill:rgb(202,43,133); fill-opacity:1;" />
|
||||
<polygon points="24.5 16, 25 16.25, 25 16.75, 24.5 17, 24 16.75, 24 16.25" style="fill:rgb(189,139,144); fill-opacity:1;" />
|
||||
<polygon points="25.5 16, 26 16.25, 26 16.75, 25.5 17, 25 16.75, 25 16.25" style="fill:rgb(213,182,165); fill-opacity:1;" />
|
||||
<polygon points="26.5 16, 27 16.25, 27 16.75, 26.5 17, 26 16.75, 26 16.25" style="fill:rgb(218,187,169); fill-opacity:1;" />
|
||||
<polygon points="27.5 16, 28 16.25, 28 16.75, 27.5 17, 27 16.75, 27 16.25" style="fill:rgb(219,187,169); fill-opacity:1;" />
|
||||
<polygon points="28.5 16, 29 16.25, 29 16.75, 28.5 17, 28 16.75, 28 16.25" style="fill:rgb(73,60,55); fill-opacity:0.545098039215686;" />
|
||||
<polygon points="30.5 16, 31 16.25, 31 16.75, 30.5 17, 30 16.75, 30 16.25" style="fill:rgb(0,0,0); fill-opacity:0.0117647058823529;" />
|
||||
<polygon points="31.5 16, 32 16.25, 32 16.75, 31.5 17, 31 16.75, 31 16.25" style="fill:rgb(0,0,0); fill-opacity:0.00392156862745098;" />
|
||||
<polygon points="2 16.75, 2.5 17, 2.5 17.5, 2 17.75, 1.5 17.5, 1.5 17" style="fill:rgb(203,174,157); fill-opacity:0.756862745098039;" />
|
||||
<polygon points="3 16.75, 3.5 17, 3.5 17.5, 3 17.75, 2.5 17.5, 2.5 17" style="fill:rgb(170,145,131); fill-opacity:1;" />
|
||||
<polygon points="4 16.75, 4.5 17, 4.5 17.5, 4 17.75, 3.5 17.5, 3.5 17" style="fill:rgb(157,132,119); fill-opacity:1;" />
|
||||
<polygon points="5 16.75, 5.5 17, 5.5 17.5, 5 17.75, 4.5 17.5, 4.5 17" style="fill:rgb(163,139,125); fill-opacity:1;" />
|
||||
<polygon points="6 16.75, 6.5 17, 6.5 17.5, 6 17.75, 5.5 17.5, 5.5 17" style="fill:rgb(192,164,147); fill-opacity:1;" />
|
||||
<polygon points="7 16.75, 7.5 17, 7.5 17.5, 7 17.75, 6.5 17.5, 6.5 17" style="fill:rgb(197,168,151); fill-opacity:1;" />
|
||||
<polygon points="8 16.75, 8.5 17, 8.5 17.5, 8 17.75, 7.5 17.5, 7.5 17" style="fill:rgb(186,162,138); fill-opacity:1;" />
|
||||
<polygon points="9 16.75, 9.5 17, 9.5 17.5, 9 17.75, 8.5 17.5, 8.5 17" style="fill:rgb(167,171,93); fill-opacity:1;" />
|
||||
<polygon points="10 16.75, 10.5 17, 10.5 17.5, 10 17.75, 9.5 17.5, 9.5 17" style="fill:rgb(156,173,72); fill-opacity:1;" />
|
||||
<polygon points="11 16.75, 11.5 17, 11.5 17.5, 11 17.75, 10.5 17.5, 10.5 17" style="fill:rgb(156,171,74); fill-opacity:1;" />
|
||||
<polygon points="12 16.75, 12.5 17, 12.5 17.5, 12 17.75, 11.5 17.5, 11.5 17" style="fill:rgb(155,165,82); fill-opacity:1;" />
|
||||
<polygon points="13 16.75, 13.5 17, 13.5 17.5, 13 17.75, 12.5 17.5, 12.5 17" style="fill:rgb(154,161,82); fill-opacity:1;" />
|
||||
<polygon points="14 16.75, 14.5 17, 14.5 17.5, 14 17.75, 13.5 17.5, 13.5 17" style="fill:rgb(168,152,117); fill-opacity:1;" />
|
||||
<polygon points="15 16.75, 15.5 17, 15.5 17.5, 15 17.75, 14.5 17.5, 14.5 17" style="fill:rgb(210,178,164); fill-opacity:1;" />
|
||||
<polygon points="16 16.75, 16.5 17, 16.5 17.5, 16 17.75, 15.5 17.5, 15.5 17" style="fill:rgb(210,179,162); fill-opacity:1;" />
|
||||
<polygon points="17 16.75, 17.5 17, 17.5 17.5, 17 17.75, 16.5 17.5, 16.5 17" style="fill:rgb(211,180,162); fill-opacity:1;" />
|
||||
<polygon points="18 16.75, 18.5 17, 18.5 17.5, 18 17.75, 17.5 17.5, 17.5 17" style="fill:rgb(208,177,160); fill-opacity:1;" />
|
||||
<polygon points="19 16.75, 19.5 17, 19.5 17.5, 19 17.75, 18.5 17.5, 18.5 17" style="fill:rgb(202,167,155); fill-opacity:1;" />
|
||||
<polygon points="20 16.75, 20.5 17, 20.5 17.5, 20 17.75, 19.5 17.5, 19.5 17" style="fill:rgb(194,139,144); fill-opacity:1;" />
|
||||
<polygon points="21 16.75, 21.5 17, 21.5 17.5, 21 17.75, 20.5 17.5, 20.5 17" style="fill:rgb(189,101,133); fill-opacity:1;" />
|
||||
<polygon points="22 16.75, 22.5 17, 22.5 17.5, 22 17.75, 21.5 17.5, 21.5 17" style="fill:rgb(197,79,141); fill-opacity:1;" />
|
||||
<polygon points="23 16.75, 23.5 17, 23.5 17.5, 23 17.75, 22.5 17.5, 22.5 17" style="fill:rgb(188,34,127); fill-opacity:1;" />
|
||||
<polygon points="24 16.75, 24.5 17, 24.5 17.5, 24 17.75, 23.5 17.5, 23.5 17" style="fill:rgb(169,61,114); fill-opacity:1;" />
|
||||
<polygon points="25 16.75, 25.5 17, 25.5 17.5, 25 17.75, 24.5 17.5, 24.5 17" style="fill:rgb(188,140,142); fill-opacity:1;" />
|
||||
<polygon points="26 16.75, 26.5 17, 26.5 17.5, 26 17.75, 25.5 17.5, 25.5 17" style="fill:rgb(210,177,162); fill-opacity:1;" />
|
||||
<polygon points="27 16.75, 27.5 17, 27.5 17.5, 27 17.75, 26.5 17.5, 26.5 17" style="fill:rgb(223,191,172); fill-opacity:1;" />
|
||||
<polygon points="28 16.75, 28.5 17, 28.5 17.5, 28 17.75, 27.5 17.5, 27.5 17" style="fill:rgb(147,123,111); fill-opacity:0.905882352941176;" />
|
||||
<polygon points="29 16.75, 29.5 17, 29.5 17.5, 29 17.75, 28.5 17.5, 28.5 17" style="fill:rgb(8,6,5); fill-opacity:0.254901960784314;" />
|
||||
<polygon points="30 16.75, 30.5 17, 30.5 17.5, 30 17.75, 29.5 17.5, 29.5 17" style="fill:rgb(0,0,0); fill-opacity:0.105882352941176;" />
|
||||
<polygon points="31 16.75, 31.5 17, 31.5 17.5, 31 17.75, 30.5 17.5, 30.5 17" style="fill:rgb(0,0,0); fill-opacity:0.101960784313725;" />
|
||||
<polygon points="32 16.75, 32.5 17, 32.5 17.5, 32 17.75, 31.5 17.5, 31.5 17" style="fill:rgb(0,0,0); fill-opacity:0.0588235294117647;" />
|
||||
<polygon points="1.5 17.5, 2 17.75, 2 18.25, 1.5 18.5, 1 18.25, 1 17.75" style="fill:rgb(213,181,164); fill-opacity:0.454901960784314;" />
|
||||
<polygon points="2.5 17.5, 3 17.75, 3 18.25, 2.5 18.5, 2 18.25, 2 17.75" style="fill:rgb(176,149,134); fill-opacity:1;" />
|
||||
<polygon points="3.5 17.5, 4 17.75, 4 18.25, 3.5 18.5, 3 18.25, 3 17.75" style="fill:rgb(167,141,127); fill-opacity:1;" />
|
||||
<polygon points="4.5 17.5, 5 17.75, 5 18.25, 4.5 18.5, 4 18.25, 4 17.75" style="fill:rgb(173,146,132); fill-opacity:1;" />
|
||||
<polygon points="5.5 17.5, 6 17.75, 6 18.25, 5.5 18.5, 5 18.25, 5 17.75" style="fill:rgb(188,159,143); fill-opacity:1;" />
|
||||
<polygon points="6.5 17.5, 7 17.75, 7 18.25, 6.5 18.5, 6 18.25, 6 17.75" style="fill:rgb(187,159,141); fill-opacity:1;" />
|
||||
<polygon points="7.5 17.5, 8 17.75, 8 18.25, 7.5 18.5, 7 18.25, 7 17.75" style="fill:rgb(163,157,101); fill-opacity:1;" />
|
||||
<polygon points="8.5 17.5, 9 17.75, 9 18.25, 8.5 18.5, 8 18.25, 8 17.75" style="fill:rgb(146,168,54); fill-opacity:1;" />
|
||||
<polygon points="9.5 17.5, 10 17.75, 10 18.25, 9.5 18.5, 9 18.25, 9 17.75" style="fill:rgb(145,165,54); fill-opacity:1;" />
|
||||
<polygon points="10.5 17.5, 11 17.75, 11 18.25, 10.5 18.5, 10 18.25, 10 17.75" style="fill:rgb(148,168,54); fill-opacity:1;" />
|
||||
<polygon points="11.5 17.5, 12 17.75, 12 18.25, 11.5 18.5, 11 18.25, 11 17.75" style="fill:rgb(129,146,49); fill-opacity:1;" />
|
||||
<polygon points="12.5 17.5, 13 17.75, 13 18.25, 12.5 18.5, 12 18.25, 12 17.75" style="fill:rgb(125,122,71); fill-opacity:1;" />
|
||||
<polygon points="13.5 17.5, 14 17.75, 14 18.25, 13.5 18.5, 13 18.25, 13 17.75" style="fill:rgb(184,156,137); fill-opacity:1;" />
|
||||
<polygon points="14.5 17.5, 15 17.75, 15 18.25, 14.5 18.5, 14 18.25, 14 17.75" style="fill:rgb(205,174,155); fill-opacity:1;" />
|
||||
<polygon points="15.5 17.5, 16 17.75, 16 18.25, 15.5 18.5, 15 18.25, 15 17.75" style="fill:rgb(209,177,160); fill-opacity:1;" />
|
||||
<polygon points="16.5 17.5, 17 17.75, 17 18.25, 16.5 18.5, 16 18.25, 16 17.75" style="fill:rgb(207,176,159); fill-opacity:1;" />
|
||||
<polygon points="17.5 17.5, 18 17.75, 18 18.25, 17.5 18.5, 17 18.25, 17 17.75" style="fill:rgb(201,170,155); fill-opacity:1;" />
|
||||
<polygon points="18.5 17.5, 19 17.75, 19 18.25, 18.5 18.5, 18 18.25, 18 17.75" style="fill:rgb(198,164,151); fill-opacity:1;" />
|
||||
<polygon points="19.5 17.5, 20 17.75, 20 18.25, 19.5 18.5, 19 18.25, 19 17.75" style="fill:rgb(199,136,149); fill-opacity:1;" />
|
||||
<polygon points="20.5 17.5, 21 17.75, 21 18.25, 20.5 18.5, 20 18.25, 20 17.75" style="fill:rgb(192,82,140); fill-opacity:1;" />
|
||||
<polygon points="21.5 17.5, 22 17.75, 22 18.25, 21.5 18.5, 21 18.25, 21 17.75" style="fill:rgb(168,34,116); fill-opacity:1;" />
|
||||
<polygon points="22.5 17.5, 23 17.75, 23 18.25, 22.5 18.5, 22 18.25, 22 17.75" style="fill:rgb(158,56,107); fill-opacity:1;" />
|
||||
<polygon points="23.5 17.5, 24 17.75, 24 18.25, 23.5 18.5, 23 18.25, 23 17.75" style="fill:rgb(180,108,131); fill-opacity:1;" />
|
||||
<polygon points="24.5 17.5, 25 17.75, 25 18.25, 24.5 18.5, 24 18.25, 24 17.75" style="fill:rgb(201,154,152); fill-opacity:1;" />
|
||||
<polygon points="25.5 17.5, 26 17.75, 26 18.25, 25.5 18.5, 25 18.25, 25 17.75" style="fill:rgb(219,184,168); fill-opacity:1;" />
|
||||
<polygon points="26.5 17.5, 27 17.75, 27 18.25, 26.5 18.5, 26 18.25, 26 17.75" style="fill:rgb(190,160,145); fill-opacity:1;" />
|
||||
<polygon points="27.5 17.5, 28 17.75, 28 18.25, 27.5 18.5, 27 18.25, 27 17.75" style="fill:rgb(39,32,28); fill-opacity:0.647058823529412;" />
|
||||
<polygon points="28.5 17.5, 29 17.75, 29 18.25, 28.5 18.5, 28 18.25, 28 17.75" style="fill:rgb(0,0,0); fill-opacity:0.345098039215686;" />
|
||||
<polygon points="29.5 17.5, 30 17.75, 30 18.25, 29.5 18.5, 29 18.25, 29 17.75" style="fill:rgb(0,0,0); fill-opacity:0.305882352941176;" />
|
||||
<polygon points="30.5 17.5, 31 17.75, 31 18.25, 30.5 18.5, 30 18.25, 30 17.75" style="fill:rgb(0,0,0); fill-opacity:0.207843137254902;" />
|
||||
<polygon points="31.5 17.5, 32 17.75, 32 18.25, 31.5 18.5, 31 18.25, 31 17.75" style="fill:rgb(0,0,0); fill-opacity:0.117647058823529;" />
|
||||
<polygon points="2 18.25, 2.5 18.5, 2.5 19, 2 19.25, 1.5 19, 1.5 18.5" style="fill:rgb(217,184,167); fill-opacity:0.101960784313725;" />
|
||||
<polygon points="3 18.25, 3.5 18.5, 3.5 19, 3 19.25, 2.5 19, 2.5 18.5" style="fill:rgb(194,164,148); fill-opacity:0.843137254901961;" />
|
||||
<polygon points="4 18.25, 4.5 18.5, 4.5 19, 4 19.25, 3.5 19, 3.5 18.5" style="fill:rgb(163,138,124); fill-opacity:1;" />
|
||||
<polygon points="5 18.25, 5.5 18.5, 5.5 19, 5 19.25, 4.5 19, 4.5 18.5" style="fill:rgb(177,149,134); fill-opacity:1;" />
|
||||
<polygon points="6 18.25, 6.5 18.5, 6.5 19, 6 19.25, 5.5 19, 5.5 18.5" style="fill:rgb(184,155,140); fill-opacity:1;" />
|
||||
<polygon points="7 18.25, 7.5 18.5, 7.5 19, 7 19.25, 6.5 19, 6.5 18.5" style="fill:rgb(173,149,128); fill-opacity:1;" />
|
||||
<polygon points="8 18.25, 8.5 18.5, 8.5 19, 8 19.25, 7.5 19, 7.5 18.5" style="fill:rgb(142,140,79); fill-opacity:1;" />
|
||||
<polygon points="9 18.25, 9.5 18.5, 9.5 19, 9 19.25, 8.5 19, 8.5 18.5" style="fill:rgb(136,155,40); fill-opacity:1;" />
|
||||
<polygon points="10 18.25, 10.5 18.5, 10.5 19, 10 19.25, 9.5 19, 9.5 18.5" style="fill:rgb(129,148,37); fill-opacity:1;" />
|
||||
<polygon points="11 18.25, 11.5 18.5, 11.5 19, 11 19.25, 10.5 19, 10.5 18.5" style="fill:rgb(123,143,35); fill-opacity:1;" />
|
||||
<polygon points="12 18.25, 12.5 18.5, 12.5 19, 12 19.25, 11.5 19, 11.5 18.5" style="fill:rgb(99,103,41); fill-opacity:1;" />
|
||||
<polygon points="13 18.25, 13.5 18.5, 13.5 19, 13 19.25, 12.5 19, 12.5 18.5" style="fill:rgb(133,125,81); fill-opacity:1;" />
|
||||
<polygon points="14 18.25, 14.5 18.5, 14.5 19, 14 19.25, 13.5 19, 13.5 18.5" style="fill:rgb(171,164,111); fill-opacity:1;" />
|
||||
<polygon points="15 18.25, 15.5 18.5, 15.5 19, 15 19.25, 14.5 19, 14.5 18.5" style="fill:rgb(195,165,145); fill-opacity:1;" />
|
||||
<polygon points="16 18.25, 16.5 18.5, 16.5 19, 16 19.25, 15.5 19, 15.5 18.5" style="fill:rgb(206,174,159); fill-opacity:1;" />
|
||||
<polygon points="17 18.25, 17.5 18.5, 17.5 19, 17 19.25, 16.5 19, 16.5 18.5" style="fill:rgb(200,170,153); fill-opacity:1;" />
|
||||
<polygon points="18 18.25, 18.5 18.5, 18.5 19, 18 19.25, 17.5 19, 17.5 18.5" style="fill:rgb(198,169,151); fill-opacity:1;" />
|
||||
<polygon points="19 18.25, 19.5 18.5, 19.5 19, 19 19.25, 18.5 19, 18.5 18.5" style="fill:rgb(191,140,145); fill-opacity:1;" />
|
||||
<polygon points="20 18.25, 20.5 18.5, 20.5 19, 20 19.25, 19.5 19, 19.5 18.5" style="fill:rgb(167,71,123); fill-opacity:1;" />
|
||||
<polygon points="21 18.25, 21.5 18.5, 21.5 19, 21 19.25, 20.5 19, 20.5 18.5" style="fill:rgb(147,46,102); fill-opacity:1;" />
|
||||
<polygon points="22 18.25, 22.5 18.5, 22.5 19, 22 19.25, 21.5 19, 21.5 18.5" style="fill:rgb(157,59,106); fill-opacity:1;" />
|
||||
<polygon points="23 18.25, 23.5 18.5, 23.5 19, 23 19.25, 22.5 19, 22.5 18.5" style="fill:rgb(182,92,128); fill-opacity:1;" />
|
||||
<polygon points="24 18.25, 24.5 18.5, 24.5 19, 24 19.25, 23.5 19, 23.5 18.5" style="fill:rgb(193,127,140); fill-opacity:1;" />
|
||||
<polygon points="25 18.25, 25.5 18.5, 25.5 19, 25 19.25, 24.5 19, 24.5 18.5" style="fill:rgb(210,169,160); fill-opacity:1;" />
|
||||
<polygon points="26 18.25, 26.5 18.5, 26.5 19, 26 19.25, 25.5 19, 25.5 18.5" style="fill:rgb(208,175,158); fill-opacity:1;" />
|
||||
<polygon points="27 18.25, 27.5 18.5, 27.5 19, 27 19.25, 26.5 19, 26.5 18.5" style="fill:rgb(73,59,53); fill-opacity:0.850980392156863;" />
|
||||
<polygon points="28 18.25, 28.5 18.5, 28.5 19, 28 19.25, 27.5 19, 27.5 18.5" style="fill:rgb(0,0,0); fill-opacity:0.56078431372549;" />
|
||||
<polygon points="29 18.25, 29.5 18.5, 29.5 19, 29 19.25, 28.5 19, 28.5 18.5" style="fill:rgb(0,0,0); fill-opacity:0.474509803921569;" />
|
||||
<polygon points="30 18.25, 30.5 18.5, 30.5 19, 30 19.25, 29.5 19, 29.5 18.5" style="fill:rgb(0,0,0); fill-opacity:0.349019607843137;" />
|
||||
<polygon points="31 18.25, 31.5 18.5, 31.5 19, 31 19.25, 30.5 19, 30.5 18.5" style="fill:rgb(0,0,0); fill-opacity:0.219607843137255;" />
|
||||
<polygon points="32 18.25, 32.5 18.5, 32.5 19, 32 19.25, 31.5 19, 31.5 18.5" style="fill:rgb(0,0,0); fill-opacity:0.109803921568627;" />
|
||||
<polygon points="2.5 19, 3 19.25, 3 19.75, 2.5 20, 2 19.75, 2 19.25" style="fill:rgb(212,179,162); fill-opacity:0.274509803921569;" />
|
||||
<polygon points="3.5 19, 4 19.25, 4 19.75, 3.5 20, 3 19.75, 3 19.25" style="fill:rgb(182,154,139); fill-opacity:0.933333333333333;" />
|
||||
<polygon points="4.5 19, 5 19.25, 5 19.75, 4.5 20, 4 19.75, 4 19.25" style="fill:rgb(161,135,122); fill-opacity:1;" />
|
||||
<polygon points="5.5 19, 6 19.25, 6 19.75, 5.5 20, 5 19.75, 5 19.25" style="fill:rgb(169,143,128); fill-opacity:1;" />
|
||||
<polygon points="6.5 19, 7 19.25, 7 19.75, 6.5 20, 6 19.75, 6 19.25" style="fill:rgb(164,140,122); fill-opacity:1;" />
|
||||
<polygon points="7.5 19, 8 19.25, 8 19.75, 7.5 20, 7 19.75, 7 19.25" style="fill:rgb(148,147,73); fill-opacity:1;" />
|
||||
<polygon points="8.5 19, 9 19.25, 9 19.75, 8.5 20, 8 19.75, 8 19.25" style="fill:rgb(123,148,17); fill-opacity:1;" />
|
||||
<polygon points="9.5 19, 10 19.25, 10 19.75, 9.5 20, 9 19.75, 9 19.25" style="fill:rgb(109,113,46); fill-opacity:1;" />
|
||||
<polygon points="10.5 19, 11 19.25, 11 19.75, 10.5 20, 10 19.75, 10 19.25" style="fill:rgb(111,109,56); fill-opacity:1;" />
|
||||
<polygon points="11.5 19, 12 19.25, 12 19.75, 11.5 20, 11 19.75, 11 19.25" style="fill:rgb(112,109,58); fill-opacity:1;" />
|
||||
<polygon points="12.5 19, 13 19.25, 13 19.75, 12.5 20, 12 19.75, 12 19.25" style="fill:rgb(147,153,72); fill-opacity:1;" />
|
||||
<polygon points="13.5 19, 14 19.25, 14 19.75, 13.5 20, 13 19.75, 13 19.25" style="fill:rgb(144,155,69); fill-opacity:1;" />
|
||||
<polygon points="14.5 19, 15 19.25, 15 19.75, 14.5 20, 14 19.75, 14 19.25" style="fill:rgb(189,159,145); fill-opacity:1;" />
|
||||
<polygon points="15.5 19, 16 19.25, 16 19.75, 15.5 20, 15 19.75, 15 19.25" style="fill:rgb(200,169,154); fill-opacity:1;" />
|
||||
<polygon points="16.5 19, 17 19.25, 17 19.75, 16.5 20, 16 19.75, 16 19.25" style="fill:rgb(193,163,148); fill-opacity:1;" />
|
||||
<polygon points="17.5 19, 18 19.25, 18 19.75, 17.5 20, 17 19.75, 17 19.25" style="fill:rgb(196,166,149); fill-opacity:1;" />
|
||||
<polygon points="18.5 19, 19 19.25, 19 19.75, 18.5 20, 18 19.75, 18 19.25" style="fill:rgb(195,154,148); fill-opacity:1;" />
|
||||
<polygon points="19.5 19, 20 19.25, 20 19.75, 19.5 20, 19 19.75, 19 19.25" style="fill:rgb(167,111,123); fill-opacity:1;" />
|
||||
<polygon points="20.5 19, 21 19.25, 21 19.75, 20.5 20, 20 19.75, 20 19.25" style="fill:rgb(175,113,128); fill-opacity:1;" />
|
||||
<polygon points="21.5 19, 22 19.25, 22 19.75, 21.5 20, 21 19.75, 21 19.25" style="fill:rgb(193,128,141); fill-opacity:1;" />
|
||||
<polygon points="22.5 19, 23 19.25, 23 19.75, 22.5 20, 22 19.75, 22 19.25" style="fill:rgb(192,132,142); fill-opacity:1;" />
|
||||
<polygon points="23.5 19, 24 19.25, 24 19.75, 23.5 20, 23 19.75, 23 19.25" style="fill:rgb(208,162,156); fill-opacity:1;" />
|
||||
<polygon points="24.5 19, 25 19.25, 25 19.75, 24.5 20, 24 19.75, 24 19.25" style="fill:rgb(204,168,155); fill-opacity:1;" />
|
||||
<polygon points="25.5 19, 26 19.25, 26 19.75, 25.5 20, 25 19.75, 25 19.25" style="fill:rgb(85,70,62); fill-opacity:0.890196078431373;" />
|
||||
<polygon points="26.5 19, 27 19.25, 27 19.75, 26.5 20, 26 19.75, 26 19.25" style="fill:rgb(0,0,0); fill-opacity:0.619607843137255;" />
|
||||
<polygon points="27.5 19, 28 19.25, 28 19.75, 27.5 20, 27 19.75, 27 19.25" style="fill:rgb(0,0,0); fill-opacity:0.509803921568627;" />
|
||||
<polygon points="28.5 19, 29 19.25, 29 19.75, 28.5 20, 28 19.75, 28 19.25" style="fill:rgb(0,0,0); fill-opacity:0.384313725490196;" />
|
||||
<polygon points="29.5 19, 30 19.25, 30 19.75, 29.5 20, 29 19.75, 29 19.25" style="fill:rgb(0,0,0); fill-opacity:0.23921568627451;" />
|
||||
<polygon points="30.5 19, 31 19.25, 31 19.75, 30.5 20, 30 19.75, 30 19.25" style="fill:rgb(0,0,0); fill-opacity:0.125490196078431;" />
|
||||
<polygon points="31.5 19, 32 19.25, 32 19.75, 31.5 20, 31 19.75, 31 19.25" style="fill:rgb(0,0,0); fill-opacity:0.0509803921568627;" />
|
||||
<polygon points="4 19.75, 4.5 20, 4.5 20.5, 4 20.75, 3.5 20.5, 3.5 20" style="fill:rgb(207,175,159); fill-opacity:0.270588235294118;" />
|
||||
<polygon points="5 19.75, 5.5 20, 5.5 20.5, 5 20.75, 4.5 20.5, 4.5 20" style="fill:rgb(185,156,140); fill-opacity:0.850980392156863;" />
|
||||
<polygon points="6 19.75, 6.5 20, 6.5 20.5, 6 20.75, 5.5 20.5, 5.5 20" style="fill:rgb(166,140,125); fill-opacity:1;" />
|
||||
<polygon points="7 19.75, 7.5 20, 7.5 20.5, 7 20.75, 6.5 20.5, 6.5 20" style="fill:rgb(158,133,120); fill-opacity:1;" />
|
||||
<polygon points="8 19.75, 8.5 20, 8.5 20.5, 8 20.75, 7.5 20.5, 7.5 20" style="fill:rgb(135,134,64); fill-opacity:1;" />
|
||||
<polygon points="9 19.75, 9.5 20, 9.5 20.5, 9 20.75, 8.5 20.5, 8.5 20" style="fill:rgb(105,125,11); fill-opacity:1;" />
|
||||
<polygon points="10 19.75, 10.5 20, 10.5 20.5, 10 20.75, 9.5 20.5, 9.5 20" style="fill:rgb(132,123,78); fill-opacity:1;" />
|
||||
<polygon points="11 19.75, 11.5 20, 11.5 20.5, 11 20.75, 10.5 20.5, 10.5 20" style="fill:rgb(143,127,95); fill-opacity:1;" />
|
||||
<polygon points="12 19.75, 12.5 20, 12.5 20.5, 12 20.75, 11.5 20.5, 11.5 20" style="fill:rgb(137,130,79); fill-opacity:1;" />
|
||||
<polygon points="13 19.75, 13.5 20, 13.5 20.5, 13 20.75, 12.5 20.5, 12.5 20" style="fill:rgb(125,146,30); fill-opacity:1;" />
|
||||
<polygon points="14 19.75, 14.5 20, 14.5 20.5, 14 20.75, 13.5 20.5, 13.5 20" style="fill:rgb(140,132,80); fill-opacity:1;" />
|
||||
<polygon points="15 19.75, 15.5 20, 15.5 20.5, 15 20.75, 14.5 20.5, 14.5 20" style="fill:rgb(192,161,148); fill-opacity:1;" />
|
||||
<polygon points="16 19.75, 16.5 20, 16.5 20.5, 16 20.75, 15.5 20.5, 15.5 20" style="fill:rgb(191,160,146); fill-opacity:1;" />
|
||||
<polygon points="17 19.75, 17.5 20, 17.5 20.5, 17 20.75, 16.5 20.5, 16.5 20" style="fill:rgb(188,158,143); fill-opacity:1;" />
|
||||
<polygon points="18 19.75, 18.5 20, 18.5 20.5, 18 20.75, 17.5 20.5, 17.5 20" style="fill:rgb(196,165,149); fill-opacity:1;" />
|
||||
<polygon points="19 19.75, 19.5 20, 19.5 20.5, 19 20.75, 18.5 20.5, 18.5 20" style="fill:rgb(200,169,153); fill-opacity:1;" />
|
||||
<polygon points="20 19.75, 20.5 20, 20.5 20.5, 20 20.75, 19.5 20.5, 19.5 20" style="fill:rgb(197,161,150); fill-opacity:1;" />
|
||||
<polygon points="21 19.75, 21.5 20, 21.5 20.5, 21 20.75, 20.5 20.5, 20.5 20" style="fill:rgb(196,156,148); fill-opacity:1;" />
|
||||
<polygon points="22 19.75, 22.5 20, 22.5 20.5, 22 20.75, 21.5 20.5, 21.5 20" style="fill:rgb(196,154,147); fill-opacity:1;" />
|
||||
<polygon points="23 19.75, 23.5 20, 23.5 20.5, 23 20.75, 22.5 20.5, 22.5 20" style="fill:rgb(211,171,160); fill-opacity:1;" />
|
||||
<polygon points="24 19.75, 24.5 20, 24.5 20.5, 24 20.75, 23.5 20.5, 23.5 20" style="fill:rgb(187,156,142); fill-opacity:1;" />
|
||||
<polygon points="25 19.75, 25.5 20, 25.5 20.5, 25 20.75, 24.5 20.5, 24.5 20" style="fill:rgb(73,60,53); fill-opacity:0.854901960784314;" />
|
||||
<polygon points="26 19.75, 26.5 20, 26.5 20.5, 26 20.75, 25.5 20.5, 25.5 20" style="fill:rgb(0,0,0); fill-opacity:0.596078431372549;" />
|
||||
<polygon points="27 19.75, 27.5 20, 27.5 20.5, 27 20.75, 26.5 20.5, 26.5 20" style="fill:rgb(0,0,0); fill-opacity:0.447058823529412;" />
|
||||
<polygon points="28 19.75, 28.5 20, 28.5 20.5, 28 20.75, 27.5 20.5, 27.5 20" style="fill:rgb(0,0,0); fill-opacity:0.313725490196078;" />
|
||||
<polygon points="29 19.75, 29.5 20, 29.5 20.5, 29 20.75, 28.5 20.5, 28.5 20" style="fill:rgb(0,0,0); fill-opacity:0.188235294117647;" />
|
||||
<polygon points="30 19.75, 30.5 20, 30.5 20.5, 30 20.75, 29.5 20.5, 29.5 20" style="fill:rgb(0,0,0); fill-opacity:0.0823529411764706;" />
|
||||
<polygon points="31 19.75, 31.5 20, 31.5 20.5, 31 20.75, 30.5 20.5, 30.5 20" style="fill:rgb(0,0,0); fill-opacity:0.0235294117647059;" />
|
||||
<polygon points="4.5 20.5, 5 20.75, 5 21.25, 4.5 21.5, 4 21.25, 4 20.75" style="fill:rgb(194,164,148); fill-opacity:0.105882352941176;" />
|
||||
<polygon points="5.5 20.5, 6 20.75, 6 21.25, 5.5 21.5, 5 21.25, 5 20.75" style="fill:rgb(175,147,132); fill-opacity:0.541176470588235;" />
|
||||
<polygon points="6.5 20.5, 7 20.75, 7 21.25, 6.5 21.5, 6 21.25, 6 20.75" style="fill:rgb(171,144,128); fill-opacity:0.882352941176471;" />
|
||||
<polygon points="7.5 20.5, 8 20.75, 8 21.25, 7.5 21.5, 7 21.25, 7 20.75" style="fill:rgb(164,138,123); fill-opacity:1;" />
|
||||
<polygon points="8.5 20.5, 9 20.75, 9 21.25, 8.5 21.5, 8 21.25, 8 20.75" style="fill:rgb(150,128,110); fill-opacity:1;" />
|
||||
<polygon points="9.5 20.5, 10 20.75, 10 21.25, 9.5 21.5, 9 21.25, 9 20.75" style="fill:rgb(154,131,113); fill-opacity:1;" />
|
||||
<polygon points="10.5 20.5, 11 20.75, 11 21.25, 10.5 21.5, 10 21.25, 10 20.75" style="fill:rgb(152,131,107); fill-opacity:1;" />
|
||||
<polygon points="11.5 20.5, 12 20.75, 12 21.25, 11.5 21.5, 11 21.25, 11 20.75" style="fill:rgb(147,131,99); fill-opacity:1;" />
|
||||
<polygon points="12.5 20.5, 13 20.75, 13 21.25, 12.5 21.5, 12 21.25, 12 20.75" style="fill:rgb(134,124,78); fill-opacity:1;" />
|
||||
<polygon points="13.5 20.5, 14 20.75, 14 21.25, 13.5 21.5, 13 21.25, 13 20.75" style="fill:rgb(168,143,124); fill-opacity:1;" />
|
||||
<polygon points="14.5 20.5, 15 20.75, 15 21.25, 14.5 21.5, 14 21.25, 14 20.75" style="fill:rgb(181,151,137); fill-opacity:1;" />
|
||||
<polygon points="15.5 20.5, 16 20.75, 16 21.25, 15.5 21.5, 15 21.25, 15 20.75" style="fill:rgb(178,149,135); fill-opacity:1;" />
|
||||
<polygon points="16.5 20.5, 17 20.75, 17 21.25, 16.5 21.5, 16 21.25, 16 20.75" style="fill:rgb(182,153,139); fill-opacity:1;" />
|
||||
<polygon points="17.5 20.5, 18 20.75, 18 21.25, 17.5 21.5, 17 21.25, 17 20.75" style="fill:rgb(186,156,142); fill-opacity:1;" />
|
||||
<polygon points="18.5 20.5, 19 20.75, 19 21.25, 18.5 21.5, 18 21.25, 18 20.75" style="fill:rgb(184,153,140); fill-opacity:1;" />
|
||||
<polygon points="19.5 20.5, 20 20.75, 20 21.25, 19.5 21.5, 19 21.25, 19 20.75" style="fill:rgb(189,158,144); fill-opacity:1;" />
|
||||
<polygon points="20.5 20.5, 21 20.75, 21 21.25, 20.5 21.5, 20 21.25, 20 20.75" style="fill:rgb(199,166,152); fill-opacity:1;" />
|
||||
<polygon points="21.5 20.5, 22 20.75, 22 21.25, 21.5 21.5, 21 21.25, 21 20.75" style="fill:rgb(202,167,152); fill-opacity:1;" />
|
||||
<polygon points="22.5 20.5, 23 20.75, 23 21.25, 22.5 21.5, 22 21.25, 22 20.75" style="fill:rgb(143,119,108); fill-opacity:0.988235294117647;" />
|
||||
<polygon points="23.5 20.5, 24 20.75, 24 21.25, 23.5 21.5, 23 21.25, 23 20.75" style="fill:rgb(41,34,30); fill-opacity:0.764705882352941;" />
|
||||
<polygon points="24.5 20.5, 25 20.75, 25 21.25, 24.5 21.5, 24 21.25, 24 20.75" style="fill:rgb(0,0,0); fill-opacity:0.486274509803922;" />
|
||||
<polygon points="25.5 20.5, 26 20.75, 26 21.25, 25.5 21.5, 25 21.25, 25 20.75" style="fill:rgb(0,0,0); fill-opacity:0.317647058823529;" />
|
||||
<polygon points="26.5 20.5, 27 20.75, 27 21.25, 26.5 21.5, 26 21.25, 26 20.75" style="fill:rgb(0,0,0); fill-opacity:0.168627450980392;" />
|
||||
<polygon points="27.5 20.5, 28 20.75, 28 21.25, 27.5 21.5, 27 21.25, 27 20.75" style="fill:rgb(0,0,0); fill-opacity:0.0705882352941176;" />
|
||||
<polygon points="28.5 20.5, 29 20.75, 29 21.25, 28.5 21.5, 28 21.25, 28 20.75" style="fill:rgb(0,0,0); fill-opacity:0.0156862745098039;" />
|
||||
<polygon points="7 21.25, 7.5 21.5, 7.5 22, 7 22.25, 6.5 22, 6.5 21.5" style="fill:rgb(158,134,116); fill-opacity:0.125490196078431;" />
|
||||
<polygon points="8 21.25, 8.5 21.5, 8.5 22, 8 22.25, 7.5 22, 7.5 21.5" style="fill:rgb(156,129,116); fill-opacity:0.435294117647059;" />
|
||||
<polygon points="9 21.25, 9.5 21.5, 9.5 22, 9 22.25, 8.5 22, 8.5 21.5" style="fill:rgb(165,137,126); fill-opacity:0.729411764705882;" />
|
||||
<polygon points="10 21.25, 10.5 21.5, 10.5 22, 10 22.25, 9.5 22, 9.5 21.5" style="fill:rgb(171,144,129); fill-opacity:0.949019607843137;" />
|
||||
<polygon points="11 21.25, 11.5 21.5, 11.5 22, 11 22.25, 10.5 22, 10.5 21.5" style="fill:rgb(168,141,125); fill-opacity:1;" />
|
||||
<polygon points="12 21.25, 12.5 21.5, 12.5 22, 12 22.25, 11.5 22, 11.5 21.5" style="fill:rgb(163,137,122); fill-opacity:1;" />
|
||||
<polygon points="13 21.25, 13.5 21.5, 13.5 22, 13 22.25, 12.5 22, 12.5 21.5" style="fill:rgb(166,137,128); fill-opacity:1;" />
|
||||
<polygon points="14 21.25, 14.5 21.5, 14.5 22, 14 22.25, 13.5 22, 13.5 21.5" style="fill:rgb(164,137,124); fill-opacity:1;" />
|
||||
<polygon points="15 21.25, 15.5 21.5, 15.5 22, 15 22.25, 14.5 22, 14.5 21.5" style="fill:rgb(163,136,123); fill-opacity:1;" />
|
||||
<polygon points="16 21.25, 16.5 21.5, 16.5 22, 16 22.25, 15.5 22, 15.5 21.5" style="fill:rgb(168,141,127); fill-opacity:1;" />
|
||||
<polygon points="17 21.25, 17.5 21.5, 17.5 22, 17 22.25, 16.5 22, 16.5 21.5" style="fill:rgb(178,149,135); fill-opacity:1;" />
|
||||
<polygon points="18 21.25, 18.5 21.5, 18.5 22, 18 22.25, 17.5 22, 17.5 21.5" style="fill:rgb(183,153,140); fill-opacity:1;" />
|
||||
<polygon points="19 21.25, 19.5 21.5, 19.5 22, 19 22.25, 18.5 22, 18.5 21.5" style="fill:rgb(186,156,141); fill-opacity:1;" />
|
||||
<polygon points="20 21.25, 20.5 21.5, 20.5 22, 20 22.25, 19.5 22, 19.5 21.5" style="fill:rgb(178,149,135); fill-opacity:1;" />
|
||||
<polygon points="21 21.25, 21.5 21.5, 21.5 22, 21 22.25, 20.5 22, 20.5 21.5" style="fill:rgb(140,116,106); fill-opacity:0.909803921568627;" />
|
||||
<polygon points="22 21.25, 22.5 21.5, 22.5 22, 22 22.25, 21.5 22, 21.5 21.5" style="fill:rgb(64,52,48); fill-opacity:0.717647058823529;" />
|
||||
<polygon points="23 21.25, 23.5 21.5, 23.5 22, 23 22.25, 22.5 22, 22.5 21.5" style="fill:rgb(4,3,2); fill-opacity:0.427450980392157;" />
|
||||
<polygon points="24 21.25, 24.5 21.5, 24.5 22, 24 22.25, 23.5 22, 23.5 21.5" style="fill:rgb(0,0,0); fill-opacity:0.196078431372549;" />
|
||||
<polygon points="25 21.25, 25.5 21.5, 25.5 22, 25 22.25, 24.5 22, 24.5 21.5" style="fill:rgb(0,0,0); fill-opacity:0.0823529411764706;" />
|
||||
<polygon points="26 21.25, 26.5 21.5, 26.5 22, 26 22.25, 25.5 22, 25.5 21.5" style="fill:rgb(0,0,0); fill-opacity:0.0156862745098039;" />
|
||||
<polygon points="8.5 22, 9 22.25, 9 22.75, 8.5 23, 8 22.75, 8 22.25" style="fill:rgb(130,108,96); fill-opacity:0.0274509803921569;" />
|
||||
<polygon points="9.5 22, 10 22.25, 10 22.75, 9.5 23, 9 22.75, 9 22.25" style="fill:rgb(123,101,89); fill-opacity:0.176470588235294;" />
|
||||
<polygon points="10.5 22, 11 22.25, 11 22.75, 10.5 23, 10 22.75, 10 22.25" style="fill:rgb(129,106,95); fill-opacity:0.380392156862745;" />
|
||||
<polygon points="11.5 22, 12 22.25, 12 22.75, 11.5 23, 11 22.75, 11 22.25" style="fill:rgb(146,120,109); fill-opacity:0.545098039215686;" />
|
||||
<polygon points="12.5 22, 13 22.25, 13 22.75, 12.5 23, 12 22.75, 12 22.25" style="fill:rgb(149,123,111); fill-opacity:0.650980392156863;" />
|
||||
<polygon points="13.5 22, 14 22.25, 14 22.75, 13.5 23, 13 22.75, 13 22.25" style="fill:rgb(149,124,112); fill-opacity:0.709803921568627;" />
|
||||
<polygon points="14.5 22, 15 22.25, 15 22.75, 14.5 23, 14 22.75, 14 22.25" style="fill:rgb(146,121,109); fill-opacity:0.737254901960784;" />
|
||||
<polygon points="15.5 22, 16 22.25, 16 22.75, 15.5 23, 15 22.75, 15 22.25" style="fill:rgb(149,124,112); fill-opacity:0.737254901960784;" />
|
||||
<polygon points="16.5 22, 17 22.25, 17 22.75, 16.5 23, 16 22.75, 16 22.25" style="fill:rgb(139,116,104); fill-opacity:0.709803921568627;" />
|
||||
<polygon points="17.5 22, 18 22.25, 18 22.75, 17.5 23, 17 22.75, 17 22.25" style="fill:rgb(133,109,99); fill-opacity:0.631372549019608;" />
|
||||
<polygon points="18.5 22, 19 22.25, 19 22.75, 18.5 23, 18 22.75, 18 22.25" style="fill:rgb(125,103,92); fill-opacity:0.505882352941176;" />
|
||||
<polygon points="19.5 22, 20 22.25, 20 22.75, 19.5 23, 19 22.75, 19 22.25" style="fill:rgb(77,63,56); fill-opacity:0.313725490196078;" />
|
||||
<polygon points="20.5 22, 21 22.25, 21 22.75, 20.5 23, 20 22.75, 20 22.25" style="fill:rgb(13,10,9); fill-opacity:0.129411764705882;" />
|
||||
<polygon points="21.5 22, 22 22.25, 22 22.75, 21.5 23, 21 22.75, 21 22.25" style="fill:rgb(4,4,3); fill-opacity:0.0235294117647059;" />
|
||||
<polygon points="14 22.75, 14.5 23, 14.5 23.5, 14 23.75, 13.5 23.5, 13.5 23" style="fill:rgb(155,129,116); fill-opacity:0.0470588235294118;" />
|
||||
<polygon points="15 22.75, 15.5 23, 15.5 23.5, 15 23.75, 14.5 23.5, 14.5 23" style="fill:rgb(121,99,89); fill-opacity:0.0745098039215686;" />
|
||||
<polygon points="16 22.75, 16.5 23, 16.5 23.5, 16 23.75, 15.5 23.5, 15.5 23" style="fill:rgb(116,96,86); fill-opacity:0.0823529411764706;" />
|
||||
<polygon points="17 22.75, 17.5 23, 17.5 23.5, 17 23.75, 16.5 23.5, 16.5 23" style="fill:rgb(110,91,81); fill-opacity:0.0549019607843137;" />
|
||||
<polygon points="18 22.75, 18.5 23, 18.5 23.5, 18 23.75, 17.5 23.5, 17.5 23" style="fill:rgb(107,88,78); fill-opacity:0.00392156862745098;" />
|
||||
<polygon points="9.5 23.5, 10 23.75, 10 24.25, 9.5 24.5, 9 24.25, 9 23.75" style="fill:rgb(156,130,117); fill-opacity:0.00392156862745098;" />
|
||||
<polygon points="10.5 23.5, 11 23.75, 11 24.25, 10.5 24.5, 10 24.25, 10 23.75" style="fill:rgb(157,130,117); fill-opacity:0.00784313725490196;" />
|
||||
<polygon points="11.5 23.5, 12 23.75, 12 24.25, 11.5 24.5, 11 24.25, 11 23.75" style="fill:rgb(175,146,131); fill-opacity:0.0117647058823529;" />
|
||||
<polygon points="12.5 23.5, 13 23.75, 13 24.25, 12.5 24.5, 12 24.25, 12 23.75" style="fill:rgb(170,142,128); fill-opacity:0.0117647058823529;" />
|
||||
<polygon points="13.5 23.5, 14 23.75, 14 24.25, 13.5 24.5, 13 24.25, 13 23.75" style="fill:rgb(170,142,129); fill-opacity:0.0117647058823529;" />
|
||||
<polygon points="14.5 23.5, 15 23.75, 15 24.25, 14.5 24.5, 14 24.25, 14 23.75" style="fill:rgb(171,142,129); fill-opacity:0.00392156862745098;" />
|
||||
<polygon points="15.5 23.5, 16 23.75, 16 24.25, 15.5 24.5, 15 24.25, 15 23.75" style="fill:rgb(171,143,130); fill-opacity:0.00392156862745098;" />
|
||||
<polygon points="16.5 23.5, 17 23.75, 17 24.25, 16.5 24.5, 16 24.25, 16 23.75" style="fill:rgb(182,152,139); fill-opacity:0.0117647058823529;" />
|
||||
<polygon points="17.5 23.5, 18 23.75, 18 24.25, 17.5 24.5, 17 24.25, 17 23.75" style="fill:rgb(183,154,139); fill-opacity:0.0196078431372549;" />
|
||||
<polygon points="18.5 23.5, 19 23.75, 19 24.25, 18.5 24.5, 18 24.25, 18 23.75" style="fill:rgb(177,148,134); fill-opacity:0.0235294117647059;" />
|
||||
<polygon points="19.5 23.5, 20 23.75, 20 24.25, 19.5 24.5, 19 24.25, 19 23.75" style="fill:rgb(167,139,127); fill-opacity:0.0196078431372549;" />
|
||||
<polygon points="20.5 23.5, 21 23.75, 21 24.25, 20.5 24.5, 20 24.25, 20 23.75" style="fill:rgb(129,107,96); fill-opacity:0.0117647058823529;" />
|
||||
<polygon points="21.5 23.5, 22 23.75, 22 24.25, 21.5 24.5, 21 24.25, 21 23.75" style="fill:rgb(110,90,80); fill-opacity:0.00392156862745098;" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 92 KiB |
86
bgracontrols/test/test_extra/pix2svg/pix2svg.lpi
Normal file
86
bgracontrols/test/test_extra/pix2svg/pix2svg.lpi
Normal file
@@ -0,0 +1,86 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="12"/>
|
||||
<PathDelim Value="\"/>
|
||||
<General>
|
||||
<Flags>
|
||||
<CompatibilityMode Value="True"/>
|
||||
</Flags>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<Title Value="Pix2svg"/>
|
||||
<ResourceType Value="res"/>
|
||||
<UseXPManifest Value="True"/>
|
||||
</General>
|
||||
<i18n>
|
||||
<EnableI18N LFM="False"/>
|
||||
</i18n>
|
||||
<BuildModes Count="1">
|
||||
<Item1 Name="Default" Default="True"/>
|
||||
</BuildModes>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<FormatVersion Value="2"/>
|
||||
<Modes Count="1">
|
||||
<Mode0 Name="default"/>
|
||||
</Modes>
|
||||
</RunParams>
|
||||
<RequiredPackages Count="2">
|
||||
<Item1>
|
||||
<PackageName Value="bgracontrols"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<PackageName Value="LCL"/>
|
||||
</Item2>
|
||||
</RequiredPackages>
|
||||
<Units Count="2">
|
||||
<Unit0>
|
||||
<Filename Value="pix2svg.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit0>
|
||||
<Unit1>
|
||||
<Filename Value="umain.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<ComponentName Value="Form1"/>
|
||||
<HasResources Value="True"/>
|
||||
<ResourceBaseClass Value="Form"/>
|
||||
</Unit1>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="pix2svg"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<DebugInfoType Value="dsDwarf2Set"/>
|
||||
</Debugging>
|
||||
<Options>
|
||||
<Win32>
|
||||
<GraphicApplication Value="True"/>
|
||||
</Win32>
|
||||
</Options>
|
||||
</Linking>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
<Exceptions Count="3">
|
||||
<Item1>
|
||||
<Name Value="EAbort"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<Name Value="ECodetoolError"/>
|
||||
</Item2>
|
||||
<Item3>
|
||||
<Name Value="EFOpenError"/>
|
||||
</Item3>
|
||||
</Exceptions>
|
||||
</Debugging>
|
||||
</CONFIG>
|
22
bgracontrols/test/test_extra/pix2svg/pix2svg.lpr
Normal file
22
bgracontrols/test/test_extra/pix2svg/pix2svg.lpr
Normal file
@@ -0,0 +1,22 @@
|
||||
program pix2svg;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
uses
|
||||
{$IFDEF UNIX}{$IFDEF UseCThreads}
|
||||
cthreads,
|
||||
{$ENDIF}{$ENDIF}
|
||||
Interfaces, // this includes the LCL widgetset
|
||||
Forms, umain
|
||||
{ you can add units after this };
|
||||
|
||||
{$R *.res}
|
||||
|
||||
begin
|
||||
Application.Title:='Pix2svg';
|
||||
RequireDerivedFormResource := True;
|
||||
Application.Initialize;
|
||||
Application.CreateForm(TForm1, Form1);
|
||||
Application.Run;
|
||||
end.
|
||||
|
10
bgracontrols/test/test_extra/pix2svg/umain.lfm
Normal file
10
bgracontrols/test/test_extra/pix2svg/umain.lfm
Normal file
@@ -0,0 +1,10 @@
|
||||
object Form1: TForm1
|
||||
Left = 712
|
||||
Height = 240
|
||||
Top = 193
|
||||
Width = 320
|
||||
Caption = 'Pix2svg'
|
||||
OnCreate = FormCreate
|
||||
OnDestroy = FormDestroy
|
||||
LCLVersion = '1.2.4.0'
|
||||
end
|
128
bgracontrols/test/test_extra/pix2svg/umain.pas
Normal file
128
bgracontrols/test/test_extra/pix2svg/umain.pas
Normal file
@@ -0,0 +1,128 @@
|
||||
unit umain;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
|
||||
BCFilters, BGRABitmap, BGRABitmapTypes;
|
||||
|
||||
type
|
||||
|
||||
TPix2SVGStyle = (pix2rectangle, pix2ellipse, pix2hexagon);
|
||||
|
||||
{ TForm1 }
|
||||
|
||||
TForm1 = class(TForm)
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure FormDestroy(Sender: TObject);
|
||||
private
|
||||
{ private declarations }
|
||||
public
|
||||
{ public declarations }
|
||||
bitmap: TBGRABitmap;
|
||||
end;
|
||||
|
||||
var
|
||||
Form1: TForm1;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.lfm}
|
||||
|
||||
function Pix2svg(Bitmap: TBGRABitmap; mX, mY: single; Style: TPix2SVGStyle;
|
||||
SkipTransparent: boolean): TStringList;
|
||||
|
||||
function BGRAtoRGBAstr(bgra: TBGRAPixel): string;
|
||||
begin
|
||||
Result := 'style="fill:rgb(' + IntToStr(bgra.red) + ',' +
|
||||
IntToStr(bgra.green) + ',' + IntToStr(bgra.blue) + '); fill-opacity:' +
|
||||
FloatToStr(bgra.alpha / 255) + ';';
|
||||
end;
|
||||
|
||||
function hexagonStr(x, y: integer; p: PBGRAPixel): string;
|
||||
var
|
||||
p1, p2, p3, p4, p5, p6: string;
|
||||
begin
|
||||
if odd(y) then // impar
|
||||
begin
|
||||
p1 := FloatToStr(x + 1 / 2) + ' ' + FloatToStr(0.75 * y + 0.5 / 2) + ', ';
|
||||
p2 := FloatToStr(x + 2 / 2) + ' ' + FloatToStr(0.75 * y + 1 / 2) + ', ';
|
||||
p3 := FloatToStr(x + 2 / 2) + ' ' + FloatToStr(0.75 * y + 2 / 2) + ', ';
|
||||
p4 := FloatToStr(x + 1 / 2) + ' ' + FloatToStr(0.75 * y + 2.5 / 2) + ', ';
|
||||
p5 := FloatToStr(x + 0 / 2) + ' ' + FloatToStr(0.75 * y + 2 / 2) + ', ';
|
||||
p6 := FloatToStr(x + 0 / 2) + ' ' + FloatToStr(0.75 * y + 1 / 2);
|
||||
end
|
||||
else // par
|
||||
begin
|
||||
p1 := FloatToStr(0.5 + x + 1 / 2) + ' ' + FloatToStr(0.75 * y + 0.5 / 2) + ', ';
|
||||
p2 := FloatToStr(0.5 + x + 2 / 2) + ' ' + FloatToStr(0.75 * y + 1 / 2) + ', ';
|
||||
p3 := FloatToStr(0.5 + x + 2 / 2) + ' ' + FloatToStr(0.75 * y + 2 / 2) + ', ';
|
||||
p4 := FloatToStr(0.5 + x + 1 / 2) + ' ' + FloatToStr(0.75 * y + 2.5 / 2) + ', ';
|
||||
p5 := FloatToStr(0.5 + x + 0 / 2) + ' ' + FloatToStr(0.75 * y + 2 / 2) + ', ';
|
||||
p6 := FloatToStr(0.5 + x + 0 / 2) + ' ' + FloatToStr(0.75 * y + 1 / 2);
|
||||
end;
|
||||
Result := ' <polygon points="' + p1 + p2 + p3 + p4 + p5 +
|
||||
p6 + '" ' + BGRAtoRGBAstr(p^) + '" />';
|
||||
end;
|
||||
|
||||
var
|
||||
x, y: integer;
|
||||
p: PBGRAPixel;
|
||||
begin
|
||||
Result := TStringList.Create;
|
||||
Result.Add('<?xml version="1.0" encoding="UTF-8" standalone="no"?>');
|
||||
Result.Add('<svg '{width="' + IntToStr(bitmap.Width) + '" height="' +
|
||||
IntToStr(bitmap.Height) + '" viewPort="0 0 ' + IntToStr(bitmap.Width) +
|
||||
' ' + IntToStr(bitmap.Height) + '" '} +
|
||||
'xmlns="http://www.w3.org/2000/svg" version="1.1">');
|
||||
Result.Add(' <g>');
|
||||
|
||||
for y := 0 to Bitmap.Height - 1 do
|
||||
begin
|
||||
p := Bitmap.Scanline[y];
|
||||
for x := 0 to Bitmap.Width - 1 do
|
||||
begin
|
||||
if (SkipTransparent) and (p^.alpha = 0) then
|
||||
// nothing
|
||||
else
|
||||
case Style of
|
||||
pix2ellipse: Result.Add(' <ellipse cx="' + FloatToStr(x * mX) +
|
||||
'.5" cy="' + FloatToStr(y * mY) + '.5" rx="' +
|
||||
FloatToStr(0.5 * mX) + '" ry="' + FloatToStr(0.5 * mY) +
|
||||
'" ' + BGRAtoRGBAstr(p^) + '"/>');
|
||||
pix2rectangle: Result.Add(' <rect x="' + FloatToStr(x * mX) +
|
||||
'.5" y="' + FloatToStr(y * mY) + '.5" width="' +
|
||||
FloatToStr(1 * mX) + '" height="' + FloatToStr(1 * mY) +
|
||||
'" ' + BGRAtoRGBAstr(p^) + '"/>');
|
||||
pix2hexagon: Result.Add(hexagonStr(x, y, p));
|
||||
end;
|
||||
Inc(p);
|
||||
end;
|
||||
end;
|
||||
|
||||
Result.Add(' </g>');
|
||||
Result.Add('</svg>');
|
||||
end;
|
||||
|
||||
{ TForm1 }
|
||||
|
||||
procedure TForm1.FormCreate(Sender: TObject);
|
||||
var
|
||||
s: TStringList;
|
||||
begin
|
||||
DecimalSeparator := '.';
|
||||
|
||||
bitmap := TBGRABitmap.Create('lazpaint.png');
|
||||
s := Pix2svg(bitmap, 1, 1, pix2hexagon, True);
|
||||
s.SaveToFile('lazpaint.svg');
|
||||
s.Free;
|
||||
end;
|
||||
|
||||
procedure TForm1.FormDestroy(Sender: TObject);
|
||||
begin
|
||||
bitmap.Free;
|
||||
end;
|
||||
|
||||
end.
|
BIN
bgracontrols/test/test_extra/rain-circular/Lighthouse.jpg
Normal file
BIN
bgracontrols/test/test_extra/rain-circular/Lighthouse.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 548 KiB |
155
bgracontrols/test/test_extra/rain-circular/project1.lpi
Normal file
155
bgracontrols/test/test_extra/rain-circular/project1.lpi
Normal file
@@ -0,0 +1,155 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="12"/>
|
||||
<PathDelim Value="\"/>
|
||||
<General>
|
||||
<Flags>
|
||||
<CompatibilityMode Value="True"/>
|
||||
</Flags>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<Title Value="project1"/>
|
||||
<ResourceType Value="res"/>
|
||||
<UseXPManifest Value="True"/>
|
||||
</General>
|
||||
<i18n>
|
||||
<EnableI18N LFM="False"/>
|
||||
</i18n>
|
||||
<BuildModes Count="3">
|
||||
<Item1 Name="Default" Default="True"/>
|
||||
<Item2 Name="Debug">
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="project1"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<Parsing>
|
||||
<SyntaxOptions>
|
||||
<IncludeAssertionCode Value="True"/>
|
||||
</SyntaxOptions>
|
||||
</Parsing>
|
||||
<CodeGeneration>
|
||||
<Checks>
|
||||
<IOChecks Value="True"/>
|
||||
<RangeChecks Value="True"/>
|
||||
<OverflowChecks Value="True"/>
|
||||
<StackChecks Value="True"/>
|
||||
</Checks>
|
||||
</CodeGeneration>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<DebugInfoType Value="dsDwarf2Set"/>
|
||||
<UseHeaptrc Value="True"/>
|
||||
<UseExternalDbgSyms Value="True"/>
|
||||
</Debugging>
|
||||
<Options>
|
||||
<Win32>
|
||||
<GraphicApplication Value="True"/>
|
||||
</Win32>
|
||||
</Options>
|
||||
</Linking>
|
||||
</CompilerOptions>
|
||||
</Item2>
|
||||
<Item3 Name="Release">
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="project1"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<CodeGeneration>
|
||||
<SmartLinkUnit Value="True"/>
|
||||
<Optimizations>
|
||||
<OptimizationLevel Value="3"/>
|
||||
</Optimizations>
|
||||
</CodeGeneration>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<GenerateDebugInfo Value="False"/>
|
||||
</Debugging>
|
||||
<LinkSmart Value="True"/>
|
||||
<Options>
|
||||
<Win32>
|
||||
<GraphicApplication Value="True"/>
|
||||
</Win32>
|
||||
</Options>
|
||||
</Linking>
|
||||
</CompilerOptions>
|
||||
</Item3>
|
||||
</BuildModes>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<FormatVersion Value="2"/>
|
||||
<Modes Count="1">
|
||||
<Mode0 Name="default"/>
|
||||
</Modes>
|
||||
</RunParams>
|
||||
<RequiredPackages Count="2">
|
||||
<Item1>
|
||||
<PackageName Value="bgracontrols"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<PackageName Value="LCL"/>
|
||||
</Item2>
|
||||
</RequiredPackages>
|
||||
<Units Count="2">
|
||||
<Unit0>
|
||||
<Filename Value="project1.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit0>
|
||||
<Unit1>
|
||||
<Filename Value="unit1.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<ComponentName Value="Form1"/>
|
||||
<HasResources Value="True"/>
|
||||
<ResourceBaseClass Value="Form"/>
|
||||
<UnitName Value="Unit1"/>
|
||||
</Unit1>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="project1"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<DebugInfoType Value="dsDwarf2Set"/>
|
||||
</Debugging>
|
||||
<Options>
|
||||
<Win32>
|
||||
<GraphicApplication Value="True"/>
|
||||
</Win32>
|
||||
</Options>
|
||||
</Linking>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
<Exceptions Count="3">
|
||||
<Item1>
|
||||
<Name Value="EAbort"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<Name Value="ECodetoolError"/>
|
||||
</Item2>
|
||||
<Item3>
|
||||
<Name Value="EFOpenError"/>
|
||||
</Item3>
|
||||
</Exceptions>
|
||||
</Debugging>
|
||||
</CONFIG>
|
21
bgracontrols/test/test_extra/rain-circular/project1.lpr
Normal file
21
bgracontrols/test/test_extra/rain-circular/project1.lpr
Normal file
@@ -0,0 +1,21 @@
|
||||
program project1;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
uses
|
||||
{$IFDEF UNIX}{$IFDEF UseCThreads}
|
||||
cthreads,
|
||||
{$ENDIF}{$ENDIF}
|
||||
Interfaces, // this includes the LCL widgetset
|
||||
Forms, Unit1
|
||||
{ you can add units after this };
|
||||
|
||||
{$R *.res}
|
||||
|
||||
begin
|
||||
RequireDerivedFormResource := True;
|
||||
Application.Initialize;
|
||||
Application.CreateForm(TForm1, Form1);
|
||||
Application.Run;
|
||||
end.
|
||||
|
42
bgracontrols/test/test_extra/rain-circular/unit1.lfm
Normal file
42
bgracontrols/test/test_extra/rain-circular/unit1.lfm
Normal file
@@ -0,0 +1,42 @@
|
||||
object Form1: TForm1
|
||||
Left = 422
|
||||
Height = 292
|
||||
Top = 114
|
||||
Width = 373
|
||||
Caption = 'Form1'
|
||||
ClientHeight = 292
|
||||
ClientWidth = 373
|
||||
OnClose = FormClose
|
||||
OnCreate = FormCreate
|
||||
OnDestroy = FormDestroy
|
||||
LCLVersion = '1.0.10.0'
|
||||
object TrackBar1: TTrackBar
|
||||
Left = 0
|
||||
Height = 25
|
||||
Top = 1
|
||||
Width = 372
|
||||
Frequency = 100
|
||||
Max = 1000
|
||||
Position = 0
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
TabOrder = 0
|
||||
end
|
||||
object vsRain: TBGRAVirtualScreen
|
||||
Left = 0
|
||||
Height = 259
|
||||
Top = 32
|
||||
Width = 372
|
||||
OnRedraw = RainRedraw
|
||||
Alignment = taLeftJustify
|
||||
Anchors = [akTop, akLeft, akRight, akBottom]
|
||||
Color = clBlack
|
||||
ParentColor = False
|
||||
TabOrder = 1
|
||||
end
|
||||
object Timer1: TTimer
|
||||
Interval = 15
|
||||
OnTimer = Timer1Timer
|
||||
left = 108
|
||||
top = 85
|
||||
end
|
||||
end
|
245
bgracontrols/test/test_extra/rain-circular/unit1.pas
Normal file
245
bgracontrols/test/test_extra/rain-circular/unit1.pas
Normal file
@@ -0,0 +1,245 @@
|
||||
unit Unit1;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
|
||||
ComCtrls, BGRAVirtualScreen, BGRABitmap, BGRABitmapTypes;
|
||||
|
||||
const
|
||||
wind = -0.5; //1 means 45 degrees rain
|
||||
rainDensity = 2; //strictly positive
|
||||
|
||||
type
|
||||
|
||||
{ TForm1 }
|
||||
|
||||
TForm1 = class(TForm)
|
||||
vsRain: TBGRAVirtualScreen;
|
||||
Timer1: TTimer;
|
||||
TrackBar1: TTrackBar;
|
||||
procedure RainRedraw(Sender: TObject; Bitmap: TBGRABitmap);
|
||||
procedure FormClose(Sender: TObject; var {%H-}CloseAction: TCloseAction);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure FormDestroy(Sender: TObject);
|
||||
procedure Timer1Timer(Sender: TObject);
|
||||
private
|
||||
{ private declarations }
|
||||
bkg,stretchedBkg: TBGRABitmap;
|
||||
prevTime: TDateTime;
|
||||
prevTimeDefined: boolean;
|
||||
rainData: array of record
|
||||
x,ystart,yend: single;
|
||||
rainWidth, rainSpeed: single;
|
||||
grad: TBGRACustomGradient;
|
||||
active: boolean;
|
||||
inactiveTime: double;
|
||||
end;
|
||||
procedure ClearRainData;
|
||||
procedure PrepareRainArray(nbRain: integer; ScaleX: single);
|
||||
function PrepareRainDrop(i: integer; rainSizeX, rainSizeY: single): single;
|
||||
procedure NeedRainArray(w, h, rainProba: integer; rainSizeX, rainSizeY: single);
|
||||
procedure RainElapse(elapsed: double; rainProba, w, h: integer);
|
||||
procedure RenderRain(Bitmap: TBGRABitmap);
|
||||
end;
|
||||
|
||||
var
|
||||
Form1: TForm1;
|
||||
|
||||
implementation
|
||||
|
||||
uses BGRAGradientScanner, Math;
|
||||
|
||||
{$R *.lfm}
|
||||
|
||||
{ TForm1 }
|
||||
|
||||
procedure TForm1.RainRedraw(Sender: TObject; Bitmap: TBGRABitmap);
|
||||
var
|
||||
elapsed: double;
|
||||
ratio: single;
|
||||
x,y,w,h: integer;
|
||||
begin
|
||||
if not prevTimeDefined then
|
||||
begin
|
||||
elapsed := 0;
|
||||
end else
|
||||
begin
|
||||
elapsed := (Now-prevTime)*86400*10;
|
||||
if elapsed < 0 then elapsed := 0;
|
||||
end;
|
||||
prevTime := now;
|
||||
prevTimeDefined := true;
|
||||
|
||||
if Assigned(stretchedBkg) and
|
||||
((stretchedBkg.Width <> Bitmap.Width) or (stretchedBkg.Height <> Bitmap.Height)) then
|
||||
FreeAndNil(stretchedBkg);
|
||||
if not Assigned(stretchedBkg) then
|
||||
begin
|
||||
ratio := max(Bitmap.Width/bkg.Width,Bitmap.Height/bkg.Height);
|
||||
stretchedBkg := TBGRABitmap.Create(Bitmap.Width,Bitmap.Height,BGRABlack);
|
||||
w := round(bkg.Width*ratio);
|
||||
h := round(bkg.Height*ratio);
|
||||
x := (Bitmap.Width-w) div 2;
|
||||
y := (Bitmap.Height-h) div 2;
|
||||
stretchedBkg.StretchPutImage(rect(x,y,x+w,y+h),bkg,dmDrawWithTransparency);
|
||||
end;
|
||||
|
||||
RainElapse(elapsed,TrackBar1.Position,Bitmap.Width,Bitmap.Height);
|
||||
|
||||
Bitmap.PutImage(0,0,stretchedBkg,dmSet);
|
||||
RenderRain(Bitmap);
|
||||
end;
|
||||
|
||||
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
|
||||
begin
|
||||
Timer1.Enabled := False;
|
||||
end;
|
||||
|
||||
procedure TForm1.FormCreate(Sender: TObject);
|
||||
begin
|
||||
bkg := TBGRABitmap.Create('Lighthouse.jpg');
|
||||
randomize;
|
||||
end;
|
||||
|
||||
procedure TForm1.FormDestroy(Sender: TObject);
|
||||
begin
|
||||
bkg.Free;
|
||||
FreeAndNil(stretchedBkg);
|
||||
ClearRainData;
|
||||
end;
|
||||
|
||||
procedure TForm1.Timer1Timer(Sender: TObject);
|
||||
begin
|
||||
Timer1.Enabled:= false;
|
||||
vsRain.RedrawBitmap;
|
||||
Timer1.Enabled:= true;
|
||||
end;
|
||||
|
||||
procedure TForm1.ClearRainData;
|
||||
var i: integer;
|
||||
begin
|
||||
for i := 0 to high(rainData) do
|
||||
rainData[i].grad.Free;
|
||||
rainData := nil;
|
||||
end;
|
||||
|
||||
procedure TForm1.RenderRain(Bitmap: TBGRABitmap);
|
||||
var
|
||||
i,h2: Integer;
|
||||
scan: TBGRAGradientScanner;
|
||||
begin
|
||||
h2 := Bitmap.Height div 2;
|
||||
for i:= 0 to high(rainData) do
|
||||
with rainData[i] do
|
||||
if active then
|
||||
begin
|
||||
scan := TBGRAGradientScanner.Create(grad, gtLinear, PointF(0,ystart),PointF(0,yend));
|
||||
Bitmap.DrawLineAntialias(x+(ystart-h2)*wind,ystart,x+(yend-h2)*wind,yend,scan,rainWidth,true);
|
||||
scan.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
//returns raindrop height
|
||||
function TForm1.PrepareRainDrop(i: integer; rainSizeX,rainSizeY: single): single;
|
||||
var dist: single;
|
||||
begin
|
||||
with rainData[i] do
|
||||
begin
|
||||
dist := (random(100)+10)/10;
|
||||
rainSpeed := 1/dist;
|
||||
rainWidth := rainSizeX/dist;
|
||||
if rainWidth < 1 then rainWidth := 1;
|
||||
result := rainSizeY/dist*(random(50)+75)/100;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TForm1.NeedRainArray(w, h, rainProba: integer; rainSizeX,rainSizeY: single);
|
||||
var
|
||||
nbRain: Integer;
|
||||
i: Integer;
|
||||
begin
|
||||
nbRain := (w+round(abs(wind)*h)) *rainDensity;
|
||||
if length(rainData)<> nbRain then
|
||||
begin
|
||||
PrepareRainArray(nbRain,1/rainDensity);
|
||||
for i := 0 to high(rainData) do
|
||||
with rainData[i] do
|
||||
begin
|
||||
x -= abs(wind)*h/2;
|
||||
if random(1000) < rainProba then
|
||||
begin
|
||||
active := true;
|
||||
ystart := Random(h*2)-h/2;
|
||||
yend := ystart + PrepareRainDrop(i, rainSizeX,rainSizeY);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TForm1.RainElapse(elapsed: double; rainProba,w,h: integer);
|
||||
var
|
||||
i: integer;
|
||||
rainSizeY,rainSizeX: single;
|
||||
delta: single;
|
||||
begin
|
||||
rainSizeY := 2+h*TrackBar1.Position/1000;
|
||||
rainSizeX := 7*TrackBar1.Position/1000;
|
||||
if rainSizeX < 4 then rainSizeX := 4;
|
||||
|
||||
NeedRainArray(w,h, rainProba, rainSizeX,rainSizeY);
|
||||
for i := 0 to high(rainData) do
|
||||
with rainData[i] do
|
||||
if active then
|
||||
begin
|
||||
delta := h*rainSpeed*elapsed;
|
||||
ystart += delta;
|
||||
yend += delta;
|
||||
if ystart >= h then
|
||||
begin
|
||||
if random(1000) < rainProba then
|
||||
begin
|
||||
yend := -(ystart-h);
|
||||
ystart := yend - PrepareRainDrop(i, rainSizeX,rainSizeY);
|
||||
end else
|
||||
begin
|
||||
active := false;
|
||||
inactiveTime:= 0;
|
||||
end;
|
||||
end;
|
||||
end else
|
||||
begin
|
||||
inactiveTime+= elapsed;
|
||||
if inactiveTime > 0.5 then
|
||||
begin
|
||||
inactiveTime -= 0.5;
|
||||
if random(1000) < rainProba then
|
||||
begin
|
||||
active := true;
|
||||
ystart := -random(h)/2;
|
||||
yend := ystart + PrepareRainDrop(i, rainSizeX,rainSizeY);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TForm1.PrepareRainArray(nbRain: integer; ScaleX: single);
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
ClearRainData;
|
||||
setlength(rainData, nbRain);
|
||||
for i := 0 to high(rainData) do
|
||||
with rainData[i] do
|
||||
begin
|
||||
x := i*scaleX;
|
||||
grad := TBGRAMultiGradient.Create([BGRAPixelTransparent, BGRA(255,255,255,random(20)+50), BGRAPixelTransparent],[0,0.9,1],True);
|
||||
active:= false;
|
||||
inactiveTime := 0;
|
||||
end;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
BIN
bgracontrols/test/test_extra/rain/Lighthouse.jpg
Normal file
BIN
bgracontrols/test/test_extra/rain/Lighthouse.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 548 KiB |
155
bgracontrols/test/test_extra/rain/project1.lpi
Normal file
155
bgracontrols/test/test_extra/rain/project1.lpi
Normal file
@@ -0,0 +1,155 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="12"/>
|
||||
<PathDelim Value="\"/>
|
||||
<General>
|
||||
<Flags>
|
||||
<CompatibilityMode Value="True"/>
|
||||
</Flags>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<Title Value="project1"/>
|
||||
<ResourceType Value="res"/>
|
||||
<UseXPManifest Value="True"/>
|
||||
</General>
|
||||
<i18n>
|
||||
<EnableI18N LFM="False"/>
|
||||
</i18n>
|
||||
<BuildModes Count="3">
|
||||
<Item1 Name="Default" Default="True"/>
|
||||
<Item2 Name="Debug">
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="project1"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<Parsing>
|
||||
<SyntaxOptions>
|
||||
<IncludeAssertionCode Value="True"/>
|
||||
</SyntaxOptions>
|
||||
</Parsing>
|
||||
<CodeGeneration>
|
||||
<Checks>
|
||||
<IOChecks Value="True"/>
|
||||
<RangeChecks Value="True"/>
|
||||
<OverflowChecks Value="True"/>
|
||||
<StackChecks Value="True"/>
|
||||
</Checks>
|
||||
</CodeGeneration>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<DebugInfoType Value="dsDwarf2Set"/>
|
||||
<UseHeaptrc Value="True"/>
|
||||
<UseExternalDbgSyms Value="True"/>
|
||||
</Debugging>
|
||||
<Options>
|
||||
<Win32>
|
||||
<GraphicApplication Value="True"/>
|
||||
</Win32>
|
||||
</Options>
|
||||
</Linking>
|
||||
</CompilerOptions>
|
||||
</Item2>
|
||||
<Item3 Name="Release">
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="project1"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<CodeGeneration>
|
||||
<SmartLinkUnit Value="True"/>
|
||||
<Optimizations>
|
||||
<OptimizationLevel Value="3"/>
|
||||
</Optimizations>
|
||||
</CodeGeneration>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<GenerateDebugInfo Value="False"/>
|
||||
</Debugging>
|
||||
<LinkSmart Value="True"/>
|
||||
<Options>
|
||||
<Win32>
|
||||
<GraphicApplication Value="True"/>
|
||||
</Win32>
|
||||
</Options>
|
||||
</Linking>
|
||||
</CompilerOptions>
|
||||
</Item3>
|
||||
</BuildModes>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<FormatVersion Value="2"/>
|
||||
<Modes Count="1">
|
||||
<Mode0 Name="default"/>
|
||||
</Modes>
|
||||
</RunParams>
|
||||
<RequiredPackages Count="2">
|
||||
<Item1>
|
||||
<PackageName Value="bgracontrols"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<PackageName Value="LCL"/>
|
||||
</Item2>
|
||||
</RequiredPackages>
|
||||
<Units Count="2">
|
||||
<Unit0>
|
||||
<Filename Value="project1.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit0>
|
||||
<Unit1>
|
||||
<Filename Value="unit1.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<ComponentName Value="Form1"/>
|
||||
<HasResources Value="True"/>
|
||||
<ResourceBaseClass Value="Form"/>
|
||||
<UnitName Value="Unit1"/>
|
||||
</Unit1>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="project1"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<DebugInfoType Value="dsDwarf2Set"/>
|
||||
</Debugging>
|
||||
<Options>
|
||||
<Win32>
|
||||
<GraphicApplication Value="True"/>
|
||||
</Win32>
|
||||
</Options>
|
||||
</Linking>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
<Exceptions Count="3">
|
||||
<Item1>
|
||||
<Name Value="EAbort"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<Name Value="ECodetoolError"/>
|
||||
</Item2>
|
||||
<Item3>
|
||||
<Name Value="EFOpenError"/>
|
||||
</Item3>
|
||||
</Exceptions>
|
||||
</Debugging>
|
||||
</CONFIG>
|
21
bgracontrols/test/test_extra/rain/project1.lpr
Normal file
21
bgracontrols/test/test_extra/rain/project1.lpr
Normal file
@@ -0,0 +1,21 @@
|
||||
program project1;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
uses
|
||||
{$IFDEF UNIX}{$IFDEF UseCThreads}
|
||||
cthreads,
|
||||
{$ENDIF}{$ENDIF}
|
||||
Interfaces, // this includes the LCL widgetset
|
||||
Forms, Unit1
|
||||
{ you can add units after this };
|
||||
|
||||
{$R *.res}
|
||||
|
||||
begin
|
||||
RequireDerivedFormResource := True;
|
||||
Application.Initialize;
|
||||
Application.CreateForm(TForm1, Form1);
|
||||
Application.Run;
|
||||
end.
|
||||
|
31
bgracontrols/test/test_extra/rain/unit1.lfm
Normal file
31
bgracontrols/test/test_extra/rain/unit1.lfm
Normal file
@@ -0,0 +1,31 @@
|
||||
object Form1: TForm1
|
||||
Left = 422
|
||||
Height = 292
|
||||
Top = 114
|
||||
Width = 373
|
||||
Caption = 'Form1'
|
||||
ClientHeight = 292
|
||||
ClientWidth = 373
|
||||
OnClose = FormClose
|
||||
OnCreate = FormCreate
|
||||
OnDestroy = FormDestroy
|
||||
LCLVersion = '1.2.4.0'
|
||||
object BGRAGraphicControl1: TBGRAGraphicControl
|
||||
Left = 0
|
||||
Height = 292
|
||||
Top = 0
|
||||
Width = 373
|
||||
Align = alClient
|
||||
OnRedraw = BGRAGraphicControl1Redraw
|
||||
Color = clWhite
|
||||
ColorOpacity = 128
|
||||
Alignment = taCenter
|
||||
Caption = 'BGRAGraphicControl1'
|
||||
end
|
||||
object Timer1: TTimer
|
||||
Interval = 15
|
||||
OnTimer = Timer1Timer
|
||||
left = 108
|
||||
top = 85
|
||||
end
|
||||
end
|
82
bgracontrols/test/test_extra/rain/unit1.pas
Normal file
82
bgracontrols/test/test_extra/rain/unit1.pas
Normal file
@@ -0,0 +1,82 @@
|
||||
unit Unit1;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
|
||||
BGRAGraphicControl, BGRABitmap, BCTypes, BGRABitmapTypes;
|
||||
|
||||
type
|
||||
|
||||
{ TForm1 }
|
||||
|
||||
TForm1 = class(TForm)
|
||||
BGRAGraphicControl1: TBGRAGraphicControl;
|
||||
Timer1: TTimer;
|
||||
procedure BGRAGraphicControl1Redraw(Sender: TObject; Bitmap: TBGRABitmap);
|
||||
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure FormDestroy(Sender: TObject);
|
||||
procedure Timer1Timer(Sender: TObject);
|
||||
private
|
||||
{ private declarations }
|
||||
public
|
||||
{ public declarations }
|
||||
bkg: TBGRABitmap;
|
||||
end;
|
||||
|
||||
var
|
||||
Form1: TForm1;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.lfm}
|
||||
|
||||
{ TForm1 }
|
||||
|
||||
procedure TForm1.BGRAGraphicControl1Redraw(Sender: TObject; Bitmap: TBGRABitmap
|
||||
);
|
||||
var
|
||||
i: integer;
|
||||
bmp: TBGRABitmap;
|
||||
begin
|
||||
//Bitmap.Fill(BGRABlack);
|
||||
Bitmap.FillTransparent;
|
||||
|
||||
for i:= 0 to Bitmap.Width -1 do
|
||||
begin
|
||||
Bitmap.DrawVertLine(i,{Random(Bitmap.Height)}0,Random(Bitmap.Height),BGRA(255,255,255,Random(25)));
|
||||
Bitmap.DrawVertLine(i,Random(Bitmap.Height),Random(Bitmap.Height),BGRA(255,255,255,Random(50)));
|
||||
end;
|
||||
|
||||
bmp := Bitmap.FilterBlurMotion(10,270,True) as TBGRABitmap;
|
||||
BGRAReplace(bmp, bmp.FilterBlurRadial(1,rbFast));
|
||||
Bitmap.BlendImageOver(0,0,bkg,boLinearBlend);
|
||||
Bitmap.BlendImageOver(0,0,bmp,boLinearBlend);
|
||||
bmp.Free;
|
||||
end;
|
||||
|
||||
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
|
||||
begin
|
||||
Timer1.Enabled := False;
|
||||
end;
|
||||
|
||||
procedure TForm1.FormCreate(Sender: TObject);
|
||||
begin
|
||||
bkg := TBGRABitmap.Create('Lighthouse.jpg');
|
||||
end;
|
||||
|
||||
procedure TForm1.FormDestroy(Sender: TObject);
|
||||
begin
|
||||
bkg.Free;
|
||||
end;
|
||||
|
||||
procedure TForm1.Timer1Timer(Sender: TObject);
|
||||
begin
|
||||
BGRAGraphicControl1.DiscardBitmap;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
BIN
bgracontrols/test/test_extra/shadow/logo.png
Normal file
BIN
bgracontrols/test/test_extra/shadow/logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.4 KiB |
86
bgracontrols/test/test_extra/shadow/shadow.lpi
Normal file
86
bgracontrols/test/test_extra/shadow/shadow.lpi
Normal file
@@ -0,0 +1,86 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="12"/>
|
||||
<PathDelim Value="\"/>
|
||||
<General>
|
||||
<Flags>
|
||||
<CompatibilityMode Value="True"/>
|
||||
</Flags>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<Title Value="shadow"/>
|
||||
<ResourceType Value="res"/>
|
||||
<UseXPManifest Value="True"/>
|
||||
</General>
|
||||
<i18n>
|
||||
<EnableI18N LFM="False"/>
|
||||
</i18n>
|
||||
<BuildModes Count="1">
|
||||
<Item1 Name="Default" Default="True"/>
|
||||
</BuildModes>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<FormatVersion Value="2"/>
|
||||
<Modes Count="1">
|
||||
<Mode0 Name="default"/>
|
||||
</Modes>
|
||||
</RunParams>
|
||||
<RequiredPackages Count="2">
|
||||
<Item1>
|
||||
<PackageName Value="bgracontrols"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<PackageName Value="LCL"/>
|
||||
</Item2>
|
||||
</RequiredPackages>
|
||||
<Units Count="2">
|
||||
<Unit0>
|
||||
<Filename Value="shadow.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit0>
|
||||
<Unit1>
|
||||
<Filename Value="umain.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<ComponentName Value="Form1"/>
|
||||
<HasResources Value="True"/>
|
||||
<ResourceBaseClass Value="Form"/>
|
||||
</Unit1>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="shadow"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<DebugInfoType Value="dsDwarf2Set"/>
|
||||
</Debugging>
|
||||
<Options>
|
||||
<Win32>
|
||||
<GraphicApplication Value="True"/>
|
||||
</Win32>
|
||||
</Options>
|
||||
</Linking>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
<Exceptions Count="3">
|
||||
<Item1>
|
||||
<Name Value="EAbort"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<Name Value="ECodetoolError"/>
|
||||
</Item2>
|
||||
<Item3>
|
||||
<Name Value="EFOpenError"/>
|
||||
</Item3>
|
||||
</Exceptions>
|
||||
</Debugging>
|
||||
</CONFIG>
|
21
bgracontrols/test/test_extra/shadow/shadow.lpr
Normal file
21
bgracontrols/test/test_extra/shadow/shadow.lpr
Normal file
@@ -0,0 +1,21 @@
|
||||
program shadow;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
uses
|
||||
{$IFDEF UNIX}{$IFDEF UseCThreads}
|
||||
cthreads,
|
||||
{$ENDIF}{$ENDIF}
|
||||
Interfaces, // this includes the LCL widgetset
|
||||
Forms, umain
|
||||
{ you can add units after this };
|
||||
|
||||
{$R *.res}
|
||||
|
||||
begin
|
||||
RequireDerivedFormResource := True;
|
||||
Application.Initialize;
|
||||
Application.CreateForm(TForm1, Form1);
|
||||
Application.Run;
|
||||
end.
|
||||
|
24
bgracontrols/test/test_extra/shadow/umain.lfm
Normal file
24
bgracontrols/test/test_extra/shadow/umain.lfm
Normal file
@@ -0,0 +1,24 @@
|
||||
object Form1: TForm1
|
||||
Left = 720
|
||||
Height = 240
|
||||
Top = 193
|
||||
Width = 320
|
||||
Caption = 'Form1'
|
||||
ClientHeight = 240
|
||||
ClientWidth = 320
|
||||
OnCreate = FormCreate
|
||||
OnDestroy = FormDestroy
|
||||
LCLVersion = '1.2.4.0'
|
||||
object BGRAVirtualScreen1: TBGRAVirtualScreen
|
||||
Left = 0
|
||||
Height = 240
|
||||
Top = 0
|
||||
Width = 320
|
||||
OnRedraw = BGRAVirtualScreen1Redraw
|
||||
Align = alClient
|
||||
Alignment = taLeftJustify
|
||||
Color = clWhite
|
||||
ParentColor = False
|
||||
TabOrder = 0
|
||||
end
|
||||
end
|
83
bgracontrols/test/test_extra/shadow/umain.pas
Normal file
83
bgracontrols/test/test_extra/shadow/umain.pas
Normal file
@@ -0,0 +1,83 @@
|
||||
unit umain;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
|
||||
BGRAVirtualScreen, BGRABitmap, BCTypes, BGRABitmapTypes;
|
||||
|
||||
type
|
||||
|
||||
{ TForm1 }
|
||||
|
||||
TForm1 = class(TForm)
|
||||
BGRAVirtualScreen1: TBGRAVirtualScreen;
|
||||
procedure BGRAVirtualScreen1Redraw(Sender: TObject; Bitmap: TBGRABitmap);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure FormDestroy(Sender: TObject);
|
||||
private
|
||||
{ private declarations }
|
||||
public
|
||||
{ public declarations }
|
||||
blurSize: integer;
|
||||
offset: TPoint;
|
||||
logo, logoShadow: TBGRABitmap;
|
||||
end;
|
||||
|
||||
var
|
||||
Form1: TForm1;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.lfm}
|
||||
|
||||
procedure SingleColor(Bitmap: TBGRABitmap; Color: TBGRAPixel);
|
||||
var
|
||||
i: integer;
|
||||
p: PBGRAPixel;
|
||||
begin
|
||||
p := Bitmap.Data;
|
||||
|
||||
for i := Bitmap.NBPixels - 1 downto 0 do
|
||||
begin
|
||||
p^.red := Color.Red;
|
||||
p^.green := Color.Green;
|
||||
p^.blue := Color.Blue;
|
||||
Inc(p);
|
||||
end;
|
||||
end;
|
||||
|
||||
function Shadow(Source: TBGRABitmap; Color: TBGRAPixel; Blur: integer): TBGRABitmap;
|
||||
begin
|
||||
Result := TBGRABitmap.Create(Source.Width + (2 * Blur), Source.Height + (2 * Blur));
|
||||
Result.PutImage(Blur, Blur, Source, dmDrawWithTransparency);
|
||||
SingleColor(Result, Color);
|
||||
BGRAReplace(Result, Result.FilterBlurRadial(Blur, rbFast));
|
||||
end;
|
||||
|
||||
{ TForm1 }
|
||||
|
||||
procedure TForm1.BGRAVirtualScreen1Redraw(Sender: TObject; Bitmap: TBGRABitmap);
|
||||
begin
|
||||
Bitmap.PutImage(blurSize + offSet.x, blurSize + offset.y, logoShadow,
|
||||
dmDrawWithTransparency);
|
||||
Bitmap.PutImage(blurSize * 2, blurSize * 2, logo, dmDrawWithTransparency);
|
||||
end;
|
||||
|
||||
procedure TForm1.FormCreate(Sender: TObject);
|
||||
begin
|
||||
blurSize := 5;
|
||||
offSet := Point(5, 5);
|
||||
logo := TBGRABitmap.Create('logo.png');
|
||||
logoShadow := Shadow(logo, BGRA(0, 200, 200, 255), blurSize);
|
||||
end;
|
||||
|
||||
procedure TForm1.FormDestroy(Sender: TObject);
|
||||
begin
|
||||
logo.Free;
|
||||
logoShadow.Free;
|
||||
end;
|
||||
|
||||
end.
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,143 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="12"/>
|
||||
<PathDelim Value="\"/>
|
||||
<General>
|
||||
<Flags>
|
||||
<CompatibilityMode Value="True"/>
|
||||
</Flags>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<ResourceType Value="res"/>
|
||||
<UseXPManifest Value="True"/>
|
||||
<XPManifest>
|
||||
<DpiAware Value="True"/>
|
||||
</XPManifest>
|
||||
</General>
|
||||
<i18n>
|
||||
<EnableI18N LFM="False"/>
|
||||
</i18n>
|
||||
<BuildModes Count="2">
|
||||
<Item1 Name="Debug" Default="True"/>
|
||||
<Item2 Name="Release">
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="test_customdrawn_win7"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<CodeGeneration>
|
||||
<SmartLinkUnit Value="True"/>
|
||||
<Optimizations>
|
||||
<OptimizationLevel Value="3"/>
|
||||
<VariablesInRegisters Value="True"/>
|
||||
</Optimizations>
|
||||
</CodeGeneration>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<GenerateDebugInfo Value="False"/>
|
||||
<StripSymbols Value="True"/>
|
||||
</Debugging>
|
||||
<LinkSmart Value="True"/>
|
||||
<Options>
|
||||
<Win32>
|
||||
<GraphicApplication Value="True"/>
|
||||
</Win32>
|
||||
</Options>
|
||||
</Linking>
|
||||
</CompilerOptions>
|
||||
</Item2>
|
||||
</BuildModes>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<FormatVersion Value="2"/>
|
||||
<Modes Count="1">
|
||||
<Mode0 Name="default"/>
|
||||
</Modes>
|
||||
</RunParams>
|
||||
<RequiredPackages Count="2">
|
||||
<Item1>
|
||||
<PackageName Value="bgracontrols"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<PackageName Value="LCL"/>
|
||||
</Item2>
|
||||
</RequiredPackages>
|
||||
<Units Count="3">
|
||||
<Unit0>
|
||||
<Filename Value="test_customdrawn_win7.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit0>
|
||||
<Unit1>
|
||||
<Filename Value="utest.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<ComponentName Value="frmTest"/>
|
||||
<HasResources Value="True"/>
|
||||
<ResourceBaseClass Value="Form"/>
|
||||
</Unit1>
|
||||
<Unit2>
|
||||
<Filename Value="customdrawn_windows7.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit2>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="test_customdrawn_win7"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<Parsing>
|
||||
<SyntaxOptions>
|
||||
<IncludeAssertionCode Value="True"/>
|
||||
</SyntaxOptions>
|
||||
</Parsing>
|
||||
<CodeGeneration>
|
||||
<Checks>
|
||||
<IOChecks Value="True"/>
|
||||
<RangeChecks Value="True"/>
|
||||
<OverflowChecks Value="True"/>
|
||||
<StackChecks Value="True"/>
|
||||
</Checks>
|
||||
<Optimizations>
|
||||
<VariablesInRegisters Value="True"/>
|
||||
</Optimizations>
|
||||
</CodeGeneration>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<DebugInfoType Value="dsDwarf2Set"/>
|
||||
<UseHeaptrc Value="True"/>
|
||||
<StripSymbols Value="True"/>
|
||||
<UseExternalDbgSyms Value="True"/>
|
||||
</Debugging>
|
||||
<Options>
|
||||
<Win32>
|
||||
<GraphicApplication Value="True"/>
|
||||
</Win32>
|
||||
</Options>
|
||||
</Linking>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
<Exceptions Count="3">
|
||||
<Item1>
|
||||
<Name Value="EAbort"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<Name Value="ECodetoolError"/>
|
||||
</Item2>
|
||||
<Item3>
|
||||
<Name Value="EFOpenError"/>
|
||||
</Item3>
|
||||
</Exceptions>
|
||||
</Debugging>
|
||||
</CONFIG>
|
@@ -0,0 +1,20 @@
|
||||
program test_customdrawn_win7;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
uses {$IFDEF UNIX} {$IFDEF UseCThreads}
|
||||
cthreads, {$ENDIF} {$ENDIF}
|
||||
Interfaces,
|
||||
Forms,
|
||||
utest,
|
||||
customdrawn_windows7;
|
||||
|
||||
{$R *.res}
|
||||
|
||||
begin
|
||||
//RequireDerivedFormResource := True;
|
||||
Application.Initialize;
|
||||
Application.CreateForm(TfrmTest, frmTest);
|
||||
Application.Run;
|
||||
end.
|
||||
|
@@ -0,0 +1,612 @@
|
||||
object frmTest: TfrmTest
|
||||
Left = 278
|
||||
Height = 514
|
||||
Top = 101
|
||||
Width = 970
|
||||
Caption = 'Test Custom Drawn Windows 7'
|
||||
ClientHeight = 514
|
||||
ClientWidth = 970
|
||||
Font.Height = -14
|
||||
OnCreate = FormCreate
|
||||
Position = poDesktopCenter
|
||||
LCLVersion = '2.2.6.0'
|
||||
WindowState = wsMaximized
|
||||
object BGRAVirtualScreen1: TBGRAVirtualScreen
|
||||
Left = 0
|
||||
Height = 514
|
||||
Top = 0
|
||||
Width = 970
|
||||
OnRedraw = BGRAVirtualScreen1Redraw
|
||||
Align = alClient
|
||||
Alignment = taLeftJustify
|
||||
ClientHeight = 514
|
||||
ClientWidth = 970
|
||||
Color = clWhite
|
||||
ParentColor = False
|
||||
TabOrder = 0
|
||||
object CDButton10: TCDButton
|
||||
Left = 648
|
||||
Height = 36
|
||||
Top = 8
|
||||
Width = 152
|
||||
Caption = 'Enable / Disable'
|
||||
DrawStyle = dsDefault
|
||||
OnClick = CDButton10Click
|
||||
TabOrder = 0
|
||||
TabStop = True
|
||||
end
|
||||
object CDButton1: TCDButton
|
||||
Left = 8
|
||||
Height = 36
|
||||
Top = 8
|
||||
Width = 152
|
||||
Caption = 'Change DPI'
|
||||
DrawStyle = dsDefault
|
||||
OnClick = CDButton1Click
|
||||
TabOrder = 1
|
||||
TabStop = True
|
||||
end
|
||||
object CDButton2: TCDButton
|
||||
Left = 168
|
||||
Height = 36
|
||||
Top = 8
|
||||
Width = 152
|
||||
Caption = 'Extra Tickmark'
|
||||
DrawStyle = dsDefault
|
||||
OnClick = CDButton2Click
|
||||
TabOrder = 2
|
||||
TabStop = True
|
||||
end
|
||||
object CDButton3: TCDButton
|
||||
Left = 808
|
||||
Height = 95
|
||||
Top = 8
|
||||
Width = 152
|
||||
Caption = 'w r o n g w a y'
|
||||
DrawStyle = dsDefault
|
||||
Glyph.Data = {
|
||||
36090000424D3609000000000000360000002800000018000000180000000100
|
||||
2000000000000009000064000000640000000000000000000000FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000020000
|
||||
00050000000900000011000000180000001E0000002300000025000000270000
|
||||
0027000000270000002700000027000000270000002700000026000000230000
|
||||
001F00000019000000120000000B000000050000000200000001000000010000
|
||||
000200000005000000090156ACFF0156ABFF0156ACFF0158ADFF015AAFFF015C
|
||||
B0FF015EB2FF015FB3FF015FB3FF015EB2FF015CB1FF015AAFFF0157ADFF0155
|
||||
ABFF0154AAFF0154A9FF00000006000000030000000100000000FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00025BAFFF44B8F3FF45B9F3FF46BAF3FF48BBF3FF49BD
|
||||
F4FF4BBEF4FF4CBFF4FF4CBFF4FF4BBEF4FF4ABDF4FF48BBF3FF45B9F3FF43B7
|
||||
F2FF42B7F2FF0158ACFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF000362B2FF46BCF3FF20ACF1FF21ADF1FF22AFF1FF23B0
|
||||
F2FF2CB7F3FF33BDF4FF33BDF4FF2CB7F3FF23B0F2FF22AFF1FF20ADF1FF1FAB
|
||||
F0FF44BAF2FF035EAFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF000468B6FF4AC0F4FF23B1F2FF23B2F2FF24B3F2FF25B4
|
||||
F3FF24A3DAFF1291C5FF1291C5FF24A3DAFF25B4F3FF24B3F2FF23B1F2FF22AF
|
||||
F2FF47BEF4FF0464B3FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00056FB9FF51C5F6FF2AB8F3FF2AB8F3FF2BB8F4FF28B7
|
||||
F4FF1185BEFF128FC4FF128FC4FF1185BEFF28B7F4FF2BB8F4FF2AB7F3FF29B6
|
||||
F3FF4EC2F5FF056AB5FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF000674BBFF47BFF5FF23B0F1FF24B0F1FF24B1F2FF2ABA
|
||||
F4FF1E9ED8FF128EC2FF128EC2FF1E9ED8FF2BBAF4FF24B1F2FF23AFF1FF22AE
|
||||
F1FF44BDF3FF056FB7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00087ABDFF51C7F7FF2BB9F4FF2CBAF4FF2CBBF5FF2DBC
|
||||
F5FF2EBDF5FF1287BFFF1288BFFF2FBDF5FF2EBCF5FF2CBAF5FF2BB9F4FF2AB8
|
||||
F4FF4EC4F6FF0774B9FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00087EBEFF53C9F7FF2EBBF4FF2EBBF4FF2FBCF4FF30BD
|
||||
F5FF31BEF5FF127DB9FF127DB9FF32BFF5FF31BDF5FF2FBCF4FF2EBAF4FF2CB9
|
||||
F4FF4FC6F6FF0778BAFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF000982C0FF55C9F7FF31BCF4FF31BDF4FF32BDF4FF33BF
|
||||
F4FF35C0F5FF35C0F5FF36C1F5FF35C0F5FF34BFF5FF32BDF4FF30BBF4FF2FBA
|
||||
F4FF51C6F6FF087CBCFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF000A86C2FF88E5FBFF88E4FBFF88E5FBFF89E5FBFF8BE5
|
||||
FBFF8DE6FCFF8EE6FCFF8EE6FCFF8DE6FCFF8BE6FBFF89E5FBFF86E4FBFF84E3
|
||||
FBFF83E3FBFF097FBDFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF000B8AC3FF0A89C2FF0A88C2FF0A88C2FF0B8AC3FF0B8B
|
||||
C4FF0B8DC5FF0B8EC6FF0B8EC6FF0B8DC5FF0B8BC4FF0A89C2FF0A86C0FF0A84
|
||||
BFFF0983BEFF0983BEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008D8D8DFFE0E0E0FF8D8D
|
||||
8DFFFFFFFF00FFFFFF00FFFFFF00FFFFFF008D8D8DFFE0E0E0FF8D8D8DFFFFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008F8F8FFFE0E0E0FF8F8F
|
||||
8FFFFFFFFF00FFFFFF00FFFFFF00FFFFFF008F8F8FFFE0E0E0FF8F8F8FFFFFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00919191F0DCDCDCFF9999
|
||||
99FF91919118FFFFFF00FFFFFF0091919118999999FFDCDCDCFF919191F0FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00939393C3CACACAFFBABA
|
||||
BAFF939393C09393933693939336939393C0BABABAFFC9C9C9FF939393C0FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009595953F959595FCE0E0
|
||||
E0FFC7C7C7FFA5A5A5FFA5A5A5FFC7C7C7FFE0E0E0FF959595FC9595953CFFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0097979778ACAC
|
||||
ACFFD0D0D0FFE5E5E5FFE5E5E5FFD0D0D0FFACACACFF97979778FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898
|
||||
983F989898B1989898E4989898E4989898B19898983FFFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
|
||||
}
|
||||
TabOrder = 3
|
||||
TabStop = True
|
||||
end
|
||||
object CDEdit1: TCDEdit
|
||||
Left = 808
|
||||
Height = 36
|
||||
Top = 112
|
||||
Width = 152
|
||||
DrawStyle = dsDefault
|
||||
end
|
||||
object CDGroupBox1: TCDGroupBox
|
||||
Left = 8
|
||||
Height = 128
|
||||
Top = 56
|
||||
Width = 217
|
||||
AutoSize = True
|
||||
Caption = 'Allow Grayed Enabled'
|
||||
DrawStyle = dsDefault
|
||||
end
|
||||
object cb_a_u: TCDCheckBox
|
||||
Left = 16
|
||||
Height = 19
|
||||
Top = 80
|
||||
Width = 86
|
||||
AllowGrayed = True
|
||||
DrawStyle = dsDefault
|
||||
Caption = 'Unchecked'
|
||||
end
|
||||
object cb_a_c: TCDCheckBox
|
||||
Left = 16
|
||||
Height = 19
|
||||
Top = 112
|
||||
Width = 71
|
||||
AllowGrayed = True
|
||||
Checked = True
|
||||
DrawStyle = dsDefault
|
||||
Caption = 'Checked'
|
||||
State = cbChecked
|
||||
end
|
||||
object cb_a_g: TCDCheckBox
|
||||
Left = 16
|
||||
Height = 19
|
||||
Top = 144
|
||||
Width = 63
|
||||
AllowGrayed = True
|
||||
DrawStyle = dsDefault
|
||||
Caption = 'Grayed'
|
||||
State = cbGrayed
|
||||
end
|
||||
object CDGroupBox2: TCDGroupBox
|
||||
Left = 7
|
||||
Height = 128
|
||||
Top = 192
|
||||
Width = 217
|
||||
AutoSize = True
|
||||
Caption = 'Allow Grayed Disabled'
|
||||
DrawStyle = dsDefault
|
||||
end
|
||||
object cbd_a_g: TCDCheckBox
|
||||
Left = 16
|
||||
Height = 19
|
||||
Top = 280
|
||||
Width = 63
|
||||
AllowGrayed = True
|
||||
DrawStyle = dsDefault
|
||||
Caption = 'Grayed'
|
||||
Enabled = False
|
||||
State = cbGrayed
|
||||
end
|
||||
object cbd_a_c: TCDCheckBox
|
||||
Left = 16
|
||||
Height = 19
|
||||
Top = 248
|
||||
Width = 71
|
||||
AllowGrayed = True
|
||||
Checked = True
|
||||
DrawStyle = dsDefault
|
||||
Caption = 'Checked'
|
||||
Enabled = False
|
||||
State = cbChecked
|
||||
end
|
||||
object cbd_a_u: TCDCheckBox
|
||||
Left = 16
|
||||
Height = 19
|
||||
Top = 216
|
||||
Width = 86
|
||||
AllowGrayed = True
|
||||
DrawStyle = dsDefault
|
||||
Caption = 'Unchecked'
|
||||
Enabled = False
|
||||
end
|
||||
object CDRadioButton1: TCDRadioButton
|
||||
Left = 480
|
||||
Height = 19
|
||||
Top = 80
|
||||
Width = 86
|
||||
Caption = 'Unchecked'
|
||||
DrawStyle = dsDefault
|
||||
end
|
||||
object CDRadioButton2: TCDRadioButton
|
||||
Left = 480
|
||||
Height = 19
|
||||
Top = 112
|
||||
Width = 71
|
||||
Caption = 'Checked'
|
||||
DrawStyle = dsDefault
|
||||
end
|
||||
object CDRadioButton3: TCDRadioButton
|
||||
Left = 480
|
||||
Height = 19
|
||||
Top = 144
|
||||
Width = 86
|
||||
Caption = 'Unchecked'
|
||||
DrawStyle = dsDefault
|
||||
Enabled = False
|
||||
end
|
||||
object CDRadioButton4: TCDRadioButton
|
||||
Left = 480
|
||||
Height = 19
|
||||
Top = 176
|
||||
Width = 71
|
||||
Caption = 'Checked'
|
||||
Checked = True
|
||||
DrawStyle = dsDefault
|
||||
Enabled = False
|
||||
end
|
||||
object CDGroupBox3: TCDGroupBox
|
||||
Left = 240
|
||||
Height = 128
|
||||
Top = 56
|
||||
Width = 217
|
||||
AutoSize = True
|
||||
Caption = 'Don''t Grayed Enabled'
|
||||
DrawStyle = dsDefault
|
||||
end
|
||||
object CDGroupBox4: TCDGroupBox
|
||||
Left = 240
|
||||
Height = 128
|
||||
Top = 192
|
||||
Width = 217
|
||||
AutoSize = True
|
||||
Caption = 'Don''t Grayed Disabled'
|
||||
DrawStyle = dsDefault
|
||||
end
|
||||
object cb_u: TCDCheckBox
|
||||
Left = 248
|
||||
Height = 19
|
||||
Top = 80
|
||||
Width = 86
|
||||
DrawStyle = dsDefault
|
||||
Caption = 'Unchecked'
|
||||
end
|
||||
object cb_c: TCDCheckBox
|
||||
Left = 248
|
||||
Height = 19
|
||||
Top = 112
|
||||
Width = 71
|
||||
Checked = True
|
||||
DrawStyle = dsDefault
|
||||
Caption = 'Checked'
|
||||
State = cbChecked
|
||||
end
|
||||
object cb_g: TCDCheckBox
|
||||
Left = 248
|
||||
Height = 19
|
||||
Top = 144
|
||||
Width = 63
|
||||
Checked = True
|
||||
DrawStyle = dsDefault
|
||||
Caption = 'Grayed'
|
||||
State = cbChecked
|
||||
end
|
||||
object cbd_u: TCDCheckBox
|
||||
Left = 248
|
||||
Height = 19
|
||||
Top = 216
|
||||
Width = 86
|
||||
DrawStyle = dsDefault
|
||||
Caption = 'Unchecked'
|
||||
Enabled = False
|
||||
end
|
||||
object cbd_c: TCDCheckBox
|
||||
Left = 248
|
||||
Height = 19
|
||||
Top = 248
|
||||
Width = 71
|
||||
Checked = True
|
||||
DrawStyle = dsDefault
|
||||
Caption = 'Checked'
|
||||
Enabled = False
|
||||
State = cbChecked
|
||||
end
|
||||
object cbd_g: TCDCheckBox
|
||||
Left = 248
|
||||
Height = 19
|
||||
Top = 280
|
||||
Width = 63
|
||||
Checked = True
|
||||
DrawStyle = dsDefault
|
||||
Caption = 'Grayed'
|
||||
Enabled = False
|
||||
State = cbChecked
|
||||
end
|
||||
object CDStaticText1: TCDStaticText
|
||||
Left = 648
|
||||
Height = 36
|
||||
Top = 112
|
||||
Width = 152
|
||||
Caption = 'CDStaticText1'
|
||||
DrawStyle = dsDefault
|
||||
end
|
||||
object CDProgressBar1: TCDProgressBar
|
||||
Left = 7
|
||||
Height = 34
|
||||
Top = 328
|
||||
Width = 218
|
||||
BarShowText = False
|
||||
DrawStyle = dsDefault
|
||||
Max = 100
|
||||
Orientation = pbRightToLeft
|
||||
Position = 50
|
||||
Smooth = False
|
||||
Style = pbstNormal
|
||||
end
|
||||
object CDProgressBar2: TCDProgressBar
|
||||
Left = 7
|
||||
Height = 34
|
||||
Top = 368
|
||||
Width = 218
|
||||
BarShowText = False
|
||||
DrawStyle = dsDefault
|
||||
Max = 100
|
||||
Orientation = pbHorizontal
|
||||
Position = 50
|
||||
Smooth = False
|
||||
Style = pbstNormal
|
||||
end
|
||||
object CDProgressBar3: TCDProgressBar
|
||||
Left = 240
|
||||
Height = 176
|
||||
Top = 328
|
||||
Width = 34
|
||||
BarShowText = False
|
||||
DrawStyle = dsDefault
|
||||
Max = 100
|
||||
Orientation = pbVertical
|
||||
Position = 50
|
||||
Smooth = False
|
||||
Style = pbstNormal
|
||||
end
|
||||
object CDProgressBar4: TCDProgressBar
|
||||
Left = 281
|
||||
Height = 176
|
||||
Top = 328
|
||||
Width = 34
|
||||
BarShowText = False
|
||||
DrawStyle = dsDefault
|
||||
Max = 100
|
||||
Orientation = pbTopDown
|
||||
Position = 50
|
||||
Smooth = False
|
||||
Style = pbstNormal
|
||||
end
|
||||
object CDTrackBar1: TCDTrackBar
|
||||
Left = 6
|
||||
Height = 40
|
||||
Top = 416
|
||||
Width = 218
|
||||
Max = 100
|
||||
Min = 0
|
||||
OnChange = CDTrackBar1Change
|
||||
Position = 50
|
||||
DrawStyle = dsDefault
|
||||
end
|
||||
object CDTrackBar2: TCDTrackBar
|
||||
Left = 328
|
||||
Height = 176
|
||||
Top = 328
|
||||
Width = 40
|
||||
Max = 100
|
||||
Min = 0
|
||||
OnChange = CDTrackBar1Change
|
||||
Position = 50
|
||||
DrawStyle = dsDefault
|
||||
Orientation = trVertical
|
||||
end
|
||||
object CDButton4: TCDButton
|
||||
Left = 328
|
||||
Height = 36
|
||||
Top = 8
|
||||
Width = 152
|
||||
Caption = 'Change Folder'
|
||||
DrawStyle = dsDefault
|
||||
OnClick = CDButton4Click
|
||||
TabOrder = 32
|
||||
TabStop = True
|
||||
end
|
||||
object CDButton5: TCDButton
|
||||
Left = 648
|
||||
Height = 30
|
||||
Top = 160
|
||||
Width = 30
|
||||
Caption = 'arrowleft'
|
||||
DrawStyle = dsExtra1
|
||||
TabOrder = 33
|
||||
TabStop = True
|
||||
end
|
||||
object CDButton6: TCDButton
|
||||
Left = 728
|
||||
Height = 30
|
||||
Top = 160
|
||||
Width = 30
|
||||
Caption = 'arrowright'
|
||||
DrawStyle = dsExtra1
|
||||
TabOrder = 34
|
||||
TabStop = True
|
||||
end
|
||||
object CDButton7: TCDButton
|
||||
Left = 808
|
||||
Height = 20
|
||||
Top = 160
|
||||
Width = 20
|
||||
Caption = 'arrow'
|
||||
DrawStyle = dsExtra1
|
||||
TabOrder = 35
|
||||
TabStop = True
|
||||
end
|
||||
object CDButton8: TCDButton
|
||||
Left = 872
|
||||
Height = 16
|
||||
Top = 160
|
||||
Width = 17
|
||||
Caption = 'closebutton'
|
||||
DrawStyle = dsExtra1
|
||||
TabOrder = 36
|
||||
TabStop = True
|
||||
end
|
||||
object CDComboBox1: TCDComboBox
|
||||
Left = 728
|
||||
Height = 34
|
||||
Top = 256
|
||||
Width = 192
|
||||
DrawStyle = dsDefault
|
||||
ItemIndex = -1
|
||||
KeyboardInputBehavior = kibAutomatic
|
||||
end
|
||||
object CDScrollBar1: TCDScrollBar
|
||||
Left = 728
|
||||
Height = 18
|
||||
Top = 304
|
||||
Width = 192
|
||||
Max = 100
|
||||
Min = 0
|
||||
Position = 0
|
||||
DrawStyle = dsDefault
|
||||
Kind = sbHorizontal
|
||||
PageSize = 0
|
||||
TabStop = False
|
||||
end
|
||||
object CDScrollBar2: TCDScrollBar
|
||||
Left = 928
|
||||
Height = 114
|
||||
Top = 208
|
||||
Width = 18
|
||||
Max = 100
|
||||
Min = 0
|
||||
Position = 0
|
||||
DrawStyle = dsDefault
|
||||
Kind = sbVertical
|
||||
PageSize = 0
|
||||
TabStop = False
|
||||
end
|
||||
object CDListView1: TCDListView
|
||||
Left = 728
|
||||
Height = 168
|
||||
Top = 336
|
||||
Width = 218
|
||||
Columns = <>
|
||||
ScrollBars = ssBoth
|
||||
ViewStyle = vsIcon
|
||||
end
|
||||
object CDPageControl1: TCDPageControl
|
||||
Left = 464
|
||||
Height = 104
|
||||
Top = 400
|
||||
Width = 232
|
||||
DrawStyle = dsDefault
|
||||
Caption = 'CDPageControl1'
|
||||
PageIndex = 0
|
||||
Options = []
|
||||
TabIndex = 0
|
||||
end
|
||||
object CDPageControl2: TCDPageControl
|
||||
Left = 464
|
||||
Height = 184
|
||||
Top = 208
|
||||
Width = 232
|
||||
ActivePage = CDTabSheet1
|
||||
DrawStyle = dsDefault
|
||||
Caption = 'CDPageControl2'
|
||||
PageIndex = 1
|
||||
Options = []
|
||||
TabIndex = 1
|
||||
object CDTabSheet2: TCDTabSheet
|
||||
Left = 2
|
||||
Height = 155
|
||||
Top = 27
|
||||
Width = 228
|
||||
Caption = 'CDTabSheet2'
|
||||
TabVisible = False
|
||||
end
|
||||
object CDTabSheet1: TCDTabSheet
|
||||
Left = 2
|
||||
Height = 155
|
||||
Top = 27
|
||||
Width = 228
|
||||
Caption = 'CDTabSheet1'
|
||||
TabVisible = False
|
||||
end
|
||||
end
|
||||
object CDSpinEdit1: TCDSpinEdit
|
||||
Left = 728
|
||||
Height = 40
|
||||
Top = 208
|
||||
Width = 192
|
||||
DrawStyle = dsDefault
|
||||
Lines.Strings = (
|
||||
'0'
|
||||
)
|
||||
Increment = 1
|
||||
MaxValue = 100
|
||||
end
|
||||
object CDTrackBar3: TCDTrackBar
|
||||
Left = 376
|
||||
Height = 176
|
||||
Top = 328
|
||||
Width = 40
|
||||
Max = 100
|
||||
Min = 0
|
||||
OnChange = CDTrackBar1Change
|
||||
Position = 50
|
||||
DrawStyle = dsDefault
|
||||
Enabled = False
|
||||
Orientation = trVertical
|
||||
end
|
||||
object CDTrackBar4: TCDTrackBar
|
||||
Left = 5
|
||||
Height = 40
|
||||
Top = 464
|
||||
Width = 218
|
||||
Max = 100
|
||||
Min = 0
|
||||
OnChange = CDTrackBar1Change
|
||||
Position = 50
|
||||
DrawStyle = dsDefault
|
||||
Enabled = False
|
||||
end
|
||||
object CDButton9: TCDButton
|
||||
Left = 488
|
||||
Height = 36
|
||||
Top = 8
|
||||
Width = 152
|
||||
Caption = 'Debug'
|
||||
DrawStyle = dsDefault
|
||||
OnClick = CDButton9Click
|
||||
TabOrder = 46
|
||||
TabStop = True
|
||||
end
|
||||
end
|
||||
end
|
@@ -0,0 +1,238 @@
|
||||
unit utest;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Forms, SysUtils,
|
||||
{ Custom Drawn }
|
||||
customdrawncontrols, customdrawndrawers, StdCtrls,
|
||||
{ BGRABitmap }
|
||||
BGRAVirtualScreen, BGRABitmap, BGRABitmapTypes,
|
||||
{ Custom Drawn + BGRABitmap }
|
||||
customdrawn_windows7;
|
||||
|
||||
type
|
||||
|
||||
{ TfrmTest }
|
||||
|
||||
TfrmTest = class(TForm)
|
||||
BGRAVirtualScreen1: TBGRAVirtualScreen;
|
||||
cbd_a_c: TCDCheckBox;
|
||||
cbd_a_g: TCDCheckBox;
|
||||
cbd_a_u: TCDCheckBox;
|
||||
cbd_c: TCDCheckBox;
|
||||
cbd_g: TCDCheckBox;
|
||||
cbd_u: TCDCheckBox;
|
||||
cb_a_c: TCDCheckBox;
|
||||
cb_a_g: TCDCheckBox;
|
||||
cb_a_u: TCDCheckBox;
|
||||
cb_c: TCDCheckBox;
|
||||
cb_g: TCDCheckBox;
|
||||
cb_u: TCDCheckBox;
|
||||
CDButton1: TCDButton;
|
||||
CDButton10: TCDButton;
|
||||
CDButton2: TCDButton;
|
||||
CDButton3: TCDButton;
|
||||
CDButton4: TCDButton;
|
||||
CDButton5: TCDButton;
|
||||
CDButton6: TCDButton;
|
||||
CDButton7: TCDButton;
|
||||
CDButton8: TCDButton;
|
||||
CDButton9: TCDButton;
|
||||
CDComboBox1: TCDComboBox;
|
||||
CDEdit1: TCDEdit;
|
||||
CDGroupBox1: TCDGroupBox;
|
||||
CDGroupBox2: TCDGroupBox;
|
||||
CDGroupBox3: TCDGroupBox;
|
||||
CDGroupBox4: TCDGroupBox;
|
||||
CDListView1: TCDListView;
|
||||
CDPageControl1: TCDPageControl;
|
||||
CDPageControl2: TCDPageControl;
|
||||
CDProgressBar1: TCDProgressBar;
|
||||
CDProgressBar2: TCDProgressBar;
|
||||
CDProgressBar3: TCDProgressBar;
|
||||
CDProgressBar4: TCDProgressBar;
|
||||
CDRadioButton1: TCDRadioButton;
|
||||
CDRadioButton2: TCDRadioButton;
|
||||
CDRadioButton3: TCDRadioButton;
|
||||
CDRadioButton4: TCDRadioButton;
|
||||
CDScrollBar1: TCDScrollBar;
|
||||
CDScrollBar2: TCDScrollBar;
|
||||
CDSpinEdit1: TCDSpinEdit;
|
||||
CDStaticText1: TCDStaticText;
|
||||
CDTabSheet1: TCDTabSheet;
|
||||
CDTabSheet2: TCDTabSheet;
|
||||
CDTrackBar1: TCDTrackBar;
|
||||
CDTrackBar2: TCDTrackBar;
|
||||
CDTrackBar3: TCDTrackBar;
|
||||
CDTrackBar4: TCDTrackBar;
|
||||
procedure BGRAVirtualScreen1Redraw(Sender: TObject; Bitmap: TBGRABitmap);
|
||||
procedure CDButton10Click(Sender: TObject);
|
||||
procedure CDButton1Click(Sender: TObject);
|
||||
procedure CDButton2Click(Sender: TObject);
|
||||
procedure CDButton4Click(Sender: TObject);
|
||||
procedure CDButton9Click(Sender: TObject);
|
||||
procedure CDScrollBar1Change(Sender: TObject);
|
||||
procedure CDTrackBar1Change(Sender: TObject);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
private
|
||||
{ private declarations }
|
||||
public
|
||||
{ public declarations }
|
||||
end;
|
||||
|
||||
var
|
||||
frmTest: TfrmTest;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.lfm}
|
||||
|
||||
{ TfrmTest }
|
||||
|
||||
procedure TfrmTest.FormCreate(Sender: TObject);
|
||||
begin
|
||||
{ This code set the dsWindows7 style
|
||||
that is registered in the unit customdrawn_windows7 }
|
||||
DefaultStyle := dsWindows7;
|
||||
|
||||
{ Set the form color }
|
||||
Color := WIN7_FORM_COLOR;
|
||||
BGRAVirtualScreen1.Color := WIN7_FORM_COLOR;
|
||||
|
||||
end;
|
||||
|
||||
{ The code below is how to configure this drawer }
|
||||
|
||||
procedure TfrmTest.CDButton1Click(Sender: TObject);
|
||||
begin
|
||||
{ This code is for changing DPI }
|
||||
if win7.dpi = 96 then
|
||||
win7.dpi := 120
|
||||
else if win7.dpi = 120 then
|
||||
win7.dpi := 144
|
||||
else if win7.dpi = 144 then
|
||||
win7.dpi := 96
|
||||
else
|
||||
win7.dpi := 96;
|
||||
|
||||
{ This code is for scaling extra1 buttons }
|
||||
// extra1 'arrowleft' in caption
|
||||
CDButton5.Width := win7.ArrowLeft.SliceScalingArray[0].BitmapWidth;
|
||||
CDButton5.Height := win7.ArrowLeft.SliceScalingArray[0].BitmapHeight;
|
||||
// extra1 'arrowright' in caption
|
||||
CDButton6.Width := win7.ArrowRight.SliceScalingArray[0].BitmapWidth;
|
||||
CDButton6.Height := win7.ArrowRight.SliceScalingArray[0].BitmapHeight;
|
||||
// extra1 'arrow' in caption
|
||||
CDButton7.Width := win7.Arrow.SliceScalingArray[0].BitmapWidth;
|
||||
CDButton7.Height := win7.Arrow.SliceScalingArray[0].BitmapHeight;
|
||||
// extra1 'closebutton' in caption
|
||||
CDButton8.Width := win7.CloseButton.SliceScalingArray[0].BitmapWidth;
|
||||
CDButton8.Height := win7.CloseButton.SliceScalingArray[0].BitmapHeight;
|
||||
|
||||
{ Do changes visible }
|
||||
Invalidate;
|
||||
end;
|
||||
|
||||
procedure TfrmTest.CDButton2Click(Sender: TObject);
|
||||
begin
|
||||
{ This code is for using the extra tickmark }
|
||||
win7.tickmark := not win7.tickmark;
|
||||
|
||||
{ Do changes visible }
|
||||
Invalidate;
|
||||
end;
|
||||
|
||||
procedure TfrmTest.CDButton4Click(Sender: TObject);
|
||||
begin
|
||||
{ This code is for changing the folder }
|
||||
if win7.folder = 'aero.zip' then
|
||||
win7.folder := 'aerow8.zip'
|
||||
else if win7.folder = 'aerow8.zip' then
|
||||
win7.folder := 'luna.zip'
|
||||
else if win7.folder = 'luna.zip' then
|
||||
win7.folder := 'extra.zip'
|
||||
else if win7.folder = 'extra.zip' then
|
||||
win7.folder := 'aerow11.zip'
|
||||
else if win7.folder = 'aerow11.zip' then
|
||||
win7.folder := 'aero.zip'
|
||||
else
|
||||
win7.folder := 'aero.zip';
|
||||
|
||||
{ Do changes visible }
|
||||
Invalidate;
|
||||
end;
|
||||
|
||||
procedure TfrmTest.CDButton9Click(Sender: TObject);
|
||||
begin
|
||||
{ This show / hide debug lines }
|
||||
win7.debug := not win7.debug;
|
||||
|
||||
{ Do changes visible }
|
||||
Invalidate;
|
||||
end;
|
||||
|
||||
{ The code below is just for testing purposes }
|
||||
|
||||
procedure TfrmTest.CDButton10Click(Sender: TObject);
|
||||
begin
|
||||
CDButton5.Enabled := not CDButton5.Enabled;
|
||||
CDButton6.Enabled := not CDButton6.Enabled;
|
||||
CDButton7.Enabled := not CDButton7.Enabled;
|
||||
CDButton8.Enabled := not CDButton8.Enabled;
|
||||
CDScrollBar1.Enabled := not CDScrollBar1.Enabled;
|
||||
CDScrollBar2.Enabled := not CDScrollBar2.Enabled;
|
||||
CDComboBox1.Enabled := not CDComboBox1.Enabled;
|
||||
CDStaticText1.Enabled := not CDStaticText1.Enabled;
|
||||
CDSpinEdit1.Enabled := not CDSpinEdit1.Enabled;
|
||||
CDListView1.Enabled := not CDListView1.Enabled;
|
||||
CDButton3.Enabled := not CDButton3.Enabled;
|
||||
CDEdit1.Enabled := not CDEdit1.Enabled;
|
||||
CDPageControl1.Enabled := not CDPageControl1.Enabled;
|
||||
CDPageControl2.Enabled := not CDPageControl2.Enabled;
|
||||
end;
|
||||
|
||||
procedure TfrmTest.BGRAVirtualScreen1Redraw(Sender: TObject; Bitmap: TBGRABitmap);
|
||||
|
||||
procedure DrawTileBackground(ABitmap: TBGRABitmap; Multiply: integer);
|
||||
var
|
||||
temp: TBGRABitmap;
|
||||
begin
|
||||
temp := TBGRABitmap.Create(2, 2, BGRAWhite);
|
||||
temp.SetPixel(0, 1, BGRA(220, 220, 220));
|
||||
temp.SetPixel(1, 0, BGRA(220, 220, 220));
|
||||
BGRAReplace(temp, temp.Resample(2 * Multiply, 2 * Multiply, rmSimpleStretch));
|
||||
ABitmap.Fill(temp, dmSet);
|
||||
temp.Free;
|
||||
end;
|
||||
|
||||
begin
|
||||
DrawTileBackground(Bitmap, 8);
|
||||
//DrawIOSBackground(Bitmap);
|
||||
end;
|
||||
|
||||
procedure TfrmTest.CDScrollBar1Change(Sender: TObject);
|
||||
begin
|
||||
CDProgressBar1.Position := TCDScrollBar(Sender).Position;
|
||||
CDProgressBar2.Position := TCDScrollBar(Sender).Position;
|
||||
CDProgressBar3.Position := TCDScrollBar(Sender).Position;
|
||||
CDProgressBar4.Position := TCDScrollBar(Sender).Position;
|
||||
end;
|
||||
|
||||
procedure TfrmTest.CDTrackBar1Change(Sender: TObject);
|
||||
begin
|
||||
CDProgressBar1.Position := TCDTrackBar(Sender).Position;
|
||||
CDProgressBar2.Position := TCDTrackBar(Sender).Position;
|
||||
CDProgressBar3.Position := TCDTrackBar(Sender).Position;
|
||||
CDProgressBar4.Position := TCDTrackBar(Sender).Position;
|
||||
CDTrackBar1.Position := CDProgressBar1.Position;
|
||||
CDTrackBar2.Position := CDProgressBar1.Position;
|
||||
CDTrackBar3.Position := CDProgressBar1.Position;
|
||||
CDTrackBar4.Position := CDProgressBar1.Position;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
|
235
bgracontrols/test/test_extra/slicescaling_tachart/Main.lfm
Normal file
235
bgracontrols/test/test_extra/slicescaling_tachart/Main.lfm
Normal file
@@ -0,0 +1,235 @@
|
||||
object Form1: TForm1
|
||||
Left = 65
|
||||
Height = 530
|
||||
Top = 47
|
||||
Width = 1191
|
||||
Caption = 'Form1'
|
||||
ClientHeight = 530
|
||||
ClientWidth = 1191
|
||||
OnCreate = FormCreate
|
||||
OnDestroy = FormDestroy
|
||||
LCLVersion = '1.1'
|
||||
object Chart1: TChart
|
||||
Left = 0
|
||||
Height = 530
|
||||
Top = 0
|
||||
Width = 1069
|
||||
AxisList = <
|
||||
item
|
||||
Minors = <>
|
||||
Title.LabelFont.Orientation = 900
|
||||
end
|
||||
item
|
||||
Alignment = calBottom
|
||||
Minors = <>
|
||||
end>
|
||||
BackColor = clBlack
|
||||
Foot.Brush.Color = clBtnFace
|
||||
Foot.Font.Color = clBlue
|
||||
Margins.Bottom = 0
|
||||
Title.Brush.Color = clBtnFace
|
||||
Title.Font.Color = clBlue
|
||||
Title.Text.Strings = (
|
||||
'TAChart'
|
||||
)
|
||||
Align = alClient
|
||||
DoubleBuffered = True
|
||||
ParentColor = False
|
||||
object Chart1BarSeries1: TBarSeries
|
||||
BarBrush.Color = 2183646
|
||||
BarBrush.Style = bsClear
|
||||
BarPen.Style = psClear
|
||||
Source = ListChartSource1
|
||||
OnBeforeDrawBar = Chart1BarSeries1BeforeDrawBar
|
||||
end
|
||||
end
|
||||
object Panel1: TPanel
|
||||
Left = 1069
|
||||
Height = 530
|
||||
Top = 0
|
||||
Width = 122
|
||||
Align = alRight
|
||||
ClientHeight = 530
|
||||
ClientWidth = 122
|
||||
TabOrder = 1
|
||||
object rgMethod: TRadioGroup
|
||||
Left = 1
|
||||
Height = 97
|
||||
Top = 1
|
||||
Width = 120
|
||||
Align = alTop
|
||||
AutoFill = True
|
||||
Caption = ' Method '
|
||||
ChildSizing.LeftRightSpacing = 6
|
||||
ChildSizing.TopBottomSpacing = 6
|
||||
ChildSizing.EnlargeHorizontal = crsHomogenousChildResize
|
||||
ChildSizing.EnlargeVertical = crsHomogenousChildResize
|
||||
ChildSizing.ShrinkHorizontal = crsScaleChilds
|
||||
ChildSizing.ShrinkVertical = crsScaleChilds
|
||||
ChildSizing.Layout = cclLeftToRightThenTopToBottom
|
||||
ChildSizing.ControlsPerLine = 1
|
||||
ClientHeight = 75
|
||||
ClientWidth = 116
|
||||
ItemIndex = 0
|
||||
Items.Strings = (
|
||||
'Grow'
|
||||
'Add'
|
||||
'Add then grow'
|
||||
)
|
||||
OnClick = rgMethodClick
|
||||
TabOrder = 0
|
||||
end
|
||||
object btnStartStop: TButton
|
||||
Left = 9
|
||||
Height = 25
|
||||
Top = 144
|
||||
Width = 75
|
||||
Caption = 'Start / stop'
|
||||
OnClick = btnStartStopClick
|
||||
TabOrder = 1
|
||||
end
|
||||
object lblSkipped: TLabel
|
||||
Left = 9
|
||||
Height = 1
|
||||
Top = 340
|
||||
Width = 1
|
||||
ParentColor = False
|
||||
end
|
||||
object seTime: TSpinEdit
|
||||
Left = 9
|
||||
Height = 28
|
||||
Top = 108
|
||||
Width = 74
|
||||
Increment = 100
|
||||
MaxValue = 10000
|
||||
MinValue = 100
|
||||
OnChange = seTimeChange
|
||||
TabOrder = 2
|
||||
Value = 1000
|
||||
end
|
||||
object Image1: TImage
|
||||
Left = 9
|
||||
Height = 104
|
||||
Top = 176
|
||||
Width = 42
|
||||
Picture.Data = {
|
||||
1754506F727461626C654E6574776F726B477261706869636D0C000089504E47
|
||||
0D0A1A0A0000000D494844520000007A0000012B080600000011FC970200000C
|
||||
3449444154789CED9BDD6F1CD519879F77776D2724C1490089508AD77C5541A5
|
||||
711042A288DA6E8B6855150CA8BD4014D652ABF68EE52F60F31F6CEE0A05692D
|
||||
A45E4445904A6D2F682BBB1555D5A6C2B9EAED5AAA2805DAD89010278E7D7A71
|
||||
66D88D598F77D7B3F3B1EFFB4823DBBBB373CECCB3E7FCCE39331614E1CE318E
|
||||
A30680509307594BB74646ECB8BFF2A2FB1B17DCDF71EE1CCEFD830BEE1C2FA6
|
||||
5DAFA490B42B3068DC5F98A64003A18CC0751B80D0042AF2004B69D531098656
|
||||
B47B97090A3480998E820BC1CFD6EB8B8C5291FB5849BCB2093074A2DD39C659
|
||||
A746816A5BABED4674F85E9D83D4E4AEE1CAEFA112EDFECC8B408D0287B775CF
|
||||
BD880658A5404DEEE77412F54E82A110EDFEC4348E06851D73B837D1ADBF9B14
|
||||
A9C8F1FCE777AE45BB7799608306D22187E311DDCA6FF29DDFB914EDDE619C12
|
||||
35242287E315ED37479DB17CE677EE44BBDFF30205EAC82E393C08D1FEBD5584
|
||||
AA7C8585019CDEC0C88D68F747A6D9A28E30D5879C384587DB324255EEC9477E
|
||||
675EB4FB031381E0B94871C98B0E5F7B9B2255B933DBF99D59D1EE1DC6D9A28A
|
||||
50EB4A5C7AA2C3DF6B403DABF99D49D1EE77BC806CCBE1EC8B6EE5F764F6F23B
|
||||
53A2DD6F99861D72381FA2C36D992255F97276F23B13A2DD6F98805D72385FA2
|
||||
FDE6789B51AA725BFAF99DAA68F70EE3AC7799C37914DD7AAFC601EA7234BDFC
|
||||
4E4DB43BDB630EE75B3410E4F7EDE9E477E2A2DDAF99668B1AC24CE2173B4DD1
|
||||
AD6D11A126C792CDEFC444BB3799A0400DA192FAC54EB3ECD67B0DF6519323C9
|
||||
E4F7C045BB338C53A48A5F973E9C898B9D66D9D7BFB78A506764F0F93D50D1EE
|
||||
57BC805F482867EA62A75976A7F7A049919ADC3CB8FC1E886877866924C8E12C
|
||||
5EEC34CB8E3ED622256A7224FEFC8E55B47B930936A851087238AB173BCDB2BB
|
||||
3B568342BCF91D8B68778671363BE470562F769A65777F2C9FDF87A98BEC3DBF
|
||||
F72CDAFD322287B37AB1D32CBBF763352950931BF796DF7D8B766F7002A14E21
|
||||
2287B37AB1D32CBBDF633916295195839CA70F7A16EDCE30CE3AF5AE7238AB17
|
||||
3BCDB2F77A2C6870886AAFDD7961F75D5AB8377899759A08955E3E67C48850E1
|
||||
224D7789977BFB5817B8059EC451FFFC71DAF093796D5569961DEF7934295195
|
||||
31CEB20B91A2DDEB9C081EC49B19AA8B9D66D983398F458A546574E7FCEE28DA
|
||||
BDC23825EAC8B61C1E968B9D66D9833D8F06A39DF3FB0B19ED5EE7654AFE3F0C
|
||||
B7BF67649E0A1B34DDC617F3FBF316ED7ED1450E0F4BAB4AB3ECA4CEC3D1A440
|
||||
554A3EBFC5FD9C13D0361FCE422587B9ECA4CF23C8EF12C232C63033C316CB3D
|
||||
CDA38D9CE1828DB0E14BF09BECF4092357386093CF250394AEDBA15DF86672F5
|
||||
32622214DC9ED301A50EBBFB9D4681AD6033B24D7B0BDEA167EE2C3AA418EC61
|
||||
C2B3CB355AAD3862C4152D9AE000A5E0E735AEEBF78D14D90436D85570C8EEA2
|
||||
430418C38BBEDA57D58C38D8A275FD3B64F14E742F3AA408DC806FDD1B3D7FDA
|
||||
E897B0815DC3B7E01E27C6BD8B0E190DB6ABD8087DD05C05AEB0A72970FFA209
|
||||
0ADD8FFFB65DC184C7CD35609DD6687A0FEC4D74481138C8F51533FA67137F1D
|
||||
37896D212B1ED12123F801DB9560337A231C68ADD3570E4711AFE890FDC03E7C
|
||||
856D84DE1DEBC067F43492EE85C18806FF6D3C88FF965EC277EBC617B98ABF3E
|
||||
8E814986418A6E2FE1307E2A7611CBEF904DFCF5D820F66EBA1383171D3286EF
|
||||
D22F0197D12B7C0BDF4587DD7442378A93131D7230D83E45DF80ED33FC794362
|
||||
824392170DFE248FE0BBAD4F19FE15B62BF8F30C57B552B8EF9F8EE89031FCE8
|
||||
FC32FE420CDB1DB26BF8F3BA4C22391C45BAA2430EE0D7CF2F311C03B62DBCE0
|
||||
8B0C7424DD0BD9100DFEDB3E0E1C023EC14BCF23178135BCEC0C3D9E951DD121
|
||||
25E066BCF035F23360BB8CAFEF55322538247BA243F6E1BBF3B08564F586C906
|
||||
B04AE2D3A55EC9AEE89043B4A6639F909D01DB26BE3EE17F3965547048F64583
|
||||
BF3B76149FE1FFC3B7F23459032EE0BF74196EC5EDE44374C808702BFE06C0C7
|
||||
247FC3641DF888D6430039101C922FD1213700657CD7F91183EFCE37810FF1F1
|
||||
919316BC9D7C8A0E19076EC40F863E1E50191FE1BBE9189EF248937C8B069FDF
|
||||
B7E0EF907D487CF9FD09F01F627DCA234DF22F3A6414B8033F9FFD80FEE7DF97
|
||||
F1823F2377391CC5F0880E3900DC8D1F19FF9BEEF37B33D87F95A168C1DB193E
|
||||
D12147F0DDF97FF12DB49DED123FA095F143263864784583CFEF5B819B80F7F1
|
||||
B9DBCE6AF07A9F0FC5E789E1161D320ADC891FA8BD8F5F74F917995FB68C1305
|
||||
A7D8C621E038F04FD25F5D4B185DA21563A29560A29560A29560A29560A29560
|
||||
A29560A29560A29560A29560A29560A29560A29560A29560A29560A29560A295
|
||||
60A29560A29560A29560A29560A29560A29560A29560A29560A29560A29560A2
|
||||
9560A29560A29560A29560A29560A29560A29560A29560A29560A29560A29560
|
||||
A29560A29560A29560A29560A29560A29560A29560A29560A29560A29560A295
|
||||
60A29560A29560A29560A29560A29560A29560A29560A29560A29560A29560A2
|
||||
9560A29560A29560A29560A29560A29560A29560A29560A29560A29560A29560
|
||||
A29560A29560A29560A29560A29560A29560A29560A29560A29560A29560A295
|
||||
60A29560A29560A29560A29560A29560A29560A29560A29560A29560A29560A2
|
||||
9560A29560A29560A29560A29560A29560A29560A29560A29560A29560A29560
|
||||
A29560A29560A29560A29560A29560A29560A29560A29560A29560A29560A295
|
||||
60A29560A29560A29560A29560A29560A29560A29560A29560A29560A29560A2
|
||||
9560A29560A29560A29560A29560A29560A29560A29560A29560A29560A29560
|
||||
A29560A29560A29560A29560A29560A29560A29560A29560A29560A29560A295
|
||||
60A29560A29560A29560A29560A29560A29560A29560A29560A29560A29560A2
|
||||
9560A29560A29560A29560A29560A29560A29560A29560A29560A29560A29560
|
||||
A29560A29560A29560A29560A29560A29560A29560A29560A29560A29560A295
|
||||
60A29560A29560A29560A29560A29560A29560A29560A29560A29560A29560A2
|
||||
9560A29560A29560A29560A29560A29550C0510556D3AE88313056816A417EC6
|
||||
691C651CF5B46B64C44E9D12652972BA00203F654D7EC24B38CAC062AA5533E2
|
||||
609131CA32CA4B22ACC1B68C961FB322F3CC22CCE068A65245A37F1C4D0ACCC8
|
||||
7E664558697FABE3604C9E67499E6712471567F99D035681AADCC8A4EC67A9D3
|
||||
0E91A36EF911A719B1FCCE348E3AE394659CD351BBED3ABD921FB226CFF21225
|
||||
CBEF8CB14891B2DCD4CAE128BA9E47CB33ACC80F82FCC6F23B457C0EDFC2AC1C
|
||||
B93E87A3E879C1449E66499E6612B1FC4E1417E4F03126E596CE391C45DF2B63
|
||||
F224A739401947A3DF63185DD3E00065B92D3A87A3D8D312A83CC69A3CC13C5B
|
||||
4C61F93D081629322577302F4777CFE1286259EB96EF735EBECB2C3067F3EF18
|
||||
F0F3E1399964566EE77C1C878CF5A6867C87B3F2389308356CFDBC1F56116A72
|
||||
2F9332C9D9380F3C90BB57F22D4EB145192CBF7BA0C10865B987538338F8C06E
|
||||
53CA63ACC92CF3142CBF776111C7941C675EEEDA5B0E4731F0FBD1F228E7E51B
|
||||
CC22CC61F3EF769A0873723FB3F2D57872388AC41E3C9047382B5F6712D4E7B7
|
||||
CFE12926E56BF1E67014893F61220F738AA2D2F9B7A381A32C270793C351A4F2
|
||||
28913CC89A3CC47CB09CBA98461D12661161461E625E1E1C5C0E4791EA3363F2
|
||||
004BF200B30895219D7F37112AF230B3F250EFCB967192898703E5040B1C620A
|
||||
A80DC5FAB9F339CC3EA6E46116D2AE0E64443480DCC59ADCCFA9603AD648BB3E
|
||||
7BA0C10853F228A7D2EAA63B9119D121721F2B729C798AB9CB6F9FC3B3CCCB23
|
||||
DDDF3E4C8ACC890E917B58927B83FCCEF6FCBB89A322DF6656BE996E0E479159
|
||||
D12172370B90C1FCF675A951644A1ECF460E47216957A017DCFB4C708D1A052A
|
||||
14F0B52F04DB4EBFB7FF1DFE7CADC36B3BEDDBE975A141919A7C2F7B5DF44E64
|
||||
BE45B723B7B1227704F9ED584EA10ACB0833F204F379920C39131D22C758922F
|
||||
7112A890CC72EA2A5091394ECA13D9CDE12872293A448EB1C00865FCFAF9A0A8
|
||||
B149599ECE7E0E4791AB8C8EC25D6002479D0273B16434BCCD185579265F5DF4
|
||||
4EE4BA45B723475891A33C15437E2F0333F22C4F0D8B641822D12172882539CC
|
||||
C960FDBCFBFCF6CB9615798E93F26C3E73388AA1131D220759E040D7F95DE306
|
||||
CAF25CBE73583DCE31E1AEF096DBC0B94D9C7B05E75EC5B9D778CBBDC644DAF5
|
||||
3362C66D30ED3679CFBDC27BEE55A6D3AE4F92FC1FB4C45EB54DA944FF000000
|
||||
0049454E44AE426082
|
||||
}
|
||||
Proportional = True
|
||||
Stretch = True
|
||||
end
|
||||
end
|
||||
object ListChartSource1: TListChartSource
|
||||
DataPoints.Strings = (
|
||||
'1|2|?|'
|
||||
'2|3|?|'
|
||||
'3|5|?|'
|
||||
'4|6|?|'
|
||||
'5|9|?|'
|
||||
'6|7|?|'
|
||||
'7|8|?|'
|
||||
)
|
||||
left = 560
|
||||
top = 292
|
||||
end
|
||||
end
|
131
bgracontrols/test/test_extra/slicescaling_tachart/Main.pas
Normal file
131
bgracontrols/test/test_extra/slicescaling_tachart/Main.pas
Normal file
@@ -0,0 +1,131 @@
|
||||
unit Main;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, ExtCtrls, Spin, StdCtrls, SysUtils, FileUtil, Forms, Controls,
|
||||
Graphics, Dialogs, TACustomSource, TAGraph, TASeries, TASources,
|
||||
TAAnimatedSource,
|
||||
BGRABitmap, BGRABitmapTypes, BGRASliceScaling, types;
|
||||
|
||||
type
|
||||
|
||||
{ TForm1 }
|
||||
|
||||
TForm1 = class(TForm)
|
||||
btnStartStop: TButton;
|
||||
Chart1: TChart;
|
||||
Chart1BarSeries1: TBarSeries;
|
||||
Image1: TImage;
|
||||
lblSkipped: TLabel;
|
||||
ListChartSource1: TListChartSource;
|
||||
Panel1: TPanel;
|
||||
rgMethod: TRadioGroup;
|
||||
seTime: TSpinEdit;
|
||||
procedure btnStartStopClick(Sender: TObject);
|
||||
procedure Chart1BarSeries1BeforeDrawBar(ASender: TBarSeries;
|
||||
ACanvas: TCanvas; const ARect: TRect; APointIndex, AStackIndex: Integer;
|
||||
var ADoDefaultDrawing: Boolean);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure FormDestroy(Sender: TObject);
|
||||
procedure rgMethodClick(Sender: TObject);
|
||||
procedure seTimeChange(Sender: TObject);
|
||||
private
|
||||
FAnimatedSource: TCustomAnimatedChartSource;
|
||||
procedure OnGetItem(
|
||||
ASource: TCustomAnimatedChartSource;
|
||||
AIndex: Integer; var AItem: TChartDataItem);
|
||||
procedure OnStop(ASource: TCustomAnimatedChartSource);
|
||||
public
|
||||
sliceScaling: TBGRASliceScaling;
|
||||
end;
|
||||
|
||||
var
|
||||
Form1: TForm1;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.lfm}
|
||||
|
||||
uses
|
||||
Math;
|
||||
|
||||
{ TForm1 }
|
||||
|
||||
procedure TForm1.btnStartStopClick(Sender: TObject);
|
||||
begin
|
||||
if FAnimatedSource.IsAnimating then
|
||||
FAnimatedSource.Stop
|
||||
else
|
||||
FAnimatedSource.Start;
|
||||
end;
|
||||
|
||||
procedure TForm1.Chart1BarSeries1BeforeDrawBar(ASender: TBarSeries;
|
||||
ACanvas: TCanvas; const ARect: TRect; APointIndex, AStackIndex: Integer;
|
||||
var ADoDefaultDrawing: Boolean);
|
||||
var
|
||||
temp: TBGRABitmap;
|
||||
begin
|
||||
temp := TBGRABitmap.Create(ARect.Right - ARect.Left, ARect.Bottom - ARect.Top);
|
||||
sliceScaling.Draw(temp, 0, 0, temp.Width, temp.Height, False);
|
||||
temp.Draw(ACanvas, ARect.Left, ARect.Top, False);
|
||||
temp.Free;
|
||||
end;
|
||||
|
||||
procedure TForm1.FormCreate(Sender: TObject);
|
||||
begin
|
||||
FAnimatedSource := TCustomAnimatedChartSource.Create(Self);
|
||||
FAnimatedSource.Origin := ListChartSource1;
|
||||
FAnimatedSource.AnimationInterval := 30;
|
||||
FAnimatedSource.OnGetItem := @OnGetItem;
|
||||
FAnimatedSource.OnStop := @OnStop;
|
||||
seTimeChange(nil);
|
||||
Chart1BarSeries1.Source := FAnimatedSource;
|
||||
FAnimatedSource.Start;
|
||||
|
||||
sliceScaling := TBGRASliceScaling.Create(Image1.Picture.Bitmap, 70, 0, 35, 0);
|
||||
//sliceScaling.ResampleMode := rmSimpleStretch;
|
||||
sliceScaling.AutodetectRepeat;
|
||||
end;
|
||||
|
||||
procedure TForm1.FormDestroy(Sender: TObject);
|
||||
begin
|
||||
sliceScaling.Free;
|
||||
end;
|
||||
|
||||
procedure TForm1.OnGetItem(
|
||||
ASource: TCustomAnimatedChartSource;
|
||||
AIndex: Integer; var AItem: TChartDataItem);
|
||||
begin
|
||||
case rgMethod.ItemIndex of
|
||||
0: AItem.Y *= ASource.Progress;
|
||||
1:
|
||||
if ASource.Count * ASource.Progress < AIndex then
|
||||
AItem.Y := 0;
|
||||
2:
|
||||
case Sign(Trunc(ASource.Count * ASource.Progress) - AIndex) of
|
||||
0: AItem.Y *= Frac(ASource.Count * ASource.Progress);
|
||||
-1: AItem.Y := 0;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TForm1.OnStop(ASource: TCustomAnimatedChartSource);
|
||||
begin
|
||||
lblSkipped.Caption := Format('Skipped frames: %d', [ASource.SkippedFramesCount]);
|
||||
end;
|
||||
|
||||
procedure TForm1.rgMethodClick(Sender: TObject);
|
||||
begin
|
||||
FAnimatedSource.Start;
|
||||
end;
|
||||
|
||||
procedure TForm1.seTimeChange(Sender: TObject);
|
||||
begin
|
||||
FAnimatedSource.AnimationTime := seTime.Value;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
@@ -0,0 +1,159 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="9"/>
|
||||
<PathDelim Value="\"/>
|
||||
<General>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<MainUnit Value="0"/>
|
||||
<Title Value="TAChart animated source demo"/>
|
||||
<ResourceType Value="res"/>
|
||||
<UseXPManifest Value="True"/>
|
||||
</General>
|
||||
<i18n>
|
||||
<EnableI18N LFM="False"/>
|
||||
</i18n>
|
||||
<VersionInfo>
|
||||
<StringTable ProductVersion=""/>
|
||||
</VersionInfo>
|
||||
<BuildModes Count="2">
|
||||
<Item1 Name="Debug" Default="True"/>
|
||||
<Item2 Name="Release">
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="animatedemo"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<CodeGeneration>
|
||||
<SmartLinkUnit Value="True"/>
|
||||
<Optimizations>
|
||||
<OptimizationLevel Value="3"/>
|
||||
<VariablesInRegisters Value="True"/>
|
||||
</Optimizations>
|
||||
</CodeGeneration>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<GenerateDebugInfo Value="False"/>
|
||||
<StripSymbols Value="True"/>
|
||||
</Debugging>
|
||||
<LinkSmart Value="True"/>
|
||||
<Options>
|
||||
<Win32>
|
||||
<GraphicApplication Value="True"/>
|
||||
</Win32>
|
||||
</Options>
|
||||
</Linking>
|
||||
<Other>
|
||||
<CompilerMessages>
|
||||
<UseMsgFile Value="True"/>
|
||||
</CompilerMessages>
|
||||
<CompilerPath Value="$(CompPath)"/>
|
||||
</Other>
|
||||
</CompilerOptions>
|
||||
</Item2>
|
||||
</BuildModes>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
<IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
|
||||
<ExcludeFileFilter Value="*.(bak|ppu|o|so);*~;backup"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<local>
|
||||
<FormatVersion Value="1"/>
|
||||
</local>
|
||||
</RunParams>
|
||||
<RequiredPackages Count="4">
|
||||
<Item1>
|
||||
<PackageName Value="bgracontrols"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<PackageName Value="BGRABitmapPack"/>
|
||||
</Item2>
|
||||
<Item3>
|
||||
<PackageName Value="TAChartLazarusPkg"/>
|
||||
</Item3>
|
||||
<Item4>
|
||||
<PackageName Value="LCL"/>
|
||||
</Item4>
|
||||
</RequiredPackages>
|
||||
<Units Count="2">
|
||||
<Unit0>
|
||||
<Filename Value="animatedemo.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<UnitName Value="animatedemo"/>
|
||||
</Unit0>
|
||||
<Unit1>
|
||||
<Filename Value="Main.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<ComponentName Value="Form1"/>
|
||||
<HasResources Value="True"/>
|
||||
<ResourceBaseClass Value="Form"/>
|
||||
<UnitName Value="Main"/>
|
||||
</Unit1>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="animatedemo"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<Parsing>
|
||||
<SyntaxOptions>
|
||||
<IncludeAssertionCode Value="True"/>
|
||||
</SyntaxOptions>
|
||||
</Parsing>
|
||||
<CodeGeneration>
|
||||
<Checks>
|
||||
<IOChecks Value="True"/>
|
||||
<RangeChecks Value="True"/>
|
||||
<OverflowChecks Value="True"/>
|
||||
<StackChecks Value="True"/>
|
||||
</Checks>
|
||||
<Optimizations>
|
||||
<VariablesInRegisters Value="True"/>
|
||||
</Optimizations>
|
||||
</CodeGeneration>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<DebugInfoType Value="dsDwarf2Set"/>
|
||||
<UseHeaptrc Value="True"/>
|
||||
<StripSymbols Value="True"/>
|
||||
<UseExternalDbgSyms Value="True"/>
|
||||
</Debugging>
|
||||
<Options>
|
||||
<Win32>
|
||||
<GraphicApplication Value="True"/>
|
||||
</Win32>
|
||||
</Options>
|
||||
</Linking>
|
||||
<Other>
|
||||
<CompilerMessages>
|
||||
<UseMsgFile Value="True"/>
|
||||
</CompilerMessages>
|
||||
<CompilerPath Value="$(CompPath)"/>
|
||||
</Other>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
<Exceptions Count="3">
|
||||
<Item1>
|
||||
<Name Value="EAbort"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<Name Value="ECodetoolError"/>
|
||||
</Item2>
|
||||
<Item3>
|
||||
<Name Value="EFOpenError"/>
|
||||
</Item3>
|
||||
</Exceptions>
|
||||
</Debugging>
|
||||
</CONFIG>
|
@@ -0,0 +1,21 @@
|
||||
program animatedemo;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
uses
|
||||
{$IFDEF UNIX}{$IFDEF UseCThreads}
|
||||
cthreads,
|
||||
{$ENDIF}{$ENDIF}
|
||||
Interfaces, // this includes the LCL widgetset
|
||||
Forms, Main, bgrabitmappack, tachartlazaruspkg;
|
||||
|
||||
{$R *.res}
|
||||
|
||||
begin
|
||||
Application.Title := 'TAChart animated source demo';
|
||||
RequireDerivedFormResource := True;
|
||||
Application.Initialize;
|
||||
Application.CreateForm(TForm1, Form1);
|
||||
Application.Run;
|
||||
end.
|
||||
|
Reference in New Issue
Block a user