*** empty log message ***

This commit is contained in:
ronaldhordijk 2005-01-09 10:12:16 +00:00
parent ee4190fd9f
commit 01ad81e50d

613
Source/Adjust.pas Normal file
View File

@ -0,0 +1,613 @@
{
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.