cvs-fast-export

This commit is contained in:
2025-01-07 22:18:50 -05:00
parent 3acb46cd9c
commit 82d0b3b061
304 changed files with 0 additions and 292039 deletions

28
.gitignore vendored
View File

@ -1,28 +0,0 @@
# CVS default ignores begin
tags
TAGS
.make.state
.nse_depinfo
*~
\#*
.#*
,*
_$*
*$
*.old
*.bak
*.BAK
*.orig
*.rej
.del-*
*.a
*.olb
*.o
*.obj
*.so
*.exe
*.Z
*.elc
*.ln
core
# CVS default ignores end

View File

@ -1,41 +0,0 @@
-$A8
-$B-
-$C+
-$D+
-$E-
-$F-
-$G+
-$H+
-$I+
-$J-
-$K-
-$L+
-$M-
-$N+
-$O+
-$P+
-$Q-
-$R-
-$S-
-$T-
-$U-
-$V+
-$W-
-$X+
-$Y+
-$Z1
-cg
-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
-H+
-W+
-M
-$M16384,1048576
-K$00400000
-E"..\..\out"
-N"..\..\out\dcu"
-LE"x:\programs\borland\delphi6\Projects\Bpl"
-LN"x:\programs\borland\delphi6\Projects\Bpl"
-U"..\..\..\Apolibstuff\libxml;..\..\..\Apolibstuff\imglib;..\..\..\Apolibstuff\Scripterstudio\Imports\Delphi6;..\..\..\Apolibstuff\ScripterStudio;..\..\..\Apolibstuff\Indy\d6"
-O"..\..\..\Apolibstuff\libxml;..\..\..\Apolibstuff\imglib;..\..\..\Apolibstuff\Scripterstudio\Imports\Delphi6;..\..\..\Apolibstuff\ScripterStudio;..\..\..\Apolibstuff\Indy\d6"
-I"..\..\..\Apolibstuff\libxml;..\..\..\Apolibstuff\imglib;..\..\..\Apolibstuff\Scripterstudio\Imports\Delphi6;..\..\..\Apolibstuff\ScripterStudio;..\..\..\Apolibstuff\Indy\d6"
-R"..\..\..\Apolibstuff\libxml;..\..\..\Apolibstuff\imglib;..\..\..\Apolibstuff\Scripterstudio\Imports\Delphi6;..\..\..\Apolibstuff\ScripterStudio;..\..\..\Apolibstuff\Indy\d6"

View File

@ -1,134 +0,0 @@
[FileVersion]
Version=6.0
[Compiler]
A=8
B=0
C=1
D=1
E=0
F=0
G=1
H=1
I=1
J=0
K=0
L=1
M=0
N=1
O=1
P=1
Q=0
R=0
S=0
T=0
U=0
V=1
W=0
X=1
Y=2
Z=1
ShowHints=1
ShowWarnings=1
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
[Linker]
MapFile=0
OutputObjs=0
ConsoleApp=1
DebugInfo=0
RemoteSymbols=0
MinStackSize=16384
MaxStackSize=1048576
ImageBase=4194304
ExeDescription=
[Directories]
OutputDir=..\..\out
UnitOutputDir=..\..\out\dcu
PackageDLLOutputDir=
PackageDCPOutputDir=
SearchPath=..\..\..\Apolibstuff\libxml;..\..\..\Apolibstuff\imglib;..\..\..\Apolibstuff\Scripterstudio\Imports\Delphi6;..\..\..\Apolibstuff\ScripterStudio;..\..\..\Apolibstuff\Indy\d6
Packages=vcl;rtl;dbrtl;adortl;vcldb;vclx;bdertl;vcldbx;dsnap;cds;bdecds;teeui;teedb;tee;dss;visualclx;visualdbclx;dsnapcrba;dsnapcon;VclSmp;vclie;xmlrtl;inet;inetdbbde;inetdbxpress;inetdb;nmfast;webdsnap;websnap;soaprtl;dbexpress;dbxcds;dclOffice2k;FlatStyle_D6;S303_R60;RzLPDB60;RzLPND60;vclshlctrls;B302vr60;VirtualTreesD6;o403_r60;ibxpress;CSP20I60;Rz30Ctls60;Rz30DBCtls60;indy;Indy60
Conditionals=
DebugSourceDirs=X:\Code\Delphi\Apophysis\Apolibstuff9\ScripterStudio\
UsePackages=0
[Parameters]
RunParams=
HostApplication=
Launcher=
UseLauncher=0
DebugCWD=
[Language]
ActiveLang=
ProjectLang=
RootDir=D:\Program Files\Borland\Delphi6\Bin\
[Version Info]
IncludeVerInfo=1
AutoIncBuild=0
MajorVer=2
MinorVer=0
Release=2
Build=0
Debug=0
PreRelease=0
Special=0
Private=0
DLL=0
Locale=3081
CodePage=1252
[Version Info Keys]
CompanyName=
FileDescription=Apophysis 2.02
FileVersion=2.0.2.0
InternalName=
LegalCopyright=Copyright <20> 2001-2004 Mark Townsend
LegalTrademarks=
OriginalFilename=Apophysis.exe
ProductName=
ProductVersion=2.02
Comments=
[Excluded Packages]
C:\Program Files\Indy 10 for Delphi 6\LibD6\dclIndyCore60.bpl=Indy 10 Core Design Time
C:\Program Files\Indy 10 for Delphi 6\LibD6\dclIndyProtocols60.bpl=Indy 10 Protocols Design Time
[HistoryLists\hlDebugSourcePath]
Count=1
Item0=X:\Code\Delphi\Apophysis\Apolibstuff9\ScripterStudio\
[HistoryLists\hlConditionals]
Count=4
Item0=GEONOISE
Item1=GEONOISE;V1;GROUND_SINGLE;B_ATTENUATION_PLAIN;BARRIERCORRFLOATING;BUILDING_FLOAT;ROAD_SRM2;NO_SATTENU;NO_VATTENU
Item2=GEONOISE;R1;GROUND_SINGLE;B_ATTENUATION_PLAIN;BARRIERCORRFLOATING;BUILDING_FLOAT;NO_ROAD;NO_SATTENU;NO_VATTENU
Item3=GEONOISE;V5;GROUND_SINGLE;B_ATTENUATION_PLAIN;BARRIERCORRFLOATING;BUILDING_FLOAT;ROAD_SRM2;NO_SATTENU;NO_VATTENU
[HistoryLists\hlUnitAliases]
Count=1
Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
[HistoryLists\hlSearchPath]
Count=13
Item0=..\..\..\Apolibstuff\libxml;..\..\..\Apolibstuff\imglib;..\..\..\Apolibstuff\Scripterstudio\Imports\Delphi6;..\..\..\Apolibstuff\ScripterStudio;..\..\..\Apolibstuff\Indy\d6
Item1=..\Apolibstuff\libxml;..\Apolibstuff\imglib;..\Apolibstuff\Scripterstudio\Imports\Delphi6;..\Apolibstuff\ScripterStudio;..\Apolibstuff\Indy\d6
Item2=..\Apolibstuff\libxml;..\Apolibstuff\imglib;..\Apolibstuff\ScripterStudio;..\Apolibstuff\Scripterstudio\Imports\Delphi6;..\Apolibstuff\Indy\d6
Item3=C:\code\Apophysis\Apolibstuff\imglib
Item4=c:\proj32\geonoise510\src;w:\Src\GroundModel;w:\lib;w:\src\alg;w:\src\dll\Tool\Viewer;w:\src\dll\DLLAlg
Item5=c:\proj32\geonoise510\src;w:\lib;w:\src\dll\Method\V1;w:\src\alg;w:\src\dll\DLLAlg;w:\src\dll\Method\GenItem;w:\src\dll\tool\VLDOS
Item6=c:\proj32\geonoise510\src;w:\lib;w:\src\dll\Method\R1;w:\src\alg;w:\src\dll\DLLAlg;w:\src\dll\Method\GenItem;w:\src\dll\tool\RLDOS
Item7=c:\proj32\geonoise510\src;w:\lib;w:\src\dll\Method\V1;w:\src\alg;w:\src\dll\DLLAlg;w:\src\dll\Method\GenItem
Item8=c:\proj32\geonoise510\src;w:\src\dll\Method\V1;w:\src\alg;w:\src\dll\DLLAlg;w:\src\dll\Method\GenItem;w:\lib
Item9=c:\proj32\geonoise510\src;w:\SRC\ALG;w:\src\dll\Tool\Shape;w:\src\dll\DLLAlg;w:\src\dll\Method\GenItem;w:\LIB
Item10=c:\proj32\geonoise510\src;w:\src\alg;w:\src\exe\dbase;w:\src\exe\geoman;w:\src\DBIntf;w:\src\exe\dllman;w:\src\exe\main;w:\src\exe\model;w:\src\exe\results;w:\src\exe\lib;w:\lib
Item11=c:\proj32\geonoise510\src;w:\SRC\SPM\;w:\SRC\ALG;w:\lib
Item12=c:\proj32\geonoise510\src;w:\SRC\SPM\;w:\SRC\ALG
[HistoryLists\hlUnitOutputDirectory]
Count=7
Item0=..\..\out\dcu
Item1=..\..\..\out\dcu
Item2=.\out\dcu
Item3=..\out\dcu
Item4=C:\code\Apophysis\2.02a\out\dcu
Item5=C:\code\Apophysis\2.02\out\dcu
Item6=c:\proj32\geonoise510\out\DCU
[HistoryLists\hlOutputDirectorry]
Count=6
Item0=..\..\out
Item1=.\out
Item2=..\out
Item3=C:\code\Apophysis\2.02a\out
Item4=C:\code\Apophysis\2.02\out
Item5=c:\proj32\geonoise510\out

View File

@ -1,91 +0,0 @@
{
Apophysis Copyright (C) 2001-2004 Mark Townsend
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
}
{$D-,L-,O+,Q-,R-,Y-,S-}
program Apophysis202;
{%File 'HtmlHlp.inc'}
{%ToDo 'Apophysis202.todo'}
{%File 'readme.txt'}
uses
Forms,
SysUtils,
Main in '..\..\Source\Main.pas' {MainForm},
Editor in '..\..\Source\Editor.pas' {EditForm},
Global in '..\..\Source\Global.pas',
Options in '..\..\Source\Options.pas' {OptionsForm},
Regstry in '..\..\Source\Regstry.pas',
MyTypes in '..\..\Source\MyTypes.pas',
Fullscreen in '..\..\Source\Fullscreen.pas' {FullscreenForm},
Render in '..\..\Source\Render.pas',
RenderThread in '..\..\Source\RenderThread.pas',
FormRender in '..\..\Source\FormRender.pas' {RenderForm},
Mutate in '..\..\Source\Mutate.pas' {MutateForm},
Adjust in '..\..\Source\Adjust.pas' {AdjustForm},
Browser in '..\..\Source\Browser.pas' {GradientBrowser},
Gradient in '..\..\Source\Gradient.pas' {GradientForm},
Save in '..\..\Source\Save.pas' {SaveForm},
About in '..\..\Source\About.pas' {AboutForm},
Cmap in '..\..\Source\cmap.pas',
SavePreset in '..\..\Source\SavePreset.pas' {SavePresetForm},
ControlPoint in '..\..\Source\ControlPoint.pas',
HtmlHlp in '..\..\Source\HtmlHlp.pas',
ScriptForm in '..\..\Source\ScriptForm.pas' {ScriptEditor},
Preview in '..\..\Source\Preview.pas' {PreviewForm},
ScriptRender in '..\..\Source\ScriptRender.pas' {ScriptRenderForm},
ap_Math in '..\..\Source\ap_Math.pas',
ap_SysUtils in '..\..\Source\ap_SysUtils.pas',
FormFavorites in '..\..\Source\FormFavorites.pas' {FavoritesForm},
Size in '..\..\Source\Size.pas' {SizeTool},
FormExport in '..\..\Source\FormExport.pas' {ExportDialog},
MsMultiPartFormData in '..\..\Source\MsMultiPartFormData.pas',
Sheep in '..\..\Source\Sheep.pas' {SheepDialog},
ap_FileCtrl in '..\..\Source\ap_FileCtrl.pas',
XForm in '..\..\Source\XForm.pas',
cmapdata in '..\..\Source\cmapdata.pas';
{$R *.RES}
begin
Application.Initialize;
Application.Title := 'Apophysis';
Application.HelpFile := 'Apophysis 2.0.chm';
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TEditForm, EditForm);
Application.CreateForm(TOptionsForm, OptionsForm);
Application.CreateForm(TFullscreenForm, FullscreenForm);
Application.CreateForm(TRenderForm, RenderForm);
Application.CreateForm(TMutateForm, MutateForm);
Application.CreateForm(TAdjustForm, AdjustForm);
Application.CreateForm(TGradientBrowser, GradientBrowser);
Application.CreateForm(TGradientForm, GradientForm);
Application.CreateForm(TSaveForm, SaveForm);
Application.CreateForm(TAboutForm, AboutForm);
Application.CreateForm(TSavePresetForm, SavePresetForm);
Application.CreateForm(TScriptEditor, ScriptEditor);
Application.CreateForm(TPreviewForm, PreviewForm);
Application.CreateForm(TScriptRenderForm, ScriptRenderForm);
Application.CreateForm(TFavoritesForm, FavoritesForm);
Application.CreateForm(TSizeTool, SizeTool);
Application.CreateForm(TExportDialog, ExportDialog);
Application.CreateForm(TSheepDialog, SheepDialog);
Application.UpdateFormatSettings := False;
DecimalSeparator := '.';
Application.Run;
end.

View File

@ -1,341 +0,0 @@
[Closed Files]
File_0=SourceModule,'X:\Code\Delphi\Apophysis\2.02f\Source\ap_FileCtrl.pas',0,1,1,1,1,0,0
File_1=SourceModule,'X:\Code\Delphi\Apophysis\2.02f\Source\ap_SysUtils.pas',0,1,1,3,20,0,0
File_2=SourceModule,'X:\Code\Delphi\Apophysis\Apolibstuff\Scripterstudio\Imports\Delphi6\ap_Classes.pas',0,1,1,3,23,0,0
File_3=SourceModule,'x:\programs\borland\delphi6\source\rtl\Win\Windows.pas',0,1,5563,114,5586,0,0
File_4=SourceModule,'X:\Code\Delphi\Apophysis\2.02e\About.pas',0,1,1,117,16,1,0
File_5=SourceModule,'X:\Code\Delphi\Apophysis\2.02e\Main.pas',0,1,3583,38,3588,1,0
File_6=SourceModule,'X:\Code\Delphi\Apophysis\2.02\ScriptForm.pas',0,1,2648,117,2664,0,0
File_7=SourceModule,'X:\Code\Delphi\Apophysis\Apolibstuff9\ScripterStudio\atScript.pas',0,1,2152,1,2170,0,0
File_8=SourceModule,'X:\Code\Delphi\Apophysis\Apolibstuff9\ScripterStudio\atpascal.pas',0,1,1519,1,1537,0,0
File_9=SourceModule,'X:\Code\Delphi\Apophysis\Apolibstuff9\ScripterStudio\atParser.pas',0,1,2033,1,2051,0,0
[Modules]
Module0=X:\Code\Delphi\Apophysis\2.02f\Source\Main.pas
Module1=X:\Code\Delphi\Apophysis\2.02f\Source\About.pas
Module2=X:\Code\Delphi\Apophysis\2.02f\Source\ScriptForm.pas
Module3=X:\Code\Delphi\Apophysis\2.02f\Source\cmapdata.pas
Module4=X:\Code\Delphi\Apophysis\2.02f\Project\delphi6\Apophysis202.dpr
Count=5
EditWindowCount=1
[X:\Code\Delphi\Apophysis\2.02f\Source\Main.pas]
ModuleType=SourceModule
FormState=1
FormOnTop=0
[X:\Code\Delphi\Apophysis\2.02f\Source\About.pas]
ModuleType=SourceModule
FormState=1
FormOnTop=0
[X:\Code\Delphi\Apophysis\2.02f\Source\ScriptForm.pas]
ModuleType=SourceModule
FormState=0
FormOnTop=0
[X:\Code\Delphi\Apophysis\2.02f\Source\cmapdata.pas]
ModuleType=SourceModule
FormState=0
FormOnTop=0
[X:\Code\Delphi\Apophysis\2.02f\Project\delphi6\Apophysis202.dpr]
ModuleType=SourceModule
FormState=0
FormOnTop=0
[X:\Programs\Borland\Delphi6\Projects\ProjectGroup1.bpg]
FormState=0
FormOnTop=0
[X:\Code\Delphi\Apophysis\2.02f\Project\delphi6\Apophysis202.todo]
FormState=0
FormOnTop=0
[EditWindow0]
ViewCount=5
CurrentView=1
View0=0
View1=1
View2=2
View3=3
View4=4
CodeExplorer=CodeExplorer@EditWindow0
MessageView=MessageView@EditWindow0
Create=1
Visible=1
State=0
Left=266
Top=111
Width=1016
Height=880
MaxLeft=-4
MaxTop=108
ClientWidth=1008
ClientHeight=846
LeftPanelSize=0
RightPanelSize=0
BottomPanelSize=52
BottomPanelClients=MessageView@EditWindow0
BottomPanelData=000004000000000000000000000000000000000000000000000100000000000000000B0000004D65737361676556696577FFFFFFFF
[View0]
Module=X:\Code\Delphi\Apophysis\2.02f\Project\delphi6\Apophysis202.dpr
CursorX=73
CursorY=55
TopLine=31
LeftCol=1
[View1]
Module=X:\Code\Delphi\Apophysis\2.02f\Source\Main.pas
CursorX=45
CursorY=4394
TopLine=4354
LeftCol=1
[View2]
Module=X:\Code\Delphi\Apophysis\2.02f\Source\About.pas
CursorX=1
CursorY=1
TopLine=1
LeftCol=1
[View3]
Module=X:\Code\Delphi\Apophysis\2.02f\Source\cmapdata.pas
CursorX=1
CursorY=47737
TopLine=47709
LeftCol=1
[View4]
Module=X:\Code\Delphi\Apophysis\2.02f\Source\ScriptForm.pas
CursorX=36
CursorY=330
TopLine=302
LeftCol=1
[Watches]
Count=0
[Breakpoints]
Count=1
Breakpoint0='X:\Code\Delphi\Apophysis\2.02\ScriptForm.pas',1244,'',0,1,'',1,0,0,'',1,'','',''
[AddressBreakpoints]
Count=0
[Main Window]
Create=1
Visible=1
State=0
Left=0
Top=0
Width=1280
Height=112
MaxLeft=-1
MaxTop=-1
ClientWidth=1272
ClientHeight=78
[ProjectManager]
Create=1
Visible=1
State=0
Left=0
Top=0
Width=231
Height=843
MaxLeft=-1
MaxTop=-1
ClientWidth=231
ClientHeight=843
TBDockHeight=305
LRDockWidth=438
Dockable=1
[CPUWindow]
Create=1
Visible=0
State=0
Left=373
Top=335
Width=533
Height=353
MaxLeft=-1
MaxTop=-1
ClientWidth=525
ClientHeight=319
DumpPane=79
DisassemblyPane=187
RegisterPane=231
FlagPane=64
[AlignmentPalette]
Create=1
Visible=0
State=0
Left=200
Top=114
Width=156
Height=84
MaxLeft=-1
MaxTop=-1
ClientWidth=150
ClientHeight=60
[PropertyInspector]
Create=1
Visible=1
State=0
Left=0
Top=0
Width=231
Height=843
MaxLeft=-1
MaxTop=-1
ClientWidth=231
ClientHeight=843
TBDockHeight=527
LRDockWidth=190
Dockable=1
SplitPos=85
ArrangeBy=Name
SelectedItem=Caption
ExpandedItems=
HiddenCategories=
[WatchWindow]
Create=1
Visible=0
State=0
Left=232
Top=872
Width=1048
Height=165
MaxLeft=-1
MaxTop=-1
ClientWidth=1040
ClientHeight=139
TBDockHeight=149
LRDockWidth=421
Dockable=1
[CallStackWindow]
Create=1
Visible=1
State=0
Left=0
Top=0
Width=231
Height=843
MaxLeft=-1
MaxTop=-1
ClientWidth=231
ClientHeight=843
TBDockHeight=161
LRDockWidth=294
Dockable=1
[ObjectTree]
Create=1
Visible=0
State=0
Left=0
Top=112
Width=190
Height=350
MaxLeft=-1
MaxTop=-1
ClientWidth=182
ClientHeight=324
TBDockHeight=350
LRDockWidth=190
Dockable=1
[DebugLogView]
Create=1
Visible=0
State=0
Left=232
Top=872
Width=1048
Height=165
MaxLeft=-1
MaxTop=-1
ClientWidth=1040
ClientHeight=139
TBDockHeight=291
LRDockWidth=417
Dockable=1
[LocalVarsWindow]
Create=1
Visible=0
State=0
Left=27
Top=127
Width=194
Height=891
MaxLeft=-1
MaxTop=-1
ClientWidth=186
ClientHeight=865
TBDockHeight=110
LRDockWidth=421
Dockable=1
[CodeExplorer@EditWindow0]
Create=1
Visible=1
State=0
Left=0
Top=0
Width=231
Height=843
MaxLeft=-1
MaxTop=-1
ClientWidth=231
ClientHeight=843
TBDockHeight=305
LRDockWidth=140
Dockable=1
[MessageView@EditWindow0]
Create=1
Visible=1
State=0
Left=12
Top=0
Width=996
Height=52
MaxLeft=-1
MaxTop=-1
ClientWidth=996
ClientHeight=52
TBDockHeight=52
LRDockWidth=443
Dockable=1
[DockHosts]
DockHostCount=1
[DockSite0]
DockSiteType=1
Create=1
Visible=1
State=0
Left=0
Top=112
Width=266
Height=877
MaxLeft=-1
MaxTop=-1
ClientWidth=258
ClientHeight=851
TBDockHeight=451
LRDockWidth=177
Dockable=1
TabPosition=2
ActiveTab=Project Manager
TabDockClients=ProjectManager,CodeExplorer@EditWindow0,CallStackWindow,PropertyInspector

View File

@ -1 +0,0 @@

File diff suppressed because it is too large Load Diff

View File

@ -1,92 +0,0 @@
{
Apophysis Copyright (C) 2001-2004 Mark Townsend
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
}
unit About;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;
type
TAboutForm = class(TForm)
btnOK: TButton;
Image1: TImage;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label10: TLabel;
Label11: TLabel;
lblFlamecom: TLabel;
Label5: TLabel;
Bevel1: TBevel;
lblCredit: TLabel;
procedure btnOKClick(Sender: TObject);
procedure Label4Click(Sender: TObject);
procedure lblFlamecomClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure lblCreditClick(Sender: TObject);
private
{ Private declarations }
URL :String;
public
{ Public declarations }
end;
var
AboutForm: TAboutForm;
implementation
uses Main, ShellAPI;
{$R *.DFM}
procedure TAboutForm.btnOKClick(Sender: TObject);
begin
ModalResult := mrOK;
end;
procedure TAboutForm.Label4Click(Sender: TObject);
begin
ShellExecute(ValidParentForm(Self).Handle, 'open', PChar('http://www.apophysis.org'),
nil, nil, SW_SHOWNORMAL);
end;
procedure TAboutForm.lblFlamecomClick(Sender: TObject);
begin
ShellExecute(ValidParentForm(Self).Handle, 'open', PChar('http://flam3.com'),
nil, nil, SW_SHOWNORMAL);
end;
procedure TAboutForm.FormShow(Sender: TObject);
begin
lblCredit.Caption := MainCp.Nick;
URL := MainCp.URL;
if URL <> '' then lblCredit.Font.color := clBlue else lblCredit.Font.color := clBlack;
end;
procedure TAboutForm.lblCreditClick(Sender: TObject);
begin
if URL <> '' then
ShellExecute(ValidParentForm(Self).Handle, 'open', PChar(URL),
nil, nil, SW_SHOWNORMAL);
end;
end.

View File

@ -1,320 +0,0 @@
object AdjustForm: TAdjustForm
Left = 500
Top = 182
BorderIcons = [biSystemMenu, biMinimize]
BorderStyle = bsSingle
Caption = 'Adjust'
ClientHeight = 374
ClientWidth = 372
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
Icon.Data = {
0000010001001010000000000000680300001600000028000000100000002000
0000010018000000000040030000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000CD52
08FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF000000000000CD5208FFFFFFFFFFFFFFFFFFFFBD96000000
FFFFFFFFFFFFFFFFFFFFBD96000000FFFFFFFFFFFFFFFFFF000000000000CD52
08FFFFFFFFFFFFFFFFFFFFBD96000000FFFFFFFFFFFFFFFFFFFFBD96000000FF
FFFFFFFFFFFFFFFF000000000000CD5208FFFFFFFFFFFFFFFFFFFFBD96000000
FFFFFFFFFFFFFFFFFFFFBD96000000FFFFFFFFFFFFFFFFFF000000000000CD52
08FFFFFFFFFFFFFFFFFFFFBD96000000FFFFFFFFFFFFFFFFFFFFBD96000000FF
FFFFFFFFFFFFFFFF000000000000CD5208FFFFFFFFFFFFE2996DE2996DE2996D
E2996DFFFFFFE2996DE2996DE2996DE2996DFFFFFFFFFFFF000000000000CD52
08FFFFFFFFFFFFCD5208CD5208CD5208CD5208FFFFFFCD5208CD5208CD5208CD
5208FFFFFFFFFFFF000000000000CD5208FFFFFFFFFFFFFFFFFFFFBD96000000
FFFFFFFFFFFFFFFFFFFFBD96000000FFFFFFFFFFFFFFFFFF000000000000CD52
08FFFFFFFFFFFFFFFFFFFFBD96000000FFFFFFFFFFFFFFFFFFFFBD96000000FF
FFFFFFFFFFFFFFFF000000000000CD5208FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000CD52
08CD5208CD5208CD5208CD5208CD5208CD5208CD5208CD5208CD5208CD5208CD
5208CD5208CD5208000000000000CD5208FFFFFFFFBD96FFBD96FFBD96FFBD96
FFBD96FFBD96FFBD96FFBD96FFBD96FFFFFFD25C15FFFFFF000000000000CD52
08CD5208CD5208CD5208CD5208CD5208CD5208CD5208CD5208CD5208CD5208CD
5208CD5208CD5208CD5208000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000FFFF
0000000100000001000000010000000100000001000000010000000100000001
0000000100000001000000010000000100000001000000010000FFFF0000}
OldCreateOrder = False
Position = poDefault
OnClose = FormClose
OnCreate = FormCreate
OnDestroy = FormDestroy
OnShow = FormShow
PixelsPerInch = 96
TextHeight = 13
object PrevPnl: TPanel
Left = 105
Top = 5
Width = 162
Height = 122
BevelOuter = bvLowered
Color = clAppWorkSpace
TabOrder = 0
object PreviewImage: TImage
Left = 1
Top = 1
Width = 160
Height = 120
Anchors = []
Center = True
IncrementalDisplay = True
PopupMenu = QualityPopup
end
end
object GroupBox1: TGroupBox
Left = 8
Top = 128
Width = 357
Height = 129
Caption = 'Rendering'
TabOrder = 1
object Label8: TLabel
Left = 6
Top = 24
Width = 52
Height = 13
Alignment = taRightJustify
AutoSize = False
Caption = 'Gamma:'
end
object Label9: TLabel
Left = 6
Top = 48
Width = 52
Height = 13
Alignment = taRightJustify
AutoSize = False
Caption = 'Brightness:'
end
object Label10: TLabel
Left = 6
Top = 72
Width = 52
Height = 13
Alignment = taRightJustify
AutoSize = False
Caption = 'Vibrancy:'
end
object lblContrast: TLabel
Left = 56
Top = 100
Width = 101
Height = 13
Alignment = taRightJustify
AutoSize = False
Caption = 'Background color:'
end
object scrollGamma: TScrollBar
Left = 64
Top = 24
Width = 233
Height = 13
LargeChange = 10
Max = 500
Min = 100
PageSize = 0
Position = 100
TabOrder = 0
OnChange = scrollGammaChange
OnScroll = scrollGammaScroll
end
object txtGamma: TEdit
Left = 304
Top = 20
Width = 41
Height = 21
TabOrder = 1
Text = '0'
OnExit = txtGammaExit
OnKeyPress = txtGammaKeyPress
end
object scrollBrightness: TScrollBar
Left = 64
Top = 48
Width = 233
Height = 13
LargeChange = 100
Max = 10000
PageSize = 0
TabOrder = 2
OnChange = scrollBrightnessChange
OnScroll = scrollBrightnessScroll
end
object txtBrightness: TEdit
Left = 304
Top = 44
Width = 41
Height = 21
TabOrder = 3
Text = '0'
OnExit = txtBrightnessExit
OnKeyPress = txtBrightnessKeyPress
end
object scrollVibrancy: TScrollBar
Left = 64
Top = 72
Width = 233
Height = 13
LargeChange = 10
PageSize = 0
TabOrder = 4
OnChange = scrollVibrancyChange
OnScroll = scrollVibrancyScroll
end
object txtVibrancy: TEdit
Left = 304
Top = 68
Width = 41
Height = 21
TabOrder = 5
Text = '0'
OnExit = txtVibrancyExit
OnKeyPress = txtVibrancyKeyPress
end
object ColorPanel: TPanel
Left = 168
Top = 96
Width = 177
Height = 25
BevelOuter = bvLowered
Color = clBlack
TabOrder = 6
OnClick = ColorPanelClick
end
end
object GroupBox2: TGroupBox
Left = 8
Top = 264
Width = 357
Height = 105
Caption = 'Camera'
TabOrder = 2
object Label5: TLabel
Left = 8
Top = 24
Width = 30
Height = 13
Alignment = taRightJustify
Caption = 'Zoom:'
end
object Label6: TLabel
Left = 24
Top = 44
Width = 10
Height = 13
Alignment = taRightJustify
Caption = 'X:'
end
object Label1: TLabel
Left = 24
Top = 68
Width = 10
Height = 13
Alignment = taRightJustify
Caption = 'Y:'
end
object scrollZoom: TScrollBar
Left = 48
Top = 24
Width = 249
Height = 13
LargeChange = 10
Max = 300
Min = -300
PageSize = 0
TabOrder = 0
OnChange = scrollZoomChange
OnScroll = scrollZoomScroll
end
object txtZoom: TEdit
Left = 304
Top = 20
Width = 41
Height = 21
TabOrder = 1
Text = '0'
OnExit = txtZoomExit
OnKeyPress = txtZoomKeyPress
end
object scrollCenterX: TScrollBar
Left = 48
Top = 48
Width = 249
Height = 13
LargeChange = 10
Max = 1000
Min = -1000
PageSize = 0
TabOrder = 2
OnChange = scrollCenterXChange
OnScroll = scrollCenterXScroll
end
object txtCenterX: TEdit
Left = 304
Top = 44
Width = 41
Height = 21
TabOrder = 3
Text = '0'
OnExit = txtCenterXExit
OnKeyPress = txtCenterXKeyPress
end
object scrollCenterY: TScrollBar
Left = 48
Top = 72
Width = 249
Height = 13
LargeChange = 10
Max = 1000
Min = -1000
PageSize = 0
TabOrder = 4
OnChange = scrollCenterYChange
OnScroll = scrollCenterYScroll
end
object txtCenterY: TEdit
Left = 304
Top = 68
Width = 41
Height = 21
TabOrder = 5
Text = '0'
OnExit = txtCenterYExit
OnKeyPress = txtCenterYKeyPress
end
end
object QualityPopup: TPopupMenu
Images = MainForm.Buttons
Left = 16
Top = 16
object mnuLowQuality: TMenuItem
Caption = 'Low Quality'
RadioItem = True
OnClick = mnuLowQualityClick
end
object mnuMediumQuality: TMenuItem
Caption = 'Medium Quality'
Checked = True
RadioItem = True
OnClick = mnuMediumQualityClick
end
object mnuHighQuality: TMenuItem
Caption = 'High Quality'
RadioItem = True
OnClick = mnuHighQualityClick
end
end
object ColorDialog: TColorDialog
Ctl3D = True
Options = [cdFullOpen]
Left = 376
Top = 8
end
end

View File

@ -1,613 +0,0 @@
{
Apophysis Copyright (C) 2001-2004 Mark Townsend
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
}
unit Adjust;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, ComCtrls, ControlPoint, Render, Buttons, Menus, cmap;
const
WM_UPDATE_PARAMS = WM_APP + 5439;
type
TAdjustForm = class(TForm)
QualityPopup: TPopupMenu;
mnuLowQuality: TMenuItem;
mnuMediumQuality: TMenuItem;
mnuHighQuality: TMenuItem;
ColorDialog: TColorDialog;
PrevPnl: TPanel;
PreviewImage: TImage;
GroupBox1: TGroupBox;
Label8: TLabel;
scrollGamma: TScrollBar;
txtGamma: TEdit;
Label9: TLabel;
scrollBrightness: TScrollBar;
txtBrightness: TEdit;
Label10: TLabel;
scrollVibrancy: TScrollBar;
txtVibrancy: TEdit;
lblContrast: TLabel;
GroupBox2: TGroupBox;
Label5: TLabel;
scrollZoom: TScrollBar;
txtZoom: TEdit;
Label6: TLabel;
scrollCenterX: TScrollBar;
txtCenterX: TEdit;
scrollCenterY: TScrollBar;
txtCenterY: TEdit;
Label1: TLabel;
ColorPanel: TPanel;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormDestroy(Sender: TObject);
procedure DrawPreview;
procedure btnOKClick(Sender: TObject);
procedure btnCancelClick(Sender: TObject);
procedure btnCanelClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure mnuLowQualityClick(Sender: TObject);
procedure mnuMediumQualityClick(Sender: TObject);
procedure mnuHighQualityClick(Sender: TObject);
procedure txtZoomKeyPress(Sender: TObject; var Key: Char);
procedure txtZoomExit(Sender: TObject);
procedure txtCenterXKeyPress(Sender: TObject; var Key: Char);
procedure txtCenterXExit(Sender: TObject);
procedure txtCenterYKeyPress(Sender: TObject; var Key: Char);
procedure txtCenterYExit(Sender: TObject);
procedure txtGammaKeyPress(Sender: TObject; var Key: Char);
procedure txtGammaExit(Sender: TObject);
procedure txtBrightnessKeyPress(Sender: TObject; var Key: Char);
procedure txtBrightnessExit(Sender: TObject);
procedure txtVibrancyKeyPress(Sender: TObject; var Key: Char);
procedure txtVibrancyExit(Sender: TObject);
procedure scrollZoomScroll(Sender: TObject; ScrollCode: TScrollCode;
var ScrollPos: Integer);
procedure scrollCenterXScroll(Sender: TObject; ScrollCode: TScrollCode;
var ScrollPos: Integer);
procedure scrollCenterYScroll(Sender: TObject; ScrollCode: TScrollCode;
var ScrollPos: Integer);
procedure scrollGammaScroll(Sender: TObject; ScrollCode: TScrollCode;
var ScrollPos: Integer);
procedure scrollBrightnessScroll(Sender: TObject;
ScrollCode: TScrollCode; var ScrollPos: Integer);
procedure scrollVibrancyScroll(Sender: TObject;
ScrollCode: TScrollCode; var ScrollPos: Integer);
procedure scrollVibrancyChange(Sender: TObject);
procedure scrollGammaChange(Sender: TObject);
procedure scrollBrightnessChange(Sender: TObject);
procedure scrollZoomChange(Sender: TObject);
procedure scrollCenterXChange(Sender: TObject);
procedure scrollCenterYChange(Sender: TObject);
procedure ColorPanelClick(Sender: TObject);
procedure scrollContrastScroll(Sender: TObject;
ScrollCode: TScrollCode; var ScrollPos: Integer);
private
Resetting: boolean;
Render: TRenderer;
bm: TBitmap;
public
PreviewDensity: double;
cp: TControlPoint;
// cmap: TColorMap;
// Sample_Density, Zoom: double;
// Center: array[0..1] of double;
procedure UpdateDisplay;
procedure UpdateFlame;
end;
var
AdjustForm: TAdjustForm;
implementation
uses Main, Global, Registry, Mutate, Editor;
{$R *.DFM}
procedure TAdjustForm.UpdateDisplay;
var
pw, ph: integer;
r: double;
begin
pw := PrevPnl.Width - 2;
ph := PrevPnl.Height - 2;
cp.copy(MainCp);
if cp.width > cp.height then
begin
PreviewImage.Width := pw;
r := cp.width / PreviewImage.Width;
PreviewImage.height := round(cp.height / r);
PreviewImage.Left := 1;
PreviewImage.Top := (ph - PreviewImage.Height) div 2;
end
else
begin
PreviewImage.Height := ph;
r := cp.height / PreviewImage.height;
PreviewImage.Width := round(cp.Width / r);
PreviewImage.Top := 1;
PreviewImage.Left := (pw - PreviewImage.Width) div 2;
end;
cp.cmap := MainCp.cmap;
AdjustScale(cp, PreviewImage.Width, PreviewImage.Height);
// zoom := MainForm.zoom;
// cp.zoom := zoom;
Resetting := True; // So the preview doesn't get drawn with these changes..
scrollGamma.Position := trunc(cp.Gamma * 100);
scrollBrightness.Position := trunc(cp.Brightness * 100);
scrollVibrancy.Position := trunc(cp.vibrancy * 100);
scrollZoom.Position := trunc(cp.zoom * 100);
scrollCenterX.Position := trunc(cp.Center[0] * 100);
scrollCenterY.Position := trunc(cp.Center[1] * 100);
ColorPanel.color := cp.background[2] shl 16 +
cp.background[1] shl 8 + cp.background[0];
Resetting := False;
DrawPreview;
end;
procedure TAdjustForm.UpdateFlame;
begin
MainForm.StopThread;
MainForm.UpdateUndo;
MainCp.Copy(cp);
// MainCp.cmap := cmap;
// MainForm.zoom := zoom;
// MainForm.Center[0] := Center[0];
// MainForm.Center[1] := Center[1];
if EditForm.Visible then EditForm.UpdateDisplay;
if MutateForm.Visible then MutateForm.UpdateDisplay;
MainForm.RedrawTimer.enabled := true;
end;
procedure TAdjustForm.DrawPreview;
begin
if not Resetting then begin
Render.Stop;
// AdjustScale(cp, PreviewImage.Width, PreviewImage.Height);
cp.sample_density := PreviewDensity;
cp.spatial_oversample := defOversample;
cp.spatial_filter_radius := defFilterRadius;
// cp.Zoom := Zoom;
// cp.center[0] := Center[0];
// cp.center[1] := Center[1];
Render.Compatibility := compatibility;
Render.SetCP(cp);
Render.Render;
BM.Assign(Render.GetImage);
PreviewImage.Picture.Graphic := bm;
end;
end;
procedure TAdjustForm.FormCreate(Sender: TObject);
begin
bm := TbitMap.Create;
cp := TControlPoint.Create;
Render := TRenderer.Create;
case AdjustPrevQual of
0: begin
mnuLowQuality.Checked := true;
PreviewDensity := prevLowQuality;
end;
1: begin
mnuMediumQuality.Checked := true;
PreviewDensity := prevMediumQuality;
end;
2: begin
mnuHighQuality.Checked := true;
PreviewDensity := prevHighQuality;
end;
end;
end;
procedure TAdjustForm.FormClose(Sender: TObject; var Action: TCloseAction);
var
Registry: TRegistry;
begin
Render.Stop;
{ Write position to registry }
Registry := TRegistry.Create;
try
Registry.RootKey := HKEY_CURRENT_USER;
if Registry.OpenKey('\Software\' + APP_NAME + '\Forms\Adjust', True) then
begin
Registry.WriteInteger('Top', AdjustForm.Top);
Registry.WriteInteger('Left', AdjustForm.Left);
end;
finally
Registry.Free;
end;
// bStop := True;
end;
procedure TAdjustForm.FormDestroy(Sender: TObject);
begin
bm.free;
cp.free;
Render.free;
end;
procedure TAdjustForm.btnOKClick(Sender: TObject);
begin
ModalResult := mrOK;
end;
procedure TAdjustForm.btnCancelClick(Sender: TObject);
begin
ModalResult := mrCancel;
end;
procedure TAdjustForm.btnCanelClick(Sender: TObject);
begin
ModalResult := mrCancel;
end;
procedure TAdjustForm.FormShow(Sender: TObject);
var
Registry: TRegistry;
begin
if LimitVibrancy then scrollVibrancy.Max := 100 else scrollVibrancy.Max := 300;
{ Read posution from registry }
Registry := TRegistry.Create;
try
Registry.RootKey := HKEY_CURRENT_USER;
if Registry.OpenKey('Software\' + APP_NAME + '\Forms\Adjust', False) then
begin
if Registry.ValueExists('Left') then
AdjustForm.Left := Registry.ReadInteger('Left');
if Registry.ValueExists('Top') then
AdjustForm.Top := Registry.ReadInteger('Top');
end;
Registry.CloseKey;
finally
Registry.Free;
end;
end;
procedure TAdjustForm.mnuLowQualityClick(Sender: TObject);
begin
mnuLowQuality.Checked := True;
PreviewDensity := prevLowQuality;
AdjustPrevQual := 0;
DrawPreview;
end;
procedure TAdjustForm.mnuMediumQualityClick(Sender: TObject);
begin
mnuMediumQuality.Checked := True;
PreviewDensity := prevMediumQuality;
AdjustPrevQual := 1;
DrawPreview;
end;
procedure TAdjustForm.mnuHighQualityClick(Sender: TObject);
begin
mnuHighQuality.Checked := True;
PreviewDensity := prevHighQuality;
AdjustPrevQual := 2;
DrawPreview;
end;
procedure TAdjustForm.txtZoomKeyPress(Sender: TObject; var Key: Char);
var v: integer;
begin
if key = #13 then
begin
key := #0;
try
v := Trunc(StrToFloat(txtZoom.Text) * 100);
if v > scrollZoom.Max then v := scrollZoom.Max;
if v < scrollZoom.Min then v := scrollZoom.Min;
if v <> ScrollZoom.Position then begin
ScrollZoom.Position := v;
UpdateFlame;
end;
except on EConvertError do
end;
end;
end;
procedure TAdjustForm.txtZoomExit(Sender: TObject);
var
v: integer;
begin
try
v := Trunc(StrToFloat(txtZoom.Text) * 100);
if v > scrollZoom.Max then v := scrollZoom.Max;
if v < scrollZoom.Min then v := scrollZoom.Min;
if v <> ScrollZoom.Position then begin
ScrollZoom.Position := v;
UpdateFlame;
end;
except on EConvertError do
txtZoom.Text := FloatToStr(cp.zoom)
end;
end;
procedure TAdjustForm.txtCenterXKeyPress(Sender: TObject; var Key: Char);
var
v: integer;
begin
if key = #13 then
begin
key := #0;
try
v := Trunc(StrToFloat(txtCenterX.Text) * 100);
if v > scrollCenterX.Max then v := scrollCenterX.Max;
if v < scrollCenterX.Min then v := scrollCenterX.Min;
ScrollCenterX.Position := v;
except on EConvertError do
end;
end;
end;
procedure TAdjustForm.txtCenterXExit(Sender: TObject);
var
v: integer;
begin
try
v := Trunc(StrToFloat(txtCenterX.Text) * 100);
if v > scrollCenterX.Max then v := scrollCenterX.Max;
if v < scrollCenterX.Min then v := scrollCenterX.Min;
ScrollCenterX.Position := v;
UpdateFlame;
except on EConvertError do
txtCenterX.Text := FloatToStr(cp.center[0]);
end;
end;
procedure TAdjustForm.txtCenterYKeyPress(Sender: TObject; var Key: Char);
var
v: integer;
begin
if key = #13 then
begin
key := #0;
try
v := Trunc(StrToFloat(txtCenterY.Text) * 100);
if v > ScrollCenterY.Max then v := ScrollCenterY.Max;
if v < ScrollCenterY.Min then v := ScrollCenterY.Min;
ScrollCenterY.Position := v;
UpdateFlame;
except on EConvertError do
end;
end;
end;
procedure TAdjustForm.txtCenterYExit(Sender: TObject);
var
v: integer;
begin
try
v := Trunc(StrToFloat(txtCenterY.Text) * 100);
if v > ScrollCenterY.Max then v := ScrollCenterY.Max;
if v < ScrollCenterY.Min then v := ScrollCenterY.Min;
ScrollCenterY.Position := v;
UpdateFlame;
except on EConvertError do
txtCenterY.Text := FloatToStr(cp.center[1]);
end;
end;
procedure TAdjustForm.txtGammaExit(Sender: TObject);
var
v: integer;
begin
try
v := Trunc(StrToFloat(txtGamma.Text) * 100);
if v > scrollGamma.Max then v := scrollGamma.Max;
if v < scrollGamma.Min then v := scrollGamma.Min;
ScrollGamma.Position := v;
UpdateFlame;
except on EConvertError do
txtGamma.Text := FloatToStr(cp.gamma);
end;
end;
procedure TAdjustForm.txtGammaKeyPress(Sender: TObject; var Key: Char);
var
v: integer;
begin
if key = #13 then
begin
key := #0;
try
v := Trunc(StrToFloat(txtGamma.Text) * 100);
if v > scrollGamma.Max then v := scrollGamma.Max;
if v < scrollGamma.Min then v := scrollGamma.Min;
ScrollGamma.Position := v;
UpdateFlame;
except on EConvertError do
end;
end;
end;
procedure TAdjustForm.txtBrightnessExit(Sender: TObject);
var
v: integer;
begin
try
v := Trunc(StrToFloat(txtBrightness.Text) * 100);
if v > scrollBrightness.Max then v := scrollBrightness.Max;
if v < scrollBrightness.Min then v := scrollBrightness.Min;
ScrollBrightness.Position := v;
UpdateFlame;
except on EConvertError do
txtBrightness.Text := FloatToStr(cp.brightness);
end;
end;
procedure TAdjustForm.txtBrightnessKeyPress(Sender: TObject;
var Key: Char);
var
v: integer;
begin
if key = #13 then
begin
key := #0;
try
v := Trunc(StrToFloat(txtBrightness.Text) * 100);
if v > scrollBrightness.Max then v := scrollBrightness.Max;
if v < scrollBrightness.Min then v := scrollBrightness.Min;
ScrollBrightness.Position := v;
UpdateFlame;
except on EConvertError do
end;
end;
end;
procedure TAdjustForm.txtVibrancyKeyPress(Sender: TObject; var Key: Char);
var
v: integer;
begin
if key = #13 then
begin
key := #0;
try
v := Trunc(StrToFloat(txtVibrancy.Text) * 100);
if v > scrollVibrancy.Max then v := scrollVibrancy.Max;
if v < scrollVibrancy.Min then v := scrollVibrancy.Min;
ScrollVibrancy.Position := v;
UpdateFlame;
except on EConvertError do
end;
end;
end;
procedure TAdjustForm.txtVibrancyExit(Sender: TObject);
var
v: integer;
begin
try
v := Trunc(StrToFloat(txtVibrancy.Text) * 100);
if v > scrollVibrancy.Max then v := scrollVibrancy.Max;
if v < scrollVibrancy.Min then v := scrollVibrancy.Min;
ScrollVibrancy.Position := v;
UpdateFlame;
except on EConvertError do
txtVibrancy.Text := FloatToStr(cp.Vibrancy);
end;
end;
procedure TAdjustForm.scrollZoomScroll(Sender: TObject;
ScrollCode: TScrollCode; var ScrollPos: Integer);
begin
if ScrollCode = scEndScroll then UpdateFlame;
end;
procedure TAdjustForm.scrollCenterXScroll(Sender: TObject;
ScrollCode: TScrollCode; var ScrollPos: Integer);
begin
if ScrollCode = scEndScroll then UpdateFlame;
end;
procedure TAdjustForm.scrollCenterYScroll(Sender: TObject;
ScrollCode: TScrollCode; var ScrollPos: Integer);
begin
if ScrollCode = scEndScroll then UpdateFlame;
end;
procedure TAdjustForm.scrollGammaScroll(Sender: TObject;
ScrollCode: TScrollCode; var ScrollPos: Integer);
begin
if ScrollCode = scEndScroll then UpdateFlame;
end;
procedure TAdjustForm.scrollBrightnessScroll(Sender: TObject;
ScrollCode: TScrollCode; var ScrollPos: Integer);
begin
if ScrollCode = scEndScroll then UpdateFlame;
end;
procedure TAdjustForm.scrollVibrancyScroll(Sender: TObject;
ScrollCode: TScrollCode; var ScrollPos: Integer);
begin
if ScrollCode = scEndScroll then UpdateFlame;
end;
procedure TAdjustForm.scrollVibrancyChange(Sender: TObject);
begin
cp.Vibrancy := ScrollVibrancy.Position / 100;
txtVibrancy.text := FloatToStr(cp.Vibrancy);
DrawPreview;
end;
procedure TAdjustForm.scrollGammaChange(Sender: TObject);
begin
cp.Gamma := scrollGamma.Position / 100;
txtGamma.text := FloatToStr(cp.Gamma);
DrawPreview;
end;
procedure TAdjustForm.scrollBrightnessChange(Sender: TObject);
begin
cp.Brightness := ScrollBrightness.Position / 100;
txtBrightness.text := FloatToStr(cp.Brightness);
DrawPreview;
end;
procedure TAdjustForm.scrollZoomChange(Sender: TObject);
begin
cp.zoom := scrollZoom.Position / 100;
txtZoom.text := FloatToStr(cp.zoom);
DrawPreview;
end;
procedure TAdjustForm.scrollCenterXChange(Sender: TObject);
begin
cp.center[0] := scrollCenterX.Position / 100;
txtCenterX.text := FloatToStr(cp.center[0]);
DrawPreview;
end;
procedure TAdjustForm.scrollCenterYChange(Sender: TObject);
begin
cp.center[1] := scrollCenterY.Position / 100;
txtCentery.text := FloatToStr(cp.center[1]);
DrawPreview;
end;
procedure TAdjustForm.ColorPanelClick(Sender: TObject);
var
col: Longint;
begin
ColorDialog.Color := COlorPanel.Color;
if ColorDialog.Execute then
begin
ColorPanel.Color := ColorDialog.Color;
col := ColorToRGB(ColorDialog.Color);
cp.background[0] := col and 255;
cp.background[1] := col shr 8 and 255;
cp.background[2] := col shr 16 and 255;
DrawPreview;
UpdateFlame;
end;
end;
procedure TAdjustForm.scrollContrastScroll(Sender: TObject;
ScrollCode: TScrollCode; var ScrollPos: Integer);
begin
if ScrollCode = scEndScroll then UpdateFlame;
end;
end.

View File

@ -1,878 +0,0 @@
object GradientBrowser: TGradientBrowser
Left = 494
Top = 299
Width = 380
Height = 188
BorderIcons = [biSystemMenu, biMinimize]
Caption = 'Gradient Browser'
Color = clBtnFace
Constraints.MinHeight = 120
Constraints.MinWidth = 380
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
Icon.Data = {
0000010001001010000000000000680300001600000028000000100000002000
0000010018000000000040030000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000FFF5F0FFF1E9FFEFE6FFEFE6FFF0E7FFF1E8FFF1E9FFF3EBFFF3ECFF
F4EDFFF6F0000000000000000000000000000000FFF4EDFFEEE4FFEBDFFFEBDF
FFEBE0FFECE2FFEDE2FFEEE4FFEFE5FFEFE6FFF1EA0000000000000000000000
00000000FFF1E9CD5208CD5208CD5208CD5208CD5208CD5208CD5208CD5208CD
5208FFEDE3000000000000000000000000000000FFEFE6CD5208E26518EB7A37
FFA772FFD1B2FFF7EDC2E9FF42ADF7CD5208FFE9DC0000000000000000000000
00000000FFEDE2CD5208E16519E97835FFA770FFD1B2FFF7ECC2E9FF40ADF7CD
5208FFE5D6000000000000000000000000000000FFEBDFCD5208E16518EB7836
FFA770FFD1B2FFF7ECC2E9FF42ADF7CD5208FFE1D00000000000000000000000
00000000FFE9DBCD5208E16519EC7935FFA770FFD0B2FFF7ECC2E9FF40AEF7CD
5208FFDFCD000000000000000000000000000000FFE7D8CD5208E16519EB7935
FFA570FFD1B2FFF7ECC2E9FF40ADF7CD5208FFE1D00000000000000000000000
00000000FFE4D5CD5208E3651AEB7A39FFA874FFD1B3FFF7ECC4E9FF44AEF7CD
5208FFE9DC000000000000000000000000000000FFE3D1CD5208ED7935F99457
FFBC8DFFE1C5FFFFF90000000000000000000000000000000000000000000000
00000000FFE1CFCD5208CD5208CD5208CD5208CD5208CD5208000000E17D41EB
925E000000000000000000000000000000000000FFE2D1FFD7BFFFD0B4FFCEB1
FFCFB3FFD0B4FFD3B8000000F5A7790000000000000000000000000000000000
00000000FFE7DAFFE2D0FFDECBFFDECAFFDDC9FFDECAFFDFCD00000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000FFFF
0000800300008003000080030000800300008003000080030000800300008003
000080030000800300008003000080070000800F0000801F0000803F0000}
OldCreateOrder = False
Position = poDefaultPosOnly
OnClose = FormClose
OnCreate = FormCreate
OnDestroy = FormDestroy
OnShow = FormShow
PixelsPerInch = 96
TextHeight = 13
object RightPanel: TPanel
Left = 0
Top = 4
Width = 372
Height = 106
Align = alClient
BevelOuter = bvNone
TabOrder = 0
object ListView: TListView
Left = 0
Top = 0
Width = 372
Height = 106
Align = alClient
Columns = <
item
Caption = 'Title'
Width = 150
end>
HideSelection = False
LargeImages = LargeImages
ReadOnly = True
RowSelect = True
PopupMenu = PopupMenu
SmallImages = SmallImages
SortType = stText
TabOrder = 0
ViewStyle = vsList
OnChange = ListViewChange
OnDblClick = SpeedButton1Click
OnEdited = ListViewEdited
OnKeyPress = ListViewKeyPress
end
end
object pnlMain: TPanel
Left = 0
Top = 0
Width = 372
Height = 4
Align = alTop
BevelOuter = bvNone
TabOrder = 1
end
object pnlControls: TPanel
Left = 0
Top = 110
Width = 372
Height = 51
Align = alBottom
BevelOuter = bvNone
TabOrder = 2
object btnDefGradient: TSpeedButton
Left = 333
Top = 14
Width = 23
Height = 22
Hint = 'Open...'
Flat = True
Font.Charset = ANSI_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = 'Arial'
Font.Style = [fsBold]
Glyph.Data = {
36030000424D3603000000000000360000002800000010000000100000000100
18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF
FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
FFFF00FFFF00FFFF00FF00000000000000000000000000000000000000000000
0000000000000000000000FF00FFFF00FFFF00FFFF00FFFF00FF000000000000
9FCFFF9FCFFF9FCFFF9FCFFF9FCFFF9FCFFF9FCFFF9FCFFF9FCFFF000000FF00
FFFF00FFFF00FFFF00FF0000009FFFFF0000009FCFFF9FCFFF9FCFFF9FCFFF9F
CFFF9FCFFF9FCFFF9FCFFF9FCFFF000000FF00FFFF00FFFF00FF0000009FFFFF
9FFFFF0000009FCFFF9FCFFF9FCFFF9FCFFF9FCFFF9FCFFF9FCFFF9FCFFF9FCF
FF000000FF00FFFF00FF0000009FFFFF9FFFFF9FFFFF0000009FCFFF9FCFFF9F
CFFF9FCFFF9FCFFF9FCFFF9FCFFF9FCFFF9FCFFF000000FF00FF0000009FFFFF
9FFFFF9FFFFF9FFFFF0000000000000000000000000000000000000000000000
00000000000000FF00FF0000009FFFFF9FFFFF9FFFFF9FFFFF9FFFFF9FFFFF9F
FFFF9FFFFF9FFFFF000000FF00FFFF00FFFF00FFFF00FFFF00FF0000009FFFFF
9FFFFF9FFFFF9FFFFF9FFFFF9FFFFF9FFFFF9FFFFF9FFFFF000000FF00FFFF00
FFFF00FFFF00FFFF00FF0000009FFFFF9FFFFF9FFFFF00000000000000000000
0000000000000000000000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF000000
000000000000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF0000
00000000000000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
00FFFF00FFFF00FFFF00FFFF00FFFF00FF000000000000FF00FFFF00FFFF00FF
FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF0C0C0CFF00FFFF00FFFF00FF0000
00FF00FF000000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
00FFFF00FF0B0B0B020202000000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
ParentFont = False
ParentShowHint = False
ShowHint = True
OnClick = btnDefGradientClick
end
object btnCancel: TButton
Left = 405
Top = 97
Width = 75
Height = 25
Caption = 'Cancel'
ModalResult = 2
TabOrder = 0
end
object pnlPreview: TPanel
Left = 0
Top = 6
Width = 325
Height = 40
BevelOuter = bvLowered
TabOrder = 1
object Image: TImage
Left = 1
Top = 1
Width = 323
Height = 38
Align = alClient
Stretch = True
end
end
end
object SmallImages: TImageList
Left = 8
Top = 16
Bitmap = {
494C010101000400040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
0000000000003600000028000000400000001000000001002000000000000010
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00808080008080
8000808080008080800080808000FFFFFF000000000000808000008080000080
8000000000007F7F7F0000000000000000007F7F7F0000000000000000007F7F
7F000000000000000000BBCCD500BBCCD5000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000007F7F
7F0000000000000000007F7F7F00000000000080800000808000000000000000
0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFF5F000FFF1
E900FFEFE600FFEFE600FFF0E700FFF1E800FFF1E900FFF3EB00FFF3EC00FFF4
ED00FFF6F0000000000000000000000000000000000000808000008080000080
8000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFF4ED00FFEE
E400FFEBDF00FFEBDF00FFEBE000FFECE200FFEDE200FFEEE400FFEFE500FFEF
E600FFF1EA00000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFF1E900CD52
0800CD520800CD520800CD520800CD520800CD520800CD520800CD520800CD52
0800FFEDE300000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00FFFFFF00000000007F7F
7F000000000000000000BBCCD500BBCCD5000000000000000000FFEFE600CD52
0800E2651800EB7A3700FFA77200FFD1B200FFF7ED00C2E9FF0042ADF700CD52
0800FFE9DC00000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFEDE200CD52
0800E1651900E9783500FFA77000FFD1B200FFF7EC00C2E9FF0040ADF700CD52
0800FFE5D6000000000000000000000000000000000000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000688DA200688D
A200688DA200688DA200688DA200688DA200FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFEBDF00CD52
0800E1651800EB783600FFA77000FFD1B200FFF7EC00C2E9FF0042ADF700CD52
0800FFE1D000000000000000000000000000FFF1EA0000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF0000000000FFF5F000FFF1E900FFEFE600FFEFE600FFF0E700FFF1
E800FFF1E900FFF3EB00FFF3EC00FFF4ED00FFF6F00000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
0000000000000000000000000000000000000000000000000000FFE9DB00CD52
0800E1651900EC793500FFA77000FFD0B200FFF7EC00C2E9FF0040AEF700CD52
0800FFDFCD00000000000000000000000000FFE9DC0000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF0000000000FFF1E900CD520800CD520800CD520800CD520800CD52
0800CD520800CD520800CD520800CD520800FFEDE30000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00688DA200688DA200688D
A200688DA200688DA200688DA200688DA2000000000000000000FFE7D800CD52
0800E1651900EB793500FFA57000FFD1B200FFF7EC00C2E9FF0040ADF700CD52
0800FFE1D000000000000000000000000000FFE1D00000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00FFFFFF00FFFFFF00688D
A200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF0000000000FFEDE200CD520800E1651900E9783500FFA77000FFD1
B200FFF7EC00C2E9FF0040ADF700CD520800FFE5D60000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00BBCCD500000000000000
0000000000000000000000000000000000000000000000000000FFE4D500CD52
0800E3651A00EB7A3900FFA87400FFD1B300FFF7EC00C4E9FF0044AEF700CD52
0800FFE9DC00000000000000000000000000FFE1D00000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF0000000000FFE9DB00CD520800E1651900EC793500FFA77000FFD0
B200FFF7EC00C2E9FF0040AEF700CD520800FFDFCD0000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD5000000000000000000FFE3D100CD52
0800ED793500F9945700FFBC8D00FFE1C500FFFFF90000000000000000000000
0000000000000000000000000000000000000000000000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00FFFFFF00FFFFFF00688D
A200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF0000000000FFE4D500CD520800E3651A00EB7A3900FFA87400FFD1
B300FFF7EC00C4E9FF0044AEF700CD520800FFE9DC0000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD5000000000000000000FFE1CF00CD52
0800CD520800CD520800CD520800CD520800CD52080000000000E17D4100EB92
5E0000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF0000000000FFE1CF00CD520800CD520800CD520800CD520800CD52
0800CD52080000000000E17D4100EB925E0000000000FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00BBCCD500BBCCD5000000000000000000FFE2D100FFD7
BF00FFD0B400FFCEB100FFCFB300FFD0B400FFD3B80000000000F5A779000000
000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF0000000000FFE7DA00FFE2D000FFDECB00FFDECA00FFDDC900FFDE
CA00FFDFCD000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFE7DA00FFE2
D000FFDECB00FFDECA00FFDDC900FFDECA00FFDFCD0000000000000000000000
000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00BBCCD500BBCCD500424D3E000000000000003E000000
2800000040000000100000000100010000000000800000000000000000000000
000000000000000000000000FFFFFF00FFFFCD00000000008003C900FFDECA00
8003CB00FFDECA008003DA00FFE2D0008003EA00000000008003EA00DDE6EA00
8003EA00DDE6EA008003EA00DDE6EA0080030000000000008003000000000000
800300000000000080030000000000008007EA0000000000800F000000000000
801F000020000000803F8F1F0000000000000000000000000000000000000000
000000000000}
end
object PopupMenu: TPopupMenu
Left = 40
Top = 16
object DeleteItem: TMenuItem
Caption = 'Delete'
ShortCut = 16430
OnClick = DeleteItemClick
end
object RenameItem: TMenuItem
Caption = 'Rename'
ShortCut = 113
OnClick = RenameItemClick
end
end
object OpenDialog: TOpenDialog
DefaultExt = 'ugr'
Filter = 'Gradient files (*.ugr)|*.ugr|Fractint map files (*.map)|*.map'
Left = 72
Top = 16
end
object LargeImages: TImageList
Height = 32
Width = 32
Left = 104
Top = 16
Bitmap = {
494C010101000400040020002000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
0000000000003600000028000000800000002000000001002000000000000040
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000DDE6EA00DDE6EA0000000000FDEB
E000FDE2D300FCCFB300B3644B00C06D5300BB695000BC6A4F00BC6A5100BC6A
5100A35B4500B9886F00FCC8A800FCC9AA00FCCAAC00FCD0B600FDD6BC00FDD9
C100FEDFCC0000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA0000000000FDEB
E000FDE2D300FCCFB300FBC8AA00FAC6A500FAC5A400FBC5A400FBC5A400FBC6
A500FBC7A600FBC7A600FCC8A800FCC9AA00FCCAAC00FCD0B600FDD6BC00FDD9
C100FEDFCC0000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA0000000000F4DA
CA00F2D2BD00ECBC9F00EAB59400E9B29000E8AF8D00E9AF8D00E9B08C00E9AF
8D00E8AF8D00E9B08D00E8B08D00E8B18E00EAB28F00EAB79900EDBDA000EDC1
A600F0C8B00000000000DDE6EA00DDE6EA0023232300BAEBFF00B3EAFF00B0E8
FF00ACE7FF00A8E6FF00A5E6FF00A4E4FF009FE1FF009DE1FF009BE2FF0097E0
FF0095DFFF0092DDFF008FDDFF008DDDFF008BDBFF0087D9FF0084D8FF0083D8
FF007ED6FF007ED3FF0078D1FF00262626000000000000000000000000000000
0000FFFEFB00FFFEFA00FFFEF800FFFEF700FFFDF700FFFDF600FFFEF600FFFE
F700FFFFF700FFFFF800FFFFF900FFFFF900FFFFFA00FFFFFA00FFFFFB00FFFF
FC00FFFFFC00FFFFFC00FFFFFD00FFFFFE000000000000000000000000000000
000000000000000000000000000000000000E7A88300EBB69600EDC1A700F0C9
B300F3D4C10000000000DDE6EA00DDE6EA002323230023232300232323002323
2300232323002323230023232300232323002323230023232300232323002323
2300232323002323230023232300232323002323230023232300232323002323
2300232323002323230023232300DDE6EA00DDE6EA00DDE6EA0000000000FDEA
DF00FCE1D000FBCCB000ED886800F38C6B00E8856500E9856600E9856600EB86
6600D97C5F00DCA18300FBC5A400FBC7A700FBC9AA00FCD3B800FDDAC400FDDF
CD00FEE7D80000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA0000000000FDEA
DF00FCE1D000FBCCB000FAC6A700F9C3A200FAC19F00FAC2A000FBC3A100FBC3
A300FAC4A300FBC4A300FBC5A400FBC7A700FBC9AA00FCD3B800FDDAC400FDDF
CD00FEE7D80000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA0000000000F4D7
C600F1CDB800EBB69600E8AE8C00E7AB8600E7A98200E6A88300E7A98300E7A8
8300E6A98200E7A88300E7A98300E7AA86000000000000000000000000000000
0000FFFDFA00FFFCF800FFFBF500FFFBF400FFFBF300FFFAF200FFFBF300FFFB
F300FFFCF400FFFCF400FFFDF500FFFEF500FFFDF500FFFEF600FFFEF600FFFF
F700FFFFF800FFFFF800FFFFF900FFFFF900FFFFFA00FFFFFB00FFFFFC00FFFF
FC0000000000000000000000000000000000F9BE9D00F8BF9E00F9C09E00F9C0
9F00F9C19F00F9C1A000F9C2A200F9C5A500F9C8AB00F9833C00FF985A00FFAC
770000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA0000000000F1CF
BB00EEC5AB00E8AA8500E6A37B00E49F7400E39B7000E39C7100E49B7000E39C
7100E39C7100E39B7000E39C7200E49F7500E5A37A00F9833C00FF985A00FFAC
770000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00BAEEFC00B7ED
FD00B6ECFC00B2E9FB00B0E8FC00ADE8FB00AAE7FC00A7E6FC00A6E5FC003740
4500DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA0000000000FDE9
DE00FCE0CF00FACAAD00FAC3A400F9C09E00F9BF9C00F9C09D00F9C09D00FAC1
A000FAC1A000F9C1A100FAC3A200FAC5A500FBC7A900FCD4BC00FDDDCA00FDE4
D500FEECE20000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA0000000000FDE9
DE00FCE0CF00FACAAD00FAC3A400F9C09E000000000000000000000000000000
0000FFFCF800FFFBF600FFFAF200FFF9F000FFF8EF00FFF7EE00FFF9EE00FFF9
EF00FFF9EF00FFF9F000FFFAF000FFFAF200FFFBF200FFFCF300FFFCF300FFFC
F400FFFCF400FFFDF500FFFEF500FFFFF600FFFFF700FFFFF700FFFFF700FFFF
FA0000000000000000000000000000000000DDE6EA00DDE6EA0000000000FCEA
DF00FBE2D200F9CEB400F8C8AB00F9C6A700F9C5A500F9C5A500F9C6A500F8C6
A700F9C6A800F9C6A700F9C8A900FAC9AC00FACDB100FF9F6400FFB38100FFC8
9F00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA0000000000FCEA
DF00FBE2D200F9CEB400F8C8AB00F9C6A700F9C5A500F9C5A500F9C6A500F8C6
A700F9C6A800F9C6A700F9C8A900FAC9AC00FACDB100FF9F6400FFB38100FFC8
9F00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA0000000000F1CE
B900EEC4AB00E7AC8800E5A57F00E4A17900E49F7600E49F7600E49F7500E59F
7600E49F7700E49F7600E49F7700E5A17900E5A57E00FF9F6400FFB38100FFC8
9F00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA0023232300C1F1
FD00BFEFFD00BAEEFC00B9EDFC00B6ECFC00B2EAFB00AFE9FB00ADE8FB00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA000000000000000000000000000000
0000FFFBF700FFFAF300FFF8EF00FFF6EC00FFF6EB00FFF5EB00FFF5EA00FFF6
EB00FFF6EB00FFF7EB00FFF7ED00FFF8ED00FFF8EE00FFF9EE00FFF9F000FFFA
F000FFFAF000FFFAF200FFFBF200FFFBF200FFFCF300FFFCF300FFFDF400FFFD
F60000000000000000000000000000000000EEC3A90000000000DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA0000000000FDEB
E200FCE5D700FAD5BF00F9D1B800F9CEB400F9CDB300F9CDB300F9CEB300F9CF
B500F9CFB500FACFB500F9D0B600FAD1B800FAD4BC00FFBA8B00FFCFA9000000
0000DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA0000000000FDEB
E200FCE5D700FAD5BF00F9D1B800F9CEB400F9CDB300F9CDB300F9CEB300F9CF
B500F9CFB500FACFB500F9D0B600FAD1B800FAD4BC00FFBA8B00FFCFA9000000
0000DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA0000000000F1CE
B900EEC6AE00E9B29200E7AD8800E6A98400E6A78100E7A88100E6A78100E7A7
8200E7A78200E6A78200E6A78200E6A984000000000000000000000000000000
0000FFFAF600FFF8F200FFF6ED00FFF4E900FFF4E600FFF3E600FFF3E600FFF4
E700FFF4E700FFF5E800FFF5E800FFF5E900FFF5E900FFF5EB00FFF6EB00FFF7
EB00FFF7EC00FFF8ED00FFF8EE00FFF8EE00FFF9EF00FFF9F000FFFAF000FFFA
F200000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000DDE6EA00DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000DDE6EA00DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA0000000000FDF1
E900FDEEE500FCE8DC00FCE6D900FCE5D800FCE5D700FCE5D700FCE5D700FCE6
D800FCE6D800FCE6D900FCE6D900FCE7DA00FCE8DC0000000000DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA0000000000FDF1
E900FDEEE500FCE8DC00FCE6D900FCE5D8000000000000000000000000000000
0000FFFAF400FFF7F000FFF4EA00FFF2E600FFF1E300FFF0E200FFF0E200FFF1
E200FFF2E300FFF2E400FFF2E500FFF3E500FFF3E500FFF4E600FFF5E700FFF4
E700FFF5E800FFF5E900FFF5E900FFF5EA00FFF5EA00FFF6EB00FFF7ED00FFF8
EF0000000000000000000000000000000000DDE6EA00DDE6EA00000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA00000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000DDE6EA00DDE6EA00000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000DDE6EA00DDE6EA000000000000000000000000000000
0000FFF9F300FFF6EE00FFF2E800FFF0E300FFEEE000FFEEDF00FFEEDE00FFEE
DF00FFEEE000FFEFE000FFEFE000FFEFE100FFF0E100FFF1E200FFF1E200FFF2
E400FFF2E400FFF2E400FFF3E600FFF3E600FFF4E600FFF5E700FFF5E900FFF6
EB0000000000000000000000000000000000FFFFF000FFFFF200FFFFF200FFFF
F400FFFFF500FFFFF500FFFFF60000000000DDE6EA00DDE6EA0000000000FFFC
F800FFFBF600FFF9F000FFF8EF00FFF7EE00FFF9EF00FFF9EF00FFF9F000FFFA
F200FFFBF200FFFCF300FFFCF400FFFCF400FFFDF500FFFFF600FFFFF700FFFF
F700FFFFFA0000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA0000000000FFFD
FA00FFFCF800FFFBF400FFFBF300FFFAF200FFFBF300FFFCF400FFFCF400FFFE
F500FFFDF500FFFEF600FFFFF700FFFFF800FFFFF800FFFFF900FFFFFA00FFFF
FB00FFFFFC0000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA0000000000FFFD
FA00FFFCF800FFFBF400FFFBF300FFFAF200FFFBF300FFFCF400FFFCF400FFFE
F500FFFDF500FFFEF600FFFFF700FFFFF800FFFFF800FFFFF900FFFFFA00FFFF
FB00FFFFFC0000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00FFFFF800FFFEF600FFFFF400FFFF
F200FFFFF300FFFFF300FFFFF400FFFFF4000000000000000000000000000000
0000FFF8F200FFF5EC00FFF0E500FFEDDF00CD520800CD520800CD520800CD52
0800CD520800CD520800CD520800CD520800CD520800CD520800CD520800CD52
0800CD520800CD520800CD520800CD520800FFF1E300FFF2E300FFF2E400FFF3
E60000000000000000000000000000000000DDE6EA00DDE6EA00DDE6EA000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA000000000000000000000000000000
0000FFF7F100FFF3EA00FFEEE300FFECDD00CD520800DA804A00DC7E4400E285
4C00EB956200F5AA7D00FEBE9700FFCCB000FFDCC800FFEFE300F7F8F800CEEA
FD0092CEF70060B8F3003CA3F000CD520800FFEEDF00FFEEDF00FFF0E100FFF0
E30000000000000000000000000000000000DDE6EA00DDE6EA00DDE6EA000000
0000FFFEFB00FFFEFA00FFFEF800FFFEF700FFFDF700FFFDF600FFFEF600FFFE
F700FFFFF700FFFFF800FFFFF900FFFFF900FFFFFA00FFFFFA00FFFFFB00FFFF
FC00FFFFFC00FFFFFC00FFFFFD00FFFFFE00DDE6EA00DDE6EA00DDE6EA00DDE6
EA0000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA000000
0000BADDF900ABD5F80097CBF60089C4F5007EBFF40077BCF30076BBF30075BA
F30074BAF30075BAF20075BAF30075BAF30074BAF40075BBF40075BAF40074BB
F40074BAF40075BBF40075BAF40074BBF40074BBF40076BBF40078BCF4007EBF
F50000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA000000000000000000000000000000
0000FFF6EF00FFF1E900FFECDF00FFE9D900CD520800DD855200DB7C4000E282
4800EA925E00F4A77900FDBC9400FFCCAE00FFDCC700FFEFE400F7F8F900CDEA
FD008FCDF7005CB5F30038A1F000CD520800FFEBDB00FFECDC00FFEDDD00FFEF
E00000000000000000000000000000000000BBCCD500BBCCD500DDE6EA000000
0000FFFDFA00FFFCF800FFFBF500FFFBF400FFFBF300FFFAF200FFFBF300FFFB
F300FFFCF400FFFCF400FFFDF500FFFEF500FFFDF500FFFEF600FFFEF600FFFF
F700FFFFF800FFFFF800FFFFF900FFFFF900FFFFFA00FFFFFB00FFFFFC00FFFF
FC0000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA000000
0000C1DFF900B2D8F9009FCFF70091C8F60087C3F40080C0F4007FBFF4007EBF
F3007DBFF4007DBFF3007EBFF3007DBFF3007EBFF3007EBFF3007DBFF4007EBF
F4007EBFF4007DBFF4007DBEF3007EBFF4007DBEF3007EBFF40080C0F50086C2
F60000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA00214F4A00214F4A00214F
4A00214F4A00214F4A00214F4A00214F4A00214F4A00214F4A00214F4A00214F
4A00214F4A00214F4A00214F4A00214F4A00214F4A00214F4A00214F4A00214F
4A00214F4A00214F4A00214F4A00214F4A00214F4A00214F4A00214F4A00214F
4A00214F4A00214F4A00214F4A00DDE6EA000000000000000000000000000000
0000FFF5EE00FFF1E700FFEADD00FFE7D600CD520800DC855000DB7B4100E180
4700EA905C00F4A67800FDBC9400FFCBAE00FFDBC700FFEFE300F7F8F800CDEA
FD008FCDF7005BB5F40037A1EF00CD520800FFE9D700FFE9D700FFEAD900FFEC
DC0000000000000000000000000000000000DDE6EA00DDE6EA00DDE6EA000000
0000FFFCF800FFFBF60000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00000000000000
0000FFF7F100FFF3EA00FFF3EA00FFEEE300FFEEE300FFECDD00FFECDD00CD52
0800CD520800FBE6DA00FBE6DA00FBDED100FBDED100FBD0B900FBD0B900FBD3
C000FBC4A300FBC4A300FBB99100FBB99100FBFAFB00FBFAFB00FBF6F600FBF6
F600FBE6DA00FBE6DA00FB996400FB996400FBA87B00FBA87B00FB823F00FBDC
CB00FBDCCB00F7C2A500F7C2A500CD520800CD520800FFEEDF00FFEEDF00FFEE
DF00FFEEDF00FFF0E100FFF0E100FFF0E300FFF0E30000000000DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00BBCCD500DDE6EA00BBCCD500BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500DDE6
EA00BBCCD500BBCCD500BBCCD500BBCCD5000000000000000000000000000000
0000FFF4ED00FFEFE500FFE9DB00FFE5D300CD520800DC855000DB7C4100E181
4800EA905C00F4A67800FDBC9400FFCCAE00FFDCC700FFEFE300F7F8F800CDEA
FD008FCDF7005BB5F30037A1EF00CD520800FFE5D300FFE6D400FFE7D500FFE9
D80000000000000000000000000000000000DDE6EA00DDE6EA00000000000000
0000FFF6EF00FFF1E900FFF1E900FFECDF00FFECDF00FFE9D900FFE9D900CD52
0800CD520800FEE6DB00FEE6DB00FEDBC800FEDBC800FED9C200FED9C200FED1
B700FEAF8100FEAF8100FEF9F800FEF9F800FEF3EE00FEF3EE00FEFEFE00FEFE
FE00FEAB7B00FEAB7B00FEAB7A00FEAB7A00FE975F00FE975F00FE9C6200FEF3
F100FEF3F100FBB08600FBB08600CD520800CD520800FFEBDB00FFEBDB00FFEC
DC00FFECDC00FFEDDD00FFEDDD00FFEFE000FFEFE00000000000DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00BBCCD500DDE6EA00BBCCD500BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500688DA200DDE6
EA00BBCCD500BBCCD500BBCCD500BBCCD500688DA200DDE6EA00688DA200DDE6
EA00688DA200DDE6EA00BBCCD500BBCCD500BBCCD500BBCCD500688DA200688D
A200688DA200688DA200BBCCD500DDE6EA000000000000000000000000000000
0000FFF3EC00FFEEE300FFE7D800FFE3D000CD520800DC855000DB7C4000E281
4800EA905C00F4A67800FEBC9400FFCCAE00FFDCC700FFEFE300F7F8F800CDEA
FD008FCDF7005CB5F30037A1EF00CD520800FFE3CF00FFE3CF00FFE5D100FFE6
D50000000000000000000000000000000000FEDBC800FED9C200FED9C200FED1
B700FEAF8100FEAF8100FEF9F800FEF9F800FEF3EE00FEF3EE00FEFEFE00FEFE
FE00FEAB7B00FEAB7B00FEAB7A00FEAB7A00FE975F00FE975F00FE9C6200FEF3
F100FEF3F100FBB08600FBB08600CD520800CD520800FFEBDB00FFEBDB00FFEC
DC00FFECDC00FFEDDD00FFEDDD00FFEFE000FFEFE00000000000DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00BBCCD500DDE6EA00BBCCD500BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500688DA200DDE6
EA00BBCCD500BBCCD500BBCCD500BBCCD500688DA200DDE6EA00688DA200DDE6
EA00688DA200DDE6EA00BBCCD500BBCCD500BBCCD500688DA200DDE6EA00BBCC
D500BBCCD500BBCCD500688DA200BBCCD500688DA200DDE6EA00BBCCD500BBCC
D500688DA200DDE6EA00688DA200DDE6EA00688DA200DDE6EA00BBCCD500BBCC
D500688DA200DDE6EA00688DA200DDE6EA000000000000000000000000000000
0000FFF2EA00FFEDE200FFE5D500FFE0CD00CD520800DC865100DB7C4000E281
4700EA905C00F4A67800FEBC9400FFCBAE00FFDCC700FFEFE300F7F8F800CDEA
FD008FCDF7005CB5F30036A1EF00CD520800FFE0CC00FFE0CC00FFE1CE00FFE3
D10000000000000000000000000000000000FE823900FE823900FEDAC200FED8
C300FED8C300FBA27300FBA27300CD520800CD520800FFE9D700FFE9D700FFE9
D700FFE9D700FFEAD900FFEAD900FFECDC00FFECDC0000000000DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00BBCCD500DDE6EA00BBCCD500BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500688DA200DDE6
EA00BBCCD500BBCCD500BBCCD500BBCCD500688DA200DDE6EA00688DA200DDE6
EA00688DA200DDE6EA00BBCCD500BBCCD500BBCCD500688DA200DDE6EA00BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500688DA200DDE6EA00BBCCD500BBCC
D500688DA200DDE6EA00688DA200DDE6EA00688DA200DDE6EA00BBCCD500BBCC
D500688DA200DDE6EA00688DA200DDE6EA00BBCCD500BBCCD500BBCCD50053C7
FF0051C6FF004FC5FF004CC4FF0049C4FF0047C2FF0044C1FF0042C0FF003FC0
FF003DBDFF003AB9FF0038B6FF00214F4A000000000000000000000000000000
0000FFF1E900FFEBDF00FFE3D200FFDEC900CD520800DC865100DB7B4100E281
4800EB915C00F5A67800FEBB9400FFCCAE00FFDCC700FFEFE400F7F8F900CDEA
FD008FCDF7005CB5F40036A1EF00CD520800FFDDC700FFDEC800FFDFCB00FFE2
CE0000000000000000000000000000000000FFE9D80000000000DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00BBCCD500DDE6EA00BBCCD500BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500688DA200DDE6
EA00DDE6EA00DDE6EA00DDE6EA00BBCCD500688DA200DDE6EA00688DA200DDE6
EA00688DA200DDE6EA00BBCCD500BBCCD500BBCCD500688DA200DDE6EA00BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500688DA200DDE6EA00BBCCD500BBCC
D500688DA200DDE6EA00688DA200DDE6EA00688DA200DDE6EA00BBCCD500BBCC
D500688DA200DDE6EA00688DA200DDE6EA00BBCCD500BBCCD500BBCCD5008BDB
FF0082D9FF007BD7FF0077D5FF0073D4FF0071D2FF006ED1FF006AD0FF0068CF
FF0065CFFF0063CDFF0061CDFF005FCCFF005DCAFF005AC9FF0058C9FF0055C8
FF0053C7FF0050C5FF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00DDE6EA00DDE6EA00DDE6EA00DDE6EA000000000000000000000000000000
0000FFF1E800FFEADE00FFE2D000FFDBC600CD520800DC855100DB7C4100E281
4800EB915C00F5A77800FDBC9400FFCBAE00FFDBC700FFEFE300F6F8F800CCEA
FD008FCDF7005BB6F30037A1EF00CD520800FFDBC300FFDBC400FFDDC700FFDF
CA0000000000000000000000000000000000BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500688DA200688D
A200688DA200688DA200BBCCD500BBCCD500688DA200DDE6EA00688DA200DDE6
EA00688DA200DDE6EA00BBCCD500BBCCD500BBCCD500688DA200DDE6EA00BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500688DA200BBCCD500DDE6EA00DDE6
EA00688DA200BBCCD500688DA200DDE6EA00688DA200BBCCD500DDE6EA00DDE6
EA00688DA200BBCCD500688DA200DDE6EA00DDE6EA00BBCCD500DDE6EA00D9EB
FA00D9EAF900D9EAFA00D9EAFA00D9EAFA00D9EBFA00D9EBFA00DAEBF900DBEC
FA0000000000DDE6EA00DDE6EA00DDE6EA00232323009FE2FF0098E0FF008DDD
FF0084D9FF007ED6FF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00000000000000
0000FFF4ED00FFEFE500FFEFE500FFE9DB00FFE9DB00FFE5D300FFE5D300CD52
0800CD520800FEE1CE00FEE1CE00FEE4D8000000000000000000000000000000
0000FFF0E700FFE9DC00FFE0CD00FED9C300CD520800DC855000DB7C4100E181
4700EA915C00F5A77800FEBB9400FFCCAE00FFDCC800FFEFE300F6F8F800CCEA
FD008FCDF7005BB5F30036A1EF00CD520800FFD7BF00FFD8C000FFDAC200FFDC
C70000000000000000000000000000000000688DA200BBCCD500688DA200DDE6
EA00688DA200DDE6EA00BBCCD500BBCCD500BBCCD500688DA200DDE6EA00BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500688DA200688DA200688D
A200BBCCD500BBCCD500688DA200DDE6EA00BBCCD500688DA200688DA200688D
A200BBCCD500BBCCD500688DA200688DA200BBCCD500688DA200BBCCD5000000
0000F4F9FE00F1F8FD00EFF5FC00EBF5FC00EAF3FA00EAF2FA00E9F2FA007478
7D003A3C3F003A3D3F003A3D3F003A3D3F003A3D3F003A3D3F003A3D3F003A3D
3F003A3D3F00E9F3FB0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00000000000000
0000FFF4ED00FFEFE500FFEFE500FFE9DB00FFE9DB00FFE5D300FFE5D300CD52
0800CD520800FEE1CE00FEE1CE00FEE4D800FEE4D800FEB89000FEB89000FECA
A900FEFEFE00FEFEFE00FEEBE100FEEBE100FEFDFE00FEFDFE00FEB78C00FEB7
8C00FEA16D00FEA16D00FE975C00FE975C000000000000000000000000000000
0000FFEFE500FFE8DA00FEDDCB00FDD7C000CD520800DD855100DB7B4000E181
4700EB915C00F5A67700FEBB9400FFCCAE00FFDBC700FFEFE400F6F8F900CCEA
FD008FCDF7005BB5F30036A1F000CD520800FFD5BB00FFD5BD00FFD8BF00FFDA
C20000000000000000000000000000000000BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500688DA200DDE6EA00BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500100F
0E0000000000CFBEB000FFEAD900FFEBDB00FFEBDB00FFECDC00FFEDDD00FFEF
E00000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA000000
0000FCFDFE00FBFCFE0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00000000000000
0000FFF3EC00FFEEE300FFEEE300FFE7D800FFE7D800FFE3D000FFE3D000CD52
0800CD520800FEE4D300FEE4D300FEE1D100FEE1D100FEA67500FEA67500FEF6
F100FEEFE900FEEFE900FEEBE200FEEBE200FEFBFA00FEFBFA00FE945900FE94
5900FEA97C00FEA97C00FE925000FE925000FEFEFE00FEFEFE00FEB98D00FEC3
A100FEC3A100FBBC9200FBBC9200CD520800CD520800FFE3CF00FFE3CF00FFE3
CF00FFE3CF00FFE5D100FFE5D100FFE6D5000000000000000000000000000000
0000FEEEE400FEE6D800FEDDC800FDD5BC00CD520800DD865200DB7C4200E183
4900EA925F00F4A77A00FDBD9500FFCCAE00FFDCC800FFEFE400F6F8F800CDEA
FD0090CDF7005DB6F30038A1F000CD520800FFD3B800FFD3BA00FFD6BC00FFD8
C00000000000000000000000000000000000BBCCD500BBCCD500BBCCD5000000
0000FFF5EE00FFF1E700FFEADD00FFE7D600FFE4D100FFE2CF00FFE2CE00FFE2
CF00CFB8A80040393400EFD6C300FFE5D100FFE5D200FFE5D200FFE5D300EFD8
C700403A3500BFADA00000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00000000000000
0000FFF3EC00FFEEE300FFEEE300FFE7D800FFE7D800FFE3D000FFE3D000CD52
0800CD520800FEE4D300FEE4D300FEE1D100FEE1D100FEA67500FEA67500FEF6
F100FEEFE900FEEFE900FEEBE200FEEBE200FEFBFA00FEFBFA00FE945900FE94
5900FEA97C00FEA97C00FE925000FE925000FEFEFE00FEFEFE00FEB98D00FEC3
A100FEC3A100FBBC9200FBBC9200CD520800CD520800FFE3CF00FFE3CF00FFE3
CF00FFE3CF00FFE5D100FFE5D100FFE6D500FFE6D50000000000DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00BBCCD500DDE6EA00BBCCD5000000000000000000000000000000
0000FEEDE200FEE5D600FDDBC500FDD3BA00CD520800DD885600DD804800E388
5000EB976600F5AB8100FDBF9B00FFCEB200FFDECB00FFF0E400F6F8F800CFEB
FD0096D0F70064B9F30041A6F000CD520800FED2B700FED3BB00FED5BD00FED8
C1000000000000000000000000000000000000000000FFFFFF00000000000000
0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00000000000000
0000FFF2EA00FFEDE200FFEDE200FFE5D500FFE5D500FFE0CD00FFE0CD00CD52
0800CD520800FEEADD00FEEADD00FEC7A700FEC7A700FEC09B00FEC09B00FEFB
FB00FEEAE000FEEAE000FEEFE700FEEFE700FEF0EB00FEF0EB00FE844100FE84
4100FEA97800FEA97800FEC8AA00FEC8AA00FEFAFA00FEFAFA00FEAF7F00FEBD
9A00FEBD9A00FBB07B00FBB07B00CD520800CD520800FFE0CC00FFE0CC00FFE0
CC00FFE0CC00FFE1CE00FFE1CE00FFE3D100FFE3D10000000000DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00BBCCD500DDE6EA00BBCCD500BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500688DA200DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA000000000000000000000000000000
0000FEECE100FDE3D500FCD9C300FCD1B500CD520800DE8A5700DF885400E593
6000EEA17400F8B38D00FEC6A500FFD3BA00FFE1D000FFF2E700F7F8F900D4ED
FE00A0D5F80073C0F50054B0F100CD520800FED2B800FDD4BC00FDD7C000FEDA
C50000000000000000000000000000000000DDE6EA00DDE6EA00000000000000
0000FFF2EA00FFEDE200FFEDE200FFE5D500FFE5D500FFE0CD00FFE0CD00CD52
0800CD520800FEEADD00FEEADD00FEC7A700FEC7A700FEC09B00FEC09B00FEFB
FB00FEEAE000FEEAE000FEEFE700FEEFE700FEF0EB00FEF0EB00FE844100FE84
4100FEA97800FEA97800FEC8AA00FEC8AA00FEFAFA00FEFAFA00FEAF7F00FEBD
9A00FEBD9A00FBB07B00FBB07B00CD520800CD520800FFE0CC00FFE0CC00FFE0
CC00FFE0CC00FFE1CE00FFE1CE00FFE3D100FFE3D10000000000DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00BBCCD500DDE6EA00BBCCD500BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500688DA200688D
A200688DA200688DA200688DA200BBCCD500688DA200BBCCD500688DA200BBCC
D500688DA200BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500688DA200688D
A200688DA200688DA200BBCCD500BBCCD5000000000000000000000000000000
0000FDEBE000FDE2D300FCD7C100FCCFB300CD520800E2966A00E3976800EA9F
7000F1B28D00F8C1A100FED0B400FFD9C500FFE5D700FFF4EC00F8F6F600DBEC
F600B2DAF5008DC6EE0073BCEF00CD520800FDD6BC00FDD9C100FDDCC700FEDF
CC0000000000000000000000000000000000FEB08600FEDFCB00FEDFCB00FEF7
F300FEE7DA00FEE7DA00FEF0EA00FEF0EA00FEEBE100FEEBE100FE813A00FE81
3A00FEAD7800FEAD7800FEE4D900FEE4D900FEE3DB00FEE3DB00FED1B000EFC5
B400EFC5B400E99B7300E99B7300CD520800CD520800FFDDC700FFDDC700FFDE
C800FFDEC800FFDFCB00FFDFCB00FFE2CE00FFE2CE0000000000DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00BBCCD500DDE6EA00BBCCD500BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD5000000000000000000000000000000
0000FDEADF00FCE1D000FBD5BE00FBCCB000CD520800CD520800CD520800CD52
0800CD520800CD520800CD520800CD520800CD520800CD520800CD520800CD52
0800CD520800CD520800CD520800CD520800FDDAC400FDDFCD00FDE3D300FEE7
D80000000000000000000000000000000000FEE3DB00FEE3DB00FED1B000EFC5
B400EFC5B400E99B7300E99B7300CD520800CD520800FFDDC700FFDDC700FFDE
C800FFDEC800FFDFCB00FFDFCB00FFE2CE00FFE2CE0000000000DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00BBCCD500DDE6EA00BBCCD500BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD5000000
0000000000000000000000000000000000005BCAFF0058C9FF0056C7FF0053C7
FF0051C4FF004DBFFF0049BBFF00214F4A000000000000000000000000000000
0000FDE9DE00FCE0CF00FAD4BB00FACAAD00FAC3A400F9C09E00F9BF9C00F9BF
9C00F9C09D00F9C09D00FAC09F00FAC1A000FAC1A000F9C1A100F9C2A100FAC3
A200FAC5A500FBC7A900FCCCB100FCD4BC00FDDDCA00FDE4D500FDE9DC00FEEC
E20000000000000000000000000000000000FFDFCA0000000000DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00BBCCD500DDE6EA00BBCCD500BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD5000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00DDE6EA00DDE6EA00DDE6EA00DDE6EA000000000000000000000000000000
0000FCE9DD00FBDFCD00FAD2BB00F9C9AB00F9C2A200F8BF9D00F8BE9A00F8BD
9A00F8BE9B00F8BE9C00F9BF9D00F8C09D00F9C09E00F9C09F00F9C09F00F9C2
A100FAC4A400FBC7A80000000000000000000000000000000000000000000000
000000000000000000000000000000000000BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500FFF7
EB00FFF7EC00FFF8ED00FFF8EE00FFF8EE00FFF9EF00FFF9F000FFFAF000FFFA
F20000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA000000
0000FFFBF700FFFAF30000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00000000000000
0000FFF1E800FFEADE00FFEADE00FFE2D000FFE2D000FFDBC600FFDBC600CD52
0800CD520800FEE9DD00FEE9DD00FEA56E000000000000000000000000000000
0000FDE9DD00FCE0CF00FAD4BC00F8CAAD00F8C4A400F8C09F00F8BF9D00F9BE
9D00F8BF9E00F9C09E00F9C09F00F9C09F00F9C19F00F9C1A000F9C1A000F9C2
A200F9C5A500F9C8AB0000000000F9833C00FF985A00FFAC7700FFC195000000
000000000000000000000000000000000000BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD5000000
0000FFF7F100FFF3EA00FFEEE300FFECDD00CD520800FBE6DA00FBDED100FBD0
B900FBD3C000FBC4A300FBB99100FBFAFB00FBF6F600FBE6DA00FB996400FBA8
7B00FB823F00FBDCCB0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00000000000000
0000FFF1E800FFEADE00FFEADE00FFE2D000FFE2D000FFDBC600FFDBC600CD52
0800CD520800FEE9DD00FEE9DD00FEA56E00FEA56E00FEE5D900FEE5D900FEF6
F500FEE4D400FEE4D400FEEBE400FEEBE400FEEEE400FEEEE400FE7A3200FE7A
3200FEAB7500FEAB7500FED1B800FED1B8000000000000000000000000000000
0000FCEADF00FBE2D200FAD6C100F9CEB400F8C8AB00F9C6A700F8C4A500F9C5
A500F9C5A500F9C6A500F8C6A600F8C6A700F9C6A800F9C6A700F9C6A800F9C8
A900FAC9AC00FACDB10000000000FF9F6400FFB38100FFC89F00000000000000
000000000000000000000000000000000000DDE6EA00DDE6EA00DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00FEFA
FA00FEAF7F00FEBD9A00FBB07B00CD520800FFE0CC00FFE0CC00FFE1CE00FFE3
D10000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA000000
0000FFF3EC00FFEEE30000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00000000000000
0000FFF0E700FFE9DC00FFE9DC00FFE0CD00FFE0CD00FED9C300FED9C300CD52
0800CD520800FEE4D600FEE4D600FEA16D00FEA16D00FEE9E100FEE9E100FEF6
F300FEEBDF00FEEBDF00FEF1EB00FEF1EB00FEF9FB00FEF9FB00FE824200FE82
4200FEA96F00FEA96F00FEBC8D00FEBC8D00FEFEFE00FEFEFE00FEFDFE00FEE2
D500FEE2D500FBDED200FBDED200CD520800CD520800FFD7BF00FFD7BF00FFD8
C000FFD8C000FFDAC200FFDAC200FFDCC7000000000000000000000000000000
0000FDEBE200FCE5D700FADCC900FAD5BF00F9D1B800F9CEB400F9CEB300F9CD
B300F9CDB300F9CEB300F9CEB400F9CFB500F9CFB500FACFB500FACFB500F9D0
B600FAD1B800FAD4BC0000000000FFBA8B00FFCFA90000000000000000000000
000000000000000000000000000000000000BBCCD500BBCCD500BBCCD5000000
0000FFEFE500FFE8DA00FEDDCB00FDD7C000CD520800FEE4D700FE9F6600FEE9
DD00FEF0E900FEE7DB00FEE7DF00FEFEFE00FEA37300FE8B3D00FEC69200FEE0
D600FDFEFE00FEE2D30000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00000000000000
0000FFF0E700FFE9DC00FFE9DC00FFE0CD00FFE0CD00FED9C300FED9C300CD52
0800CD520800FEE4D600FEE4D600FEA16D00FEA16D00FEE9E100FEE9E100FEF6
F300FEEBDF00FEEBDF00FEF1EB00FEF1EB00FEF9FB00FEF9FB00FE824200FE82
4200FEA96F00FEA96F00FEBC8D00FEBC8D00FEFEFE00FEFEFE00FEFDFE00FEE2
D500FEE2D500FBDED200FBDED200CD520800CD520800FFD7BF00FFD7BF00FFD8
C000FFD8C000FFDAC200FFDAC200FFDCC700FFDCC70000000000DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00BBCCD500DDE6EA00BBCCD5000000000000000000000000000000
0000FDEEE600FCEADF00FCE4D600FBE0CF00FBDDCB00FADBC800FADBC700FADB
C700FADBC800FADBC800FADBC800FADCC900FBDCC900FADCC900FADCC900FADC
CA00FBDDCB00FBE0CE0000000000FFD6B3000000000000000000000000000000
000000000000000000000000000000000000DDE6EA00DDE6EA00DDE6EA000000
0000FDEBE000FDE2D30000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00000000000000
0000FFEFE500FFE8DA00FFE8DA00FEDDCB00FEDDCB00FDD7C000FDD7C000CD52
0800CD520800FEE4D700FEE4D700FE9F6600FE9F6600FEE9DD00FEE9DD00FEF0
E900FEE7DB00FEE7DB00FEE7DF00FEE7DF00FEFEFE00FEFEFE00FEA37300FEA3
7300FE8B3D00FE8B3D00FEC69200FEC69200FEE0D600FEE0D600FDFEFE00FEE2
D300FEE2D300F1A98A00F1A98A00CD520800CD520800FFD5BB00FFD5BB00FFD5
BD00FFD5BD00FFD8BF00FFD8BF00FFDAC200FFDAC20000000000DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00BBCCD500DDE6EA00BBCCD500BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500688DA200BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD5000000000000000000000000000000
0000FDF1E900FDEEE500FCEAE000FCE8DC00FCE6D900FCE5D800FCE5D700FCE5
D700FCE5D700FCE5D700FCE5D800FCE6D800FCE6D800FCE6D900FCE6D900FCE6
D900FCE7DA00FCE8DC0000000000000000000000000000000000000000000000
000000000000000000000000000000000000DDE6EA00DDE6EA00000000000000
0000FFEFE500FFE8DA00FFE8DA00FEDDCB00FEDDCB00FDD7C000FDD7C000CD52
0800CD520800FEE4D700FEE4D700FE9F6600FE9F6600FEE9DD00FEE9DD00FEF0
E900FEE7DB00FEE7DB00FEE7DF00FEE7DF00FEFEFE00FEFEFE00FEA37300FEA3
7300FE8B3D00FE8B3D00FEC69200FEC69200FEE0D600FEE0D600FDFEFE00FEE2
D300FEE2D300F1A98A00F1A98A00CD520800CD520800FFD5BB00FFD5BB00FFD5
BD00FFD5BD00FFD8BF00FFD8BF00FFDAC200FFDAC20000000000DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00BBCCD500DDE6EA00BBCCD500BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500688DA20000000000FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000FE9B6000FEDFCD00FEDFCD00FEF2
EF00FEE3D900FEE3D900FEE0D300FEE0D300FEF8F800FEF8F800FEE8E300FEE8
E300FE833B00FE833B00FEBB7300FEBB7300FEDFC000FEDFC000F9CEC200FED8
CA00FED8CA00FBD2BF00FBD2BF00CD520800CD520800FFD3B800FFD3B800FFD3
BA00FFD3BA00FFD6BC00FFD6BC00FFD8C000FFD8C00000000000DDE6EA00DDE6
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00BBCCD500DDE6EA00BBCCD500BBCCD500BBCCD500BBCCD500BBCC
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500688DA20000000000FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00424D3E000000000000003E000000
2800000080000000200000000100010000000000000200000000000000000000
000000000000000000000000FFFFFF00E0000007000000000000000000000000
E00000F7000000000000000000000000E0000007000000000000000000000000
E0000007000000000000000000000000E0000007000000000000000000000000
E0000007000000000000000000000000E0000007FFFFFF00FFFFFF00FFFFFF00
E00000070000000000000000FFFFFF00E0000007000000000000000000000000
E0000007000000000000000000000000E0000007000000000000000000000000
E0000007000000000000000000000000E0000007000000000000000000000000
E0000007000000000000000000000000E0000007FFFFFF00FFFFFF00FFFFFF00
E00000070000000000000000FFFFFF00E0000007000000000000000000000000
E0000007000000000000000000000000E0000007000000000000000000000000
E0000007000000000000000000000000E0000007000000000000000000000000
E0000007000000000000000000000000E0000007FFFFFF00FFFFFF00FFFFFF00
E00000070000000000000000FFFFFF00E0000007000000000000000000000000
E0000007000000000000000000000000E000000F000000000000000000000000
E000001F000000000000000000000000E000003F000000000000000000000000
E000007F000000000000000000000000E00000FFFFFFFF00FFFFFF00FFFFFF00
E00001FF10022F031F022F0320FFFF0000000000000000000000000000000000
000000000000}
end
end

View File

@ -1,509 +0,0 @@
{
Apophysis Copyright (C) 2001-2004 Mark Townsend
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
}
unit Browser;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, ComCtrls, ControlPoint, ToolWin, ImgList, Render, StdCtrls,
Cmap, Menus, Global, Buttons;
const
PixelCountMax = 32768;
type
TGradientBrowser = class(TForm)
RightPanel: TPanel;
SmallImages: TImageList;
ListView: TListView;
pnlMain: TPanel;
PopupMenu: TPopupMenu;
DeleteItem: TMenuItem;
RenameItem: TMenuItem;
btnDefGradient: TSpeedButton;
btnCancel: TButton;
pnlPreview: TPanel;
Image: TImage;
pnlControls: TPanel;
OpenDialog: TOpenDialog;
LargeImages: TImageList;
procedure ListViewChange(Sender: TObject; Item: TListItem;
Change: TItemChange);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure DeleteItemClick(Sender: TObject);
procedure RenameItemClick(Sender: TObject);
procedure ListViewEdited(Sender: TObject; Item: TListItem;
var S: string);
procedure btnDefGradientClick(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure ListViewKeyPress(Sender: TObject; var Key: Char);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
procedure DrawPalette;
procedure Apply;
public
PreviewDensity: double;
FlameIndex, GradientIndex: Integer;
Extension, Identifier, Filename: string;
cp: TControlPoint;
Palette: TColorMap;
zoom: double;
Center: array[0..1] of double;
Render: TRenderer;
procedure ListFileContents;
function LoadFractintMap(filen: string): TColorMap;
end;
type
EFormatInvalid = class(Exception);
pRGBTripleArray = ^TRGBTripleArray;
TRGBTripleArray = array[0..PixelCountMax - 1] of TRGBTriple;
var
GradientBrowser: TGradientBrowser;
FlameString: string;
function CreatePalette(strng: string): TColorMap;
implementation
uses Main, Options, Editor, Gradient, Registry, Adjust, Mutate;
{$R *.DFM}
procedure RGBBlend(a, b: integer; var Palette: TColorMap);
{ Linear blend between to indices of a palette }
var
c, v: real;
vrange, range: real;
i: integer;
begin
if a = b then
begin
Exit;
end;
range := b - a;
vrange := Palette[b mod 256][0] - Palette[a mod 256][0];
c := Palette[a mod 256][0];
v := vrange / range;
for i := (a + 1) to (b - 1) do
begin
c := c + v;
Palette[i mod 256][0] := Round(c);
end;
vrange := Palette[b mod 256][1] - Palette[a mod 256][1];
c := Palette[a mod 256][1];
v := vrange / range;
for i := a + 1 to b - 1 do
begin
c := c + v;
Palette[i mod 256][1] := Round(c);
end;
vrange := Palette[b mod 256][2] - Palette[a mod 256][2];
c := Palette[a mod 256][2];
v := vrange / range;
for i := a + 1 to b - 1 do
begin
c := c + v;
Palette[i mod 256][2] := Round(c);
end;
end;
function GetVal(token: string): string;
var
p: integer;
begin
p := Pos('=', token);
Delete(Token, 1, p);
Result := Token;
end;
function ReplaceTabs(str: string): string;
{Changes tab characters in a string to spaces}
var
i: integer;
begin
for i := 1 to Length(str) do
begin
if str[i] = #9 then
begin
Delete(str, i, 1);
Insert(#32, str, i);
end;
end;
Result := str;
end;
function TGradientBrowser.LoadFractintMap(filen: string): TColorMap;
var
i: integer;
s: string;
pal: TColorMap;
MapFile: TextFile;
begin
{ Load a map file }
AssignFile(MapFile, Filen);
try
Reset(MapFile);
for i := 0 to 255 do
begin
Read(MapFile, Pal[i][0]);
Read(MapFile, Pal[i][1]);
Read(MapFile, Pal[i][2]);
Read(MapFile, s);
end;
CloseFile(MapFile);
Result := Pal;
except
on EInOutError do Application.MessageBox(PChar('Cannot Open File: ' +
FileName), PCHAR('Apophysis'), 16);
end;
end;
function CreatePalette(strng: string): TColorMap;
{ Loads a palette from a gradient string }
var
Strings: TStringList;
index, i: integer;
Tokens: TStringList;
Indices, Colors: TStringList;
a, b: integer;
begin
Strings := TStringList.Create;
Tokens := TStringList.Create;
Indices := TStringList.Create;
Colors := TStringList.Create;
try
try
Strings.Text := strng;
if Pos('}', Strings.Text) = 0 then raise EFormatInvalid.Create('No closing brace');
if Pos('{', Strings[0]) = 0 then raise EFormatInvalid.Create('No opening brace.');
GetTokens(ReplaceTabs(strings.text), tokens);
Tokens.Text := Trim(Tokens.text);
i := 0;
while (Pos('}', Tokens[i]) = 0) and (Pos('opacity:', Lowercase(Tokens[i])) = 0) do
begin
if Pos('index=', LowerCase(Tokens[i])) <> 0 then
Indices.Add(GetVal(Tokens[i]))
else if Pos('color=', LowerCase(Tokens[i])) <> 0 then
Colors.Add(GetVal(Tokens[i]));
inc(i)
end;
for i := 0 to 255 do
begin
Result[i][0] := 0;
Result[i][1] := 0;
Result[i][2] := 0;
end;
if Indices.Count = 0 then raise EFormatInvalid.Create('No color info');
for i := 0 to Indices.Count - 1 do
begin
index := StrToInt(Indices[i]);
index := Round(Index * (255 / 399));
indices[i] := IntToStr(index);
Result[index][0] := StrToInt(Colors[i]) mod 256;
Result[index][1] := trunc(StrToInt(Colors[i]) / 256) mod 256;
Result[index][2] := trunc(StrToInt(Colors[i]) / 65536);
end;
i := 1;
repeat
a := StrToInt(Trim(Indices[i - 1]));
b := StrToInt(Trim(Indices[i]));
RGBBlend(a, b, Result);
inc(i);
until i = Indices.Count;
if (Indices[0] <> '0') or (Indices[Indices.Count - 1] <> '255') then
begin
a := StrToInt(Trim(Indices[Indices.Count - 1]));
b := StrToInt(Trim(Indices[0])) + 256;
RGBBlend(a, b, Result);
end;
except on EFormatInvalid do
begin
// Result := False;
end;
end;
finally
Tokens.Free;
Strings.Free;
Indices.Free;
Colors.Free;
end;
end;
procedure TGradientBrowser.DrawPalette;
var
i, j: integer;
Row: pRGBTripleArray;
BitMap: TBitMap;
begin
BitMap := TBitMap.Create;
try
Bitmap.PixelFormat := pf24bit;
BitMap.Width := 256;
BitMap.Height := 1;
for j := 0 to Bitmap.Height - 1 do
begin
Row := Bitmap.Scanline[j];
for i := 0 to Bitmap.Width - 1 do
begin
with Row[i] do
begin
rgbtRed := Palette[i][0];
rgbtGreen := Palette[i][1];
rgbtBlue := Palette[i][2];
end
end
end;
Image.Picture.Graphic := Bitmap;
Image.Refresh;
finally
BitMap.Free;
end;
end;
procedure TGradientBrowser.ListFileContents;
{ List identifiers in file }
var
i, p: integer;
Title: string;
ListItem: TListItem;
FStrings: TStringList;
begin
FStrings := TStringList.Create;
FStrings.LoadFromFile(filename);
try
ListView.Items.BeginUpdate;
ListView.Items.Clear;
if Lowercase(ExtractFileExt(filename)) = '.map' then
begin
ListItem := ListView.Items.Add;
Listitem.Caption := Trim(filename);
end
else
if (Pos('{', FStrings.Text) <> 0) then
begin
for i := 0 to FStrings.Count - 1 do
begin
p := Pos('{', FStrings[i]);
if (p <> 0) and (Pos('(3D)', FStrings[i]) = 0) then
begin
Title := Trim(Copy(FStrings[i], 1, p - 1));
if Title <> '' then
begin { Otherwise bad format }
ListItem := ListView.Items.Add;
Listitem.Caption := Trim(Copy(FStrings[i], 1, p - 1));
end;
end;
end;
end;
ListView.Items.EndUpdate;
ListView.Selected := ListView.Items[0];
finally
FStrings.Free;
end;
end;
procedure TGradientBrowser.ListViewChange(Sender: TObject; Item: TListItem;
Change: TItemChange);
var
Tokens, FStrings: TStringList;
EntryStrings: TStringList;
i: integer;
begin
Application.ProcessMessages;
FStrings := TStringList.Create;
EntryStrings := TStringList.Create;
Tokens := TStringList.Create;
try
if Lowercase(ExtractFileExt(filename)) = '.map' then
begin
Palette := LoadFractintMap(filename);
DrawPalette;
end
else
if (ListView.SelCount <> 0) and (ListView.Selected.Caption <> Identifier) then
begin
Identifier := ListView.Selected.Caption;
FStrings.LoadFromFile(Filename);
for i := 0 to FStrings.count - 1 do
if Pos(Lowercase(ListView.Selected.Caption) + ' ', Trim(Lowercase(FStrings[i]))) = 1 then break;
EntryStrings.Add(FStrings[i]);
repeat
inc(i);
EntryStrings.Add(FStrings[i]);
until Pos('}', FStrings[i]) <> 0;
Palette := CreatePalette(EntryStrings.Text);
DrawPalette;
end;
finally
EntryStrings.Free;
FStrings.Free;
Tokens.Free;
end;
end;
procedure TGradientBrowser.FormCreate(Sender: TObject);
begin
PreviewDensity := prevMediumQuality;
cp := TControlPoint.Create;
cp.gamma := defGamma;
cp.brightness := defBrightness;
cp.vibrancy := defVibrancy;
cp.spatial_oversample := defOversample;
cp.spatial_filter_radius := defFilterRadius;
Render := TRenderer.Create;
FlameIndex := 0;
GradientIndex := 0;
end;
procedure TGradientBrowser.FormDestroy(Sender: TObject);
begin
Render.Free;
cp.Free;
end;
procedure TGradientBrowser.FormShow(Sender: TObject);
var
Registry: TRegistry;
begin
{ Read posution from registry }
Registry := TRegistry.Create;
try
Registry.RootKey := HKEY_CURRENT_USER;
if Registry.OpenKey('Software\' + APP_NAME + '\Forms\Browser', False) then
begin
if Registry.ValueExists('Left') then
GradientBrowser.Left := Registry.ReadInteger('Left');
if Registry.ValueExists('Top') then
GradientBrowser.Top := Registry.ReadInteger('Top');
if Registry.ValueExists('Width') then
GradientBrowser.Width := Registry.ReadInteger('Width');
if Registry.ValueExists('Height') then
GradientBrowser.Height := Registry.ReadInteger('Height');
end;
Registry.CloseKey;
finally
Registry.Free;
end;
if FileExists(filename) then ListFileContents;
end;
procedure TGradientBrowser.DeleteItemClick(Sender: TObject);
var
c: boolean;
begin
if ListView.SelCount <> 0 then
begin
if ConfirmDelete then
c := Application.MessageBox(
PChar('Are you sure you want to permanently delete' + ' "'
+ ListView.Selected.Caption + '"'), 'Apophysis', 36) = IDYES
else
c := True;
if c then
if ListView.Focused and (ListView.SelCount <> 0) then
begin
Application.ProcessMessages;
if DeleteEntry(ListView.Selected.Caption, Filename) then
begin
ListView.Items.Delete(ListView.Selected.Index);
ListView.Selected := ListView.ItemFocused;
end;
end;
end;
end;
procedure TGradientBrowser.RenameItemClick(Sender: TObject);
begin
if ListView.SelCount <> 0 then
ListView.Items[ListView.Selected.Index].EditCaption;
end;
procedure TGradientBrowser.ListViewEdited(Sender: TObject; Item: TListItem;
var S: string);
begin
// if s <> Item.Caption then
// if not RenameIFS(Item.Caption, s, Filename) then
// s := Item.Caption;
end;
procedure TGradientBrowser.btnDefGradientClick(Sender: TObject);
begin
OpenDialog.InitialDir := BrowserPath;
OpenDialog.FileName := '';
if OpenDialog.Execute then
begin
Filename := OpenDialog.FileName;
GradientFile := Filename;
BrowserPath := ExtractFilePath(OpenDialog.FileName);
ListFileContents;
end;
end;
procedure TGradientBrowser.Apply;
begin
MainForm.StopThread;
MainForm.UpdateUndo;
MainCp.cmap := Palette;
gradientForm.UpdateGradient(Palette);
if EditForm.Visible then EditForm.UpdateDisplay;
// if AdjustForm.Visible then AdjustForm.UpdateDisplay;
if MutateForm.Visible then MutateForm.UpdateDisplay;
MainForm.RedrawTimer.enabled := true;
end;
procedure TGradientBrowser.SpeedButton1Click(Sender: TObject);
begin
Apply;
end;
procedure TGradientBrowser.ListViewKeyPress(Sender: TObject;
var Key: Char);
begin
if Key = #13 then Apply;
end;
procedure TGradientBrowser.FormClose(Sender: TObject;
var Action: TCloseAction);
var
Registry: TRegistry;
begin
{ Write position to registry }
Registry := TRegistry.Create;
try
Registry.RootKey := HKEY_CURRENT_USER;
{ Defaults }
if Registry.OpenKey('\Software\' + APP_NAME + '\Forms\Browser', True) then
begin
Registry.WriteInteger('Top', GradientBrowser.Top);
Registry.WriteInteger('Left', GradientBrowser.Left);
Registry.WriteInteger('Width', GradientBrowser.Width);
Registry.WriteInteger('Height', GradientBrowser.Height);
end;
finally
Registry.Free;
end;
end;
end.

File diff suppressed because it is too large Load Diff

View File

@ -1,646 +0,0 @@
object EditForm: TEditForm
Left = 516
Top = 218
Width = 582
Height = 471
Caption = 'Editor'
Color = clBtnFace
Font.Charset = ANSI_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
Icon.Data = {
0000010001001010000000000000680300001600000028000000100000002000
0000010018000000000040030000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
FFFF00FFFF00FFFF00000000000000000000000000000000000000FFFF000000
00000000000000000000000000000000000000000000FFFF0000000000000000
0000000000000000000000000000FFFF00000000000000000000000000000000
000000000000FFFF0000000000000000000000000000000000FF0000FF0000FF
00FFFF0000FF0000FF0000FF0000FF0000FF00000000FFFF0000000000000000
000000000000000000FF00000000000000000000FFFF0000000000000000FF00
000000000000FFFF0000000000000000000000000000000000FF000000000000
00000000000000FFFF0000FF00000000000000000000FFFF0000000000000000
000000000000000000FF0000000000000000000000000000FF00FFFF00000000
000000000000FFFF0000000000000000000000000000000000FF000000000000
0000000000FF00000000000000FFFF00000000000000FFFF0000000000000000
000000000000000000FF0000000000000000FF00000000000000000000000000
FFFF00000000FFFF0000000000000000000000000000000000FF0000000000FF
00000000000000000000000000000000000000FFFF00FFFF0000000000000000
000000000000000000FF0000FF00000000000000000000000000000000000000
000000000000FFFF0000000000000000000000000000000000FF000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000FFFF
0000800100008001000080010000800100008001000080010000800100008001
0000800100008001000080010000800100008001000080010000FFFF0000}
KeyPreview = True
OldCreateOrder = True
Position = poDefaultPosOnly
OnClose = FormClose
OnCreate = FormCreate
OnDestroy = FormDestroy
OnResize = FormResize
OnShow = FormShow
PixelsPerInch = 96
TextHeight = 13
object GrphPnl: TPanel
Left = 0
Top = 0
Width = 394
Height = 422
Align = alClient
BevelOuter = bvLowered
Color = clBlack
TabOrder = 0
object GraphImage: TImage
Left = 1
Top = 1
Width = 392
Height = 420
Align = alClient
PopupMenu = EditPopup
OnDblClick = GraphImageDblClick
OnMouseDown = GraphImageMouseDown
OnMouseMove = GraphImageMouseMove
OnMouseUp = GraphImageMouseUp
end
end
object StatusBar: TStatusBar
Left = 0
Top = 422
Width = 574
Height = 15
Panels = <
item
Width = 60
end
item
Width = 60
end
item
Width = 150
end>
SimplePanel = False
end
object ControlPanel: TPanel
Left = 394
Top = 0
Width = 180
Height = 422
Align = alRight
Alignment = taLeftJustify
BevelOuter = bvNone
TabOrder = 2
DesignSize = (
180
422)
object lblTransform: TLabel
Left = 10
Top = 128
Width = 59
Height = 13
Caption = 'Transform'
Font.Charset = ANSI_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
end
object PrevPnl: TPanel
Left = 10
Top = 0
Width = 162
Height = 122
BevelOuter = bvLowered
Caption = 'PrevPnl'
Color = clBlack
TabOrder = 0
object PreviewImage: TImage
Left = 1
Top = 1
Width = 160
Height = 120
Align = alClient
IncrementalDisplay = True
PopupMenu = QualityPopup
end
end
object cbTransforms: TComboBox
Left = 75
Top = 125
Width = 57
Height = 21
Style = csDropDownList
ItemHeight = 13
TabOrder = 1
OnChange = cbTransformsChange
end
object PageControl: TPageControl
Left = 10
Top = 148
Width = 167
Height = 277
ActivePage = TabSheet2
Anchors = [akLeft, akTop, akRight, akBottom]
MultiLine = True
TabIndex = 3
TabOrder = 2
TabStop = False
object TabSheet1: TTabSheet
Caption = 'Triangle'
object Label7: TLabel
Left = 9
Top = 12
Width = 17
Height = 13
Caption = 'Ax:'
end
object Label8: TLabel
Left = 9
Top = 36
Width = 17
Height = 13
Caption = 'Ay:'
end
object Label9: TLabel
Left = 9
Top = 60
Width = 16
Height = 13
Caption = 'Bx:'
end
object Label10: TLabel
Left = 9
Top = 84
Width = 16
Height = 13
Caption = 'By:'
end
object Label11: TLabel
Left = 9
Top = 108
Width = 17
Height = 13
Caption = 'Cx:'
end
object Label12: TLabel
Left = 9
Top = 132
Width = 17
Height = 13
Caption = 'Cy:'
end
object txtAx: TEdit
Left = 32
Top = 8
Width = 110
Height = 21
AutoSelect = False
TabOrder = 0
Text = '0'
OnExit = CornerEditExit
OnKeyPress = CornerEditKeyPress
end
object txtAy: TEdit
Left = 32
Top = 32
Width = 110
Height = 21
AutoSelect = False
TabOrder = 1
Text = '0'
OnExit = CornerEditExit
OnKeyPress = CornerEditKeyPress
end
object txtBx: TEdit
Left = 32
Top = 56
Width = 110
Height = 21
AutoSelect = False
TabOrder = 2
Text = '0'
OnExit = CornerEditExit
OnKeyPress = CornerEditKeyPress
end
object txtBy: TEdit
Left = 32
Top = 80
Width = 110
Height = 21
AutoSelect = False
TabOrder = 3
Text = '0'
OnExit = CornerEditExit
OnKeyPress = CornerEditKeyPress
end
object txtCx: TEdit
Left = 32
Top = 104
Width = 110
Height = 21
AutoSelect = False
TabOrder = 4
Text = '0'
OnExit = CornerEditExit
OnKeyPress = CornerEditKeyPress
end
object txtCy: TEdit
Left = 32
Top = 128
Width = 110
Height = 21
AutoSelect = False
TabOrder = 5
Text = '0'
OnExit = CornerEditExit
OnKeyPress = CornerEditKeyPress
end
object chkPreserve: TCheckBox
Left = 8
Top = 168
Width = 129
Height = 17
Caption = 'Preserve weights'
Checked = True
State = cbChecked
TabOrder = 6
end
end
object XForm: TTabSheet
Caption = 'Transform'
object lbla: TLabel
Left = 9
Top = 12
Width = 10
Height = 13
Caption = 'a:'
end
object Label1: TLabel
Left = 9
Top = 36
Width = 10
Height = 13
Caption = 'b:'
end
object Label2: TLabel
Left = 9
Top = 60
Width = 9
Height = 13
Caption = 'c:'
end
object Label3: TLabel
Left = 9
Top = 84
Width = 10
Height = 13
Caption = 'd:'
end
object Label4: TLabel
Left = 9
Top = 108
Width = 10
Height = 13
Caption = 'e:'
end
object Label5: TLabel
Left = 9
Top = 132
Width = 8
Height = 13
Caption = 'f:'
end
object Label6: TLabel
Left = 9
Top = 156
Width = 38
Height = 13
Caption = 'Weight:'
end
object Label29: TLabel
Left = 9
Top = 180
Width = 52
Height = 13
Caption = 'Symmetry:'
end
object txtA: TEdit
Left = 32
Top = 8
Width = 110
Height = 21
TabOrder = 0
Text = '0'
OnExit = CoefExit
OnKeyPress = CoefKeyPress
end
object txtB: TEdit
Left = 32
Top = 32
Width = 110
Height = 21
TabOrder = 1
Text = '0'
OnExit = CoefExit
OnKeyPress = CoefKeyPress
end
object txtC: TEdit
Left = 32
Top = 56
Width = 110
Height = 21
TabOrder = 2
Text = '0'
OnExit = CoefExit
OnKeyPress = CoefKeyPress
end
object txtD: TEdit
Left = 32
Top = 80
Width = 110
Height = 21
TabOrder = 3
Text = '0'
OnExit = CoefExit
OnKeyPress = CoefKeyPress
end
object txtE: TEdit
Left = 32
Top = 104
Width = 110
Height = 21
TabOrder = 4
Text = '0'
OnExit = CoefExit
OnKeyPress = CoefKeyPress
end
object txtF: TEdit
Left = 32
Top = 128
Width = 110
Height = 21
TabOrder = 5
Text = '0'
OnExit = CoefExit
OnKeyPress = CoefKeyPress
end
object txtP: TEdit
Left = 72
Top = 152
Width = 70
Height = 21
TabOrder = 6
Text = '0'
OnExit = txtPExit
OnKeyPress = txtPKeyPress
end
object txtSymmetry: TEdit
Left = 72
Top = 176
Width = 70
Height = 21
TabOrder = 7
Text = '0'
OnExit = txtSymmetryExit
OnKeyPress = txtSymmetryKeyPress
end
end
object TabSheet3: TTabSheet
Caption = 'Variations'
object VEVars: TValueListEditor
Left = 0
Top = 0
Width = 159
Height = 231
Align = alClient
ScrollBars = ssVertical
TabOrder = 0
TitleCaptions.Strings = (
'Variation'
'Value')
OnExit = VEVarsExit
OnKeyPress = VEVarsKeyPress
OnValidate = VEVarsValidate
ColWidths = (
93
60)
end
end
object TabSheet2: TTabSheet
Caption = 'Colors'
ImageIndex = 3
object GroupBox1: TGroupBox
Left = 8
Top = 0
Width = 145
Height = 73
Caption = 'Transform color'
TabOrder = 0
object scrlXFormColor: TScrollBar
Left = 8
Top = 48
Width = 129
Height = 13
LargeChange = 10
PageSize = 0
TabOrder = 0
OnChange = scrlXFormColorChange
OnScroll = scrlXFormColorScroll
end
object pnlXFormColor: TPanel
Left = 8
Top = 16
Width = 65
Height = 25
BevelOuter = bvLowered
TabOrder = 1
end
object txtXFormColor: TEdit
Left = 80
Top = 16
Width = 57
Height = 21
TabOrder = 2
OnExit = txtXFormColorExit
OnKeyPress = txtXFormColorKeyPress
end
end
object GroupBox2: TGroupBox
Left = 8
Top = 80
Width = 145
Height = 137
Caption = 'Graph'
TabOrder = 1
object Label20: TLabel
Left = 8
Top = 56
Width = 82
Height = 13
Caption = 'Background color'
end
object Label21: TLabel
Left = 8
Top = 96
Width = 89
Height = 13
Caption = 'Reference triangle'
end
object pnlBackColor: TPanel
Left = 8
Top = 72
Width = 129
Height = 17
BevelOuter = bvLowered
Color = clBlack
TabOrder = 0
OnClick = pnlBackColorClick
end
object chkUseXFormColor: TCheckBox
Left = 8
Top = 16
Width = 129
Height = 17
Caption = 'Use transform color'
TabOrder = 1
OnClick = chkUseXFormColorClick
end
object chkFlameBack: TCheckBox
Left = 8
Top = 36
Width = 129
Height = 17
Caption = 'Use flame background'
TabOrder = 2
OnClick = chkFlameBackClick
end
object pnlReference: TPanel
Left = 8
Top = 112
Width = 129
Height = 17
BevelOuter = bvLowered
Color = clGray
TabOrder = 3
OnClick = pnlReferenceClick
end
end
end
end
end
object EditPopup: TPopupMenu
Images = MainForm.Buttons
Left = 312
Top = 8
object mnuAutoZoom: TMenuItem
Caption = 'Auto Zoom'
Hint = 'Zooms the triangle display to the best fit.'
OnClick = mnuAutoZoomClick
end
object N1: TMenuItem
Caption = '-'
end
object mnuDelete: TMenuItem
Caption = 'Delete'
Hint = 'Deletes the selected triangle.'
ImageIndex = 9
OnClick = mnuDeleteClick
end
object mnuDuplicate: TMenuItem
Caption = 'Duplicate'
Hint = 'Duplicates the selected triangle.'
OnClick = mnuDupClick
end
object MenuItem2: TMenuItem
Caption = '-'
end
object mnuAdd: TMenuItem
Caption = 'Add'
Hint = 'Adds a new triangle.'
OnClick = mnuAddClick
end
object N4: TMenuItem
Caption = '-'
end
object mnuFlipVertical: TMenuItem
Caption = 'Flip Vertical'
OnClick = mnuFlipVerticalClick
end
object mnuFlipHorizontal: TMenuItem
Caption = 'Flip Horizontal'
OnClick = mnuFlipHorizontalClick
end
object N5: TMenuItem
Caption = '-'
end
object mnuVerticalFlipAll: TMenuItem
Caption = 'Flip All Vertical '
OnClick = mnuVerticalFlipAllClick
end
object mnuHorizintalFlipAll: TMenuItem
Caption = 'Flip All Horizontal'
OnClick = mnuHorizintalFlipAllClick
end
object MenuItem1: TMenuItem
Caption = '-'
end
object mnuLockSel: TMenuItem
Caption = 'Lock'
OnClick = mnuLockClick
end
object N6: TMenuItem
Caption = '-'
end
object mnuUndo: TMenuItem
Caption = 'Undo'
Enabled = False
ImageIndex = 4
ShortCut = 16474
OnClick = mnuUndoClick
end
object mnuRedo: TMenuItem
Caption = 'Redo'
Enabled = False
ImageIndex = 5
ShortCut = 16473
OnClick = mnuRedoClick
end
end
object QualityPopup: TPopupMenu
Images = MainForm.Buttons
Left = 344
Top = 8
object mnuLowQuality: TMenuItem
Caption = 'Low Quality'
RadioItem = True
OnClick = mnuLowQualityClick
end
object mnuMediumQuality: TMenuItem
Caption = 'Medium Quality'
Checked = True
RadioItem = True
OnClick = mnuMediumQualityClick
end
object mnuHighQuality: TMenuItem
Caption = 'High Quality'
RadioItem = True
OnClick = mnuHighQualityClick
end
object N3: TMenuItem
Caption = '-'
end
object mnuResetLocation: TMenuItem
Caption = 'Reset Location'
Checked = True
OnClick = mnuResetLocationClick
end
end
end

File diff suppressed because it is too large Load Diff

View File

@ -1,344 +0,0 @@
object ExportDialog: TExportDialog
Left = 313
Top = 276
BorderStyle = bsDialog
Caption = 'Export Flame'
ClientHeight = 270
ClientWidth = 424
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
Position = poScreenCenter
OnShow = FormShow
PixelsPerInch = 96
TextHeight = 13
object btnOK: TButton
Left = 336
Top = 178
Width = 75
Height = 25
Caption = '&OK'
Default = True
ModalResult = 1
TabOrder = 0
OnClick = btnOKClick
end
object btnCancel: TButton
Left = 336
Top = 210
Width = 75
Height = 25
Caption = 'Cancel'
ModalResult = 2
TabOrder = 1
end
object GroupBox1: TGroupBox
Left = 8
Top = 5
Width = 408
Height = 57
Caption = 'Destination'
TabOrder = 2
object btnBrowse: TSpeedButton
Left = 368
Top = 16
Width = 24
Height = 24
Hint = 'Browse...'
Flat = True
Font.Charset = ANSI_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Arial'
Font.Style = [fsBold]
Glyph.Data = {
36030000424D3603000000000000360000002800000010000000100000000100
18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF
FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
FFFF00FFFF00FFFF00FF00000000000000000000000000000000000000000000
0000000000000000000000FF00FFFF00FFFF00FFFF00FFFF00FF000000000000
9FCFFF9FCFFF9FCFFF9FCFFF9FCFFF9FCFFF9FCFFF9FCFFF9FCFFF000000FF00
FFFF00FFFF00FFFF00FF0000009FFFFF0000009FCFFF9FCFFF9FCFFF9FCFFF9F
CFFF9FCFFF9FCFFF9FCFFF9FCFFF000000FF00FFFF00FFFF00FF0000009FFFFF
9FFFFF0000009FCFFF9FCFFF9FCFFF9FCFFF9FCFFF9FCFFF9FCFFF9FCFFF9FCF
FF000000FF00FFFF00FF0000009FFFFF9FFFFF9FFFFF0000009FCFFF9FCFFF9F
CFFF9FCFFF9FCFFF9FCFFF9FCFFF9FCFFF9FCFFF000000FF00FF0000009FFFFF
9FFFFF9FFFFF9FFFFF0000000000000000000000000000000000000000000000
00000000000000FF00FF0000009FFFFF9FFFFF9FFFFF9FFFFF9FFFFF9FFFFF9F
FFFF9FFFFF9FFFFF000000FF00FFFF00FFFF00FFFF00FFFF00FF0000009FFFFF
9FFFFF9FFFFF9FFFFF9FFFFF9FFFFF9FFFFF9FFFFF9FFFFF000000FF00FFFF00
FFFF00FFFF00FFFF00FF0000009FFFFF9FFFFF9FFFFF00000000000000000000
0000000000000000000000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF000000
000000000000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF0000
00000000000000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
00FFFF00FFFF00FFFF00FFFF00FFFF00FF000000000000FF00FFFF00FFFF00FF
FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF0C0C0CFF00FFFF00FFFF00FF0000
00FF00FF000000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
00FFFF00FF0B0B0B020202000000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
ParentFont = False
ParentShowHint = False
ShowHint = True
OnClick = btnBrowseClick
end
object Label10: TLabel
Left = 10
Top = 23
Width = 48
Height = 13
Caption = 'File name:'
end
object txtFilename: TEdit
Left = 72
Top = 20
Width = 281
Height = 21
TabOrder = 0
Text = 'txtFilename'
end
end
object GroupBox3: TGroupBox
Left = 216
Top = 66
Width = 200
Height = 105
Caption = 'Rendering'
TabOrder = 3
object Label3: TLabel
Left = 10
Top = 71
Width = 59
Height = 13
Caption = 'Oversample:'
end
object Label5: TLabel
Left = 10
Top = 47
Width = 61
Height = 13
Caption = 'Filter Radius:'
end
object Label4: TLabel
Left = 10
Top = 23
Width = 35
Height = 13
Caption = 'Quality:'
end
object txtOversample: TEdit
Left = 112
Top = 68
Width = 57
Height = 21
ReadOnly = True
TabOrder = 2
Text = '2'
OnChange = txtOversampleChange
end
object txtFilterRadius: TEdit
Left = 112
Top = 44
Width = 57
Height = 21
TabOrder = 1
OnChange = txtFilterRadiusChange
end
object txtDensity: TEdit
Left = 112
Top = 20
Width = 57
Height = 21
TabOrder = 0
OnChange = txtDensityChange
end
object udOversample: TUpDown
Left = 169
Top = 68
Width = 12
Height = 21
Associate = txtOversample
Min = 1
Max = 4
Position = 2
TabOrder = 3
Wrap = False
end
end
object GroupBox2: TGroupBox
Left = 8
Top = 66
Width = 200
Height = 105
Caption = 'Size'
TabOrder = 4
object Label1: TLabel
Left = 10
Top = 23
Width = 28
Height = 13
Caption = 'Width'
end
object Label2: TLabel
Left = 10
Top = 47
Width = 34
Height = 13
Caption = 'Height:'
end
object chkMaintain: TCheckBox
Left = 8
Top = 76
Width = 161
Height = 17
Caption = 'Maintain aspect ratio'
Checked = True
State = cbChecked
TabOrder = 0
OnClick = chkMaintainClick
end
object cbWidth: TComboBox
Left = 112
Top = 20
Width = 73
Height = 21
ItemHeight = 13
TabOrder = 1
OnChange = txtWidthChange
Items.Strings = (
'320'
'640'
'800'
'1024'
'1280'
'1600'
'2048')
end
object cbHeight: TComboBox
Left = 112
Top = 44
Width = 73
Height = 21
ItemHeight = 13
TabOrder = 2
OnChange = txtHeightChange
Items.Strings = (
'200'
'240'
'480'
'600'
'768'
'1024'
'1200'
'2048')
end
end
object GroupBox4: TGroupBox
Left = 8
Top = 176
Width = 313
Height = 89
Caption = 'Hqi'
TabOrder = 5
object Label6: TLabel
Left = 10
Top = 23
Width = 42
Height = 13
Caption = 'Batches:'
end
object Label7: TLabel
Left = 152
Top = 23
Width = 61
Height = 13
Caption = 'Buffer depth:'
end
object Label8: TLabel
Left = 10
Top = 55
Width = 29
Height = 13
Caption = 'Strips:'
end
object txtBatches: TEdit
Left = 64
Top = 20
Width = 57
Height = 21
TabOrder = 0
Text = '1'
OnChange = txtBatchesChange
end
object udBatches: TUpDown
Left = 121
Top = 20
Width = 12
Height = 21
Associate = txtBatches
Min = 1
Max = 10000
Position = 1
TabOrder = 1
Wrap = False
end
object cmbDepth: TComboBox
Left = 224
Top = 20
Width = 73
Height = 21
Style = csDropDownList
ItemHeight = 13
TabOrder = 2
OnChange = cmbDepthChange
Items.Strings = (
'16 bits'
'32 bits'
'64 bits')
end
object chkRender: TCheckBox
Left = 224
Top = 54
Width = 65
Height = 17
Caption = 'Render'
Checked = True
State = cbChecked
TabOrder = 3
end
object txtStrips: TEdit
Left = 64
Top = 52
Width = 57
Height = 21
TabOrder = 4
Text = '1'
OnChange = txtBatchesChange
end
object udStrips: TUpDown
Left = 121
Top = 52
Width = 12
Height = 21
Associate = txtStrips
Min = 1
Max = 512
Position = 1
TabOrder = 5
Wrap = False
end
end
object SaveDialog: TSaveDialog
DefaultExt = 'jpg'
Filter =
'JPEG Image (*.jpg)|*.jpg|PPM Image (*.ppm)|*.ppm|PNG Images (*.p' +
'ng)|*.png'
Left = 392
Top = 24
end
end

View File

@ -1,216 +0,0 @@
{
Apophysis Copyright (C) 2001-2004 Mark Townsend
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
}
unit FormExport;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, ComCtrls;
type
TExportDialog = class(TForm)
btnOK: TButton;
btnCancel: TButton;
GroupBox1: TGroupBox;
btnBrowse: TSpeedButton;
Label10: TLabel;
txtFilename: TEdit;
SaveDialog: TSaveDialog;
GroupBox3: TGroupBox;
Label3: TLabel;
Label5: TLabel;
Label4: TLabel;
txtOversample: TEdit;
txtFilterRadius: TEdit;
txtDensity: TEdit;
udOversample: TUpDown;
GroupBox2: TGroupBox;
Label1: TLabel;
Label2: TLabel;
chkMaintain: TCheckBox;
cbWidth: TComboBox;
cbHeight: TComboBox;
GroupBox4: TGroupBox;
Label6: TLabel;
txtBatches: TEdit;
udBatches: TUpDown;
Label7: TLabel;
cmbDepth: TComboBox;
chkRender: TCheckBox;
Label8: TLabel;
txtStrips: TEdit;
udStrips: TUpDown;
procedure btnBrowseClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure btnOKClick(Sender: TObject);
procedure txtWidthChange(Sender: TObject);
procedure chkMaintainClick(Sender: TObject);
procedure txtHeightChange(Sender: TObject);
procedure txtDensityChange(Sender: TObject);
procedure txtFilterRadiusChange(Sender: TObject);
procedure txtOversampleChange(Sender: TObject);
procedure txtBatchesChange(Sender: TObject);
procedure cmbDepthChange(Sender: TObject);
private
{ Private declarations }
public
Filename: string;
ImageWidth, ImageHeight, Oversample, Batches, Strips: Integer;
Sample_Density, Filter_Radius: double;
{ Public declarations }
end;
var
ExportDialog: TExportDialog;
Ratio: double;
implementation
uses Global, Main;
{$R *.DFM}
procedure TExportDialog.btnBrowseClick(Sender: TObject);
begin
SaveDialog.InitialDir := ExtractFileDir(txtFilename.text);
SaveDialog.Filename := txtFilename.Text;
case ExportFileFormat of
0: SaveDialog.DefaultExt := 'jpg';
1: SaveDialog.DefaultExt := 'ppm';
end;
SaveDialog.filterIndex := ExportFileFormat;
SaveDialog.Filter := 'JPEG image (*.jpg) |*.jpg|PPM image (*.ppm)|*.ppm|PNG Image (*.png)|*.png';
if SaveDialog.Execute then
begin
case SaveDialog.FilterIndex of
1: txtFilename.Text := ChangeFileExt(SaveDialog.Filename, '.jpg');
2: txtFilename.Text := ChangeFileExt(SaveDialog.Filename, '.ppm');
3: txtFilename.Text := ChangeFileExt(SaveDialog.Filename, '.png');
end;
ExportFileFormat := SaveDialog.FilterIndex;
renderPath := ExtractFilePath(SaveDialog.Filename);
end;
end;
procedure TExportDialog.FormShow(Sender: TObject);
begin
txtFilename.Text := Filename;
cbWidth.Text := IntToStr(MainCp.Width);
cbHeight.Text := IntToStr(MainCp.Height);
ImageWidth := MainCp.Width;
ImageHeight := MainCp.Height;
txtDensity.text := FloatToStr(Sample_density);
if cmbDepth.ItemIndex <> 2 then
txtBatches.text := IntToStr(Round(Sample_density / 4));
txtFilterRadius.text := FloatToStr(Filter_Radius);
txtOversample.text := IntToSTr(Oversample);
udOversample.Position := Oversample;
Ratio := ImageWidth / ImageHeight;
end;
procedure TExportDialog.btnOKClick(Sender: TObject);
begin
Filename := txtFilename.text;
ImageWidth := StrToInt(cbWidth.Text);
ImageHeight := StrToInt(cbHeight.Text);
end;
procedure TExportDialog.txtWidthChange(Sender: TObject);
begin
try
ImageWidth := StrToInt(cbWidth.Text);
if chkMaintain.checked and cbWidth.Focused then
begin
ImageHeight := Round(ImageWidth / ratio);
cbHeight.Text := IntToStr(ImageHeight)
end;
except
end;
end;
procedure TExportDialog.chkMaintainClick(Sender: TObject);
begin
Ratio := ImageWidth / ImageHeight;
end;
procedure TExportDialog.txtHeightChange(Sender: TObject);
begin
try
ImageHeight := StrToInt(cbHeight.Text);
if chkMaintain.checked and cbHeight.Focused then
begin
ImageWidth := Round(ImageHeight * ratio);
cbWidth.Text := IntToStr(ImageWidth)
end;
except
end;
end;
procedure TExportDialog.txtDensityChange(Sender: TObject);
begin
try
Sample_Density := StrToFloat(txtDensity.Text);
if cmbDepth.ItemIndex <> 2 then
txtBatches.text := IntToStr(Round(Sample_density / 4));
except
end;
end;
procedure TExportDialog.txtFilterRadiusChange(Sender: TObject);
begin
try
Filter_Radius := StrToFloat(txtFilterRadius.Text);
except
end;
end;
procedure TExportDialog.txtOversampleChange(Sender: TObject);
begin
if StrToInt(txtOversample.Text) > udOversample.Max then
txtOversample.Text := IntToStr(udOversample.Max);
if StrToInt(txtOversample.Text) < udOversample.Min then
txtOversample.Text := IntToStr(udOversample.Min);
try
Oversample := StrToInt(txtOversample.Text);
except
end;
end;
procedure TExportDialog.txtBatchesChange(Sender: TObject);
begin
if StrToInt(txtBatches.Text) > udBatches.Max then
txtBatches.Text := IntToStr(udBatches.Max);
if StrToInt(txtBatches.Text) < udBatches.Min then
txtBatches.Text := IntToStr(udBatches.Min);
try
Batches := StrToInt(txtBatches.Text);
except
end;
end;
procedure TExportDialog.cmbDepthChange(Sender: TObject);
begin
if cmbDepth.ItemIndex <> 2 then
txtBatches.text := IntToStr(Round(Sample_density / 4))
else
txtBatches.text := IntToStr(1);
end;
end.

View File

@ -1,104 +0,0 @@
object FavoritesForm: TFavoritesForm
Left = 457
Top = 267
BorderStyle = bsDialog
Caption = 'Favorite Scripts'
ClientHeight = 237
ClientWidth = 303
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
Position = poScreenCenter
OnCreate = FormCreate
OnDestroy = FormDestroy
OnShow = FormShow
PixelsPerInch = 96
TextHeight = 13
object PageControl1: TPageControl
Left = 8
Top = 8
Width = 289
Height = 193
TabOrder = 0
end
object ListView: TListView
Left = 16
Top = 16
Width = 193
Height = 177
Columns = <
item
Caption = 'Name'
Width = 189
end>
HideSelection = False
ReadOnly = True
RowSelect = True
ShowColumnHeaders = False
TabOrder = 1
ViewStyle = vsReport
OnChange = ListViewChange
end
object btnAdd: TButton
Left = 216
Top = 16
Width = 75
Height = 25
Caption = '&Add'
TabOrder = 2
TabStop = False
OnClick = btnAddClick
end
object btnRemove: TButton
Left = 216
Top = 48
Width = 75
Height = 25
Caption = '&Remove'
TabOrder = 3
TabStop = False
OnClick = btnRemoveClick
end
object btnMoveUp: TButton
Left = 216
Top = 80
Width = 75
Height = 25
Caption = 'Move &Up'
TabOrder = 4
TabStop = False
OnClick = btnMoveUpClick
end
object btnMoveDown: TButton
Left = 216
Top = 112
Width = 75
Height = 25
Caption = 'Move &Down'
TabOrder = 5
TabStop = False
OnClick = btnMoveDownClick
end
object btnOK: TButton
Left = 144
Top = 208
Width = 75
Height = 25
Caption = '&OK'
TabOrder = 6
OnClick = btnOKClick
end
object btnCancel: TButton
Left = 224
Top = 208
Width = 75
Height = 25
Caption = '&Cancel'
TabOrder = 7
OnClick = btnCancelClick
end
end

View File

@ -1,206 +0,0 @@
{
Apophysis Copyright (C) 2001-2004 Mark Townsend
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
}
unit FormFavorites;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, ComCtrls;
type
TFavoritesForm = class(TForm)
PageControl1: TPageControl;
ListView: TListView;
btnAdd: TButton;
btnRemove: TButton;
btnMoveUp: TButton;
btnMoveDown: TButton;
btnOK: TButton;
btnCancel: TButton;
procedure FormShow(Sender: TObject);
procedure btnCancelClick(Sender: TObject);
procedure btnOKClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure btnAddClick(Sender: TObject);
procedure btnRemoveClick(Sender: TObject);
procedure ListViewChange(Sender: TObject; Item: TListItem;
Change: TItemChange);
procedure btnMoveUpClick(Sender: TObject);
procedure btnMoveDownClick(Sender: TObject);
private
{ Private declarations }
public
Faves: TStringList;
{ Public declarations }
end;
var
FavoritesForm: TFavoritesForm;
implementation
uses Global, ScriptForm;
{$R *.DFM}
procedure TFavoritesForm.FormShow(Sender: TObject);
var
ListItem: TListItem;
i: integer;
s: string;
begin
Faves.Text := Favorites.text;
ListView.Items.Clear;
for i := 0 to Favorites.Count - 1 do
begin
ListItem := ListView.Items.Add;
s := ExtractFileName(Favorites[i]);
s := Copy(s, 0, length(s) - 4);
Listitem.Caption := s;
end;
if Favorites.Count <> 0 then ListView.Selected := ListView.Items[0];
if ListView.Items.Count <= 1 then
begin
btnMoveUp.Enabled := False;
btnMoveDown.Enabled := False;
end;
end;
procedure TFavoritesForm.btnCancelClick(Sender: TObject);
begin
Close
end;
procedure TFavoritesForm.btnOKClick(Sender: TObject);
begin
ModalResult := mrOK;
Faves.SaveToFile(AppPath + 'favorites');
end;
procedure TFavoritesForm.FormCreate(Sender: TObject);
begin
Faves := TStringList.Create;
end;
procedure TFavoritesForm.FormDestroy(Sender: TObject);
begin
Faves.Free;
end;
procedure TFavoritesForm.btnAddClick(Sender: TObject);
var
ListItem: TListItem;
i : integer;
s: string;
begin
ScriptEditor.MainOpenDialog.InitialDir := ScriptPath;
if ScriptEditor.mainOpenDialog.Execute then
begin
for i := 0 to Faves.Count - 1 do
begin
if ScriptEditor.MainOpenDialog.Filename = Faves[i] then exit;
end;
Faves.add(ScriptEditor.MainOpenDialog.Filename);
ListItem := ListView.Items.Add;
s := ExtractFileName(ScriptEditor.MainOpenDialog.Filename);
s := Copy(s, 0, length(s) - 4);
Listitem.Caption := s;
ListView.Selected := ListView.Items[ListView.Items.Count - 1];
btnRemove.Enabled := True;
end;
if ListView.Items.Count <= 1 then
begin
btnMoveUp.Enabled := False;
btnMoveDown.Enabled := False;
end;
end;
procedure TFavoritesForm.btnRemoveClick(Sender: TObject);
var
i: integer;
begin
i := ListView.Selected.Index;
Faves.Delete(i);
ListView.Items[i].delete;
if ListView.Items.Count <> 0 then
if i < ListView.Items.Count then
ListView.Selected := ListView.Items[i]
else
ListView.Selected := ListView.Items[ListView.Items.Count - 1]
else
btnRemove.Enabled := False;
if ListView.Items.Count <= 1 then
begin
btnMoveUp.Enabled := False;
btnMoveDown.Enabled := False;
end;
end;
procedure TFavoritesForm.ListViewChange(Sender: TObject; Item: TListItem;
Change: TItemChange);
begin
if (Item.Index = ListView.Items.Count - 1) then
btnMoveDown.Enabled := False
else
btnMoveDown.Enabled := True;
if (Item.Index = 0) then
btnMoveUp.Enabled := False
else
btnMoveUp.Enabled := True;
if (ListView.Items.Count <= 1) then
begin
btnMoveDown.Enabled := False;
btnMoveUp.Enabled := False;
end;
end;
procedure TFavoritesForm.btnMoveUpClick(Sender: TObject);
var
i: integer;
s: string;
begin
i := ListView.Selected.Index;
s := faves[i];
Faves[i] := Faves[i - 1];
Faves[i - 1] := s;
s := ListView.Selected.Caption;
ListView.Selected.Caption := Listview.Items[i - 1].Caption;
ListView.Items[i - 1].Caption := s;
ListView.Selected := ListView.Items[i - 1];
end;
procedure TFavoritesForm.btnMoveDownClick(Sender: TObject);
var
i: integer;
s: string;
begin
i := ListView.Selected.Index;
s := faves[i];
Faves[i] := Faves[i + 1];
Faves[i + 1] := s;
s := ListView.Selected.Caption;
ListView.Selected.Caption := Listview.Items[i + 1].Caption;
ListView.Items[i + 1].Caption := s;
ListView.Selected := ListView.Items[i + 1];
end;
end.

View File

@ -1,431 +0,0 @@
object RenderForm: TRenderForm
Left = 280
Top = 279
BorderIcons = [biSystemMenu, biMinimize]
BorderStyle = bsSingle
Caption = 'RenderForm'
ClientHeight = 400
ClientWidth = 424
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
Icon.Data = {
0000010001001010000000000000680300001600000028000000100000002000
0000010018000000000040030000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000005F97013B5500000000000000
0000000000000000000000000000000000000000000000005F97013B55000000
000000005F97181818000000000000005F971818180000000000000000000000
00000000000000005F97013B55005F97005F97005F971818181A0155005F9700
5F97181818000000000000000000000000000000005F97E4F2FB0088D9005F97
1A015537BBFD0088D91A0155005F970088D90088D91818180000000000000000
00000000005F97005F97E4F2FB0088D985E8FF85E8FF85E8FF37BBFD0088D9E4
F2FB181818005F97000000000000000000000000005F97013B55005F9785E8FF
37BBFD005F97005F9737BBFD85E8FF0088D9005F97005F970000000000000000
00000000013B5585E8FF85E8FF85E8FF005F9737BBFD0088D9005F9785E8FF85
E8FFE4F2FB005F97000000000000000000000000000000005F970088D9005F97
005F9785E8FF0088D9005F97005F970088D9005F970000000000000000000000
00000000000000005F97E8E8E80088D9005F9785E8FF0088D9005F970088D9E4
F2FB005F970000000000000000000000000000000000000088D9005F97000000
005F9785E8FF0088D9005F970000000088D90088D90000000000000000000000
00000000000000000000000000000000005F97E4F2FBE4F2FB005F9700000000
0000000000000000000000000000000000000000000000000000000000000000
000000005F97005F970000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000FFFF
0000FFFF0000FE7F0000E6670000E0070000C0030000C0030000C0030000C003
0000E0070000E0070000E4270000FC3F0000FE7F0000FFFF0000FFFF0000}
OldCreateOrder = False
OnClose = FormClose
OnCloseQuery = FormCloseQuery
OnCreate = FormCreate
OnDestroy = FormDestroy
OnShow = FormShow
PixelsPerInch = 96
TextHeight = 13
object ProgressBar: TProgressBar
Left = 8
Top = 330
Width = 409
Height = 13
Min = 0
Max = 100
TabOrder = 0
end
object btnRender: TButton
Left = 256
Top = 352
Width = 75
Height = 23
Caption = 'Render'
Default = True
TabOrder = 5
OnClick = btnRenderClick
end
object btnCancel: TButton
Left = 344
Top = 350
Width = 75
Height = 25
Caption = 'Close'
TabOrder = 6
OnClick = btnCancelClick
end
object GroupBox1: TGroupBox
Left = 8
Top = 69
Width = 408
Height = 57
Caption = 'Destination'
TabOrder = 1
object btnBrowse: TSpeedButton
Left = 368
Top = 16
Width = 24
Height = 24
Hint = 'Browse...'
Flat = True
Font.Charset = ANSI_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Arial'
Font.Style = [fsBold]
Glyph.Data = {
36030000424D3603000000000000360000002800000010000000100000000100
18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF
FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
FFFF00FFFF00FFFF00FF00000000000000000000000000000000000000000000
0000000000000000000000FF00FFFF00FFFF00FFFF00FFFF00FF000000000000
9FCFFF9FCFFF9FCFFF9FCFFF9FCFFF9FCFFF9FCFFF9FCFFF9FCFFF000000FF00
FFFF00FFFF00FFFF00FF0000009FFFFF0000009FCFFF9FCFFF9FCFFF9FCFFF9F
CFFF9FCFFF9FCFFF9FCFFF9FCFFF000000FF00FFFF00FFFF00FF0000009FFFFF
9FFFFF0000009FCFFF9FCFFF9FCFFF9FCFFF9FCFFF9FCFFF9FCFFF9FCFFF9FCF
FF000000FF00FFFF00FF0000009FFFFF9FFFFF9FFFFF0000009FCFFF9FCFFF9F
CFFF9FCFFF9FCFFF9FCFFF9FCFFF9FCFFF9FCFFF000000FF00FF0000009FFFFF
9FFFFF9FFFFF9FFFFF0000000000000000000000000000000000000000000000
00000000000000FF00FF0000009FFFFF9FFFFF9FFFFF9FFFFF9FFFFF9FFFFF9F
FFFF9FFFFF9FFFFF000000FF00FFFF00FFFF00FFFF00FFFF00FF0000009FFFFF
9FFFFF9FFFFF9FFFFF9FFFFF9FFFFF9FFFFF9FFFFF9FFFFF000000FF00FFFF00
FFFF00FFFF00FFFF00FF0000009FFFFF9FFFFF9FFFFF00000000000000000000
0000000000000000000000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF000000
000000000000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF0000
00000000000000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
00FFFF00FFFF00FFFF00FFFF00FFFF00FF000000000000FF00FFFF00FFFF00FF
FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF0C0C0CFF00FFFF00FFFF00FF0000
00FF00FF000000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
00FFFF00FF0B0B0B020202000000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
ParentFont = False
ParentShowHint = False
ShowHint = True
OnClick = btnBrowseClick
end
object Label10: TLabel
Left = 10
Top = 23
Width = 48
Height = 13
Caption = 'File name:'
end
object txtFilename: TEdit
Left = 72
Top = 20
Width = 281
Height = 21
TabOrder = 0
Text = 'txtFilename'
OnChange = txtFilenameChange
end
end
object GroupBox2: TGroupBox
Left = 8
Top = 130
Width = 200
Height = 105
Caption = 'Size'
TabOrder = 2
object Label1: TLabel
Left = 10
Top = 23
Width = 28
Height = 13
Caption = 'Width'
end
object Label2: TLabel
Left = 10
Top = 47
Width = 34
Height = 13
Caption = 'Height:'
end
object chkMaintain: TCheckBox
Left = 8
Top = 76
Width = 161
Height = 17
Caption = 'Maintain aspect ratio'
Checked = True
State = cbChecked
TabOrder = 0
OnClick = chkMaintainClick
end
object cbWidth: TComboBox
Left = 112
Top = 20
Width = 73
Height = 21
Enabled = False
ItemHeight = 13
TabOrder = 1
OnChange = txtWidthChange
Items.Strings = (
'320'
'640'
'800'
'1024'
'1280'
'1600'
'2048')
end
object cbHeight: TComboBox
Left = 112
Top = 44
Width = 73
Height = 21
Enabled = False
ItemHeight = 13
TabOrder = 2
OnChange = txtHeightChange
Items.Strings = (
'200'
'240'
'480'
'600'
'768'
'1024'
'1200'
'2048')
end
end
object GroupBox3: TGroupBox
Left = 216
Top = 130
Width = 200
Height = 105
Caption = 'Rendering'
TabOrder = 3
object Label3: TLabel
Left = 10
Top = 71
Width = 59
Height = 13
Caption = 'Oversample:'
end
object Label5: TLabel
Left = 10
Top = 47
Width = 61
Height = 13
Caption = 'Filter Radius:'
end
object Label4: TLabel
Left = 10
Top = 23
Width = 35
Height = 13
Caption = 'Quality:'
end
object txtOversample: TEdit
Left = 112
Top = 68
Width = 57
Height = 21
Enabled = False
ReadOnly = True
TabOrder = 2
Text = '2'
OnChange = txtOversampleChange
end
object txtFilterRadius: TEdit
Left = 112
Top = 44
Width = 57
Height = 21
TabOrder = 1
OnChange = txtFilterRadiusChange
end
object txtDensity: TEdit
Left = 112
Top = 20
Width = 57
Height = 21
TabOrder = 0
OnChange = txtDensityChange
end
object udOversample: TUpDown
Left = 169
Top = 68
Width = 12
Height = 21
Associate = txtOversample
Min = 1
Max = 4
Position = 2
TabOrder = 3
Wrap = False
end
end
object GroupBox4: TGroupBox
Left = 8
Top = 238
Width = 409
Height = 81
Caption = 'Memory usage'
TabOrder = 4
object lblApproxMem: TLabel
Left = 202
Top = 46
Width = 119
Height = 13
Caption = 'Approx. memory required:'
end
object lblPhysical: TLabel
Left = 202
Top = 20
Width = 121
Height = 13
Caption = 'Available phycial memory:'
end
object Label9: TLabel
Left = 8
Top = 46
Width = 86
Height = 13
Caption = 'Maximum memory:'
end
object cbMaxMemory: TComboBox
Left = 112
Top = 44
Width = 57
Height = 21
Enabled = False
ItemHeight = 13
TabOrder = 1
Items.Strings = (
'32'
'64'
'128'
'256'
'512')
end
object chkLimitMem: TCheckBox
Left = 8
Top = 20
Width = 145
Height = 17
Caption = 'Limit memory usage'
TabOrder = 0
OnClick = chkLimitMemClick
end
end
object btnPause: TButton
Left = 168
Top = 350
Width = 75
Height = 25
Caption = 'Pause'
TabOrder = 7
OnClick = btnPauseClick
end
object chkSave: TCheckBox
Left = 8
Top = 354
Width = 113
Height = 17
Caption = 'Save parameters'
Checked = True
State = cbChecked
TabOrder = 8
end
object GroupBox5: TGroupBox
Left = 8
Top = 8
Width = 408
Height = 57
Caption = 'Preset'
TabOrder = 9
object btnSavePreset: TSpeedButton
Left = 344
Top = 18
Width = 24
Height = 24
Hint = 'Save Preset'
Flat = True
Font.Charset = ANSI_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Arial'
Font.Style = [fsBold]
ParentFont = False
ParentShowHint = False
ShowHint = True
OnClick = btnSavePresetClick
end
object btnDeletePreset: TSpeedButton
Left = 368
Top = 18
Width = 24
Height = 24
Hint = 'Delete Preset'
Flat = True
Font.Charset = ANSI_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Arial'
Font.Style = [fsBold]
ParentFont = False
ParentShowHint = False
ShowHint = True
OnClick = btnDeletePresetClick
end
object cmbPreset: TComboBox
Left = 10
Top = 20
Width = 327
Height = 21
Style = csDropDownList
ItemHeight = 13
TabOrder = 0
OnChange = cmbPresetChange
end
end
object StatusBar: TStatusBar
Left = 0
Top = 381
Width = 424
Height = 19
Panels = <
item
Width = 161
end
item
Width = 150
end
item
Width = 50
end>
SimplePanel = False
end
object SaveDialog: TSaveDialog
Left = 368
Top = 256
end
end

View File

@ -1,675 +0,0 @@
{
Apophysis Copyright (C) 2001-2004 Mark Townsend
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
}
unit FormRender;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ControlPoint, RenderThread, ComCtrls, Math, Buttons, Registry, cmap,
ImageDLLLoader, ICOLoader, PNGLOader, HIPSLoader, BMPLoader, PCXLoader, WMFLoader,
LinarBitmap, ExtCtrls, FileUtils, JPEGLoader, JPEG;
const
WM_THREAD_COMPLETE = WM_APP + 5437;
WM_THREAD_TERMINATE = WM_APP + 5438;
type
TRenderForm = class(TForm)
ProgressBar: TProgressBar;
btnRender: TButton;
btnCancel: TButton;
GroupBox1: TGroupBox;
btnBrowse: TSpeedButton;
Label10: TLabel;
txtFilename: TEdit;
GroupBox2: TGroupBox;
Label1: TLabel;
Label2: TLabel;
GroupBox3: TGroupBox;
Label3: TLabel;
Label5: TLabel;
Label4: TLabel;
txtOversample: TEdit;
txtFilterRadius: TEdit;
txtDensity: TEdit;
GroupBox4: TGroupBox;
lblApproxMem: TLabel;
lblPhysical: TLabel;
Label9: TLabel;
cbMaxMemory: TComboBox;
chkLimitMem: TCheckBox;
SaveDialog: TSaveDialog;
btnPause: TButton;
chkSave: TCheckBox;
GroupBox5: TGroupBox;
btnSavePreset: TSpeedButton;
cmbPreset: TComboBox;
btnDeletePreset: TSpeedButton;
udOversample: TUpDown;
chkMaintain: TCheckBox;
cbWidth: TComboBox;
cbHeight: TComboBox;
StatusBar: TStatusBar;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure btnRenderClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure txtWidthChange(Sender: TObject);
procedure txtHeightChange(Sender: TObject);
procedure txtOversampleChange(Sender: TObject);
procedure chkLimitMemClick(Sender: TObject);
procedure txtFilenameChange(Sender: TObject);
procedure btnCancelClick(Sender: TObject);
procedure txtDensityChange(Sender: TObject);
procedure txtFilterRadiusChange(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure btnPauseClick(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure btnSavePresetClick(Sender: TObject);
procedure btnBrowseClick(Sender: TObject);
procedure btnDeletePresetClick(Sender: TObject);
procedure cmbPresetChange(Sender: TObject);
procedure chkMaintainClick(Sender: TObject);
private
StartTime: TDateTime;
Remainder: TDateTime;
procedure HandleThreadCompletion(var Message: TMessage);
message WM_THREAD_COMPLETE;
procedure HandleThreadTermination(var Message: TMessage);
message WM_THREAD_TERMINATE;
procedure ListPresets;
public
Renderer: TRenderThread;
PhysicalMemory, ApproxMemory: int64;
ColorMap: TColorMap;
cp: TControlPoint;
Filename: string;
ImageWidth, ImageHeight, Oversample: Integer;
zoom, Sample_Density, Brightness, Gamma, Vibrancy, Filter_Radius: double;
center: array[0..1] of double;
procedure OnProgress(prog: double);
procedure ShowMemoryStatus;
procedure ResetControls;
end;
var
RenderForm: TRenderForm;
Ratio: double;
implementation
uses Main, Global, SavePreset, FileCtrl;
{$R *.DFM}
procedure TRenderForm.ResetControls;
begin
txtFilename.Enabled := true;
btnBrowse.Enabled := true;
cbWidth.Enabled := true;
cbHeight.Enabled := true;
txtDensity.Enabled := true;
txtFilterRadius.enabled := true;
txtOversample.Enabled := true;
chkLimitMem.Enabled := true;
cbMaxMemory.enabled := chkLimitMem.Checked;
btnRender.Enabled := true;
cmbPreset.enabled := true;
chkSave.enabled := true;
btnSavePreset.enabled := true;
btnDeletePreset.enabled := true;
btnCancel.Caption := 'Close';
btnPause.enabled := false;
ProgressBar.Position := 0;
ShowMemoryStatus;
end;
procedure TRenderForm.ShowMemoryStatus;
var
GlobalMemoryInfo: TMemoryStatus; // holds the global memory status information
begin
GlobalMemoryInfo.dwLength := SizeOf(GlobalMemoryInfo);
GlobalMemoryStatus(GlobalMemoryInfo);
PhysicalMemory := GlobalMemoryInfo.dwAvailPhys div 1048576;
ApproxMemory := 32 * Oversample * Oversample;
ApproxMemory := ApproxMemory * ImageHeight * ImageWidth;
ApproxMemory := ApproxMemory div 1048576;
// ApproxMemory := (32 * Oversample * Oversample * ImageHeight * ImageWidth) div 1048576; // or 1000000?
lblPhysical.Caption := 'Physical memory available: ' + Format('%d', [PhysicalMemory]) + ' MB';
lblApproxMem.Caption := 'Approximate memory required: ' + Format('%d', [ApproxMemory]) + ' MB';
if ApproxMemory > PhysicalMemory then
; // show warning icon.
end;
procedure TRenderForm.HandleThreadCompletion(var Message: TMessage);
begin
with TLinearBitmap.Create do
try
Assign(Renderer.GetImage);
JPEGLoader.Default.Quality := JPEGQuality;
SaveToFile(RenderForm.FileName);
Renderer.Free;
Renderer := nil;
ResetControls;
finally
Free;
end;
end;
procedure TRenderForm.HandleThreadTermination(var Message: TMessage);
begin
if Assigned(Renderer) then
begin
Renderer.Free;
Renderer := nil;
ResetControls;
end;
end;
procedure TRenderForm.OnProgress(prog: double);
var
Elapsed: TDateTime;
e, r: string;
begin
prog := (Renderer.Slice + Prog) / Renderer.NrSlices;
if ShowProgress then ProgressBar.Position := round(100 * prog);
Elapsed := Now - StartTime;
e := Format('Elapsed %2.2d:%2.2d:%2.2d.%2.2d',
[Trunc(Elapsed * 24),
Trunc((Elapsed * 24 - Trunc(Elapsed * 24)) * 60),
Trunc((Elapsed * 24 * 60 - Trunc(Elapsed * 24 * 60)) * 60),
Trunc((Elapsed * 24 * 60 * 60 - Trunc(Elapsed * 24 * 60 * 60)) * 100)]);
if prog > 0 then
Remainder := Min(Remainder, Elapsed * (power(1 / prog, 1.2) - 1));
r := Format('Remaining %2.2d:%2.2d:%2.2d.%2.2d',
[Trunc(Remainder * 24),
Trunc((Remainder * 24 - Trunc(Remainder * 24)) * 60),
Trunc((Remainder * 24 * 60 - Trunc(Remainder * 24 * 60)) * 60),
Trunc((Remainder * 24 * 60 * 60 - Trunc(Remainder * 24 * 60 * 60)) * 100)]);
StatusBar.Panels[0].text := e;
StatusBar.Panels[1].text := r;
StatusBar.Panels[2].text := 'Slice ' + IntToStr(Renderer.Slice + 1) + ' of ' + IntToStr(Renderer.nrSlices);
end;
procedure TRenderForm.FormCreate(Sender: TObject);
begin
cp := TControlPoint.Create;
ImageDLLLoader.Default.FindDLLs(ProgramPath);
cbMaxMemory.ItemIndex := 1;
MainForm.Buttons.GetBitmap(2, btnSavePreset.Glyph);
MainForm.Buttons.GetBitmap(9, btnDeletePreset.Glyph);
ListPresets;
end;
procedure TRenderForm.FormDestroy(Sender: TObject);
begin
if assigned(Renderer) then Renderer.Terminate;
if assigned(Renderer) then Renderer.WaitFor;
if assigned(Renderer) then Renderer.Free;
cp.free;
end;
procedure TRenderForm.btnRenderClick(Sender: TObject);
var
t: string;
begin
ImageWidth := StrToInt(cbWidth.text);
ImageHeight := StrToInt(cbHeight.text);
if (not chkLimitMem.checked) and (ApproxMemory > PhysicalMemory) then
begin
Application.MessageBox('You do not have enough memory for this render. Please use memory limiting.', 'Apophysis', 48);
exit;
end;
if chkLimitMem.checked and (PhysicalMemory < StrToInt(cbMaxMemory.text)) and (Approxmemory > PhysicalMemory) then begin
Application.MessageBox('You do not have enough memory for this render. Please use a lower Maximum memory setting.', 'Apophysis', 48);
exit;
end;
t := txtFilename.Text;
if t = '' then
begin
Application.MessageBox(PChar('Please enter a file name.'), 'Apophysis', 48);
Exit;
end;
if FileExists(t) then
if Application.MessageBox(PChar(t + ' already exists.' + chr(13) + 'Do you want to replace it?'),
'Apophysis', 52) = ID_NO then exit;
if not DirectoryExists(ExtractFileDir(t)) then
begin
Application.MessageBox('The directory does not exist.', 'Apophyis', 16);
exit;
end;
{Check for invalid values }
if sample_density <= 0 then
begin
Application.MessageBox('Invalid Sample Density value', 'Apophysis', 16);
exit;
end;
if filter_radius <= 0 then
begin
Application.MessageBox('Invalid Filter Radius value', 'Apophysis', 16);
exit;
end;
if Oversample < 1 then
begin
Application.MessageBox('Invalid Oversmple value', 'Apophysis', 16);
exit;
end;
if ImageWidth < 1 then
begin
Application.MessageBox('Invalid image width', 'Apophysis', 16);
exit;
end;
if ImageHeight < 1 then
begin
Application.MessageBox('Invalid image height', 'Apophysis', 16);
exit;
end;
txtFilename.Enabled := false;
btnBrowse.Enabled := false;
cbWidth.Enabled := False;
cbHeight.Enabled := false;
txtDensity.Enabled := false;
txtFilterRadius.enabled := false;
txtOversample.Enabled := false;
chkLimitMem.Enabled := false;
cbMaxMemory.Enabled := false;
cmbPreset.enabled := false;
chkSave.enabled := false;
btnSavePreset.enabled := false;
btnDeletePreset.enabled := false;
btnRender.Enabled := false;
btnPause.enabled := true;
btnCancel.Caption := 'Stop';
StartTime := Now;
Remainder := 365;
if Assigned(Renderer) then Renderer.Terminate;
if Assigned(Renderer) then Renderer.WaitFor;
if not Assigned(Renderer) then
begin
cp.sample_density := Sample_density;
cp.spatial_oversample := Oversample;
cp.spatial_filter_radius := Filter_Radius;
AdjustScale(cp, ImageWidth, ImageHeight);
renderPath := ExtractFilePath(Filename);
if chkSave.checked then
MainForm.SaveXMLFlame(cp, ExtractFileName(FileName), renderPath + 'renders.flame');
Renderer := TRenderThread.Create;
if chkLimitMem.checked then
(*
if cbMaxMemory.ItemIndex = 0 then Renderer.MaxMem := 32
else if cbMaxMemory.ItemIndex = 1 then Renderer.MaxMem := 64
else if cbMaxMemory.ItemIndex = 2 then Renderer.MaxMem := 128
else if cbMaxMemory.ItemIndex = 3 then Renderer.MaxMem := 256
else if cbMaxMemory.ItemIndex = 4 then Renderer.MaxMem := 512;
*)
Renderer.MaxMem := StrToInt(cbMaxMemory.text);
Renderer.OnProgress := OnProgress;
Renderer.TargetHandle := RenderForm.Handle;
Renderer.Compatibility := compatibility;
Renderer.SetCP(cp);
Renderer.Priority := tpLower;
Renderer.Resume;
end;
end;
procedure TRenderForm.FormShow(Sender: TObject);
var
Registry: TRegistry;
begin
{ Read posution from registry }
Registry := TRegistry.Create;
try
Registry.RootKey := HKEY_CURRENT_USER;
if Registry.OpenKey('Software\' + APP_NAME + '\Forms\Render', False) then
begin
if Registry.ValueExists('Left') then
RenderForm.Left := Registry.ReadInteger('Left');
if Registry.ValueExists('Top') then
RenderForm.Top := Registry.ReadInteger('Top');
end;
Registry.CloseKey;
finally
Registry.Free;
end;
SaveDialog.FileName := Filename;
case renderFileFormat of
1: txtFilename.Text := ChangeFileExt(SaveDialog.Filename, '.bmp');
2: txtFilename.Text := ChangeFileExt(SaveDialog.Filename, '.png');
3: txtFilename.Text := ChangeFileExt(SaveDialog.Filename, '.jpg');
end;
txtOversample.Text := IntToStr(renderOversample);
txtFilterRadius.Text := FloatToStr(renderFilterRadius);
cbWidth.Text := IntToStr(MainForm.Image.Width);
cbHeight.Text := IntToStr(MainForm.Image.Height);
ImageWidth := StrToInt(cbWidth.Text);
ImageHeight := StrToInt(cbHeight.Text);
txtDensity.Text := FloatToStr(renderDensity);
ShowMemoryStatus;
Ratio := ImageWidth / ImageHeight;
end;
procedure TRenderForm.txtWidthChange(Sender: TObject);
begin
try
ImageWidth := StrToInt(cbWidth.Text);
if chkMaintain.checked and cbWidth.Focused then
begin
ImageHeight := Round(ImageWidth / ratio);
cbHeight.Text := IntToStr(ImageHeight)
end;
except
end;
ShowMemoryStatus;
end;
procedure TRenderForm.txtHeightChange(Sender: TObject);
begin
try
ImageHeight := StrToInt(cbHeight.Text);
if chkMaintain.checked and cbHeight.Focused then
begin
ImageWidth := Round(ImageHeight * ratio);
cbWidth.Text := IntToStr(ImageWidth)
end;
except
end;
ShowMemoryStatus;
end;
procedure TRenderForm.txtOversampleChange(Sender: TObject);
begin
if StrToInt(txtOversample.Text) > udOversample.Max then
txtOversample.Text := IntToStr(udOversample.Max);
if StrToInt(txtOversample.Text) < udOversample.Min then
txtOversample.Text := IntToStr(udOversample.Min);
try
Oversample := StrToInt(txtOversample.Text);
except
end;
ShowMemoryStatus;
end;
procedure TRenderForm.chkLimitMemClick(Sender: TObject);
begin
cbMaxMemory.enabled := chkLimitMem.Checked;
end;
procedure TRenderForm.txtFilenameChange(Sender: TObject);
begin
filename := txtFilename.text;
end;
procedure TRenderForm.btnCancelClick(Sender: TObject);
begin
if Assigned(Renderer) then
Renderer.Terminate
else
close;
end;
procedure TRenderForm.txtDensityChange(Sender: TObject);
begin
try
Sample_Density := StrToFloat(txtDensity.Text);
except
end;
end;
procedure TRenderForm.txtFilterRadiusChange(Sender: TObject);
begin
try
Filter_Radius := StrToFloat(txtFilterRadius.Text);
except
end;
end;
procedure TRenderForm.FormClose(Sender: TObject; var Action: TCloseAction);
var
Ext: string;
Registry: TRegistry;
begin
Ext := ExtractFileExt(txtFileName.Text);
if Ext = '.bmp' then renderFileFormat := 1;
if Ext = '.png' then renderFileFormat := 2;
if (Ext = '.jpg') or (Ext = '.jpeg') then renderFileFormat := 3;
renderFilterRadius := Filter_Radius;
renderWidth := ImageWidth;
renderHeight := ImageHeight;
renderDensity := Sample_density;
renderOversample := Oversample;
{ Write position to registry }
Registry := TRegistry.Create;
try
Registry.RootKey := HKEY_CURRENT_USER;
if Registry.OpenKey('\Software\' + APP_NAME + '\Forms\Render', True) then
begin
Registry.WriteInteger('Top', RenderForm.Top);
Registry.WriteInteger('Left', RenderForm.Left);
end;
finally
Registry.Free;
end;
end;
procedure TRenderForm.btnPauseClick(Sender: TObject);
begin
if Assigned(Renderer) then
if Renderer.Suspended = false then
begin
renderer.suspend;
btnPause.caption := 'Resume';
end
else
begin
renderer.resume;
btnPause.caption := 'Pause';
end;
end;
procedure TRenderForm.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
if Assigned(Renderer) then
if Application.MessageBox('Do you want to abort the current render?', 'Apophysis', 36) = ID_NO then
CanClose := False
else
begin
if Assigned(Renderer) then Renderer.Terminate;
end;
end;
procedure TRenderForm.btnSavePresetClick(Sender: TObject);
var
IFile: TextFile;
Title, Filename: string;
begin
SavePresetForm.txtPresetName.Text := cmbPreset.Text;
if SavePresetForm.ShowModal = mrOK then
begin
Title := Trim(SavePresetForm.txtPresetName.Text);
Filename := AppPath + 'render presets';
try
AssignFile(IFile, FileName);
if FileExists(FileName) then
begin
if EntryExists(Title, FileName) then DeleteEntry(Title, FileName);
Append(IFile);
end
else
ReWrite(IFile);
WriteLn(IFile, Title + ' {');
WriteLn(IFile, Trim(cbWidth.text));
WriteLn(IFile, Trim(cbHeight.text));
WriteLn(IFile, Trim(txtDensity.text));
WriteLn(IFile, Trim(txtFilterRadius.text));
WriteLn(IFile, Trim(txtOversample.text));
WriteLn(IFile, ExtractFileExt(txtFileName.Text));
if chkLimitMem.Checked then
WriteLn(IFile, 'true')
else
WriteLn(IFile, 'false');
WriteLn(IFile, IntToStr(cbMaxMemory.ItemIndex));
WriteLn(IFile, cbMaxMemory.Text);
WriteLn(IFile, '}');
WriteLn(IFile, '');
CloseFile(IFile);
except on EInOutError do
begin
Application.MessageBox('Cannot save preset.', 'Apophysis', 16);
Exit;
end;
end;
ListPresets;
cmbPreset.ItemIndex := cmbPreset.Items.count - 1;
end;
end;
procedure TRenderForm.btnBrowseClick(Sender: TObject);
begin
SaveDialog.Filename := Filename;
case renderFileFormat of
1: SaveDialog.DefaultExt := 'bmp';
2: SaveDialog.DefaultExt := 'png';
3: SaveDialog.DefaultExt := 'jpg';
end;
SaveDialog.filterIndex := renderFileFormat;
SaveDialog.Filter := 'Bitmap image (*.bmp) | *.bmp|PNG Image (*.png)|*.png|JPEG image (*.jpg;*.jpeg)|*.jpg;*.jpeg';
if SaveDialog.Execute then
begin
case SaveDialog.FilterIndex of
1: txtFilename.Text := ChangeFileExt(SaveDialog.Filename, '.bmp');
2: txtFilename.Text := ChangeFileExt(SaveDialog.Filename, '.png');
3: txtFilename.Text := ChangeFileExt(SaveDialog.Filename, '.jpg');
end;
renderFileFormat := SaveDialog.FilterIndex;
renderPath := ExtractFilePath(SaveDialog.Filename);
end;
end;
procedure TRenderForm.ListPresets;
{ List identifiers in file }
var
i, p: integer;
Title: string;
FStrings: TStringList;
begin
FStrings := TStringList.Create;
if fileExists(AppPath + 'render presets') then
try
FStrings.LoadFromFile(AppPath + 'render presets');
cmbPreset.Clear;
if (Pos('{', FStrings.Text) <> 0) then
begin
for i := 0 to FStrings.Count - 1 do
begin
p := Pos('{', FStrings[i]);
if (p <> 0) then
begin
Title := Trim(Copy(FStrings[i], 1, p - 1));
if Title <> '' then
begin
cmbPreset.Items.add(Copy(FStrings[i], 1, p - 1));
end;
end;
end;
end;
finally
FStrings.Free;
end;
end;
procedure TRenderForm.btnDeletePresetClick(Sender: TObject);
var
Title, Filename: string;
begin
Title := Trim(cmbPreset.Text);
if Title = '' then exit;
Filename := AppPath + 'render presets';
if EntryExists(Title, FileName) then DeleteEntry(Title, FileName);
ListPresets;
end;
procedure TRenderForm.cmbPresetChange(Sender: TObject);
var
chk: boolean;
i, j: integer;
FStrings: TStringList;
Title, Filename: string;
begin
Title := Trim(cmbPreset.Text);
Filename := AppPath + 'render presets';
if Title = '' then exit;
if EntryExists(Title, FileName) then
begin
// Load preset
FStrings := TStringList.Create;
try
FStrings.LoadFromFile(Filename);
for i := 0 to FStrings.Count - 1 do
if Pos(LowerCase(Title) + ' {', Lowercase(FStrings[i])) <> 0 then
begin
chk := chkMaintain.checked;
chkMaintain.Checked := False;
j := i + 1;
cbWidth.Text := FStrings[j];
inc(j);
cbHeight.text := FStrings[j];
chkMaintain.Checked := chk;
inc(j);
txtDensity.text := FStrings[j];
inc(j);
txtFilterRadius.text := FStrings[j];
inc(j);
txtOversample.text := FStrings[j];
inc(j);
txtFileName.Text := ChangeFileExt(txtFileName.Text, FStrings[j]);
inc(j);
if Fstrings[j] = 'true' then chkLimitMem.checked := true else chkLimitMem.checked := false;
inc(j);
cbMaxMemory.ItemIndex := StrToInt(Fstrings[j]);
cbMaxMemory.enabled := chkLimitMem.checked;
inc(j);
cbMaxMemory.Text := Fstrings[j];
break;
end;
finally
FStrings.Free;
end
end;
ImageWidth := StrToInt(cbWidth.Text);
ImageHeight := StrToInt(cbHeight.Text);
ShowMemoryStatus;
end;
procedure TRenderForm.chkMaintainClick(Sender: TObject);
begin
Ratio := ImageWidth / ImageHeight;
end;
end.

View File

@ -1,30 +0,0 @@
object FullscreenForm: TFullscreenForm
Left = 438
Top = 324
BorderStyle = bsNone
Caption = 'FullscreenForm'
ClientHeight = 133
ClientWidth = 188
Color = clBlack
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
OnClose = FormClose
OnCreate = FormCreate
OnDestroy = FormDestroy
OnKeyPress = FormKeyPress
OnShow = FormShow
PixelsPerInch = 96
TextHeight = 13
object Image: TImage
Left = 0
Top = 0
Width = 188
Height = 133
Align = alClient
OnDblClick = ImageDblClick
end
end

View File

@ -1,180 +0,0 @@
{
Apophysis Copyright (C) 2001-2004 Mark Townsend
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
}
unit Fullscreen;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Menus, ControlPoint, RenderThread, ExtCtrls;
type
TFullscreenForm = class(TForm)
Image: TImage;
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure ImageDblClick(Sender: TObject);
private
Remainder, StartTime, Now: Extended;
Renderer: TRenderThread;
procedure showTaskbar;
procedure hideTaskbar;
procedure DrawFlame;
procedure OnProgress(prog: double);
procedure HandleThreadCompletion(var Message: TMessage);
message WM_THREAD_COMPLETE;
procedure HandleThreadTermination(var Message: TMessage);
message WM_THREAD_TERMINATE;
public
Calculate : boolean;
cp: TControlPoint;
Zoom: double;
center: array[0..1] of double;
end;
var
FullscreenForm: TFullscreenForm;
implementation
uses Main, Math, Global;
{$R *.DFM}
procedure TFullscreenForm.DrawFlame;
begin
AdjustScale(cp, Image.Width, Image.Height);
// cp.Zoom := MainForm.Zoom;
// cp.center[0] := MainForm.center[0];
// cp.center[1] := MainForm.center[1];
cp.sample_density := defSampleDensity;
StartTime := Now;
Remainder := 1;
if Assigned(Renderer) then Renderer.Terminate;
if Assigned(Renderer) then Renderer.WaitFor;
if not Assigned(Renderer) then
begin
Renderer := TRenderThread.Create;
Renderer.TargetHandle := Handle;
Renderer.OnProgress := OnProgress;
Renderer.Compatibility := Compatibility;
Renderer.SetCP(cp);
Renderer.Resume;
end;
end;
procedure TFullscreenForm.HandleThreadCompletion(var Message: TMessage);
var
bm: TBitmap;
begin
if Assigned(Renderer) then
begin
bm := TBitmap.Create;
bm.assign(Renderer.GetImage);
Image.Picture.Graphic := bm;
// Canvas.StretchDraw(Rect(0, 0, ClientWidth, ClientHeight), bm);
Renderer.Free;
Renderer := nil;
bm.Free;
end;
end;
procedure TFullscreenForm.HandleThreadTermination(var Message: TMessage);
begin
if Assigned(Renderer) then
begin
Renderer.Free;
Renderer := nil;
end;
end;
procedure TFullscreenForm.OnProgress(prog: double);
begin
prog := (Renderer.Slice + Prog) / Renderer.NrSlices;
Canvas.Brush.Color := clTeal;
Canvas.FrameRect(Rect(5, ClientHeight - 15, ClientWidth - 5, ClientHeight - 5));
Canvas.Brush.Color := clTeal;
Canvas.Fillrect(Rect(7, ClientHeight - 13, 7 + Round(prog * (ClientWidth - 14)), ClientHeight - 7));
Canvas.Brush.Color := clBlack;
Canvas.Fillrect(Rect(7 + Round(prog * (ClientWidth - 14)), ClientHeight - 13, ClientWidth - 7, ClientHeight - 7));
Application.ProcessMessages;
end;
procedure TFullscreenForm.hideTaskbar;
var wndHandle: THandle;
wndClass: array[0..50] of Char;
begin
StrPCopy(@wndClass[0], 'Shell_TrayWnd');
wndHandle := FindWindow(@wndClass[0], nil);
ShowWindow(wndHandle, SW_HIDE);
end;
procedure TFullscreenForm.showTaskbar;
var wndHandle: THandle;
wndClass: array[0..50] of Char;
begin
StrPCopy(@wndClass[0], 'Shell_TrayWnd');
wndHandle := FindWindow(@wndClass[0], nil);
ShowWindow(wndHandle, SW_RESTORE);
end;
procedure TFullscreenForm.FormShow(Sender: TObject);
begin
MainForm.mnuShowFull.enabled := true;
HideTaskbar;
if calculate then
DrawFlame;
end;
procedure TFullscreenForm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
if Assigned(Renderer) then Renderer.Terminate;
ShowTaskbar;
end;
procedure TFullscreenForm.FormCreate(Sender: TObject);
begin
cp := TControlPoint.Create;
end;
procedure TFullscreenForm.FormDestroy(Sender: TObject);
begin
if assigned(Renderer) then Renderer.Terminate;
if assigned(Renderer) then Renderer.WaitFor;
if assigned(Renderer) then Renderer.Free;
cp.Free;
end;
procedure TFullscreenForm.FormKeyPress(Sender: TObject; var Key: Char);
begin
close;
end;
procedure TFullscreenForm.ImageDblClick(Sender: TObject);
begin
close;
end;
end.

View File

@ -1,379 +0,0 @@
{
Apophysis Copyright (C) 2001-2004 Mark Townsend
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
}
{$D-,L-,O+,Q-,R-,Y-,S-}
unit Global;
interface
uses SysUtils, Classes, SyncObjs, Controls, Graphics, Math, MyTypes, controlpoint;
type
EFormatInvalid = class(Exception);
{ Weight manipulation }
{ Triangle transformations }
function triangle_area(t: TTriangle): double;
function transform_affine(const t: TTriangle; const Triangles: TTriangles): boolean;
function line_dist(x, y, x1, y1, x2, y2: double): double;
function dist(x1, y1, x2, y2: double): double;
{ Parsing functions }
function GetVal(token: string): string;
function ReplaceTabs(str: string): string;
{ Palette and gradient functions }
function GetGradient(FileName, Entry: string): string;
{ Misc }
function det(a, b, c, d: double): double;
function solve3(x1, x2, x1h, y1, y2, y1h, z1, z2, z1h: double;
var a, b, e: double): double;
const
APP_NAME: string = 'Apophysis 2.0';
prefilter_white: integer = 1024;
eps: double = 1E-10;
White_level = 200;
clyellow1 = TColor($17FCFF);
clplum2 = TColor($ECA9E6);
clSlateGray = TColor($837365);
FT_BMP = 1; FT_PNG = 2; FT_JPG = 3;
var
MainTriangles: TTriangles;
ConfirmDelete: boolean; // Flag confirmation of entry deletion
// FlameTitle: string;
Transforms: integer; // Count of Tranforms
AppPath: string; // Path of applicatio file
OpenFile: string; // Name of currently open file
CanDrawOnResize: boolean;
PreserveWeights: boolean;
{UPR Options}
UPRSampleDensity: integer;
UPRFilterRadius: double;
UPROversample: integer;
UPRAdjustDensity: boolean;
UPRColoringIdent: string;
UPRColoringFile: string;
UPRFormulaIdent: string;
UPRFormulaFile: string;
UPRWidth: Integer;
UPRHeight: Integer;
ImageFolder: string;
UPRPath: string; // Name and folder of last UPR file
UpdateGradient: boolean;
cmap_index: integer; // Index to current gradient
Variation: TVariation; // Current variation
NumTries, TryLength: integer; // Settings for smooth palette
SmoothPaletteFile: string;
{ Display }
defSampleDensity, defPreviewDensity: Double;
defGamma, defBrightness, defVibrancy, defFilterRadius: Double;
defOversample: integer;
{ Render }
renderDensity, renderFilterRadius: double;
renderOversample, renderWidth, renderHeight: integer;
renderPath: string;
JPEGQuality: integer;
renderFileFormat: integer;
{ Defaults }
SavePath, SmoothPalettePath: string;
RandomPrefix, RandomDate: string;
RandomIndex: integer;
FlameFile, GradientFile, GradientEntry, FlameEntry: string;
ParamFolder: string;
prevLowQuality, prevMediumQuality, prevHighQuality: double;
defSmoothPaletteFile: string;
BrowserPath: string; // Stored path of browser open dialog
EditPrevQual, MutatePrevQual, AdjustPrevQual: Integer;
randMinTransforms, randMaxTransforms: integer;
mutantMinTransforms, mutantMaxTransforms: integer;
KeepBackground: boolean;
randGradient: Integer;
defFlameFile: string;
SymmetryType: integer;
SymmetryOrder: integer;
Variations: array[0..NVARS - 1] of boolean;
VariationOptions: integer;
{ For random gradients }
MinNodes, MaxNodes, MinHue, MaxHue, MinSat, MaxSat, MinLum, MaxLum: integer;
FixedReference: boolean;
BatchSize: Integer;
Compatibility: integer; //0 = original, 1 = Drave's
Favorites: TStringList;
Script: string;
ScriptPath: string;
SheepServer, SheepNick, SheepURL, SheepPW, HqiPath: string;
ExportBatches, ExportOversample, ExportWidth, ExportHeight, ExportFileFormat: Integer;
ExportFilter, ExportDensity: Double;
OpenFileType: TFileType;
ResizeOnLoad: Boolean;
ShowProgress: Boolean;
defLibrary: string;
LimitVibrancy: Boolean;
implementation
uses dialogs, Main;
{ IFS }
function det(a, b, c, d: double): double;
begin
Result := (a * d - b * c);
end;
function solve3(x1, x2, x1h, y1, y2, y1h, z1, z2, z1h: double;
var a, b, e: double): double;
var
det1: double;
begin
det1 := x1 * det(y2, 1.0, z2, 1.0) - x2 * det(y1, 1.0, z1, 1.0)
+ 1 * det(y1, y2, z1, z2);
if (det1 = 0.0) then
begin
Result := det1;
EXIT;
end
else
begin
a := (x1h * det(y2, 1.0, z2, 1.0) - x2 * det(y1h, 1.0, z1h, 1.0)
+ 1 * det(y1h, y2, z1h, z2)) / det1;
b := (x1 * det(y1h, 1.0, z1h, 1.0) - x1h * det(y1, 1.0, z1, 1.0)
+ 1 * det(y1, y1h, z1, z1h)) / det1;
e := (x1 * det(y2, y1h, z2, z1h) - x2 * det(y1, y1h, z1, z1h)
+ x1h * det(y1, y2, z1, z2)) / det1;
a := Round6(a);
b := Round6(b);
e := Round6(e);
Result := det1;
end;
end;
function dist(x1, y1, x2, y2: double): double;
var
d2: double;
begin
{ From FDesign source
{ float pt_pt_distance(float x1, float y1, float x2, float y2) }
d2 := (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);
if (d2 = 0.0) then
begin
Result := 0.0;
exit;
end
else
Result := sqrt(d2);
end;
function line_dist(x, y, x1, y1, x2, y2: double): double;
var
a, b, e, c: double;
begin
if ((x = x1) and (y = y1)) then
a := 0.0
else
a := sqrt((x - x1) * (x - x1) + (y - y1) * (y - y1));
if ((x = x2) and (y = y2)) then
b := 0.0
else
b := sqrt((x - x2) * (x - x2) + (y - y2) * (y - y2));
if ((x1 = x2) and (y1 = y2)) then
e := 0.0
else
e := sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
if ((a * a + e * e) < (b * b)) then
Result := a
else if ((b * b + e * e) < (a * a)) then
Result := b
else if (e <> 0.0) then
begin
c := (b * b - a * a - e * e) / (-2 * e);
if ((a * a - c * c) < 0.0) then
Result := 0.0
else
Result := sqrt(a * a - c * c);
end
else
Result := a;
end;
function transform_affine(const t: TTriangle; const Triangles: TTriangles): boolean;
var
ra, rb, rc, a, b, c: double;
begin
Result := True;
ra := dist(Triangles[-1].y[0], Triangles[-1].x[0],
Triangles[-1].y[1], Triangles[-1].x[1]);
rb := dist(Triangles[-1].y[1], Triangles[-1].x[1],
Triangles[-1].y[2], Triangles[-1].x[2]);
rc := dist(Triangles[-1].y[2], Triangles[-1].x[2],
Triangles[-1].y[0], Triangles[-1].x[0]);
a := dist(t.y[0], t.x[0], t.y[1], t.x[1]);
b := dist(t.y[1], t.x[1], t.y[2], t.x[2]);
c := dist(t.y[2], t.x[2], t.y[0], t.x[0]);
if (a > ra) then
Result := False
else if (b > rb) then
Result := False
else if (c > rc) then
Result := False
else if ((a = ra) and (b = rb) and (c = rc)) then
Result := False;
end;
function triangle_area(t: TTriangle): double;
var
base, height: double;
begin
try
base := dist(t.x[0], t.y[0], t.x[1], t.y[1]);
height := line_dist(t.x[2], t.y[2], t.x[1], t.y[1],
t.x[0], t.y[0]);
if (base < 1.0) then
Result := height
else if (height < 1.0) then
Result := base
else
Result := 0.5 * base * height;
except on E: EMathError do
Result := 0;
end;
end;
{ Weight manipulation }
{ Parse }
function GetVal(token: string): string;
var
p: integer;
begin
p := Pos('=', token);
Delete(Token, 1, p);
Result := Token;
end;
function ReplaceTabs(str: string): string;
{Changes tab characters in a string to spaces}
var
i: integer;
begin
for i := 1 to Length(str) do
begin
if str[i] = #9 then
begin
Delete(str, i, 1);
Insert(#32, str, i);
end;
end;
Result := str;
end;
{ Palette and gradient functions }
function RGBToColor(Pal: TMapPalette; index: integer): Tcolor;
begin
{ Converts the RGB values from a palette index to the TColor type ...
could maybe change it to SHLs }
Result := (Pal.Blue[index] * 65536) + (Pal.Green[index] * 256)
+ Pal.Red[index];
end;
procedure rgb2hsv(const rgb: array of double; out hsv: array of double);
var
maxval, minval: double;
del: double;
begin
Maxval := Max(rgb[0], Max(rgb[1], rgb[2]));
Minval := Min(rgb[0], Min(rgb[1], rgb[2]));
hsv[2] := maxval; // v
if (Maxval > 0) and (maxval <> minval) then begin
del := maxval - minval;
hsv[1] := del / Maxval; //s
hsv[0] := 0;
if (rgb[0] > rgb[1]) and (rgb[0] > rgb[2]) then begin
hsv[0] := (rgb[1] - rgb[2]) / del;
end else if (rgb[1] > rgb[2]) then begin
hsv[0] := 2 + (rgb[2] - rgb[0]) / del;
end else begin
hsv[0] := 4 + (rgb[0] - rgb[1]) / del;
end;
if hsv[0] < 0 then
hsv[0] := hsv[0] + 6;
end else begin
hsv[0] := 0;
hsv[1] := 0;
end;
end;
procedure hsv2rgb(const hsv: array of double; out rgb: array of double);
var
j: integer;
f, p, q, t, v: double;
begin
j := floor(hsv[0]);
f := hsv[0] - j;
v := hsv[2];
p := hsv[2] * (1 - hsv[1]);
q := hsv[2] * (1 - hsv[1] * f);
t := hsv[2] * (1 - hsv[1] * (1 - f));
case j of
0: begin rgb[0] := v; rgb[1] := t; rgb[2] := p; end;
1: begin rgb[0] := q; rgb[1] := v; rgb[2] := p; end;
2: begin rgb[0] := p; rgb[1] := v; rgb[2] := t; end;
3: begin rgb[0] := p; rgb[1] := q; rgb[2] := v; end;
4: begin rgb[0] := t; rgb[1] := p; rgb[2] := v; end;
5: begin rgb[0] := v; rgb[1] := p; rgb[2] := t; end;
end;
end;
function GetGradient(FileName, Entry: string): string;
var
FileStrings: TStringList;
GradStrings: TStringList;
i: integer;
begin
FileStrings := TStringList.Create;
GradStrings := TStringList.Create;
try
try
FileStrings.LoadFromFile(FileName);
for i := 0 to FileStrings.count - 1 do
if Pos(Entry + ' ', Trim(FileStrings[i])) = 1 then break;
GradStrings.Add(FileStrings[i]);
repeat
inc(i);
GradStrings.Add(FileStrings[i]);
until Pos('}', FileStrings[i]) <> 0;
GetGradient := GradStrings.Text;
except on exception do
Result := '';
end;
finally
GradStrings.Free;
FileStrings.Free;
end;
end;
end.

View File

@ -1,488 +0,0 @@
object GradientForm: TGradientForm
Left = 565
Top = 216
BorderIcons = [biSystemMenu, biMinimize]
BorderStyle = bsSingle
Caption = 'Gradient'
ClientHeight = 172
ClientWidth = 372
Color = clBtnFace
DragMode = dmAutomatic
Font.Charset = ANSI_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
Icon.Data = {
0000010001001010000000000000680300001600000028000000100000002000
0000010018000000000040030000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000DA7F48DE7F46E68C56F1A273FDBA92FFCDB1FFE1CFFFF4EDE3F2FCA2
D5F862B9F339A1F0000000000000000000000000DA7D46DD7D41E68952F09F6F
FCB88FFFCDAFFFE1CEFFF4EEE2F2FD9FD4F85EB6F3349FF00000000000000000
00000000D97D45DD7C42E58750F09E6EFCB88FFFCCAFFFE0CEFFF4EDE2F2FD9F
D4F85DB6F4339FEF000000000000000000000000D97D45DD7D42E58851F09E6E
FCB88FFFCDAFFFE1CEFFF4EDE2F2FD9FD4F85DB6F3339FEF0000000000000000
00000000D97D45DD7D41E68851F09E6EFDB88FFFCCAFFFE1CEFFF4EDE2F2FD9F
D4F85EB6F3329FEF000000000000000000000000D97D45DD7C42E68851F19E6E
FDB78FFFCDAFFFE1CEFFF4EEE2F2FD9FD4F85EB6F4329FEF0000000000000000
00000000D97D45DD7D42E68851F19F6EFCB88FFFCCAFFFE0CEFFF4EDE1F2FD9F
D4F85DB7F3339FEF000000000000000000000000D97D45DD7D42E58850F19F6E
FDB78FFFCDAFFFE0CFFFF4EDE1F2FD9FD4F85DB6F3329FEF0000000000000000
00000000DA7D46DD7C41E68952F19E6EFDB88FFFCDAFFFE0CEFFF4EEE1F2FD9F
D4F85EB6F3339FF0000000000000000000000000DA7F48DE7F46E68C56F0A173
FCBA93FFCEB1FFE1D0FFF4EDE2F2FDA3D5F862B8F338A1F00000000000000000
00000000DB834EE08752E89563F3A97EFDC09CFFD2B8FFE4D4FFF5EFE4F3FDAA
D9F96FBEF449AAF1000000000000000000000000DD8A58E39565ECA57AF5B692
FDCAABFFD9C3FFE8DBFFF7F2E8F5FDB7DFFA85C8F763B6F20000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000FFFF
0000800100008001000080010000800100008001000080010000800100008001
0000800100008001000080010000800100008001000080010000FFFF0000}
OldCreateOrder = True
Position = poDefault
OnClose = FormClose
OnCreate = FormCreate
OnShow = FormShow
PixelsPerInch = 96
TextHeight = 13
object pnlPalette: TPanel
Left = 0
Top = 0
Width = 372
Height = 102
Align = alClient
BevelOuter = bvLowered
TabOrder = 0
object GradientImage: TImage
Left = 1
Top = 1
Width = 370
Height = 100
Align = alClient
PopupMenu = PopupMenu
Stretch = True
OnDblClick = mnuRandomizeClick
end
end
object pnlControls: TPanel
Left = 0
Top = 102
Width = 372
Height = 70
Align = alBottom
BevelOuter = bvNone
TabOrder = 1
object btnMenu: TSpeedButton
Left = 8
Top = 10
Width = 57
Height = 22
Caption = 'Rotate'
Flat = True
PopupMenu = Popup
OnClick = btnMenuClick
end
object lblVal: TLabel
Left = 344
Top = 16
Width = 6
Height = 13
Caption = '0'
end
object btnOpen: TSpeedButton
Left = 312
Top = 40
Width = 23
Height = 22
Hint = 'Gradient Browser'
Flat = True
Glyph.Data = {
76030000424D7603000000000000360000002800000011000000100000000100
18000000000040030000120B0000120B00000000000000000000FF00FFFF00FF
0000000000000000000000000000000000000000000000000000000000000000
00000000000000FF00FFFF00FF00FF00FFFF00FF000000FFF5F0FFF1E9FFEFE6
FFEFE6FFF0E7FFF1E8FFF1E9FFF3EBFFF3ECFFF4EDFFF6F0000000FF00FFFF00
FF00FF00FFFF00FF000000FFF4EDFFEEE4FFEBDFFFEBDFFFEBE0FFECE2FFEDE2
FFEEE4FFEFE5FFEFE6FFF1EA000000FF00FFFF00FF00FF00FFFF00FF000000FF
F1E9CD5208CD5208CD5208CD5208CD5208CD5208CD5208CD5208CD5208FFEDE3
000000FF00FFFF00FF00FF00FFFF00FF000000FFEFE6CD5208E26518EB7A37FF
A772FFD1B2FFF7EDC2E9FF42ADF7CD5208FFE9DC000000FF00FFFF00FF00FF00
FFFF00FF000000FFEDE2CD5208E16519E97835FFA770FFD1B2FFF7ECC2E9FF40
ADF7CD5208FFE5D6000000FF00FFFF00FF00FF00FFFF00FF000000FFEBDFCD52
08E16518EB7836FFA770FFD1B2FFF7ECC2E9FF42ADF7CD5208FFE1D0000000FF
00FFFF00FF00FF00FFFF00FF000000FFE9DBCD5208E16519EC7935FFA770FFD0
B2FFF7ECC2E9FF40AEF7CD5208FFDFCD000000FF00FFFF00FF00FF00FFFF00FF
000000FFE7D8CD5208E16519EB7935FFA570FFD1B2FFF7ECC2E9FF40ADF7CD52
08FFE1D0000000FF00FFFF00FF00FF00FFFF00FF000000FFE4D5CD5208E3651A
EB7A39FFA874FFD1B3FFF7ECC4E9FF44AEF7CD5208FFE9DC000000FF00FFFF00
FF00FF00FFFF00FF000000FFE3D1CD5208ED7935F99457FFBC8DFFE1C5FFFFF9
000000000000000000000000000000FF00FFFF00FF00FF00FFFF00FF000000FF
E1CFCD5208CD5208CD5208CD5208CD5208CD5208000000E17D41EB925E000000
FF00FFFF00FFFF00FF00FF00FFFF00FF000000FFE2D1FFD7BFFFD0B4FFCEB1FF
CFB3FFD0B4FFD3B8000000F5A779000000FF00FFFF00FFFF00FFFF00FF00FF00
FFFF00FF000000FFE7DAFFE2D0FFDECBFFDECAFFDDC9FFDECAFFDFCD00000000
0000FF00FFFF00FFFF00FFFF00FFFF00FF00FF00FFFF00FF0000000000000000
00000000000000000000000000000000000000FF00FFFF00FFFF00FFFF00FFFF
00FFFF00FF00FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF00}
ParentShowHint = False
ShowHint = True
OnClick = btnOpenClick
end
object btnSmoothPalette: TSpeedButton
Left = 336
Top = 40
Width = 23
Height = 22
Hint = 'Smooth Palette'
Flat = True
Glyph.Data = {
36030000424D3603000000000000360000002800000010000000100000000100
18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF
FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
FFFF00FFFF00FFFF00FFFF00FF00000000000000000000000000000000000000
0000000000000000000000000000000000000000000000FF00FFFF00FF000000
374BA83A53AB3E5DB14368B74876BF4E84C65493CE5BA3D661B2DE67C0E66CCE
EC71DAF3000000FF00FFFF00FF000000374BA83A53AB3E5DB14368B74876BF4E
84C65593CE5BA2D661B2DE67C0E66CCEED71DAF3000000FF00FFFF00FF000000
374BA83A52AC3E5DB14369B84876BE4F84C65593CE5BA3D661B1DE67C1E66CCD
ED71D9F3000000FF00FFFF00FF000000374BA83A53AB3E5CB14369B74876BE4E
84C65494CE5BA2D661B2DE66C1E56CCEEC71DAF3000000FF00FFFF00FF000000
374BA83A53AC3E5DB14368B74975BE4F84C65593CE5AA2D661B2DE67C0E56CCE
ED71D9F3000000FF00FFFF00FF000000374BA83A52AC3E5DB14368B84976BF4E
84C65493CE5BA3D661B2DE66C0E56CCEEC71D9F3000000FF00FFFF00FF000000
374BA83A52AC3E5CB14369B74975BE4F84C65494CD5BA2D661B1DE66C0E56CCE
ED71DAF3000000FF00FFFF00FF000000374BA83A53AC3E5CB14368B74876BF4E
84C65493CE5BA2D660B2DE67C0E56DCEEC71D9F3000000FF00FFFF00FF000000
374BA83A52AC3E5CB24368B74975BE4E84C65594CE5AA3D661B2DE67C1E66DCE
EC71D9F3000000FF00FFFF00FF000000374BA83A52AC3E5CB14369B74875BF4F
84C65493CE5AA3D661B2DE66C0E66DCEEC71DAF3000000FF00FFFF00FF000000
374BA83A52AC3E5DB14368B74976BF4F84C65593CE5BA3D660B2DE67C0E56CCD
ED71D9F3000000FF00FFFF00FF000000374BA83A53AC3E5CB14268B74876BF4F
84C65593CE5BA3D661B2DE67C1E66CCEED71DAF3000000FF00FFFF00FF000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
ParentShowHint = False
ShowHint = True
OnClick = mnuSmoothPaletteClick
end
object Label1: TLabel
Left = 8
Top = 43
Width = 57
Height = 13
Alignment = taCenter
AutoSize = False
Caption = 'Preset'
end
object btnPaste: TSpeedButton
Left = 288
Top = 40
Width = 23
Height = 22
Flat = True
Glyph.Data = {
36030000424D3603000000000000360000002800000010000000100000000100
18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF
FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF00000000
0000000000000000000000000000000000000000000000FF00FFFF00FFFF00FF
FF00FFFF00FFFF00FFFF00FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFF000000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF000000FF
FFFFE39A6FFFFFFFE3996CE2996DE3996DFFFFFF000000FF00FFFF00FFFF00FF
000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFF000000FF00FFFF00FF00000056B9F556B9F556B9F556B9F5000000FF
FFFFE29566E39363FFFFFFE39262E29363FFFFFF000000FF00FFFF00FF000000
56B9F556B9F556B9F556B9F5000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFF000000FF00FFFF00FF00000056B9F556B9F556B9F556B9F5000000FF
FFFFE3915FE28C58FFFFFFFFFFFFE29364FFFFFF000000FF00FFFF00FF000000
56B9F556B9F556B9F556B9F5000000FFFFFFFFFFFFFFFFFFFFFFFF0000000000
00000000000000FF00FFFF00FF00000056B9F556B9F556B9F556B9F5000000FF
FFFFE29160FFFFFFFFFFFF000000FFFFFF000000FF00FFFF00FFFF00FF000000
56B9F556B9F556B9F556B9F5000000FFFFFFFFFFFFFFFFFFFFFFFF0000000000
00FF00FFFF00FFFF00FFFF00FF00000056B9F500000000000000000000000000
0000000000000000000000000000000000FF00FFFF00FFFF00FFFF00FF000000
56B9F5000000BBE5F9BBE5F9BBE5F9BBE5F9BBE5F9BBE5F900000056B9F50000
00FF00FFFF00FFFF00FFFF00FF00000056B9F556B9F5000000BBE5F900000000
0000BBE5F900000056B9F556B9F5000000FF00FFFF00FFFF00FFFF00FFFF00FF
000000000000000000000000BBE5F9BBE5F9000000000000000000000000FF00
FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF00000000000000
0000000000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
OnClick = btnPasteClick
end
object btnCopy: TSpeedButton
Left = 264
Top = 40
Width = 23
Height = 22
Flat = True
Glyph.Data = {
36030000424D3603000000000000360000002800000010000000100000000100
18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF
FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
FFFF00FFFF00FFFF00FFFF00FFFF00FF00000000000000000000000000000000
0000000000000000000000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF00FFFF00
FFFF00FFFF00FFFF00FFFF00FFFF00FF000000FFFFFFE39A6FFFFFFFE3996CE2
996DE3996DFFFFFF000000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
000000FFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000
00000000000000FF00FFFF00FFFF00FF000000FFFFFFE29566E39363000000FF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF00FFFF00FFFF00FF
000000FFFFFFFFFFFFFFFFFF000000FFFFFFE39A6FFFFFFFE3996CE2996DE399
6DFFFFFF000000FF00FFFF00FFFF00FF000000FFFFFFE3915FE28C58000000FF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF00FFFF00FFFF00FF
000000FFFFFFFFFFFFFFFFFF000000FFFFFFE29566E39363FFFFFFE39262E293
63FFFFFF000000FF00FFFF00FFFF00FF000000FFFFFFE29160FFFFFF000000FF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF00FFFF00FFFF00FF
000000FFFFFFFFFFFFFFFFFF000000FFFFFFE3915FE28C58FFFFFFFFFFFFE293
64FFFFFF000000FF00FFFF00FFFF00FF000000000000000000000000000000FF
FFFFFFFFFFFFFFFFFFFFFF000000000000000000000000FF00FFFF00FFFF00FF
FF00FFFF00FFFF00FFFF00FF000000FFFFFFE29160FFFFFFFFFFFF000000FFFF
FF000000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF000000FF
FFFFFFFFFFFFFFFFFFFFFF000000000000FF00FFFF00FFFF00FFFF00FFFF00FF
FF00FFFF00FFFF00FFFF00FF000000000000000000000000000000000000FF00
FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
OnClick = btnCopyClick
end
object cmbPalette: TComboBox
Left = 72
Top = 42
Width = 177
Height = 19
Style = csOwnerDrawFixed
Color = clBlack
DropDownCount = 20
Font.Charset = ANSI_CHARSET
Font.Color = clWhite
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
ItemHeight = 13
ParentFont = False
ParentShowHint = False
ShowHint = False
TabOrder = 1
OnChange = cmbPaletteChange
OnDrawItem = cmbPaletteDrawItem
Items.Strings = (
'south-sea-bather'
'sky-flesh'
'blue-bather'
'no-name'
'pillows'
'mauve-splat'
'facial-treescape 6'
'fasion-bug'
'leafy-face'
'mouldy-sun'
'sunny-harvest'
'peach-tree'
'fire-dragon'
'ice-dragon'
'german-landscape'
'no-name'
'living-mud-bomb'
'cars'
'unhealthy-tan'
'daffodil'
'rose'
'healthy-skin'
'orange'
'white-ivy'
'summer-makeup'
'glow-buzz'
'deep-water'
'afternoon-beach'
'dim-beach'
'cloudy-brick'
'burning-wood'
'aquatic-garden'
'no-name'
'fall-quilt'
'night-blue-sky'
'shadow-iris'
'solid-sky'
'misty-field'
'wooden-highlight'
'jet-tundra'
'pastel-lime'
'hell'
'indian-coast'
'dentist-decor'
'greenland'
'purple-dress'
'no-name'
'spring-flora'
'andi'
'gig-o835'
'rie02'
'rie05'
'rie11'
'etretat.ppm'
'the-hollow-needle-at-etretat.ppm'
'rouen-cathedral-sunset.ppm'
'the-houses-of-parliament.ppm'
'starry-night.ppm'
'water-lilies-sunset.ppm'
'gogh.chambre-arles.ppm'
'gogh.entrance.ppm'
'gogh.the-night-cafe.ppm'
'gogh.vegetable-montmartre.ppm'
'matisse.bonheur-vivre.ppm'
'matisse.flowers.ppm'
'matisse.lecon-musique.ppm'
'modigliani.nude-caryatid.ppm'
'braque.instruments.ppm'
'calcoast09.ppm'
'dodge102.ppm'
'ernst.anti-pope.ppm'
'ernst.ubu-imperator.ppm'
'fighting-forms.ppm'
'fog25.ppm'
'geyser27.ppm'
'gris.josette.ppm'
'gris.landscape-ceret.ppm'
'kandinsky.comp-9.ppm'
'kandinsky.yellow-red-blue.ppm'
'klee.insula-dulcamara.ppm'
'nile.ppm'
'picasso.jfille-chevre.ppm'
'pollock.lavender-mist.ppm'
'yngpaint.ppm')
end
object ScrollBar: TScrollBar
Left = 72
Top = 16
Width = 257
Height = 13
LargeChange = 15
Max = 255
PageSize = 0
TabOrder = 0
OnChange = ScrollBarChange
OnScroll = ScrollBarScroll
end
end
object PopupMenu: TPopupMenu
Images = MainForm.Buttons
Left = 8
Top = 8
object mnuRandomize: TMenuItem
Caption = 'Randomize'
OnClick = mnuRandomizeClick
end
object N7: TMenuItem
Caption = '-'
end
object mnuInvert: TMenuItem
Caption = 'Invert'
OnClick = mnuInvertClick
end
object mnuReverse: TMenuItem
Caption = '&Reverse'
OnClick = mnuReverseClick
end
object N3: TMenuItem
Caption = '-'
end
object mnuSmoothPalette: TMenuItem
Caption = 'Smooth Palette...'
ImageIndex = 34
OnClick = mnuSmoothPaletteClick
end
object mnuGradientBrowser: TMenuItem
Caption = 'Gradient Browser...'
ImageIndex = 22
OnClick = btnOpenClick
end
object N4: TMenuItem
Caption = '-'
end
object SaveGradient1: TMenuItem
Caption = 'Save Gradient...'
ImageIndex = 2
OnClick = SaveGradient1Click
end
object SaveasMapfile1: TMenuItem
Caption = 'Save as Map file...'
OnClick = SaveasMapfile1Click
end
object N6: TMenuItem
Caption = '-'
end
object mnuSaveasDefault: TMenuItem
Caption = 'Save as Default'
OnClick = mnuSaveasDefaultClick
end
object N5: TMenuItem
Caption = '-'
end
object mnuCopy: TMenuItem
Caption = 'Copy'
ImageIndex = 7
OnClick = btnCopyClick
end
object mnuPaste: TMenuItem
Caption = 'Paste'
ImageIndex = 8
OnClick = btnPasteClick
end
end
object Popup: TPopupMenu
AutoHotkeys = maManual
AutoPopup = False
Left = 40
Top = 8
object mnuRotate: TMenuItem
Caption = 'Rotate'
OnClick = mnuRotateClick
end
object N1: TMenuItem
Caption = '-'
end
object mnuHue: TMenuItem
Caption = 'Hue'
OnClick = mnuHueClick
end
object mnuSaturation: TMenuItem
Caption = 'Saturation'
OnClick = mnuSaturationClick
end
object mnuBrightness: TMenuItem
Caption = 'Brightness'
OnClick = mnuBrightnessClick
end
object Contrast1: TMenuItem
Caption = 'Contrast'
OnClick = Contrast1Click
end
object N2: TMenuItem
Caption = '-'
end
object mnuBlur: TMenuItem
Caption = 'Blur'
OnClick = mnuBlurClick
end
object mnuFrequency: TMenuItem
Caption = 'Frequency'
OnClick = mnuFrequencyClick
end
end
object SaveDialog: TSaveDialog
DefaultExt = 'map'
Filter = 'Map files|*.map'
Left = 72
Top = 8
end
object ApplicationEvents: TApplicationEvents
OnActivate = ApplicationEventsActivate
Left = 104
Top = 8
end
end

View File

@ -1,856 +0,0 @@
{
Apophysis Copyright (C) 2001-2004 Mark Townsend
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
}
unit Gradient;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, ComCtrls, Registry, cmap, Menus, ToolWin, Buttons,
AppEvnts;
const
PixelCountMax = 32768;
type
pRGBTripleArray = ^TRGBTripleArray;
TRGBTripleArray = array[0..PixelCountMax - 1] of TRGBTriple;
type
TGradientForm = class(TForm)
pnlPalette: TPanel;
pnlControls: TPanel;
cmbPalette: TComboBox;
GradientImage: TImage;
PopupMenu: TPopupMenu;
mnuReverse: TMenuItem;
mnuInvert: TMenuItem;
btnMenu: TSpeedButton;
Popup: TPopupMenu;
mnuHue: TMenuItem;
mnuRotate: TMenuItem;
N1: TMenuItem;
mnuSaturation: TMenuItem;
mnuBrightness: TMenuItem;
N2: TMenuItem;
ScrollBar: TScrollBar;
lblVal: TLabel;
mnuBlur: TMenuItem;
btnOpen: TSpeedButton;
N3: TMenuItem;
mnuGradientBrowser: TMenuItem;
mnuSmoothPalette: TMenuItem;
btnSmoothPalette: TSpeedButton;
N4: TMenuItem;
SaveGradient1: TMenuItem;
SaveasMapfile1: TMenuItem;
SaveDialog: TSaveDialog;
Label1: TLabel;
btnPaste: TSpeedButton;
btnCopy: TSpeedButton;
N5: TMenuItem;
mnuCopy: TMenuItem;
mnuPaste: TMenuItem;
ApplicationEvents: TApplicationEvents;
mnuSaveasDefault: TMenuItem;
N6: TMenuItem;
mnuRandomize: TMenuItem;
N7: TMenuItem;
mnuFrequency: TMenuItem;
Contrast1: TMenuItem;
procedure cmbPaletteChange(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure btnApplyClick(Sender: TObject);
procedure DrawPalette;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure mnuReverseClick(Sender: TObject);
procedure mnuInvertClick(Sender: TObject);
procedure btnMenuClick(Sender: TObject);
procedure mnuRotateClick(Sender: TObject);
procedure mnuHueClick(Sender: TObject);
procedure mnuSaturationClick(Sender: TObject);
procedure ScrollBarChange(Sender: TObject);
procedure mnuBrightnessClick(Sender: TObject);
procedure mnuBlurClick(Sender: TObject);
procedure btnOpenClick(Sender: TObject);
procedure mnuSmoothPaletteClick(Sender: TObject);
procedure SaveGradient1Click(Sender: TObject);
procedure SaveasMapfile1Click(Sender: TObject);
procedure cmbPaletteDrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
procedure ScrollBarScroll(Sender: TObject; ScrollCode: TScrollCode;
var ScrollPos: Integer);
procedure btnCopyClick(Sender: TObject);
procedure btnPasteClick(Sender: TObject);
procedure ApplicationEventsActivate(Sender: TObject);
procedure mnuSaveasDefaultClick(Sender: TObject);
procedure mnuRandomizeClick(Sender: TObject);
procedure mnuFrequencyClick(Sender: TObject);
procedure Contrast1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
procedure Apply;
function Blur(const radius: integer; const pal: TColorMap): TColorMap;
function Frequency(const times: Integer; const pal: TColorMap): TColorMap;
procedure SaveMap(FileName: string);
public
Palette: TColorMap;
BackupPal: TColorMap;
procedure UpdateGradient(Pal: TColorMap);
function RandomGradient: TColorMap;
end;
var
GradientForm: TGradientForm;
pCmap: integer;
function GradientInClipboard: boolean;
procedure RGBToHSV(R, G, B: byte; var H, S, V: real);
procedure HSVToRGB(H, S, V: real; var Rb, Gb, Bb: integer);
implementation
uses Main, cmapdata, Math, Browser, Editor, Global, Save, Adjust, Mutate, ClipBrd;
{$R *.DFM}
procedure TGradientForm.Apply;
begin
MainForm.StopThread;
MainForm.UpdateUndo;
MainCp.CmapIndex := cmbPalette.ItemIndex;
MainCp.cmap := Palette;
if EditForm.visible then EditForm.UpdateDisplay;
// if AdjustForm.visible then AdjustForm.UpdateDisplay;
if MutateForm.Visible then MutateForm.UpdateDisplay;
MainForm.RedrawTimer.enabled := true;
end;
procedure TGradientForm.SaveMap(FileName: string);
var
i: Integer;
l: string;
MapFile: TextFile;
begin
{ Save a map file }
AssignFile(MapFile, FileName);
try
ReWrite(MapFile);
{ first line with comment }
l := Format(' %3d %3d %3d Exported from Apophysis 2.0', [Palette[0][0], palette[0][1],
palette[0][2]]);
Writeln(MapFile, l);
{ now the rest }
for i := 1 to 255 do
begin
l := Format(' %3d %3d %3d', [Palette[i][0], palette[i][1],
palette[i][2]]);
Writeln(MapFile, l);
end;
CloseFile(MapFile);
except
on EInOutError do Application.MessageBox(PChar('Cannot Open File: ' +
FileName), 'Apophysis', 16);
end;
end;
procedure TGradientForm.UpdateGradient(Pal: TColorMap);
begin
Palette := Pal;
BackupPal := Pal;
DrawPalette;
ScrollBar.Position := 0;
end;
procedure HSVToRGB(H, S, V: real; var Rb, Gb, Bb: integer);
var
R, G, B, Sa, Va, Hue, i, f, p, q, t: real;
begin
R := 0;
G := 0;
B := 0;
Sa := S / 100;
Va := V / 100;
if S = 0 then
begin
R := Va;
G := Va;
B := Va;
end
else
begin
Hue := H / 60;
if Hue = 6 then Hue := 0;
i := Int(Hue);
f := Hue - i;
p := Va * (1 - Sa);
q := Va * (1 - (Sa * f));
t := Va * (1 - (Sa * (1 - f)));
case Round(i) of
0: begin
R := Va;
G := t;
B := p;
end;
1: begin
R := q;
G := Va;
B := p;
end;
2: begin
R := p;
G := Va;
B := t;
end;
3: begin
R := p;
G := q;
B := Va;
end;
4: begin
R := t;
G := p;
B := Va;
end;
5: begin
R := Va;
G := p;
B := q;
end;
end;
end;
Rb := Round(Int(255.9999 * R));
Gb := Round(Int(255.9999 * G));
Bb := Round(Int(255.9999 * B));
end;
procedure RGBToHSV(R, G, B: byte; var H, S, V: real);
var
vRed, vGreen, vBlue, Mx, Mn, Va, Sa, rc, gc, bc: real;
begin
vRed := R / 255;
vGreen := G / 255;
vBlue := B / 255;
Mx := vRed;
if vGreen > Mx then Mx := vGreen;
if vBlue > Mx then Mx := vBlue;
Mn := vRed;
if vGreen < Mn then Mn := vGreen;
if vBlue < Mn then Mn := vBlue;
Va := Mx;
if Mx <> 0 then
Sa := (Mx - Mn) / Mx
else
Sa := 0;
if Sa = 0 then
H := 0
else
begin
rc := (Mx - vRed) / (Mx - Mn);
gc := (Mx - vGreen) / (Mx - Mn);
bc := (Mx - vBlue) / (Mx - Mn);
if Mx = vRed then
H := bc - gc
else if Mx = vGreen then
H := 2 + rc - bc
else if Mx = vBlue then
H := 4 + gc - rc;
H := H * 60;
if H < 0 then H := H + 360;
end;
S := Sa * 100;
V := Va * 100;
end;
function TGradientForm.Blur(const Radius: Integer; const pal: TColorMap): TColorMap;
var
r, g, b, n, i, j, k: Integer;
begin
Result := Pal;
if Radius <> 0 then
for i := 0 to 255 do
begin
n := -1;
r := 0;
g := 0;
b := 0;
for j := i - radius to i + radius do
begin
inc(n);
k := (256 + j) mod 256;
if k <> i then begin
r := r + Pal[k][0];
g := g + Pal[k][1];
b := b + Pal[k][2];
end;
end;
if n <> 0 then begin
Result[i][0] := r div n;
Result[i][1] := g div n;
Result[i][2] := b div n;
end;
end;
end;
function TGradientForm.Frequency(const times: Integer; const pal: TColorMap): TColorMap;
{ This can be improved }
var
n, i, j: Integer;
begin
Result := Pal;
if times <> 1 then
begin
n := 256 div times;
for j := 0 to times do
for i := 0 to n do
begin
if (i + j * n) < 256 then
begin
Result[i + j * n][0] := pal[i * times][0];
Result[i + j * n][1] := pal[i * times][1];
Result[i + j * n][2] := pal[i * times][2];
end;
end;
end;
end;
procedure TGradientForm.DrawPalette;
var
i, j: integer;
Row: pRGBTripleArray;
BitMap: TBitMap;
begin
BitMap := TBitMap.Create;
try
Bitmap.PixelFormat := pf24bit;
BitMap.Width := 256;
BitMap.Height := 1;
for j := 0 to Bitmap.Height - 1 do
begin
Row := Bitmap.Scanline[j];
for i := 0 to Bitmap.Width - 1 do
begin
with Row[i] do
begin
rgbtRed := Palette[i][0];
rgbtGreen := Palette[i][1];
rgbtBlue := Palette[i][2];
end
end
end;
GradientImage.Picture.Graphic := Bitmap;
GradientImage.Refresh;
finally
BitMap.Free;
end;
end;
procedure TGradientForm.cmbPaletteChange(Sender: TObject);
var
i: integer;
begin
i := cmbPalette.ItemIndex;
GetCmap(i, 1, Palette);
BackupPal := Palette;
ScrollBar.Position := 0;
DrawPalette;
Apply;
end;
procedure TGradientForm.FormShow(Sender: TObject);
var
Registry: TRegistry;
begin
{ Read posution from registry }
Registry := TRegistry.Create;
try
Registry.RootKey := HKEY_CURRENT_USER;
if Registry.OpenKey('Software\' + APP_NAME + '\Forms\Gradient', False) then
begin
if Registry.ValueExists('Left') then
GradientForm.Left := Registry.ReadInteger('Left');
if Registry.ValueExists('Top') then
GradientForm.Top := Registry.ReadInteger('Top');
end;
Registry.CloseKey;
finally
Registry.Free;
end;
DrawPalette;
end;
procedure TGradientForm.FormClose(Sender: TObject;
var Action: TCloseAction);
var
Registry: TRegistry;
begin
{ Write position to registry }
Registry := TRegistry.Create;
try
Registry.RootKey := HKEY_CURRENT_USER;
{ Defaults }
if Registry.OpenKey('\Software\' + APP_NAME + '\Forms\Gradient', True) then
begin
Registry.WriteInteger('Top', GradientForm.Top);
Registry.WriteInteger('Left', GradientForm.Left);
end;
finally
Registry.Free;
end;
end;
procedure TGradientForm.btnApplyClick(Sender: TObject);
begin
Apply;
end;
procedure TGradientForm.mnuReverseClick(Sender: TObject);
var
i: integer;
pal: TColorMap;
begin
for i := 0 to 255 do begin
pal[i][0] := Palette[255 - i][0];
pal[i][1] := Palette[255 - i][1];
pal[i][2] := Palette[255 - i][2];
end;
UpdateGradient(pal);
Apply;
end;
procedure TGradientForm.mnuInvertClick(Sender: TObject);
var
i: integer;
begin
for i := 0 to 255 do
begin
Palette[i][0] := 255 - Palette[i][0];
Palette[i][1] := 255 - Palette[i][1];
Palette[i][2] := 255 - Palette[i][2];
end;
UpdateGradient(palette);
Apply;
end;
procedure TGradientForm.btnMenuClick(Sender: TObject);
begin
Popup.Popup(btnMenu.ClientOrigin.x, btnMenu.ClientOrigin.y + btnMenu.Height);
end;
procedure TGradientForm.ScrollBarChange(Sender: TObject);
var
intens, i, r, g, b: integer;
h, s, v: real;
begin
lblVal.Caption := IntToStr(ScrollBar.Position);
if btnMenu.Caption = 'Hue' then
begin
for i := 0 to 255 do
begin
RGBToHSV(BackupPal[i][0], BackupPal[i][1], BackupPal[i][2], h, s, v);
h := Round(360 + h + ScrollBar.Position) mod 360;
HSVToRGB(h, s, v, Palette[i][0], Palette[i][1], Palette[i][2]);
end;
end;
if btnMenu.Caption = 'Saturation' then
begin
for i := 0 to 255 do
begin
RGBToHSV(BackupPal[i][0], BackupPal[i][1], BackupPal[i][2], h, s, v);
s := s + ScrollBar.Position;
if s > 100 then s := 100;
if s < 0 then s := 0;
HSVToRGB(h, s, v, Palette[i][0], Palette[i][1], Palette[i][2]);
end;
end;
if btnMenu.Caption = 'Contrast' then
begin
intens := scrollBar.Position;
if intens > 0 then intens := intens * 2;
for i := 0 to 255 do
begin
r := BackupPal[i][0];
g := BackupPal[i][1];
b := BackupPal[i][2];
r := round(r + intens / 100 * (r - 127));
g := round(g + intens / 100 * (g - 127));
b := round(b + intens / 100 * (b - 127));
if R > 255 then R := 255 else if R < 0 then R := 0;
if G > 255 then G := 255 else if G < 0 then G := 0;
if B > 255 then B := 255 else if B < 0 then B := 0;
Palette[i][0] := r;
Palette[i][1] := g;
Palette[i][2] := b;
end;
end;
if btnMenu.Caption = 'Brightness' then
begin
for i := 0 to 255 do
begin
Palette[i][0] := BackupPal[i][0] + ScrollBar.Position;
if Palette[i][0] > 255 then Palette[i][0] := 255;
if Palette[i][0] < 0 then Palette[i][0] := 0;
Palette[i][1] := BackupPal[i][1] + ScrollBar.Position;
if Palette[i][1] > 255 then Palette[i][1] := 255;
if Palette[i][1] < 0 then Palette[i][1] := 0;
Palette[i][2] := BackupPal[i][2] + ScrollBar.Position;
if Palette[i][2] > 255 then Palette[i][2] := 255;
if Palette[i][2] < 0 then Palette[i][2] := 0;
end;
end;
if btnMenu.Caption = 'Rotate' then
begin
for i := 0 to 255 do
begin
Palette[i][0] := BackupPal[(255 + i - ScrollBar.Position) mod 256][0];
Palette[i][1] := BackupPal[(255 + i - ScrollBar.Position) mod 256][1];
Palette[i][2] := BackupPal[(255 + i - ScrollBar.Position) mod 256][2];
end;
end;
if btnMenu.Caption = 'Blur' then
begin
Palette := Blur(ScrollBar.Position, BackupPal);
end;
if btnMenu.Caption = 'Frequency' then
begin
Palette := Frequency(ScrollBar.Position, BackupPal);
end;
DrawPalette;
end;
{ ***************************** Adjust menu ********************************* }
procedure TGradientForm.mnuRotateClick(Sender: TObject);
begin
btnMenu.Caption := 'Rotate';
BackupPal := Palette;
ScrollBar.Min := 0;
ScrollBar.Max := 255;
ScrollBar.LargeChange := 15;
ScrollBar.Position := 0;
end;
procedure TGradientForm.mnuHueClick(Sender: TObject);
begin
btnMenu.Caption := 'Hue';
BackupPal := Palette;
ScrollBar.Min := 0;
ScrollBar.Max := 360;
ScrollBar.LargeChange := 15;
ScrollBar.Position := 0;
end;
procedure TGradientForm.mnuBrightnessClick(Sender: TObject);
begin
btnMenu.Caption := 'Brightness';
BackupPal := Palette;
ScrollBar.Min := -255;
ScrollBar.Max := 255;
ScrollBar.LargeChange := 15;
ScrollBar.Position := 0;
end;
procedure TGradientForm.mnuSaturationClick(Sender: TObject);
begin
btnMenu.Caption := 'Saturation';
BackupPal := Palette;
ScrollBar.Min := -100;
ScrollBar.Max := 100;
ScrollBar.LargeChange := 15;
ScrollBar.Position := 0;
end;
procedure TGradientForm.mnuBlurClick(Sender: TObject);
begin
btnMenu.Caption := 'Blur';
BackupPal := Palette;
ScrollBar.Min := 0;
ScrollBar.Max := 127;
ScrollBar.LargeChange := 15;
ScrollBar.Position := 0;
end;
procedure TGradientForm.mnuFrequencyClick(Sender: TObject);
begin
btnMenu.Caption := 'Frequency';
BackupPal := Palette;
ScrollBar.Min := 1;
ScrollBar.Max := 10;
ScrollBar.LargeChange := 1;
ScrollBar.Position := 1;
end;
procedure TGradientForm.btnOpenClick(Sender: TObject);
begin
GradientBrowser.Filename := GradientFile;
GradientBrowser.Show;
end;
procedure TGradientForm.mnuSmoothPaletteClick(Sender: TObject);
begin
MainForm.SmoothPalette;
end;
procedure TGradientForm.SaveGradient1Click(Sender: TObject);
var
gradstr: TStringList;
begin
gradstr := TStringList.Create;
try
SaveForm.Caption := 'Save Gradient';
SaveForm.Filename := GradientFile;
SaveForm.Title := MainCp.name;
if SaveForm.ShowModal = mrOK then
begin
gradstr.add(CleanIdentifier(SaveForm.Title) + ' {');
gradstr.add(MainForm.GradientFromPalette(Palette, SaveForm.Title));
gradstr.add('}');
if MainForm.SaveGradient(gradstr.text, SaveForm.Title, SaveForm.Filename) then
GradientFile := SaveForm.FileName;
end;
finally
gradstr.free
end;
end;
procedure TGradientForm.SaveasMapfile1Click(Sender: TObject);
begin
SaveDialog.Filename := MainCp.name + '.map';
if SaveDialog.execute then
SaveMap(SaveDialog.Filename);
end;
procedure TGradientForm.cmbPaletteDrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState);
var
i, j: integer;
Row: pRGBTripleArray;
Bitmap: TBitmap;
pal: TColorMap;
PalName: string;
begin
{ Draw the preset palettes on the combo box items }
GetCMap(index, 1, pal);
GetCmapName(index, PalName);
BitMap := TBitMap.create;
Bitmap.PixelFormat := pf24bit;
BitMap.Width := 256;
BitMap.Height := 100;
for j := 0 to Bitmap.Height - 1 do
begin
Row := Bitmap.Scanline[j];
for i := 0 to Bitmap.Width - 1 do
begin
with Row[i] do
begin
rgbtRed := Pal[i][0];
rgbtGreen := Pal[i][1];
rgbtBlue := Pal[i][2];
end
end
end;
with Control as TComboBox do
begin
Canvas.Rectangle(Rect);
Canvas.TextOut(4, Rect.Top, PalName);
Rect.Left := (Rect.Left + rect.Right) div 2;
Canvas.StretchDraw(Rect, Bitmap);
end;
BitMap.Free;
end;
procedure TGradientForm.ScrollBarScroll(Sender: TObject;
ScrollCode: TScrollCode; var ScrollPos: Integer);
begin
if ScrollCode = scEndScroll then Apply;
end;
procedure TGradientForm.btnCopyClick(Sender: TObject);
var
gradstr: TStringList;
begin
gradstr := TStringList.Create;
try
gradstr.add(CleanIdentifier(MainCp.name) + ' {');
gradstr.add('gradient:');
gradstr.add(' title="' + MainCp.name + '" smooth=no');
gradstr.add(GradientString(Palette));
gradstr.add('}');
Clipboard.SetTextBuf(PChar(gradstr.text));
btnPaste.enabled := true;
mnuPaste.enabled := true;
MainForm.btnPaste.enabled := False;
MainForm.mnuPaste.enabled := False;
finally
gradstr.free
end;
end;
procedure TGradientForm.btnPasteClick(Sender: TObject);
begin
if Clipboard.HasFormat(CF_TEXT) then
begin
UpdateGradient(CreatePalette(Clipboard.AsText));
Apply;
end;
end;
function GradientInClipboard: boolean;
var
gradstr: TStringList;
begin
{ returns true if gradient in clipboard - can be tricked }
result := true;
if Clipboard.HasFormat(CF_TEXT) then
begin
gradstr := TStringList.Create;
try
gradstr.text := Clipboard.AsText;
if (Pos('}', gradstr.text) = 0) or (Pos('{', gradstr.text) = 0) or
(Pos('gradient:', gradstr.text) = 0) or (Pos('fractal:', gradstr.text) <> 0) then
begin
result := false;
exit;
end;
finally
gradstr.free;
end;
end
else
result := false;
end;
procedure TGradientForm.ApplicationEventsActivate(Sender: TObject);
begin
if GradientInClipboard then begin
mnuPaste.enabled := true;
btnPaste.enabled := true;
end
else
begin
mnuPaste.enabled := false;
btnPaste.enabled := false;
end;
end;
procedure TGradientForm.mnuSaveasDefaultClick(Sender: TObject);
begin
MainForm.DefaultPalette := Palette;
SaveMap(AppPath + 'default.map');
end;
procedure RGBBlend(a, b: integer; var Palette: TColorMap);
{ Linear blend between to indices of a palette }
var
c, v: real;
vrange, range: real;
i: integer;
begin
if a = b then
begin
Exit;
end;
range := b - a;
vrange := Palette[b mod 256][0] - Palette[a mod 256][0];
c := Palette[a mod 256][0];
v := vrange / range;
for i := (a + 1) to (b - 1) do
begin
c := c + v;
Palette[i mod 256][0] := Round(c);
end;
vrange := Palette[b mod 256][1] - Palette[a mod 256][1];
c := Palette[a mod 256][1];
v := vrange / range;
for i := a + 1 to b - 1 do
begin
c := c + v;
Palette[i mod 256][1] := Round(c);
end;
vrange := Palette[b mod 256][2] - Palette[a mod 256][2];
c := Palette[a mod 256][2];
v := vrange / range;
for i := a + 1 to b - 1 do
begin
c := c + v;
Palette[i mod 256][2] := Round(c);
end;
end;
function TGradientForm.RandomGradient: TColorMap;
var
a, b, n, nodes: integer;
rgb: array[0..2] of double;
hsv: array[0..2] of double;
pal: TColorMap;
begin
inc(MainForm.Seed);
RandSeed := MainForm.seed;
nodes := random((MaxNodes - 1) - (MinNodes - 2)) + (MinNodes - 1);
n := 256 div nodes;
b := 0;
hsv[0] := (random(MaxHue - (MinHue - 1)) + MinHue) / 100;
hsv[1] := (random(MaxSat - (MinSat - 1)) + MinSat) / 100;
hsv[2] := (random(MaxLum - (MinLum - 1)) + MinLum) / 100;
hsv2rgb(hsv, rgb);
Pal[0][0] := Round(rgb[0] * 255);
Pal[0][1] := Round(rgb[1] * 255);
Pal[0][2] := Round(rgb[2] * 255);
repeat
a := b;
b := b + n;
hsv[0] := (random(MaxHue - (MinHue - 1)) + MinHue) / 100;
hsv[1] := (random(MaxSat - (MinSat - 1)) + MinSat) / 100;
hsv[2] := (random(MaxLum - (MinLum - 1)) + MinLum) / 100;
hsv2rgb(hsv, rgb);
if b > 255 then b := 255;
Pal[b][0] := Round(rgb[0] * 255);
Pal[b][1] := Round(rgb[1] * 255);
Pal[b][2] := Round(rgb[2] * 255);
RGBBlend(a, b, pal);
until b = 255;
Result := Pal;
end;
procedure TGradientForm.mnuRandomizeClick(Sender: TObject);
begin
GradientForm.UpdateGradient(RandomGradient);
GradientForm.Apply;
end;
procedure TGradientForm.Contrast1Click(Sender: TObject);
begin
btnMenu.Caption := 'Contrast';
BackupPal := Palette;
ScrollBar.Min := -100;
ScrollBar.Max := 100;
ScrollBar.LargeChange := 15;
ScrollBar.Position := 0;
end;
procedure TGradientForm.FormCreate(Sender: TObject);
begin
Sendmessage(cmbPalette.Handle, CB_SETDROPPEDWIDTH , cmbPalette.width * 2, 0);
end;
end.

View File

@ -1,6 +0,0 @@
{.$DEFINE DELPHI3}
{.$DEFINE _WIN64}
{.$DEFINE HTMLHELP11}
{$DEFINE HTMLHELP12}
{.$DEFINE HTMLHELP_DYNAMIC_LINK}
{.$DEFINE HTMLHELP_DYNAMIC_LINK_EXPLICIT}

View File

@ -1,862 +0,0 @@
{******************************************************************}
{ }
{ Borland Delphi Runtime Library }
{ HTML Help interface unit }
{ }
{ Portions created by Microsoft are }
{ Copyright (C) 1995-1999 Microsoft Corporation. }
{ All Rights Reserved. }
{ }
{ The original file is: htmlhelp.h, released 12 May 1999. }
{ The original Pascal code is: HTMLHelp.pas, released 9 Jun 1999. }
{ The initial developer of the Pascal code is Marcel van Brakel }
{ (brakelm@bart.nl). }
{ }
{ Portions created by Marcel van Brakel are }
{ Copyright (C) 1999 Marcel van Brakel. }
{ }
{ Contributor(s): Robert Chandler (robert@helpware.net) }
{ Kurt Senfer (ks@siemens.dk) }
{ }
{ Obtained through: }
{ Joint Endeavour of Delphi Innovators (Project JEDI) }
{ }
{ You may retrieve the latest version of this file at the Project }
{ JEDI home page, located at http://delphi-jedi.org }
{ }
{ The contents of this file are used with permission, subject to }
{ the Mozilla Public License Version 1.1 (the "License"); you may }
{ not use this file except in compliance with the License. You may }
{ obtain a copy of the License at }
{ http://www.mozilla.org/MPL/MPL-1.1.html }
{ }
{ Software distributed under the License is distributed on an }
{ "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or }
{ implied. See the License for the specific language governing }
{ rights and limitations under the License. }
{ }
{******************************************************************}
unit HtmlHlp;
interface
(*$HPPEMIT ''*)
(*$HPPEMIT '#include "htmlhelp.h"'*)
(*$HPPEMIT ''*)
(*$HPPEMIT 'typedef struct tagHH_LAST_ERROR'*)
(*$HPPEMIT '{'*)
(*$HPPEMIT ' int cbStruct ;'*)
(*$HPPEMIT ' HRESULT hr ;'*)
(*$HPPEMIT ' BSTR description ;'*)
(*$HPPEMIT '} HH_LAST_ERROR ;'*)
(*$HPPEMIT ''*)
uses
Windows;
{$I HTMLHLP.INC}
type
{$IFDEF HTMLHELP12}
{$IFNDEF _WIN64}
DWORD_PTR = DWORD;
{$ENDIF}
{$ENDIF}
PCSTR = LPCSTR;
// Commands to pass to HtmlHelp()
const
HH_DISPLAY_TOPIC = $0000;
{$EXTERNALSYM HH_DISPLAY_TOPIC}
HH_HELP_FINDER = $0000; // WinHelp equivalent
{$EXTERNALSYM HH_HELP_FINDER}
HH_DISPLAY_TOC = $0001; // not currently implemented
{$EXTERNALSYM HH_DISPLAY_TOC}
HH_DISPLAY_INDEX = $0002; // not currently implemented
{$EXTERNALSYM HH_DISPLAY_INDEX}
HH_DISPLAY_SEARCH = $0003; // not currently implemented
{$EXTERNALSYM HH_DISPLAY_SEARCH}
HH_SET_WIN_TYPE = $0004;
{$EXTERNALSYM HH_SET_WIN_TYPE}
HH_GET_WIN_TYPE = $0005;
{$EXTERNALSYM HH_GET_WIN_TYPE}
HH_GET_WIN_HANDLE = $0006;
{$EXTERNALSYM HH_GET_WIN_HANDLE}
HH_ENUM_INFO_TYPE = $0007; // Get Info type name, call repeatedly to enumerate, -1 at end
{$EXTERNALSYM HH_ENUM_INFO_TYPE}
HH_SET_INFO_TYPE = $0008; // Add Info type to filter.
{$EXTERNALSYM HH_SET_INFO_TYPE}
HH_SYNC = $0009;
{$EXTERNALSYM HH_SYNC}
{$IFDEF HTMLHELP11}
HH_ADD_NAV_UI = $000A; // not currently implemented
{$EXTERNALSYM HH_ADD_NAV_UI}
HH_ADD_BUTTON = $000B; // not currently implemented
{$EXTERNALSYM HH_ADD_BUTTON}
HH_GETBROWSER_APP = $000C; // not currently implemented
{$EXTERNALSYM HH_GETBROWSER_APP}
{$ENDIF}
{$IFDEF HTMLHELP12}
HH_RESERVED1 = $000A;
{$EXTERNALSYM HH_RESERVED1}
HH_RESERVED2 = $000B;
{$EXTERNALSYM HH_RESERVED2}
HH_RESERVED3 = $000C;
{$EXTERNALSYM HH_RESERVED3}
{$ENDIF}
HH_KEYWORD_LOOKUP = $000D;
{$EXTERNALSYM HH_KEYWORD_LOOKUP}
HH_DISPLAY_TEXT_POPUP = $000E; // display string resource id or text in a popup window
{$EXTERNALSYM HH_DISPLAY_TEXT_POPUP}
HH_HELP_CONTEXT = $000F; // display mapped numeric value in dwData
{$EXTERNALSYM HH_HELP_CONTEXT}
HH_TP_HELP_CONTEXTMENU = $0010; // text popup help, same as WinHelp HELP_CONTEXTMENU
{$EXTERNALSYM HH_TP_HELP_CONTEXTMENU}
HH_TP_HELP_WM_HELP = $0011; // text popup help, same as WinHelp HELP_WM_HELP
{$EXTERNALSYM HH_TP_HELP_WM_HELP}
HH_CLOSE_ALL = $0012; // close all windows opened directly or indirectly by the caller
{$EXTERNALSYM HH_CLOSE_ALL}
HH_ALINK_LOOKUP = $0013; // ALink version of HH_KEYWORD_LOOKUP
{$EXTERNALSYM HH_ALINK_LOOKUP}
HH_GET_LAST_ERROR = $0014; // not currently implemented, See HHERROR.h
{$EXTERNALSYM HH_GET_LAST_ERROR}
HH_ENUM_CATEGORY = $0015; // Get category name, call repeatedly to enumerate, -1 at end
{$EXTERNALSYM HH_ENUM_CATEGORY}
HH_ENUM_CATEGORY_IT = $0016; // Get category info type members, call repeatedly to enumerate, -1 at end
{$EXTERNALSYM HH_ENUM_CATEGORY_IT}
HH_RESET_IT_FILTER = $0017; // Clear the info type filter of all info types.
{$EXTERNALSYM HH_RESET_IT_FILTER}
HH_SET_INCLUSIVE_FILTER = $0018; // set inclusive filtering method for untyped topics to be included in display
{$EXTERNALSYM HH_SET_INCLUSIVE_FILTER}
HH_SET_EXCLUSIVE_FILTER = $0019; // set exclusive filtering method for untyped topics to be excluded from display
{$EXTERNALSYM HH_SET_EXCLUSIVE_FILTER}
{$IFDEF HTMLHELP11}
HH_SET_GUID = $001A; // For Microsoft Installer -- dwData is a pointer to the GUID string
{$EXTERNALSYM HH_SET_GUID}
{$ENDIF}
{$IFDEF HTMLHELP12}
HH_INITIALIZE = $001C; // Initializes the help system.
{$EXTERNALSYM HH_INITIALIZE}
HH_UNINITIALIZE = $001D; // Uninitializes the help system.
{$EXTERNALSYM HH_UNINITIALIZE}
HH_PRETRANSLATEMESSAGE = $00FD; // Pumps messages. (NULL, NULL, MSG*).
{$EXTERNALSYM HH_PRETRANSLATEMESSAGE}
HH_SET_GLOBAL_PROPERTY = $00FC; // Set a global property. (NULL, NULL, HH_GPROP)
{$EXTERNALSYM HH_SET_GLOBAL_PROPERTY}
{$ENDIF}
{$IFDEF HTMLHELP11}
HH_INTERNAL = $00FF; // Used internally.
{$EXTERNALSYM HH_INTERNAL}
{$ENDIF}
{$IFDEF HTMLHELP12}
HHWIN_PROP_TAB_AUTOHIDESHOW = (1 shl 0); // Automatically hide/show tri-pane window
{$EXTERNALSYM HHWIN_PROP_TAB_AUTOHIDESHOW}
{$ENDIF}
HHWIN_PROP_ONTOP = (1 shl 1); // Top-most window (not currently implemented)
{$EXTERNALSYM HHWIN_PROP_ONTOP}
HHWIN_PROP_NOTITLEBAR = (1 shl 2); // no title bar
{$EXTERNALSYM HHWIN_PROP_NOTITLEBAR}
HHWIN_PROP_NODEF_STYLES = (1 shl 3); // no default window styles (only HH_WINTYPE.dwStyles)
{$EXTERNALSYM HHWIN_PROP_NODEF_STYLES}
HHWIN_PROP_NODEF_EXSTYLES = (1 shl 4); // no default extended window styles (only HH_WINTYPE.dwExStyles)
{$EXTERNALSYM HHWIN_PROP_NODEF_EXSTYLES}
HHWIN_PROP_TRI_PANE = (1 shl 5); // use a tri-pane window
{$EXTERNALSYM HHWIN_PROP_TRI_PANE}
HHWIN_PROP_NOTB_TEXT = (1 shl 6); // no text on toolbar buttons
{$EXTERNALSYM HHWIN_PROP_NOTB_TEXT}
HHWIN_PROP_POST_QUIT = (1 shl 7); // post WM_QUIT message when window closes
{$EXTERNALSYM HHWIN_PROP_POST_QUIT}
HHWIN_PROP_AUTO_SYNC = (1 shl 8); // automatically ssync contents and index
{$EXTERNALSYM HHWIN_PROP_AUTO_SYNC}
HHWIN_PROP_TRACKING = (1 shl 9); // send tracking notification messages
{$EXTERNALSYM HHWIN_PROP_TRACKING}
HHWIN_PROP_TAB_SEARCH = (1 shl 10); // include search tab in navigation pane
{$EXTERNALSYM HHWIN_PROP_TAB_SEARCH}
HHWIN_PROP_TAB_HISTORY = (1 shl 11); // include history tab in navigation pane
{$EXTERNALSYM HHWIN_PROP_TAB_HISTORY}
{$IFDEF HTMLHELP11}
HHWIN_PROP_TAB_BOOKMARKS = (1 shl 12); // include bookmark tab in navigation pane
{$EXTERNALSYM HHWIN_PROP_TAB_BOOKMARKS}
{$ENDIF}
{$IFDEF HTMLHELP12}
HHWIN_PROP_TAB_FAVORITES = (1 shl 12); // include favorites tab in navigation pane
{$EXTERNALSYM HHWIN_PROP_TAB_FAVORITES}
{$ENDIF}
HHWIN_PROP_CHANGE_TITLE = (1 shl 13); // Put current HTML title in title bar
{$EXTERNALSYM HHWIN_PROP_CHANGE_TITLE}
HHWIN_PROP_NAV_ONLY_WIN = (1 shl 14); // Only display the navigation window
{$EXTERNALSYM HHWIN_PROP_NAV_ONLY_WIN}
HHWIN_PROP_NO_TOOLBAR = (1 shl 15); // Don't display a toolbar
{$EXTERNALSYM HHWIN_PROP_NO_TOOLBAR}
HHWIN_PROP_MENU = (1 shl 16); // Menu
{$EXTERNALSYM HHWIN_PROP_MENU}
HHWIN_PROP_TAB_ADVSEARCH = (1 shl 17); // Advanced FTS UI.
{$EXTERNALSYM HHWIN_PROP_TAB_ADVSEARCH}
HHWIN_PROP_USER_POS = (1 shl 18); // After initial creation, user controls window size/Position
{$EXTERNALSYM HHWIN_PROP_USER_POS}
{$IFDEF HTMLHELP12}
HHWIN_PROP_TAB_CUSTOM1 = (1 shl 19); // Use custom tab #1
{$EXTERNALSYM HHWIN_PROP_TAB_CUSTOM1}
HHWIN_PROP_TAB_CUSTOM2 = (1 shl 20); // Use custom tab #2
{$EXTERNALSYM HHWIN_PROP_TAB_CUSTOM2}
HHWIN_PROP_TAB_CUSTOM3 = (1 shl 21); // Use custom tab #3
{$EXTERNALSYM HHWIN_PROP_TAB_CUSTOM3}
HHWIN_PROP_TAB_CUSTOM4 = (1 shl 22); // Use custom tab #4
{$EXTERNALSYM HHWIN_PROP_TAB_CUSTOM4}
HHWIN_PROP_TAB_CUSTOM5 = (1 shl 23); // Use custom tab #5
{$EXTERNALSYM HHWIN_PROP_TAB_CUSTOM5}
HHWIN_PROP_TAB_CUSTOM6 = (1 shl 24); // Use custom tab #6
{$EXTERNALSYM HHWIN_PROP_TAB_CUSTOM6}
HHWIN_PROP_TAB_CUSTOM7 = (1 shl 25); // Use custom tab #7
{$EXTERNALSYM HHWIN_PROP_TAB_CUSTOM7}
HHWIN_PROP_TAB_CUSTOM8 = (1 shl 26); // Use custom tab #8
{$EXTERNALSYM HHWIN_PROP_TAB_CUSTOM8}
HHWIN_PROP_TAB_CUSTOM9 = (1 shl 27); // Use custom tab #9
{$EXTERNALSYM HHWIN_PROP_TAB_CUSTOM9}
HHWIN_TB_MARGIN = (1 shl 28); // the window type has a margin
{$EXTERNALSYM HHWIN_TB_MARGIN}
{$ENDIF}
HHWIN_PARAM_PROPERTIES = (1 shl 1); // valid fsWinProperties
{$EXTERNALSYM HHWIN_PARAM_PROPERTIES}
HHWIN_PARAM_STYLES = (1 shl 2); // valid dwStyles
{$EXTERNALSYM HHWIN_PARAM_STYLES}
HHWIN_PARAM_EXSTYLES = (1 shl 3); // valid dwExStyles
{$EXTERNALSYM HHWIN_PARAM_EXSTYLES}
HHWIN_PARAM_RECT = (1 shl 4); // valid rcWindowPos
{$EXTERNALSYM HHWIN_PARAM_RECT}
HHWIN_PARAM_NAV_WIDTH = (1 shl 5); // valid iNavWidth
{$EXTERNALSYM HHWIN_PARAM_NAV_WIDTH}
HHWIN_PARAM_SHOWSTATE = (1 shl 6); // valid nShowState
{$EXTERNALSYM HHWIN_PARAM_SHOWSTATE}
HHWIN_PARAM_INFOTYPES = (1 shl 7); // valid apInfoTypes
{$EXTERNALSYM HHWIN_PARAM_INFOTYPES}
HHWIN_PARAM_TB_FLAGS = (1 shl 8); // valid fsToolBarFlags
{$EXTERNALSYM HHWIN_PARAM_TB_FLAGS}
HHWIN_PARAM_EXPANSION = (1 shl 9); // valid fNotExpanded
{$EXTERNALSYM HHWIN_PARAM_EXPANSION}
HHWIN_PARAM_TABPOS = (1 shl 10); // valid tabpos
{$EXTERNALSYM HHWIN_PARAM_TABPOS}
HHWIN_PARAM_TABORDER = (1 shl 11); // valid taborder
{$EXTERNALSYM HHWIN_PARAM_TABORDER}
HHWIN_PARAM_HISTORY_COUNT = (1 shl 12); // valid cHistory
{$EXTERNALSYM HHWIN_PARAM_HISTORY_COUNT}
HHWIN_PARAM_CUR_TAB = (1 shl 13); // valid curNavType
{$EXTERNALSYM HHWIN_PARAM_CUR_TAB}
HHWIN_BUTTON_EXPAND = (1 shl 1); // Expand/contract button
{$EXTERNALSYM HHWIN_BUTTON_EXPAND}
HHWIN_BUTTON_BACK = (1 shl 2); // Back button
{$EXTERNALSYM HHWIN_BUTTON_BACK}
HHWIN_BUTTON_FORWARD = (1 shl 3); // Forward button
{$EXTERNALSYM HHWIN_BUTTON_FORWARD}
HHWIN_BUTTON_STOP = (1 shl 4); // Stop button
{$EXTERNALSYM HHWIN_BUTTON_STOP}
HHWIN_BUTTON_REFRESH = (1 shl 5); // Refresh button
{$EXTERNALSYM HHWIN_BUTTON_REFRESH}
HHWIN_BUTTON_HOME = (1 shl 6); // Home button
{$EXTERNALSYM HHWIN_BUTTON_HOME}
HHWIN_BUTTON_BROWSE_FWD = (1 shl 7); // not implemented
{$EXTERNALSYM HHWIN_BUTTON_BROWSE_FWD}
HHWIN_BUTTON_BROWSE_BCK = (1 shl 8); // not implemented
{$EXTERNALSYM HHWIN_BUTTON_BROWSE_BCK}
HHWIN_BUTTON_NOTES = (1 shl 9); // not implemented
{$EXTERNALSYM HHWIN_BUTTON_NOTES}
HHWIN_BUTTON_CONTENTS = (1 shl 10); // not implemented
{$EXTERNALSYM HHWIN_BUTTON_CONTENTS}
HHWIN_BUTTON_SYNC = (1 shl 11); // Sync button
{$EXTERNALSYM HHWIN_BUTTON_SYNC}
HHWIN_BUTTON_OPTIONS = (1 shl 12); // Options button
{$EXTERNALSYM HHWIN_BUTTON_OPTIONS}
HHWIN_BUTTON_PRINT = (1 shl 13); // Print button
{$EXTERNALSYM HHWIN_BUTTON_PRINT}
HHWIN_BUTTON_INDEX = (1 shl 14); // not implemented
{$EXTERNALSYM HHWIN_BUTTON_INDEX}
HHWIN_BUTTON_SEARCH = (1 shl 15); // not implemented
{$EXTERNALSYM HHWIN_BUTTON_SEARCH}
HHWIN_BUTTON_HISTORY = (1 shl 16); // not implemented
{$EXTERNALSYM HHWIN_BUTTON_HISTORY}
{$IFDEF HTMLHELP11}
HHWIN_BUTTON_BOOKMARKS = (1 shl 17); // not implemented
{$EXTERNALSYM HHWIN_BUTTON_BOOKMARKS}
{$ENDIF}
{$IFDEF HTMLHELP12}
HHWIN_BUTTON_FAVORITES = (1 shl 17); // not implemented
{$EXTERNALSYM HHWIN_BUTTON_FAVORITES}
{$ENDIF}
HHWIN_BUTTON_JUMP1 = (1 shl 18);
{$EXTERNALSYM HHWIN_BUTTON_JUMP1}
HHWIN_BUTTON_JUMP2 = (1 shl 19);
{$EXTERNALSYM HHWIN_BUTTON_JUMP2}
HHWIN_BUTTON_ZOOM = (1 shl 20);
{$EXTERNALSYM HHWIN_BUTTON_ZOOM}
HHWIN_BUTTON_TOC_NEXT = (1 shl 21);
{$EXTERNALSYM HHWIN_BUTTON_TOC_NEXT}
HHWIN_BUTTON_TOC_PREV = (1 shl 22);
{$EXTERNALSYM HHWIN_BUTTON_TOC_PREV}
HHWIN_DEF_BUTTONS = HHWIN_BUTTON_EXPAND or HHWIN_BUTTON_BACK or
HHWIN_BUTTON_OPTIONS or HHWIN_BUTTON_PRINT;
{$EXTERNALSYM HHWIN_DEF_BUTTONS}
// Button IDs
IDTB_EXPAND = 200;
{$EXTERNALSYM IDTB_EXPAND}
IDTB_CONTRACT = 201;
{$EXTERNALSYM IDTB_CONTRACT}
IDTB_STOP = 202;
{$EXTERNALSYM IDTB_STOP}
IDTB_REFRESH = 203;
{$EXTERNALSYM IDTB_REFRESH}
IDTB_BACK = 204;
{$EXTERNALSYM IDTB_BACK}
IDTB_HOME = 205;
{$EXTERNALSYM IDTB_HOME}
IDTB_SYNC = 206;
{$EXTERNALSYM IDTB_SYNC}
IDTB_PRINT = 207;
{$EXTERNALSYM IDTB_PRINT}
IDTB_OPTIONS = 208;
{$EXTERNALSYM IDTB_OPTIONS}
IDTB_FORWARD = 209;
{$EXTERNALSYM IDTB_FORWARD}
IDTB_NOTES = 210; // not implemented
{$EXTERNALSYM IDTB_NOTES}
IDTB_BROWSE_FWD = 211;
{$EXTERNALSYM IDTB_BROWSE_FWD}
IDTB_BROWSE_BACK = 212;
{$EXTERNALSYM IDTB_BROWSE_BACK}
IDTB_CONTENTS = 213; // not implemented
{$EXTERNALSYM IDTB_CONTENTS}
IDTB_INDEX = 214; // not implemented
{$EXTERNALSYM IDTB_INDEX}
IDTB_SEARCH = 215; // not implemented
{$EXTERNALSYM IDTB_SEARCH}
IDTB_HISTORY = 216; // not implemented
{$EXTERNALSYM IDTB_HISTORY}
{$IFDEF HTMLHELP11}
IDTB_BOOKMARKS = 217; // not implemented
{$EXTERNALSYM IDTB_BOOKMARKS}
{$ENDIF}
{$IFDEF HTMLHELP12}
IDTB_FAVORITES = 217; // not implemented
{$EXTERNALSYM IDTB_FAVORITES}
{$ENDIF}
IDTB_JUMP1 = 218;
{$EXTERNALSYM IDTB_JUMP1}
IDTB_JUMP2 = 219;
{$EXTERNALSYM IDTB_JUMP2}
IDTB_CUSTOMIZE = 221;
{$EXTERNALSYM IDTB_CUSTOMIZE}
IDTB_ZOOM = 222;
{$EXTERNALSYM IDTB_ZOOM}
IDTB_TOC_NEXT = 223;
{$EXTERNALSYM IDTB_TOC_NEXT}
IDTB_TOC_PREV = 224;
{$EXTERNALSYM IDTB_TOC_PREV}
// Notification codes
HHN_FIRST = -860;
{$EXTERNALSYM HHN_FIRST}
HHN_LAST = -879;
{$EXTERNALSYM HHN_LAST}
HHN_NAVCOMPLETE = (HHN_FIRST - 0);
{$EXTERNALSYM HHN_NAVCOMPLETE}
HHN_TRACK = (HHN_FIRST - 1);
{$EXTERNALSYM HHN_TRACK}
HHN_WINDOW_CREATE = (HHN_FIRST - 2);
{$EXTERNALSYM HHN_WINDOW_CREATE}
type
PHHLastError = ^THHLastError;
tagHH_LAST_ERROR = packed record
cbStruct: Integer; // size of this structure
hr: HRESULT; // the last error code.
description: PWideChar; // a description of the error (unicode string - BSTR).
end;
THHLastError = tagHH_LAST_ERROR;
PHHNNotify = ^THHNNotify;
tagHHN_NOTIFY = packed record
hdr: NMHDR;
pszUrl: PCSTR; // multibyte null-terminated string
end;
{$EXTERNALSYM tagHHN_NOTIFY}
HHN_NOTIFY = tagHHN_NOTIFY;
{$EXTERNALSYM HHN_NOTIFY}
THHNNotify = tagHHN_NOTIFY;
PHHPopup = ^THHPopup;
tagHH_POPUP = packed record