From 8e90d823502a1838da2b5dad8ea47807ff475e2f Mon Sep 17 00:00:00 2001 From: zueuk Date: Sun, 11 Sep 2005 07:09:54 +0000 Subject: [PATCH] GradientForm and SizeTool integrated into AdjustForm, MainForm replaced with my version to support all these changes --- 2.10/Source/Adjust.dfm | 1230 +++++++++++++++++++++++++++------- 2.10/Source/Adjust.pas | 1277 ++++++++++++++++++++++++++++++++++-- 2.10/Source/Browser.dfm | 6 +- 2.10/Source/Browser.pas | 5 +- 2.10/Source/Main.dfm | 601 +++++++++-------- 2.10/Source/Main.pas | 315 +++++++-- 2.10/Source/ScriptForm.pas | 15 +- 7 files changed, 2805 insertions(+), 644 deletions(-) diff --git a/2.10/Source/Adjust.dfm b/2.10/Source/Adjust.dfm index cbbc3dd..59e4b29 100644 --- a/2.10/Source/Adjust.dfm +++ b/2.10/Source/Adjust.dfm @@ -1,11 +1,11 @@ object AdjustForm: TAdjustForm - Left = 500 - Top = 182 + Left = 363 + Top = 245 BorderIcons = [biSystemMenu, biMinimize] BorderStyle = bsSingle Caption = 'Adjust' - ClientHeight = 374 - ClientWidth = 372 + ClientHeight = 264 + ClientWidth = 390 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText @@ -49,8 +49,105 @@ object AdjustForm: TAdjustForm OnShow = FormShow PixelsPerInch = 96 TextHeight = 13 + object lblOffset: TLabel + Left = 381 + Top = 120 + Width = 3 + Height = 13 + Alignment = taRightJustify + end + object btnUndo: TSpeedButton + Left = 6 + Top = 5 + Width = 23 + Height = 22 + Flat = True + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000000000000000000000000000000000000FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF000000000000000000000000000000000000000000FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF0000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF0000000000FF00FF00FF00FF00FF00FF00FF00 + FF00000000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF0000000000FF00FF00FF00FF00FF00FF00FF00 + FF000000000000000000FF00FF0000000000FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF0000000000FF00FF00FF00FF00FF00FF00FF00 + FF0000000000FF00FF00FF00FF00FF00FF000000000000000000FF00FF00FF00 + FF00FF00FF00FF00FF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000000000 + 00000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00} + ParentShowHint = False + ShowHint = True + OnClick = btnUndoClick + end + object btnRedo: TSpeedButton + Left = 29 + Top = 5 + Width = 23 + Height = 22 + Flat = True + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000000000000000000000000000000000000FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000 + 000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00 + FF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF0000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00 + FF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00000000000000000000000000FF00FF00FF00FF00FF00FF00FF00 + FF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF0000000000FF00FF000000000000000000FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF0000000000FF00FF00FF00FF00FF00FF00FF00FF00000000000000 + 0000FF00FF00FF00FF00FF00FF0000000000FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF0000000000000000000000000000000000FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00} + ParentShowHint = False + ShowHint = True + OnClick = btnRedoClick + end object PrevPnl: TPanel - Left = 105 + Left = 113 Top = 5 Width = 162 Height = 122 @@ -71,238 +168,799 @@ object AdjustForm: TAdjustForm PopupMenu = QualityPopup end end - object GroupBox1: TGroupBox - Left = 8 - Top = 128 - Width = 357 - Height = 129 - Caption = 'Rendering' + object PageControl: TPageControl + Left = 0 + Top = 133 + Width = 390 + Height = 131 + ActivePage = TabSheet1 + Align = alBottom TabOrder = 1 - object Label8: TLabel - Left = 6 - Top = 24 - Width = 52 - Height = 13 - Alignment = taRightJustify - AutoSize = False - Caption = 'Gamma:' + object TabSheet1: TTabSheet + Caption = 'Camera' + object btnZoom: TSpeedButton + Left = 4 + Top = 4 + Width = 61 + Height = 21 + Hint = 'Reset value' + Caption = 'Zoom' + Flat = True + ParentShowHint = False + ShowHint = True + OnClick = btnZoomClick + end + object btnXpos: TSpeedButton + Left = 4 + Top = 28 + Width = 61 + Height = 21 + Hint = 'Reset value' + Caption = 'X position' + Flat = True + ParentShowHint = False + ShowHint = True + OnClick = btnXposClick + end + object btnYpos: TSpeedButton + Left = 4 + Top = 52 + Width = 61 + Height = 21 + Hint = 'Reset value' + Caption = 'Y position' + Flat = True + ParentShowHint = False + ShowHint = True + OnClick = btnYposClick + end + object btnAngle: TSpeedButton + Left = 4 + Top = 76 + Width = 61 + Height = 21 + Hint = 'Reset value' + Caption = 'Rotation' + Flat = True + ParentShowHint = False + ShowHint = True + OnClick = btnAngleClick + end + object scrollZoom: TScrollBar + Left = 72 + Top = 7 + Width = 257 + Height = 15 + LargeChange = 100 + Max = 3000 + Min = -3000 + PageSize = 0 + SmallChange = 10 + TabOrder = 0 + OnChange = scrollZoomChange + OnScroll = scrollZoomScroll + end + object txtZoom: TEdit + Left = 338 + Top = 4 + Width = 41 + Height = 21 + TabOrder = 1 + Text = '0' + OnEnter = txtZoomEnter + OnExit = txtZoomExit + OnKeyPress = txtZoomKeyPress + end + object scrollCenterX: TScrollBar + Left = 72 + Top = 31 + Width = 257 + Height = 15 + LargeChange = 100 + Max = 10000 + Min = -10000 + PageSize = 0 + SmallChange = 10 + TabOrder = 2 + OnChange = scrollCenterXChange + OnScroll = scrollCenterXScroll + end + object txtCenterX: TEdit + Left = 338 + Top = 28 + Width = 41 + Height = 21 + TabOrder = 3 + Text = '0' + OnEnter = txtCenterXEnter + OnExit = txtCenterXExit + OnKeyPress = txtCenterXKeyPress + end + object scrollCenterY: TScrollBar + Left = 72 + Top = 55 + Width = 257 + Height = 15 + LargeChange = 100 + Max = 10000 + Min = -10000 + PageSize = 0 + SmallChange = 10 + TabOrder = 4 + OnChange = scrollCenterYChange + OnScroll = scrollCenterYScroll + end + object txtCenterY: TEdit + Left = 338 + Top = 52 + Width = 41 + Height = 21 + TabOrder = 5 + Text = '0' + OnEnter = txtCenterYEnter + OnExit = txtCenterYExit + OnKeyPress = txtCenterYKeyPress + end + object scrollAngle: TScrollBar + Left = 72 + Top = 79 + Width = 257 + Height = 15 + LargeChange = 1500 + Max = 18000 + Min = -18000 + PageSize = 0 + SmallChange = 100 + TabOrder = 6 + OnChange = scrollAngleChange + OnScroll = scrollAngleScroll + end + object txtAngle: TEdit + Left = 338 + Top = 76 + Width = 41 + Height = 21 + TabOrder = 7 + Text = '0' + OnEnter = txtAngleEnter + OnExit = txtAngleExit + OnKeyPress = txtAngleKeyPress + end end - object Label9: TLabel - Left = 6 - Top = 48 - Width = 52 - Height = 13 - Alignment = taRightJustify - AutoSize = False - Caption = 'Brightness:' + object TabSheet2: TTabSheet + Caption = 'Rendering' + ImageIndex = 1 + object lblContrast: TLabel + Left = 8 + Top = 80 + Width = 93 + Height = 13 + Alignment = taRightJustify + AutoSize = False + Caption = 'Background color:' + end + object btnGamma: TSpeedButton + Left = 4 + Top = 4 + Width = 61 + Height = 21 + Hint = 'Reset value' + Caption = 'Gamma' + Flat = True + ParentShowHint = False + ShowHint = True + OnClick = btnGammaClick + end + object btnBritghtness: TSpeedButton + Left = 4 + Top = 28 + Width = 61 + Height = 21 + Hint = 'Reset value' + Caption = 'Brightness' + Flat = True + ParentShowHint = False + ShowHint = True + OnClick = btnBritghtnessClick + end + object btnVibrancy: TSpeedButton + Left = 4 + Top = 52 + Width = 61 + Height = 21 + Hint = 'Reset value' + Caption = 'Vibrancy' + Flat = True + ParentShowHint = False + ShowHint = True + OnClick = btnVibrancyClick + end + object scrollGamma: TScrollBar + Left = 72 + Top = 7 + Width = 257 + Height = 15 + LargeChange = 10 + Max = 500 + Min = 100 + PageSize = 0 + Position = 500 + TabOrder = 0 + OnChange = scrollGammaChange + OnScroll = scrollGammaScroll + end + object txtGamma: TEdit + Left = 338 + Top = 4 + Width = 41 + Height = 21 + TabOrder = 1 + Text = '0' + OnEnter = txtGammaEnter + OnExit = txtGammaExit + OnKeyPress = txtGammaKeyPress + end + object scrollBrightness: TScrollBar + Left = 72 + Top = 31 + Width = 257 + Height = 15 + LargeChange = 100 + Max = 1000 + PageSize = 0 + TabOrder = 2 + OnChange = scrollBrightnessChange + OnScroll = scrollBrightnessScroll + end + object txtBrightness: TEdit + Left = 338 + Top = 28 + Width = 41 + Height = 21 + TabOrder = 3 + Text = '0' + OnEnter = txtBrightnessEnter + OnExit = txtBrightnessExit + OnKeyPress = txtBrightnessKeyPress + end + object scrollVibrancy: TScrollBar + Left = 72 + Top = 55 + Width = 257 + Height = 15 + LargeChange = 10 + PageSize = 0 + TabOrder = 4 + OnChange = scrollVibrancyChange + OnScroll = scrollVibrancyScroll + end + object txtVibrancy: TEdit + Left = 338 + Top = 52 + Width = 41 + Height = 21 + TabOrder = 5 + Text = '0' + OnEnter = txtVibrancyEnter + OnExit = txtVibrancyExit + OnKeyPress = txtVibrancyKeyPress + end + object ColorPanel: TPanel + Left = 104 + Top = 76 + Width = 113 + Height = 21 + BevelOuter = bvLowered + Color = clBlack + TabOrder = 6 + OnClick = ColorPanelClick + end + object cbColor: TComboBox + Left = 224 + Top = 76 + Width = 59 + Height = 21 + Enabled = False + ItemHeight = 13 + ItemIndex = 0 + TabOrder = 7 + Text = '000000' + Items.Strings = ( + '000000' + 'FFFFFF') + end + object chkTransparent: TCheckBox + Left = 296 + Top = 80 + Width = 97 + Height = 17 + Caption = 'Transparent' + Enabled = False + TabOrder = 8 + end end - object Label10: TLabel - Left = 6 - Top = 72 - Width = 52 - Height = 13 - Alignment = taRightJustify - AutoSize = False - Caption = 'Vibrancy:' + object TabSheet3: TTabSheet + Caption = 'Gradient' + ImageIndex = 2 + object lblVal: TLabel + Left = 358 + Top = 55 + Width = 6 + Height = 13 + Caption = '0' + end + object btnMenu: TSpeedButton + Left = 6 + Top = 52 + Width = 75 + Height = 21 + Hint = 'Click for menu' + Caption = 'Rotate' + Flat = True + ParentShowHint = False + ShowHint = True + OnClick = btnMenuClick + end + object btnOpen: TSpeedButton + Left = 333 + Top = 77 + Width = 23 + Height = 22 + Hint = 'Open 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 = 357 + Top = 77 + 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 = 5 + Top = 80 + Width = 57 + Height = 13 + Alignment = taCenter + AutoSize = False + Caption = 'Preset' + end + object btnPaste: TSpeedButton + Left = 309 + Top = 77 + Width = 23 + Height = 22 + Hint = 'Paste fradient from clipboard' + 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} + ParentShowHint = False + ShowHint = True + OnClick = btnPasteClick + end + object btnCopy: TSpeedButton + Left = 285 + Top = 77 + Width = 23 + Height = 22 + Hint = 'Copy gradient to clipboard' + 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} + ParentShowHint = False + ShowHint = True + OnClick = btnCopyClick + end + object GradientPnl: TPanel + Left = 0 + Top = 0 + Width = 382 + Height = 45 + Align = alTop + BevelOuter = bvLowered + TabOrder = 0 + object GradientImage: TImage + Left = 1 + Top = 1 + Width = 380 + Height = 43 + Cursor = crHandPoint + Align = alClient + PopupMenu = GradientPopup + Stretch = True + OnMouseDown = GradImageMouseDown + OnMouseMove = GradImageMouseMove + OnMouseUp = GradImageMouseUp + end + end + object ScrollBar: TScrollBar + Left = 88 + Top = 55 + Width = 255 + Height = 15 + LargeChange = 16 + Max = 128 + Min = -128 + PageSize = 0 + TabOrder = 1 + OnChange = ScrollBarChange + OnScroll = ScrollBarScroll + end + object cmbPalette: TComboBox + Left = 69 + Top = 79 + Width = 201 + 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 = 2 + 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 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' - OnEnter = txtGammaEnter - 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' - OnEnter = txtBrightnessEnter - 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' - OnEnter = txtVibrancyEnter - OnExit = txtVibrancyExit - OnKeyPress = txtVibrancyKeyPress - end - object ColorPanel: TPanel - Left = 168 - Top = 96 - Width = 177 - Height = 25 - BevelOuter = bvLowered - Color = clBlack - TabOrder = 6 - OnClick = ColorPanelClick + object TabSheet4: TTabSheet + Caption = 'Image Size' + ImageIndex = 3 + object Label2: TLabel + Left = 58 + Top = 15 + Width = 28 + Height = 13 + Caption = 'Width' + end + object Label3: TLabel + Left = 58 + Top = 39 + Width = 31 + Height = 13 + Caption = 'Height' + end + object Bevel1: TBevel + Left = 48 + Top = 4 + Width = 137 + Height = 93 + Shape = bsFrame + end + object Bevel2: TBevel + Left = 192 + Top = 4 + Width = 148 + Height = 93 + Shape = bsFrame + end + object chkMaintain: TCheckBox + Left = 56 + Top = 68 + Width = 121 + Height = 17 + Caption = 'Maintain aspect ratio' + TabOrder = 0 + OnClick = chkMaintainClick + end + object btnPreset1: TButton + Left = 200 + Top = 12 + Width = 105 + Height = 25 + Caption = 'Preset 1' + TabOrder = 1 + OnClick = btnPreset1Click + end + object btnPreset2: TButton + Left = 200 + Top = 38 + Width = 105 + Height = 25 + Caption = 'Preset 2' + TabOrder = 2 + OnClick = btnPreset2Click + end + object btnPreset3: TButton + Left = 200 + Top = 64 + Width = 105 + Height = 25 + Caption = 'Preset 3' + TabOrder = 3 + OnClick = btnPreset3Click + end + object btnSet1: TButton + Left = 304 + Top = 12 + Width = 27 + Height = 25 + Caption = 'Set' + TabOrder = 4 + OnClick = btnSet1Click + end + object btnSet2: TButton + Left = 304 + Top = 38 + Width = 27 + Height = 25 + Caption = 'Set' + TabOrder = 5 + OnClick = btnSet2Click + end + object btnSet3: TButton + Left = 304 + Top = 64 + Width = 27 + Height = 25 + Caption = 'Set' + TabOrder = 6 + OnClick = btnSet3Click + end + object txtWidth: TComboBox + Left = 104 + Top = 12 + Width = 73 + Height = 21 + ItemHeight = 13 + ItemIndex = 0 + TabOrder = 7 + Text = '512' + OnChange = txtWidthChange + OnKeyPress = txtSizeKeyPress + Items.Strings = ( + '512' + '640' + '800' + '1024' + '1280') + end + object txtHeight: TComboBox + Left = 104 + Top = 36 + Width = 73 + Height = 21 + ItemHeight = 13 + ItemIndex = 0 + TabOrder = 8 + Text = '384' + OnChange = txtHeightChange + OnKeyPress = txtSizeKeyPress + Items.Strings = ( + '384' + '480' + '512' + '600' + '768' + '960' + '1024') + end end end - object GroupBox2: TGroupBox - Left = 8 - Top = 264 - Width = 357 - Height = 105 - Caption = 'Camera' + object trkQuality: TTrackBar + Left = 288 + Top = 0 + Width = 33 + Height = 129 + Hint = 'Preview image quality' + Max = 5 + Min = 1 + Orientation = trVertical + ParentShowHint = False + Position = 3 + ShowHint = True 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' - OnEnter = txtZoomEnter - 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' - OnEnter = txtCenterXEnter - 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' - OnEnter = txtCenterYEnter - OnExit = txtCenterYExit - OnKeyPress = txtCenterYKeyPress - end + TabStop = False + ThumbLength = 18 + Visible = False end object QualityPopup: TPopupMenu Images = MainForm.Buttons - Left = 16 - Top = 16 + Left = 320 + Top = 8 object mnuLowQuality: TMenuItem Caption = 'Low Quality' RadioItem = True @@ -322,7 +980,123 @@ object AdjustForm: TAdjustForm end object ColorDialog: TColorDialog Options = [cdFullOpen] - Left = 376 + Left = 352 Top = 8 end + object GradientPopup: TPopupMenu + Images = MainForm.Buttons + Left = 320 + Top = 48 + 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 scrollModePopup: TPopupMenu + AutoHotkeys = maManual + AutoPopup = False + Left = 352 + Top = 48 + 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 = mnuContrastClick + 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 = 320 + Top = 80 + end + object ApplicationEvents: TApplicationEvents + OnActivate = ApplicationEventsActivate + Left = 352 + Top = 80 + end end diff --git a/2.10/Source/Adjust.pas b/2.10/Source/Adjust.pas index b08369f..b603a14 100644 --- a/2.10/Source/Adjust.pas +++ b/2.10/Source/Adjust.pas @@ -21,11 +21,19 @@ interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - StdCtrls, ExtCtrls, ComCtrls, ControlPoint, Render, Buttons, Menus, cmap; + StdCtrls, ExtCtrls, ComCtrls, ControlPoint, Render, Buttons, Menus, cmap, + AppEvnts; const WM_UPDATE_PARAMS = WM_APP + 5439; +const + PixelCountMax = 32768; + +type + pRGBTripleArray = ^TRGBTripleArray; + TRGBTripleArray = array[0..PixelCountMax - 1] of TRGBTriple; + type TAdjustForm = class(TForm) QualityPopup: TPopupMenu; @@ -35,35 +43,99 @@ type 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; + PageControl: TPageControl; + TabSheet1: TTabSheet; scrollZoom: TScrollBar; txtZoom: TEdit; - Label6: TLabel; scrollCenterX: TScrollBar; txtCenterX: TEdit; scrollCenterY: TScrollBar; txtCenterY: TEdit; - Label1: TLabel; + TabSheet2: TTabSheet; + lblContrast: TLabel; + scrollGamma: TScrollBar; + txtGamma: TEdit; + scrollBrightness: TScrollBar; + txtBrightness: TEdit; + scrollVibrancy: TScrollBar; + txtVibrancy: TEdit; ColorPanel: TPanel; + TabSheet3: TTabSheet; + cbColor: TComboBox; + scrollAngle: TScrollBar; + txtAngle: TEdit; + btnZoom: TSpeedButton; + btnXpos: TSpeedButton; + btnYpos: TSpeedButton; + btnAngle: TSpeedButton; + btnGamma: TSpeedButton; + btnBritghtness: TSpeedButton; + btnVibrancy: TSpeedButton; + GradientPnl: TPanel; + GradientImage: TImage; + lblVal: TLabel; + ScrollBar: TScrollBar; + btnMenu: TSpeedButton; + btnOpen: TSpeedButton; + btnSmoothPalette: TSpeedButton; + Label1: TLabel; + btnPaste: TSpeedButton; + btnCopy: TSpeedButton; + cmbPalette: TComboBox; + GradientPopup: TPopupMenu; + mnuRandomize: TMenuItem; + N7: TMenuItem; + mnuInvert: TMenuItem; + mnuReverse: TMenuItem; + N3: TMenuItem; + mnuSmoothPalette: TMenuItem; + mnuGradientBrowser: TMenuItem; + N4: TMenuItem; + SaveGradient1: TMenuItem; + SaveasMapfile1: TMenuItem; + N6: TMenuItem; + mnuSaveasDefault: TMenuItem; + N5: TMenuItem; + mnuCopy: TMenuItem; + mnuPaste: TMenuItem; + scrollModePopup: TPopupMenu; + mnuRotate: TMenuItem; + N1: TMenuItem; + mnuHue: TMenuItem; + mnuSaturation: TMenuItem; + mnuBrightness: TMenuItem; + Contrast1: TMenuItem; + N2: TMenuItem; + mnuBlur: TMenuItem; + mnuFrequency: TMenuItem; + SaveDialog: TSaveDialog; + ApplicationEvents: TApplicationEvents; + lblOffset: TLabel; + TabSheet4: TTabSheet; + Label2: TLabel; + Label3: TLabel; + chkMaintain: TCheckBox; + btnPreset1: TButton; + btnPreset2: TButton; + btnPreset3: TButton; + btnSet1: TButton; + btnSet2: TButton; + btnSet3: TButton; + txtWidth: TComboBox; + txtHeight: TComboBox; + Bevel1: TBevel; + Bevel2: TBevel; + trkQuality: TTrackBar; + btnUndo: TSpeedButton; + btnRedo: TSpeedButton; + chkTransparent: TCheckBox; 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 btnOKClick(Sender: TObject); +// procedure btnCancelClick(Sender: TObject); +// procedure btnCanelClick(Sender: TObject); procedure FormShow(Sender: TObject); procedure mnuLowQualityClick(Sender: TObject); procedure mnuMediumQualityClick(Sender: TObject); @@ -107,27 +179,135 @@ type procedure txtZoomEnter(Sender: TObject); procedure txtCenterXEnter(Sender: TObject); procedure txtCenterYEnter(Sender: TObject); + procedure scrollAngleChange(Sender: TObject); + procedure scrollAngleScroll(Sender: TObject; ScrollCode: TScrollCode; + var ScrollPos: Integer); + procedure txtAngleEnter(Sender: TObject); + procedure txtAngleExit(Sender: TObject); + procedure txtAngleKeyPress(Sender: TObject; var Key: Char); + procedure btnZoomClick(Sender: TObject); + procedure btnXposClick(Sender: TObject); + procedure btnYposClick(Sender: TObject); + procedure btnAngleClick(Sender: TObject); + procedure btnGammaClick(Sender: TObject); + procedure btnBritghtnessClick(Sender: TObject); + procedure btnVibrancyClick(Sender: TObject); + + // --Z-- // gradient functions + procedure cmbPaletteChange(Sender: TObject); + procedure DrawPalette; + 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 mnuContrastClick(Sender: TObject); + + procedure GradImageMouseDown(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); + procedure GradImageMouseMove(Sender: TObject; Shift: TShiftState; X, + Y: Integer); + procedure GradImageMouseUp(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); + + procedure btnSet1Click(Sender: TObject); + procedure btnSet2Click(Sender: TObject); + procedure btnSet3Click(Sender: TObject); + procedure btnPreset1Click(Sender: TObject); + procedure btnPreset2Click(Sender: TObject); + procedure btnPreset3Click(Sender: TObject); + procedure txtWidthChange(Sender: TObject); + procedure txtHeightChange(Sender: TObject); + procedure txtSizeKeyPress(Sender: TObject; var Key: Char); + procedure chkMaintainClick(Sender: TObject); + procedure SetMainWindowSize; + procedure GetMainWindowSize; + procedure btnUndoClick(Sender: TObject); + procedure btnRedoClick(Sender: TObject); + private Resetting: boolean; Render: TRenderer; bm: TBitmap; EditBoxValue: string; + + cp: TControlPoint; + + // --Z-- // gradient stuff + Palette: TColorMap; + BackupPal: TColorMap; + + scrollMode: (modeRotate, modeHue, modeSaturation, modeBrightness, modeContrast, + modeBlur, modeFrequency); + imgDrag, GradientChanged: boolean; + dragX, oldX: integer; + offset: integer; // for display... :-\ + + + // --Z-- // image size stuff + ImageHeight, ImageWidth: integer; + Preset: array[1..3] of record + Left, Top, Width, Height: integer; + end; + ratio: double; + + // gradient stuff again + procedure Apply; + function Blur(const radius: integer; const pal: TColorMap): TColorMap; + function Frequency(const times: Integer; const pal: TColorMap): TColorMap; + procedure SaveMap(FileName: string); + + // and image size stuff again + procedure ReadPreset(n: integer); + procedure WritePreset(n: integer); + function PresetToStr(n: integer): string; + + // -- public PreviewDensity: double; - cp: TControlPoint; + // cmap: TColorMap; // Sample_Density, Zoom: double; // Center: array[0..1] of double; procedure UpdateDisplay; procedure UpdateFlame; + + procedure UpdateGradient(Pal: TColorMap); end; var AdjustForm: TAdjustForm; +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); + +//function RandomGradient: TColorMap; + implementation -uses Main, Global, Registry, Mutate, Editor; +//uses Main, Global, Registry, Mutate, Editor, Save, Browser; +uses + RndFlame, Main, cmapdata, Math, Browser, Editor, Global, + Save, Mutate, ClipBrd, GradientHlpr, Registry; {$R *.DFM} @@ -139,7 +319,8 @@ begin pw := PrevPnl.Width - 2; ph := PrevPnl.Height - 2; cp.copy(MainCp); - if cp.width > cp.height then +// --Z-- actually this isn not correct: // if cp.width > cp.height then + if (cp.width / cp.height) > (PrevPnl.Width / PrevPnl.Height) then begin PreviewImage.Width := pw; r := cp.width / PreviewImage.Width; @@ -163,18 +344,27 @@ begin scrollGamma.Position := trunc(cp.Gamma * 100); scrollBrightness.Position := trunc(cp.Brightness * 100); scrollVibrancy.Position := trunc(cp.vibrancy * 100); - scrollZoom.Position := trunc(cp.zoom * 100); + scrollZoom.Position := trunc(cp.zoom * 1000); + ScrollAngle.Position := Trunc(cp.FAngle * 18000.0 / PI) mod scrollAngle.Max; + if (abs(cp.Center[0]) < 1000) and (abs(cp.Center[1]) < 1000) then begin - scrollCenterX.Position := trunc(cp.Center[0] * 100); - scrollCenterY.Position := trunc(cp.Center[1] * 100); + scrollCenterX.Position := trunc(cp.Center[0] * 1000); + scrollCenterY.Position := trunc(cp.Center[1] * 1000); end else begin scrollCenterX.Position := 0; scrollCenterY.Position := 0; end; - ColorPanel.color := cp.background[2] shl 16 + - cp.background[1] shl 8 + cp.background[0]; + + ColorPanel.color := cp.background[2] shl 16 + cp.background[1] shl 8 + cp.background[0]; + cbColor.text := IntToHex(integer(ColorPanel.Color), 6); + + GetMainWindowSize; + Resetting := False; DrawPreview; + + Palette:=cp.cmap; + DrawPalette; end; procedure TAdjustForm.UpdateFlame; @@ -207,6 +397,10 @@ begin Render.Render; BM.Assign(Render.GetImage); PreviewImage.Picture.Graphic := bm; + + PreviewImage.Refresh; // --Z-- why was commented out? ;-) + + DrawPalette; // (?) end; end; @@ -229,6 +423,8 @@ begin PreviewDensity := prevHighQuality; end; end; + + Sendmessage(cmbPalette.Handle, CB_SETDROPPEDWIDTH , cmbPalette.width * 2, 0); end; procedure TAdjustForm.FormClose(Sender: TObject; var Action: TCloseAction); @@ -258,6 +454,7 @@ begin Render.free; end; +{ procedure TAdjustForm.btnOKClick(Sender: TObject); begin ModalResult := mrOK; @@ -272,12 +469,15 @@ procedure TAdjustForm.btnCanelClick(Sender: TObject); begin ModalResult := mrCancel; end; +} procedure TAdjustForm.FormShow(Sender: TObject); var Registry: TRegistry; + i: integer; + strx, stry, strw, strh: string; begin - if LimitVibrancy then scrollVibrancy.Max := 100 else scrollVibrancy.Max := 300; + if LimitVibrancy then scrollVibrancy.Max := 1000 else scrollVibrancy.Max := 3000; { Read posution from registry } Registry := TRegistry.Create; try @@ -288,11 +488,40 @@ begin AdjustForm.Left := Registry.ReadInteger('Left'); if Registry.ValueExists('Top') then AdjustForm.Top := Registry.ReadInteger('Top'); + Registry.CloseKey; + end; + + if Registry.OpenKey('Software\' + APP_NAME + '\ImageSizePresets', False) then + begin + // --Zueuk-- // image size presets + for i:=1 to 3 do begin + strx:='Preset'+IntToStr(i)+'Left'; + stry:='Preset'+IntToStr(i)+'Top'; + strw:='Preset'+IntToStr(i)+'Width'; + strh:='Preset'+IntToStr(i)+'Height'; + if Registry.ValueExists(strw) and Registry.ValueExists(strh) + then begin + Preset[i].Left := Registry.ReadInteger(strx); + Preset[i].Top := Registry.ReadInteger(stry); + Preset[i].Width := Registry.ReadInteger(strw); + Preset[i].Height := Registry.ReadInteger(strh); + if (Preset[1].Width>0) and (Preset[1].Height>0) then continue; + end; + Preset[i].Left := MainForm.Left; + Preset[i].Top := MainForm.Top; + Preset[i].Width := 512; + Preset[i].Height := 384; + end; end; Registry.CloseKey; finally Registry.Free; end; + GetMainWindowSize; + + btnPreset1.Caption := PresetToStr(1); + btnPreset2.Caption := PresetToStr(2); + btnPreset3.Caption := PresetToStr(3); end; procedure TAdjustForm.mnuLowQualityClick(Sender: TObject); @@ -331,7 +560,7 @@ begin begin key := #0; try - v := Trunc(StrToFloat(txtZoom.Text) * 100); + v := Trunc(StrToFloat(txtZoom.Text) * 1000); if v > scrollZoom.Max then v := scrollZoom.Max; if v < scrollZoom.Min then v := scrollZoom.Min; if v <> ScrollZoom.Position then begin @@ -350,7 +579,7 @@ var begin if (EditBoxValue <> txtZoom.Text) then try - v := Trunc(StrToFloat(txtZoom.Text) * 100); + v := Trunc(StrToFloat(txtZoom.Text) * 1000); if v > scrollZoom.Max then v := scrollZoom.Max; if v < scrollZoom.Min then v := scrollZoom.Min; if v <> ScrollZoom.Position then begin @@ -375,7 +604,7 @@ begin begin key := #0; try - v := Trunc(StrToFloat(txtCenterX.Text) * 100); + v := Trunc(StrToFloat(txtCenterX.Text) * 1000); if v > scrollCenterX.Max then v := scrollCenterX.Max; if v < scrollCenterX.Min then v := scrollCenterX.Min; ScrollCenterX.Position := v; @@ -392,7 +621,7 @@ var begin if (EditBoxValue <> txtCenterX.Text) then try - v := Trunc(StrToFloat(txtCenterX.Text) * 100); + v := Trunc(StrToFloat(txtCenterX.Text) * 1000); if v > scrollCenterX.Max then v := scrollCenterX.Max; if v < scrollCenterX.Min then v := scrollCenterX.Min; ScrollCenterX.Position := v; @@ -415,7 +644,7 @@ begin begin key := #0; try - v := Trunc(StrToFloat(txtCenterY.Text) * 100); + v := Trunc(StrToFloat(txtCenterY.Text) * 1000); if v > ScrollCenterY.Max then v := ScrollCenterY.Max; if v < ScrollCenterY.Min then v := ScrollCenterY.Min; ScrollCenterY.Position := v; @@ -432,7 +661,7 @@ var begin if (EditBoxValue <> txtCenterY.Text) then try - v := Trunc(StrToFloat(txtCenterY.Text) * 100); + v := Trunc(StrToFloat(txtCenterY.Text) * 1000); if v > ScrollCenterY.Max then v := ScrollCenterY.Max; if v < ScrollCenterY.Min then v := ScrollCenterY.Min; ScrollCenterY.Position := v; @@ -622,21 +851,21 @@ end; procedure TAdjustForm.scrollZoomChange(Sender: TObject); begin - cp.zoom := scrollZoom.Position / 100; + cp.zoom := scrollZoom.Position / 1000; txtZoom.text := FloatToStr(cp.zoom); DrawPreview; end; procedure TAdjustForm.scrollCenterXChange(Sender: TObject); begin - cp.center[0] := scrollCenterX.Position / 100; + cp.center[0] := scrollCenterX.Position / 1000; txtCenterX.text := FloatToStr(cp.center[0]); DrawPreview; end; procedure TAdjustForm.scrollCenterYChange(Sender: TObject); begin - cp.center[1] := scrollCenterY.Position / 100; + cp.center[1] := scrollCenterY.Position / 1000; txtCentery.text := FloatToStr(cp.center[1]); DrawPreview; end; @@ -649,6 +878,7 @@ begin if ColorDialog.Execute then begin ColorPanel.Color := ColorDialog.Color; + cbColor.text := IntToHex(integer(ColorDialog.Color), 6); col := ColorToRGB(ColorDialog.Color); cp.background[0] := col and 255; cp.background[1] := col shr 8 and 255; @@ -664,5 +894,978 @@ begin if ScrollCode = scEndScroll then UpdateFlame; end; +procedure TAdjustForm.scrollAngleChange(Sender: TObject); +begin + cp.FAngle := scrollAngle.Position * PI / 18000.0; + txtAngle.text := FloatToStr(cp.FAngle * 180 / PI); + DrawPreview; +end; + +procedure TAdjustForm.scrollAngleScroll(Sender: TObject; + ScrollCode: TScrollCode; var ScrollPos: Integer); +begin + if ScrollCode = scEndScroll then UpdateFlame; +end; + +procedure TAdjustForm.txtAngleEnter(Sender: TObject); +begin + EditBoxValue := txtVibrancy.Text; +end; + +procedure TAdjustForm.txtAngleKeyPress(Sender: TObject; var Key: Char); +var + v: integer; +begin + if ((key = #13) and (txtAngle.Text <> EditBoxValue)) then + begin + key := #0; + try + v := Trunc(StrToFloat(txtAngle.Text) * 100) mod (scrollAngle.Max*2); + if v > scrollAngle.Max then v := v - scrollAngle.Max*2 + else if v < scrollAngle.Min then v := v + scrollAngle.Max*2; + ScrollAngle.Position := v; + UpdateFlame; + EditBoxValue := txtAngle.Text; + except on EConvertError do + end; + end; +end; + +procedure TAdjustForm.txtAngleExit(Sender: TObject); +var + v: integer; +begin + if (txtAngle.Text <> EditBoxValue) then + try + v := Trunc(StrToFloat(txtAngle.Text) * 100) mod (scrollAngle.Max*2); + if v > scrollAngle.Max then v := v - scrollAngle.Max*2 + else if v < scrollAngle.Min then v := v + scrollAngle.Max*2; + ScrollAngle.Position := v; + UpdateFlame; + except on EConvertError do + txtAngle.Text := FloatToStr(cp.FAngle * 180 / PI); + end; +end; + +procedure TAdjustForm.btnZoomClick(Sender: TObject); +begin + scrollZoom.Position := 0; + UpdateFlame; +end; + +procedure TAdjustForm.btnXposClick(Sender: TObject); +begin + scrollCenterX.Position := 0; + UpdateFlame; +end; + +procedure TAdjustForm.btnYposClick(Sender: TObject); +begin + scrollCenterY.Position := 0; + UpdateFlame; +end; + +procedure TAdjustForm.btnAngleClick(Sender: TObject); +begin + scrollAngle.Position := 0; + UpdateFlame; +end; + +procedure TAdjustForm.btnGammaClick(Sender: TObject); +begin + scrollGamma.Position := 400; + UpdateFlame; +end; + +procedure TAdjustForm.btnBritghtnessClick(Sender: TObject); +begin + scrollBrightness.Position := 400; + UpdateFlame; +end; + +procedure TAdjustForm.btnVibrancyClick(Sender: TObject); +begin + scrollVibrancy.Position := 100; + UpdateFlame; +end; + +// --Z-- // gradient stuff implementation -------------------------------------- + +procedure TAdjustForm.Apply; +begin + MainForm.StopThread; + MainForm.UpdateUndo; + + MainCp.CmapIndex := cmbPalette.ItemIndex; + MainCp.cmap := Palette; + BackupPal := Palette; + if EditForm.visible then EditForm.UpdateDisplay; + if MutateForm.Visible then MutateForm.UpdateDisplay; + + DrawPreview; //hmm + MainForm.RedrawTimer.enabled := true; +end; + +procedure TAdjustForm.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 TAdjustForm.UpdateGradient(Pal: TColorMap); +begin + ScrollBar.Position := 0; + + Palette := Pal; + BackupPal := Pal; + DrawPalette; + + cp.copy(MainCp); +//? DrawPreview; +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 TAdjustForm.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 TAdjustForm.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 TAdjustForm.DrawPalette; +var + i: 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 // a loop from 0 to 0, hmm? :-\ + Row := Bitmap.Scanline[0]; + 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 TAdjustForm.cmbPaletteChange(Sender: TObject); +var + i: integer; +begin + i := cmbPalette.ItemIndex; + GetCmap(i, 1, Palette); + BackupPal := Palette; + ScrollBar.Position := 0; + DrawPalette; +// MainForm.UpdateUndo; + Apply; +end; + +procedure TAdjustForm.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); +// MainForm.UpdateUndo; + Apply; +end; + +procedure TAdjustForm.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); +// MainForm.UpdateUndo; + Apply; +end; + +procedure TAdjustForm.btnMenuClick(Sender: TObject); +begin + scrollModePopup.Popup(btnMenu.ClientOrigin.x, btnMenu.ClientOrigin.y + btnMenu.Height); +end; + +procedure TAdjustForm.ScrollBarChange(Sender: TObject); +var + intens, i, r, g, b: integer; + h, s, v: real; +begin + GradientChanged:=true; // hmm + + lblVal.Caption := IntToStr(ScrollBar.Position); +{ + wtf???? this is ridiculous! + + =>> if btnMenu.Caption = 'Hue' then <<= (and 6 more like this follows...) +} + case scrollMode of + modeHue: + begin + for i := 0 to 255 do + begin + RGBToHSV(BackupPal[i][0], BackupPal[i][1], BackupPal[i][2], h, s, v); + if s <> 0 then // --Z-- //(?) + begin + h := Round(360 + h + ScrollBar.Position) mod 360; + HSVToRGB(h, s, v, Palette[i][0], Palette[i][1], Palette[i][2]); + end; + end; + end; + modeSaturation: + begin + for i := 0 to 255 do + begin + RGBToHSV(BackupPal[i][0], BackupPal[i][1], BackupPal[i][2], h, s, v); +// if s <> 0 then // --Z-- //(?) +// begin + 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; + end; + modeContrast: + 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 +modeBrightness: + 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; +modeRotate: + 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 scrollMode = modeBlur then +// if btnMenu.Caption = 'Blur' then +modeBlur: + begin + Palette := Blur(ScrollBar.Position, BackupPal); + end; +// if scrollMode = modeFrequency then +modeFrequency: + begin + Palette := Frequency(ScrollBar.Position, BackupPal); + end; + end; +// DrawPalette; + cp.cmap:=Palette; + DrawPreview; +end; + +procedure TAdjustForm.ScrollBarScroll(Sender: TObject; + ScrollCode: TScrollCode; var ScrollPos: Integer); +begin + if ScrollCode = scEndScroll then + begin + GradientChanged:=false; + Apply; + end; +end; + +{ ***************************** Adjust menu ********************************* } + +procedure TAdjustForm.mnuRotateClick(Sender: TObject); +begin + btnMenu.Caption := 'Rotate'; + scrollMode:=modeRotate; + + BackupPal := Palette; + ScrollBar.Min := -128; + ScrollBar.Max := 128; + ScrollBar.LargeChange := 16; + ScrollBar.Position := 0; +end; + +procedure TAdjustForm.mnuHueClick(Sender: TObject); +begin + btnMenu.Caption := 'Hue'; + scrollMode:=modeHue; + + BackupPal := Palette; + ScrollBar.Min := -180; + ScrollBar.Max := 180; + ScrollBar.LargeChange := 15; + ScrollBar.Position := 0; +end; + +procedure TAdjustForm.mnuSaturationClick(Sender: TObject); +begin + btnMenu.Caption := 'Saturation'; + scrollMode:=modeSaturation; + + BackupPal := Palette; + ScrollBar.Min := -100; + ScrollBar.Max := 100; + ScrollBar.LargeChange := 15; + ScrollBar.Position := 0; +end; + +procedure TAdjustForm.mnuBrightnessClick(Sender: TObject); +begin + btnMenu.Caption := 'Brightness'; + scrollMode:=modeBrightness; + + BackupPal := Palette; + ScrollBar.Min := -255; + ScrollBar.Max := 255; + ScrollBar.LargeChange := 15; + ScrollBar.Position := 0; +end; + +procedure TAdjustForm.mnuContrastClick(Sender: TObject); +begin + scrollMode := modeContrast; + BackupPal := Palette; + + ScrollBar.Min := -100; + ScrollBar.Max := 100; + ScrollBar.LargeChange := 15; + ScrollBar.Position := 0; +end; + +procedure TAdjustForm.mnuBlurClick(Sender: TObject); +begin + btnMenu.Caption := 'Blur'; + scrollMode:=modeBlur; + + BackupPal := Palette; + ScrollBar.Min := 0; + ScrollBar.Max := 127; + ScrollBar.LargeChange := 15; + ScrollBar.Position := 0; +end; + +procedure TAdjustForm.mnuFrequencyClick(Sender: TObject); +begin + btnMenu.Caption := 'Frequency'; + scrollMode:=modeFrequency; + + BackupPal := Palette; + ScrollBar.Min := 1; + ScrollBar.Max := 10; + ScrollBar.LargeChange := 1; + ScrollBar.Position := 1; +end; + +// ----------------------------------------------------------------------------- + +procedure TAdjustForm.btnOpenClick(Sender: TObject); +begin + GradientBrowser.Filename := GradientFile; + GradientBrowser.Show; +end; + +procedure TAdjustForm.mnuSmoothPaletteClick(Sender: TObject); +begin + MainForm.SmoothPalette; +end; + +procedure TAdjustForm.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 TAdjustForm.SaveasMapfile1Click(Sender: TObject); +begin + SaveDialog.Filename := MainCp.name + '.map'; + if SaveDialog.execute then + SaveMap(SaveDialog.Filename); +end; + +procedure TAdjustForm.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 TAdjustForm.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; +//z MainForm.btnPaste.enabled := False; + MainForm.mnuPaste.enabled := False; + finally + gradstr.free + end; +end; + +procedure TAdjustForm.btnPasteClick(Sender: TObject); +begin + if Clipboard.HasFormat(CF_TEXT) then + begin + UpdateGradient(CreatePalette(Clipboard.AsText)); +// MainForm.UpdateUndo; + 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 TAdjustForm.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 TAdjustForm.mnuSaveasDefaultClick(Sender: TObject); +begin + DefaultPalette := Palette; + SaveMap(AppPath + 'default.map'); +end; + +{ +function RandomGradient: TColorMap; +begin + Result := GradientHelper.RandomGradient; +end; +} + +procedure TAdjustForm.mnuRandomizeClick(Sender: TObject); +begin + UpdateGradient(GradientHelper.RandomGradient); + Apply; +end; + +procedure TAdjustForm.GradImageMouseDown(Sender: TObject; + Button: TMouseButton; Shift: TShiftState; X, Y: Integer); +begin + if Button = mbLeft then + begin + dragX:=x; + oldX:=x; // hmmm + BackupPal:=Palette; // hmmmm.... + imgDrag:=true; + GradientChanged:=false; + end; +end; + +procedure TAdjustForm.GradImageMouseMove(Sender: TObject; + Shift: TShiftState; X, Y: Integer); +var + i: integer; +begin + if imgDrag and (oldX<>x) then + begin + oldX:=x; + offset := ( ((x - dragX) shl 8) div GradientImage.Width ) mod 256; + lblOffset.Caption:=IntToStr(offset); + lblOffset.Refresh; + GradientChanged := true; + + for i := 0 to 255 do + begin + Palette[i][0] := BackupPal[(255 + i - offset) and $FF][0]; + Palette[i][1] := BackupPal[(255 + i - offset) and $FF][1]; + Palette[i][2] := BackupPal[(255 + i - offset) and $FF][2]; + end; + cp.CmapIndex := cmbPalette.ItemIndex; + cp.cmap := Palette; + + //if scrollMode = modeRotate then lblVal.Caption := IntToStr(offset); + + DrawPreview; + end; +end; + +procedure TAdjustForm.GradImageMouseUp(Sender: TObject; + Button: TMouseButton; Shift: TShiftState; X, Y: Integer); +begin + if imgDrag then + begin + imgDrag := false; + lblOffset.Caption:=''; + + if GradientChanged then Apply; + end; +end; + +// --Z-- // image size functions ----------------------------------------------- + +function TAdjustForm.PresetToStr(n: integer): string; +begin + Result:=IntToStr(Preset[n].Width) + ' x ' + IntToStr(Preset[n].Height) +end; + +procedure TAdjustForm.ReadPreset(n: integer); +begin + ImageWidth := Preset[n].Width; + ImageHeight := Preset[n].Height; + txtWidth.Text := IntToStr(ImageWidth); + txtHeight.Text := IntToStr(ImageHeight); + + MainForm.Left:=Preset[n].Left; + MainForm.Top:=Preset[n].Top; + + SetMainWindowSize; +end; + +procedure TAdjustForm.WritePreset(n: integer); +var + Registry: TRegistry; + w,h: integer; +begin + // Write preset to registry + Registry := TRegistry.Create; + try + w:=StrToInt(txtWidth.text); + h:=StrToInt(txtHeight.text); + if (w>0) and (h>0) then begin + Preset[n].Left:=MainForm.Left; + Preset[n].Top:=MainForm.Top; + Preset[n].Width:=w; + Preset[n].Height:=h; + end + else exit; + + Registry.RootKey := HKEY_CURRENT_USER; + if Registry.OpenKey('\Software\' + APP_NAME + '\ImageSizePresets', True) then + begin + Registry.WriteInteger('Preset'+IntToStr(n)+'Left', Preset[n].Left); + Registry.WriteInteger('Preset'+IntToStr(n)+'Top', Preset[n].Top); + Registry.WriteInteger('Preset'+IntToStr(n)+'Width', Preset[n].Width); + Registry.WriteInteger('Preset'+IntToStr(n)+'Height', Preset[n].Height); + end; + except + end; +end; + +procedure TAdjustForm.txtSizeKeyPress(Sender: TObject; var Key: Char); +begin + if key = #13 then + begin + key := #0; + SetMainWindowSize; + end; +end; + +procedure TAdjustForm.chkMaintainClick(Sender: TObject); +begin + Ratio := ImageWidth / ImageHeight; +end; + +procedure TAdjustForm.SetMainWindowSize; +var + xtot, ytot: integer; +begin +// xdif := MainForm.Width - MainForm.Image.Width; +// ydif := MainForm.Height - MainForm.Image.Height; + + xtot := ImageWidth + (MainForm.Width - MainForm.Image.Width); + ytot := ImageHeight + (MainForm.Height - MainForm.Image.Height); + if xtot > Screen.Width then + begin + MainForm.Left := 0; + xtot := Screen.width; + end; + if ytot > Screen.height then + begin + MainForm.Top := 0; + ytot := Screen.height; + end; + MainForm.Width := xtot; + MainForm.Height := ytot; +end; + +procedure TAdjustForm.GetMainWindowSize; +begin + ImageWidth := MainForm.Image.Width; + ImageHeight := MainForm.Image.Height; + txtWidth.text := IntToStr(ImageWidth); + txtHeight.text := IntToStr(ImageHeight); +end; + +procedure TAdjustForm.btnSet1Click(Sender: TObject); +begin + WritePreset(1); + btnPreset1.Caption := PresetToStr(1); + SetMainWindowSize; +end; + +procedure TAdjustForm.btnSet2Click(Sender: TObject); +begin + WritePreset(2); + btnPreset2.Caption := PresetToStr(2); + SetMainWindowSize; +end; + +procedure TAdjustForm.btnSet3Click(Sender: TObject); +begin + WritePreset(3); + btnPreset3.Caption := PresetToStr(3); + SetMainWindowSize; +end; + +procedure TAdjustForm.btnPreset1Click(Sender: TObject); +begin + ReadPreset(1); +end; + +procedure TAdjustForm.btnPreset2Click(Sender: TObject); +begin + ReadPreset(2); +end; + +procedure TAdjustForm.btnPreset3Click(Sender: TObject); +begin + ReadPreset(3); +end; + +procedure TAdjustForm.txtWidthChange(Sender: TObject); +begin + try + ImageWidth := StrToInt(txtWidth.Text); + if chkMaintain.checked and txtWidth.Focused then + begin + ImageHeight := Round(ImageWidth / ratio); + txtHeight.Text := IntToStr(ImageHeight) + end; + except + end; +end; + +procedure TAdjustForm.txtHeightChange(Sender: TObject); +begin + try + ImageHeight := StrToInt(txtHeight.Text); + if chkMaintain.checked and txtHeight.Focused then + begin + ImageWidth := Round(ImageHeight * ratio); + txtWidth.Text := IntToStr(ImageWidth) + end; + except + end; +end; + +procedure TAdjustForm.btnUndoClick(Sender: TObject); +begin + MainForm.Undo; +end; + +procedure TAdjustForm.btnRedoClick(Sender: TObject); +begin + MainForm.Redo; +end; + end. diff --git a/2.10/Source/Browser.dfm b/2.10/Source/Browser.dfm index bb4f2ec..2990032 100644 --- a/2.10/Source/Browser.dfm +++ b/2.10/Source/Browser.dfm @@ -54,7 +54,7 @@ object GradientBrowser: TGradientBrowser Left = 0 Top = 4 Width = 372 - Height = 106 + Height = 105 Align = alClient BevelOuter = bvNone TabOrder = 0 @@ -62,7 +62,7 @@ object GradientBrowser: TGradientBrowser Left = 0 Top = 0 Width = 372 - Height = 106 + Height = 105 Align = alClient Columns = < item @@ -98,7 +98,7 @@ object GradientBrowser: TGradientBrowser end object pnlControls: TPanel Left = 0 - Top = 110 + Top = 109 Width = 372 Height = 51 Align = alBottom diff --git a/2.10/Source/Browser.pas b/2.10/Source/Browser.pas index f6fa3ab..18865a4 100644 --- a/2.10/Source/Browser.pas +++ b/2.10/Source/Browser.pas @@ -90,7 +90,7 @@ function CreatePalette(strng: string): TColorMap; implementation -uses Main, Options, Editor, Gradient, Registry, Adjust, Mutate; +uses Main, Options, Editor, {Gradient,} Registry, Adjust, Mutate; {$R *.DFM} @@ -470,7 +470,8 @@ begin MainForm.StopThread; MainForm.UpdateUndo; MainCp.cmap := Palette; - gradientForm.UpdateGradient(Palette); + //gradientForm.UpdateGradient(Palette); + AdjustForm.UpdateGradient(Palette); if EditForm.Visible then EditForm.UpdateDisplay; // if AdjustForm.Visible then AdjustForm.UpdateDisplay; if MutateForm.Visible then MutateForm.UpdateDisplay; diff --git a/2.10/Source/Main.dfm b/2.10/Source/Main.dfm index 8b5f6cc..397f1b6 100644 --- a/2.10/Source/Main.dfm +++ b/2.10/Source/Main.dfm @@ -1,8 +1,8 @@ object MainForm: TMainForm - Left = 408 - Top = 98 - Width = 574 - Height = 675 + Left = 387 + Top = 166 + Width = 605 + Height = 575 Caption = 'Apophysis' Color = clBtnFace Font.Charset = ANSI_CHARSET @@ -27,12 +27,12 @@ object MainForm: TMainForm Left = 160 Top = 28 Width = 4 - Height = 574 + Height = 480 end object ToolBar: TToolBar Left = 0 Top = 0 - Width = 566 + Width = 597 Height = 28 BorderWidth = 1 Flat = True @@ -43,7 +43,7 @@ object MainForm: TMainForm object btnOpen: TToolButton Left = 0 Top = 0 - Hint = 'Open (Ctrl+O)|Opens parameter files for browsing.' + Hint = 'Open (Ctrl+O)|Opens parameter files for browsing' Caption = 'btnOpen' ImageIndex = 1 OnClick = mnuOpenClick @@ -51,7 +51,7 @@ object MainForm: TMainForm object btnSave: TToolButton Left = 23 Top = 0 - Hint = 'Save Parameters (Ctrl+S)|Save parameters to file.' + Hint = 'Save Parameters (Ctrl+S)|Save parameters to file' Caption = 'btnSave' ImageIndex = 3 OnClick = mnuSaveAsClick @@ -59,7 +59,7 @@ object MainForm: TMainForm object btnRender: TToolButton Left = 46 Top = 0 - Hint = 'Render (Ctrl+R)|Render flame to disk.' + Hint = 'Render (Ctrl+R)|Render flame to disk' Caption = 'btnRender' ImageIndex = 35 OnClick = mnuRenderClick @@ -75,7 +75,7 @@ object MainForm: TMainForm object btnUndo: TToolButton Left = 77 Top = 0 - Hint = 'Undo (Ctrl+Z)|Undo the last action.' + Hint = 'Undo (Ctrl+Z)|Undo the last action' Caption = 'btnUndo' Enabled = False ImageIndex = 4 @@ -84,44 +84,59 @@ object MainForm: TMainForm object btnRedo: TToolButton Left = 100 Top = 0 - Hint = 'Redo (Ctrl+Y)|Redo the last action.' + Hint = 'Redo (Ctrl+Y)|Redo the last action' Caption = 'btnRedo' Enabled = False ImageIndex = 5 OnClick = mnuRedoClick end - object btnReset: TToolButton + object ToolButton1: TToolButton Left = 123 Top = 0 + Width = 8 + Caption = 'ToolButton1' + ImageIndex = 18 + Style = tbsSeparator + end + object btnReset: TToolButton + Left = 131 + Top = 0 Hint = 'Reset Location (F12)' Caption = 'btnReset' ImageIndex = 12 OnClick = mnuResetLocationClick end - object btnCopy: TToolButton - Left = 146 + object tbQualityBox: TComboBox + Left = 154 Top = 0 - Caption = 'btnCopy' - ImageIndex = 7 - OnClick = mnuCopyClick + Width = 40 + Height = 21 + Hint = 'Rendering quality|Rendering quality of the main window' + ItemHeight = 13 + ItemIndex = 0 + TabOrder = 0 + Text = '5' + OnExit = tbQualityBoxSet + OnKeyPress = tbQualityBoxKeyPress + OnSelect = tbQualityBoxSet + Items.Strings = ( + '5' + '10' + '15' + '25' + '50' + '100') end - object btnPaste: TToolButton - Left = 169 + object btnFullScreen: TToolButton + Left = 194 Top = 0 - Caption = 'btnPaste' - ImageIndex = 8 - OnClick = mnuPasteClick - end - object btnCopyUPR: TToolButton - Left = 192 - Top = 0 - Hint = 'Copy as UPR (Ctrl+C)|Copies a UPR to the clipboard.' - Caption = 'btnCopyUPR' - ImageIndex = 23 - OnClick = mnuCopyUPRClick + Hint = 'Fullscreen View (F3)|Shows full-screen view of the flame' + Caption = 'btnFullScreen' + ImageIndex = 52 + OnClick = mnuFullScreenClick end object ToolButton3: TToolButton - Left = 215 + Left = 217 Top = 0 Width = 8 Caption = 'ToolButton3' @@ -129,105 +144,111 @@ object MainForm: TMainForm Style = tbsSeparator end object btnEditor: TToolButton - Left = 223 + Left = 225 Top = 0 - Hint = 'Editor (Ctrl+E)|Shows the transform editor.' + Hint = 'Editor (F4)|Shows the Transform Editor' Caption = 'btnEditor' ImageIndex = 19 OnClick = mnuEditorClick end - object btnGradient: TToolButton - Left = 246 - Top = 0 - Hint = 'Gradient (Ctrl+G)|Shows the Gradient window.' - Caption = 'btnGradient' - ImageIndex = 11 - OnClick = mnuGradClick - end object btnAdjust: TToolButton - Left = 269 + Left = 248 Top = 0 - Hint = 'Adjust (Ctrl+A)|Shows the Adjust window.' + Hint = 'Adjust (F5)|Shows the Adjust window' Caption = 'btnAdjust' ImageIndex = 18 OnClick = mnuAdjustClick end - object btnMutate: TToolButton - Left = 292 + object btnGradient: TToolButton + Left = 271 Top = 0 - Hint = 'Mutation (Ctrl+M)|Shows the Mutation window.' + Hint = 'Gradient (F6)|Shows the Gradient window' + Caption = 'btnGradient' + ImageIndex = 11 + OnClick = mnuGradClick + end + object btnMutate: TToolButton + Left = 294 + Top = 0 + Hint = 'Mutation (F7)|Shows the Mutation window' Caption = 'btnMutate' ImageIndex = 17 OnClick = mnuMutateClick end - object ToolButton2: TToolButton - Left = 315 + object btnSize: TToolButton + Left = 317 Top = 0 - Width = 8 - Caption = 'ToolButton2' - ImageIndex = 14 - Style = tbsSeparator - end - object btnRun: TToolButton - Left = 323 - Top = 0 - Hint = 'Run Script (F8)|Runs the Default Animation script.' - ImageIndex = 43 - OnClick = btnRunClick - end - object btnStop: TToolButton - Left = 346 - Top = 0 - Caption = 'btnStop' - Enabled = False - ImageIndex = 36 - OnClick = mnuStopClick - end - object btnDefine: TToolButton - Left = 369 - Top = 0 - Hint = 'Edit Script (Ctrl+D)|Opens the Script Editor.' - Caption = 'btnDefine' - ImageIndex = 42 - OnClick = mnuEditScriptClick - end - object ToolButton1: TToolButton - Left = 392 - Top = 0 - Width = 8 - Caption = 'ToolButton1' - ImageIndex = 18 - Style = tbsSeparator - end - object btnOptions: TToolButton - Left = 400 - Top = 0 - Hint = 'Options (Ctrl+P)|Shows the Options dialog.' - Caption = 'btnOptions' - ImageIndex = 13 - OnClick = mnuOptionsClick + Hint = 'Image Size (F2)|Shows the Image Size window' + Caption = 'ma' + ImageIndex = 51 + OnClick = mnuImageSizeClick end object ToolButton4: TToolButton - Left = 423 + Left = 340 Top = 0 Width = 8 Caption = 'ToolButton4' ImageIndex = 14 Style = tbsSeparator end + object btnRun: TToolButton + Left = 348 + Top = 0 + Hint = 'Run Script|Runs the Default Animation script' + ImageIndex = 43 + OnClick = btnRunClick + end + object btnStop: TToolButton + Left = 371 + Top = 0 + Caption = 'btnStop' + ImageIndex = 36 + OnClick = mnuStopClick + end + object btnDefine: TToolButton + Left = 394 + Top = 0 + Hint = 'Edit Script (F8)|Opens the Script Editor' + Caption = 'btnDefine' + ImageIndex = 42 + OnClick = mnuEditScriptClick + end + object ToolButton5: TToolButton + Left = 417 + Top = 0 + Width = 8 + Caption = 'ToolButton5' + ImageIndex = 42 + Style = tbsSeparator + end + object btnOptions: TToolButton + Left = 425 + Top = 0 + Hint = 'Options (Ctrl+P)|Shows the Options dialog' + Caption = 'btnOptions' + ImageIndex = 13 + OnClick = mnuOptionsClick + end + object ToolButton6: TToolButton + Left = 448 + Top = 0 + Width = 8 + Caption = 'ToolButton6' + ImageIndex = 42 + Style = tbsSeparator + end object tbzoomwindow: TToolButton - Left = 431 + Left = 456 Top = 0 Hint = 'Zoom to rectangle' Caption = 'tbzoomwindow' - Down = True Grouped = True ImageIndex = 50 Style = tbsCheck OnClick = tbzoomwindowClick end object tbzoomoutwindow: TToolButton - Left = 454 + Left = 479 Top = 0 Hint = 'Zoom out using rectangle' Caption = 'tbzoomoutwindow' @@ -237,17 +258,18 @@ object MainForm: TMainForm OnClick = tbzoomoutwindowClick end object tbDrag: TToolButton - Left = 477 + Left = 502 Top = 0 Hint = 'Translate image' Caption = 'tbDrag' + Down = True Grouped = True ImageIndex = 48 Style = tbsCheck OnClick = tbDragClick end object tbRotate: TToolButton - Left = 500 + Left = 525 Top = 0 Hint = 'Rotate' Caption = 'tbRotate' @@ -261,7 +283,7 @@ object MainForm: TMainForm Left = 0 Top = 28 Width = 160 - Height = 574 + Height = 480 Align = alLeft Columns = < item @@ -279,8 +301,8 @@ object MainForm: TMainForm object BackPanel: TPanel Left = 164 Top = 28 - Width = 402 - Height = 574 + Width = 433 + Height = 480 Align = alClient BevelInner = bvLowered BevelOuter = bvNone @@ -290,12 +312,13 @@ object MainForm: TMainForm object Image: TImage Left = 1 Top = 1 - Width = 400 - Height = 572 + Width = 431 + Height = 478 Align = alClient AutoSize = True PopupMenu = DisplayPopup Stretch = True + OnDblClick = ImageDblClick OnMouseDown = ImageMouseDown OnMouseMove = ImageMouseMove OnMouseUp = ImageMouseUp @@ -303,8 +326,8 @@ object MainForm: TMainForm end object StatusBar: TStatusBar Left = 0 - Top = 602 - Width = 566 + Top = 508 + Width = 597 Height = 19 Panels = < item @@ -321,122 +344,122 @@ object MainForm: TMainForm Left = 8 Top = 56 Bitmap = { - 494C010133003600040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 + 494C010135003600040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 000000000000360000002800000040000000E0000000010020000000000000E0 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000292B2F00000000002F3236000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000001C32 + 88001A1764001C1D6E00191E790009182F000000000000000000000000001C1B + 6F001A1A64001A1964001B1A6800291C7C000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000A2D + 620001000000081144001543900000000000000000000D437000192D4E000613 + 420001020C0002050D0000000000171A65000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000927 + 5500030816000D2C7E003264A60000000000000000002257A3004998D7001D3D + 6B000000190001020E00000000001B1A69000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000081E + 480001192500226EC2000000000000000000145D7F002E71A8001B569E00244F + 95001031570009182F0000000A001B1A67000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000003415 + 0200180902001B0B01000000000000000000000000002763A0001D4D97003067 + B0002766B4003F77C0000B11200016135B000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000086685A002A080000B57E + 5D00EFE4DF00E0CFC500AD7150002D0F02006F7571000E4293001C4E9A002A69 + AC000B2F7500204A8B00122353001A1668000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000350B0500E9DAC900EDE5 + D600F9EEE300F6ECE300F8F2EA00E2D1C8003A150B00627D9100092871002469 + A8007CB3D7003453890003135B001E1D74000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000003C2D2400D0AB9600F8E8D600CAAE + 9900ECD6C500ECD8C900F4E2D100EAE1D200D2B4A1001A191700558BC200457E + B2006CADD8002C488900050336001D1B6D000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000001010100F6E3D300F0C9B600A979 + 6000A3725800A77D6300B6937E00D8C0AB00F9F7DD00000000005090C4003A69 + AE0078AFD2003A7CAC00041B57001D1A6F000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FDEAD900EBB198009B5A + 4000E6A48D00E9AB9300ECB99E00CBA48E00FFEED3000A0805002F75AE008BBC + DF00A9E0FF001A367500011B51001B2377000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FBE2D300F1B69F00A354 + 3600E6978000E79D8400ECAD8D00D19E8200EBCAB0000E0B0900437EBC007389 + B5003E52900005116300091149001B1B6E000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000067565100B57C5F00FBCFB900CF87 + 6E00F19B7E00F09D8200F6B29500EBB592009250390051444000121E54000000 + 120000001400070E370006143B001C1A6A000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000061473800BD8B7100F8D8 + C600F6CAB700EEB29B00F6BFA1008E4C36000D0600000F327D000A286C000A31 + 67000932710009306D00092F64000F3580000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000514440000503 + 0200583B2700452D1F0000000000423834000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 @@ -465,23 +488,23 @@ object MainForm: TMainForm 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000CD520800FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000003F43480000000000575C 6400000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000003F43480000000000575C - 6400000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 64000000000000000000000000000000000000000000CD520800FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000CD520800FFFFFF000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 @@ -489,96 +512,96 @@ object MainForm: TMainForm 000000000000000000000000000000000000393C410000000000626871000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000393C410000000000626871000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000CD520800FFFFFF00CD52 + 0800FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000006E52440033262100382A22000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000006E52440033262100382A22000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000CD520800FFFFFF00CD52 + 0800FFFDFB00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000008668 5A002A080000B57E5D00EFE4DF00E0CFC500AD7150002D0F0200957464000000 0000000000000000000000000000000000000000000000000000000000008668 5A002A080000B57E5D00EFE4DF00E0CFC500AD7150002D0F0200957464000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000CD520800FFFFFF00CD52 + 0800FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000350B 0500E9DAC900FDF5E600FCEFE300FBEDE300FCF3EA00E2D1C8003B160B00A288 800000000000000000000000000000000000000000000000000000000000350B 0500E9DAC900FDF5E600FCEFE300FBEDE300FCF3EA00E2D1C8003B160B00A288 - 8000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 80000000000000000000000000000000000000000000CD520800FFFFFF00CD52 + 0800FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000003C2D2400D0AB 9600FCECD800F8DCC700F3D7C500F3D9C900F9E3D100FCF3E400D2B4A1002219 14000000000000000000000000000000000000000000000000003C2D2400D0AB 9600FCECD800F8DCC7000000000000000000F9E3D100FCF3E400D2B4A1002219 - 1400000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 14000000000000000000000000000000000000000000CD520800FFFFFF00CD52 + 0800FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000001010100F6E3 D300F9D1BB00EEBEA500EDBCA200ECC2A800F0CDB800FAE2CD00FEFCE2000000 000000000000000000000000000000000000000000000000000001010100F6E3 D300F9D1BB00EEBEA5000000000000000000F0CDB800FAE2CD00FEFCE2000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000CD520800FFFFFF00CD52 + 0800CD520800CD520800CD520800CD520800CD520800CD520800CD520800CD52 + 0800CD520800CD520800CD520800000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000FDEA D900000000000000000000000000000000000000000000000000FFEED3000A08 050000000000000000000000000000000000000000000000000000000000FDEA D900000000000000000000000000000000000000000000000000FFEED3000A08 - 0500000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 05000000000000000000000000000000000000000000CD520800FFFFFF00CD52 + 0800FFFFFF00FFBD9600FFBD9600FFBD9600FFBD9600FFBD9600FFBD9600FFBD + 9600FFBD9600FFBD9600CD520800000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000FBE2 D300F8BCA300EC9D7F00E6978000E79D8400ECAD8D00F7C4A800EBCAB0000C09 080000000000000000000000000000000000000000000000000000000000FBE2 D300F8BCA300EC9D7F000000000000000000ECAD8D00F7C4A800EBCAB0000C09 - 0800000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 08000000000000000000000000000000000000000000CD520800FFFFFF00CD52 + 0800CD520800CD520800CD520800CD520800CD520800CD520800CD520800CD52 + 0800CD520800CD520800CD520800000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000067565100B57C 5F00FDD1BA00F5AD9400F19B7E00F09D8200F6B29500FDC7A400925039006655 500000000000000000000000000000000000000000000000000067565100B57C 5F00FDD1BA00F5AD94000000000000000000F6B29500FDC7A400925039006655 - 5000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 50000000000000000000000000000000000000000000CD520800FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000006147 3800BD8B7100FEDECC00FED2BF00FCC0A900FEC7A9008E4C36001D1713000000 0000000000000000000000000000000000000000000000000000000000006147 3800BD8B7100FEDECC00FED2BF00FCC0A900FEC7A9008E4C36001D1713000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000CD520800CD520800CD52 + 0800CD520800CD520800CD520800CD520800CD520800CD520800CD5208000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00005144400005030200583B2700452D1F000000000042383400000000000000 0000000000000000000000000000000000000000000000000000000000000000 00005144400005030200583B2700452D1F000000000042383400000000000000 + 00000000000000000000000000000000000000000000CD520800FFFFFF00FFBD + 9600FFBD9600FFBD9600FFBD9600FFBD9600FFBD9600FFBD9600CD5208000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000CD520800CD520800CD52 + 0800CD520800CD520800CD520800CD520800CD520800CD520800CD5208000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000001413120014131200141312001413 @@ -2117,15 +2140,15 @@ object MainForm: TMainForm 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000424D3E000000000000003E000000 2800000040000000E00000000100010000000000000700000000000000000000 - 000000000000000000000000FFFFFF0000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000FBF7FFC7FFC70000FBF7FFCFFFCF0000 - F7F7FF8FFF8F0000EFFBFF9FFF9F0000DFFBFF1FFF1F0000DFFDF83FF83F0000 - BFFDE01FE01F000077FDE00FE00F000067FEC00FC00F000097F6C00FC00F0000 - EDB6C00FC00F0000CDB2C00FC00F0000D9B5C00FC00F0000E5B7E01FE01F0000 - FD8FF03FF03F0000FE7FFFFFFFFF0000FFFF0000FFFFFFFFFFFF0000FC010001 + 000000000000000000000000FFFFFF00FF1F000000000000E000000000000000 + E000000000000000E000000000000000E000000000000000E000000000000000 + 8000000000000000800000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000008000000000000000 + C0FF000000000000FFFF000000000000FBF7FFC7FFC7800FFBF7FFCFFFCF800F + F7F7FF8FFF8F800FEFFBFF9FFF9F8000DFFBFF1FFF1F8000DFFDF83FF83F8000 + BFFDE01FE01F800077FDE00FE00F800067FEC00FC00F800097F6C00FC00F8000 + EDB6C00FC00F8000CDB2C00FC00F8000D9B5C00FC00F800FE5B7E01FE01F800F + FD8FF03FF03F800FFE7FFFFFFFFF800FFFFF0000FFFFFFFFFFFF0000FC010001 FE7F0000FC010001FE3F0000E0010001FE1F0000E0010001C00F000000010001 C007000000010001C003000000010001C003000000010805C007000000030001 C00F000000070001FE1F0000000F0001FE3F0000003F0001FE7F0000007F0001 @@ -2453,15 +2476,15 @@ object MainForm: TMainForm end object MainMenu: TMainMenu Images = Buttons - Left = 76 + Left = 72 Top = 56 object MainFile: TMenuItem Caption = '&File' - Hint = 'Contains commands for working with files.' + Hint = 'Contains commands for working with files' OnClick = MainFileClick object mnuOpen: TMenuItem - Caption = 'Open...' - Hint = 'Opens parameter files for browsing.' + Caption = '&Open...' + Hint = 'Open parameter file for browsing' ImageIndex = 1 ShortCut = 16463 OnClick = mnuOpenClick @@ -2470,15 +2493,15 @@ object MainForm: TMainForm Caption = '-' end object mnuSaveAs: TMenuItem - Caption = 'Save Parameters...' - Hint = 'Saves parameters to file.' + Caption = '&Save Parameters...' + Hint = 'Save parameters to file' ImageIndex = 3 ShortCut = 16467 OnClick = mnuSaveAsClick end object mnuSaveAllAs: TMenuItem Caption = 'Save &All Parameters' - Hint = 'Saves all parameters to file.' + Hint = 'Save all parameters to file' ShortCut = 24659 OnClick = mnuSaveAllAsClick end @@ -2487,13 +2510,13 @@ object MainForm: TMainForm end object mnuSmoothGradient: TMenuItem Caption = 'Smooth Palette...' - Hint = 'Creates a smooth gradient from an image.' + Hint = 'Create a smooth gradient from an image' ImageIndex = 34 OnClick = mnuSmoothGradientClick end object mnuOpenGradient: TMenuItem Caption = 'Gradient Browser...' - Hint = 'Shows the gradient browser' + Hint = 'Show the gradient browser' ImageIndex = 22 OnClick = mnuOpenGradientClick end @@ -2502,7 +2525,7 @@ object MainForm: TMainForm end object mnuSaveUPR: TMenuItem Caption = 'Export &UPR...' - Hint = 'Save the flame in Ultra Fractal parameter format.' + Hint = 'Save the flame in UltraFractal parameter format' OnClick = mnuSaveUPRClick end object mnuExportFLame: TMenuItem @@ -2512,7 +2535,7 @@ object MainForm: TMainForm end object mnuImportGimp: TMenuItem Caption = 'Import Gimp Parameters' - Hint = 'Imports Gimp parameters.' + Hint = 'Import Gimp parameters' OnClick = mnuImportGimpClick end object N1: TMenuItem @@ -2520,7 +2543,9 @@ object MainForm: TMainForm end object mnuPostSheep: TMenuItem Caption = 'Post Sheep...' + Enabled = False ImageIndex = 45 + ShortCut = 16456 Visible = False OnClick = mnuPostSheepClick end @@ -2530,7 +2555,7 @@ object MainForm: TMainForm end object mnuRandomBatch: TMenuItem Caption = '&Random Batch' - Hint = 'Creates and loads a file containing random flame parameters.' + Hint = 'Create and load a file containing random flame parameters' ShortCut = 16450 OnClick = mnuRandomBatchClick end @@ -2538,18 +2563,18 @@ object MainForm: TMainForm Caption = '-' end object mnuExit: TMenuItem - Caption = 'Exit' - Hint = 'Closes Apophysis.' + Caption = 'E&xit' + Hint = 'Quit Apophysis' OnClick = mnuExitClick end end object MainEdit: TMenuItem Caption = '&Edit' - Hint = 'Contains edit commands.' + Hint = 'Contains edit commands' object mnuUndo: TMenuItem Caption = '&Undo' Enabled = False - Hint = 'Undoes the last action.' + Hint = 'Undo last action' ImageIndex = 4 ShortCut = 16474 OnClick = mnuUndoClick @@ -2557,7 +2582,7 @@ object MainForm: TMainForm object mnuRedo: TMenuItem Caption = '&Redo' Enabled = False - Hint = 'Redoes the last action.' + Hint = 'Redo last action' ImageIndex = 5 ShortCut = 16473 OnClick = mnuRedoClick @@ -2565,30 +2590,22 @@ object MainForm: TMainForm object mnuSaveUndo: TMenuItem Caption = 'Save Undo...' Enabled = False - Hint = 'Saves the undo list to a parameter file.' + Hint = 'Save undo list to a parameter file' + ShortCut = 49237 OnClick = mnuSaveUndoClick end object N13: TMenuItem Caption = '-' end - object mnuImageSize: TMenuItem - Caption = 'Image Size' - ShortCut = 16457 - OnClick = mnuImageSizeClick - end - object N5: TMenuItem - Caption = '-' - end object mnuCopy: TMenuItem Caption = 'Copy' + Hint = 'Copy as UPR (Ctrl+C)|Copies a UPR to the clipboard' ImageIndex = 7 - ShortCut = 16451 OnClick = mnuCopyClick end object mnuPaste: TMenuItem Caption = 'Paste' ImageIndex = 8 - ShortCut = 16470 OnClick = mnuPasteClick end object N20: TMenuItem @@ -2596,54 +2613,73 @@ object MainForm: TMainForm end object mnuCopyUPR: TMenuItem Caption = 'Copy as U&PR' - Hint = 'Copies a UPR to the clipboard.' + Hint = 'Copy a UPR to the clipboard' ImageIndex = 23 ShortCut = 16469 OnClick = mnuCopyUPRClick end end - object F1: TMenuItem - Caption = 'Flame' - Hint = 'Contains commands for manipulating the flame.' + object View1: TMenuItem + Caption = '&View' + object mnuFullScreen: TMenuItem + Caption = 'Full Screen' + Hint = 'Show the flame in fullscreen mode' + ImageIndex = 52 + ShortCut = 114 + OnClick = mnuFullScreenClick + end + object N4: TMenuItem + Caption = '-' + end object mnuEditor: TMenuItem Caption = '&Editor' - Hint = 'Shows the transform Editor.' + Hint = 'Show the Transform Editor' ImageIndex = 19 - ShortCut = 16453 + ShortCut = 115 OnClick = mnuEditorClick end object mnuAdjust: TMenuItem Caption = 'Adjust' - Hint = 'Shows the Adjust window.' + Hint = 'Show the Adjust window' ImageIndex = 18 - ShortCut = 16449 + ShortCut = 116 OnClick = mnuAdjustClick end - object mnuMutate: TMenuItem - Caption = 'Mutation' - Hint = 'Show the Mutation window.' - ImageIndex = 17 - ShortCut = 16461 - OnClick = mnuMutateClick - end object mnuGrad: TMenuItem Caption = 'Gradient' - Hint = 'Shows the Gradient window.' + Hint = 'Show the Gradient window' ImageIndex = 11 - ShortCut = 16455 + ShortCut = 117 OnClick = mnuGradClick end + object mnuMutate: TMenuItem + Caption = 'Mutation' + Hint = 'Show the Mutation window' + ImageIndex = 17 + ShortCut = 118 + OnClick = mnuMutateClick + end object mnuimage: TMenuItem Caption = 'Image ' Visible = False OnClick = mnuimageClick end - object N4: TMenuItem + object N5: TMenuItem Caption = '-' end + object mnuImageSize: TMenuItem + Caption = 'Image Size' + ImageIndex = 51 + ShortCut = 113 + OnClick = mnuImageSizeClick + end + end + object F1: TMenuItem + Caption = 'Flame' + Hint = 'Contains commands for manipulating the flame' object mnuResetLocation: TMenuItem Caption = 'Reset Location' - Hint = 'Recalculates the flame'#39's location.' + Hint = 'Recalculate flame location' ImageIndex = 12 ShortCut = 123 OnClick = mnuResetLocationClick @@ -2653,26 +2689,22 @@ object MainForm: TMainForm end object mnuRandom: TMenuItem Caption = '&Randomize' - Hint = 'Randomizes the flame parameters.' - ShortCut = 120 + Hint = 'Randomize flame parameters' OnClick = mnuRandomClick end object mnuRWeights: TMenuItem Caption = 'Random &Weights' - Hint = 'Randomizes the weights.' - ShortCut = 116 + Hint = 'Randomize transform weights' OnClick = mnuRWeightsClick end object mnuEqualize: TMenuItem Caption = '&Equalize Weights' - Hint = 'Sets all weights to the same value.' - ShortCut = 117 + Hint = 'Set all weights to the same value' OnClick = mnuEqualizeClick end object mnuNormalWeights: TMenuItem Caption = 'Compute Weights' - Hint = 'Computes the weights from triangle area.' - ShortCut = 118 + Hint = 'Compute weights from triangle areas' OnClick = mnuNormalWeightsClick end object N7: TMenuItem @@ -2680,30 +2712,21 @@ object MainForm: TMainForm end object mnuCalculateColors: TMenuItem Caption = 'Calculate Colors Values' - Hint = 'Spreads the transform color parameters evenly.' + Hint = 'Spread the transform color parameters evenly' OnClick = mnuCalculateColorsClick end object mnuRandomizeColorValues: TMenuItem Caption = 'Randomize Color Values' - Hint = 'Randomizes the transform color parameters.' + Hint = 'Randomize color parameters' ShortCut = 16462 OnClick = mnuRandomizeColorValuesClick end - object N12: TMenuItem - Caption = '-' - end - object mnuFullScreen: TMenuItem - Caption = 'Full Screen' - Hint = 'Shows the flame in full screen mode.' - ShortCut = 16454 - OnClick = mnuFullScreenClick - end object N2: TMenuItem Caption = '-' end object mnuRender: TMenuItem Caption = 'Render to Disk...' - Hint = 'Render flame to disk.' + Hint = 'Render flame to disk' ImageIndex = 35 ShortCut = 16466 OnClick = mnuRenderClick @@ -2711,7 +2734,7 @@ object MainForm: TMainForm end object mnuVar: TMenuItem Caption = 'Variation' - Hint = 'Sets the flame variation to use.' + Hint = 'Set the flame variation to use' object mnuVRandom: TMenuItem Caption = 'Random' Checked = True @@ -2729,7 +2752,7 @@ object MainForm: TMainForm Caption = 'Script' object mnuRun: TMenuItem Caption = 'Run "Default Animation"' - Hint = 'Runs the currently loaded script.' + Hint = 'Run the currently loaded script' ImageIndex = 43 ShortCut = 119 OnClick = mnuRunClick @@ -2745,14 +2768,14 @@ object MainForm: TMainForm end object mnuOpenScript: TMenuItem Caption = 'Open...' - Hint = 'Opens a script file.' + Hint = 'Open a script file' ImageIndex = 1 ShortCut = 16453 OnClick = mnuOpenScriptClick end object mnuEditScript: TMenuItem Caption = 'Edit' - Hint = 'Shows the Script Editor.' + Hint = 'Show Script Editor' ImageIndex = 42 ShortCut = 16452 OnClick = mnuEditScriptClick @@ -2762,29 +2785,29 @@ object MainForm: TMainForm end object mnuManageFavorites: TMenuItem Caption = 'Manage Favorites' - Hint = 'Shows the Favorites Manager.' + Hint = 'Show the Favorites Manager' OnClick = mnuManageFavoritesClick end end object mnuView: TMenuItem Caption = 'Options' - Hint = 'Contains commands for customizing Apophysis.' + Hint = 'Contains commands for customizing Apophysis' object mnuToolbar: TMenuItem Caption = 'Toolbar' Checked = True - Hint = 'Shows or hides the toolbar.' + Hint = 'Show or hide the toolbar' OnClick = mnuToolbarClick end object mnuStatusBar: TMenuItem Caption = 'Status Bar' Checked = True - Hint = 'Shows or hides the status bar.' + Hint = 'Show or hide the status bar' OnClick = mnuStatusBarClick end object mnuFileContents: TMenuItem Caption = 'File Contents' Checked = True - Hint = 'Shows or hides the file contents list.' + Hint = 'Show or hide the file contents list' OnClick = mnuFileContentsClick end object N14: TMenuItem @@ -2792,7 +2815,7 @@ object MainForm: TMainForm end object mnuOptions: TMenuItem Caption = 'Options...' - Hint = 'Shows the Options dialog.' + Hint = 'Show the Options dialog' ImageIndex = 13 ShortCut = 16464 OnClick = mnuOptionsClick @@ -2800,11 +2823,10 @@ object MainForm: TMainForm end object MainHelp: TMenuItem Caption = '&Help' - Hint = 'Contains commands for displaying help.' OnClick = MainHelpClick object mnuHelpTopics: TMenuItem Caption = 'Contents' - Hint = 'Opens the Apophysis help file.' + Hint = 'Open the Apophysis help file' ShortCut = 112 OnClick = mnuHelpTopicsClick end @@ -2817,7 +2839,7 @@ object MainForm: TMainForm end object mnuAbout: TMenuItem Caption = 'About...' - Hint = 'Shows copyright and version information.' + Hint = 'Show copyright and version information' ImageIndex = 47 OnClick = mnuAboutClick end @@ -2836,7 +2858,7 @@ object MainForm: TMainForm end object mnuRefresh: TMenuItem Caption = 'Refresh' - ShortCut = 115 + ShortCut = 16454 OnClick = mnuRefreshClick end object mnuShowFull: TMenuItem @@ -2929,42 +2951,17 @@ object MainForm: TMainForm Left = 8 Top = 120 end - object LogFile: TIdLogFile - ReplaceCRLF = False - Filename = 'apophysis.log' - Left = 40 - Top = 120 - end - object HTTP: TIdHTTP - OnStatus = HTTPStatus - AuthRetries = 0 - AuthProxyRetries = 0 - AllowCookies = True - ProxyParams.BasicAuthentication = False - ProxyParams.ProxyPort = 0 - Request.ContentLength = -1 - Request.ContentRangeEnd = 0 - Request.ContentRangeStart = 0 - Request.ContentType = 'text/html' - Request.Accept = 'text/html, */*' - Request.BasicAuthentication = False - Request.UserAgent = 'Mozilla/3.0 (compatible; Indy Library)' - HTTPOptions = [hoKeepOrigProtocol, hoForceEncodeParams] - OnRedirect = HTTPRedirect - Left = 72 - Top = 120 - end object ListXmlScanner: TEasyXmlScanner Normalize = True OnStartTag = ListXmlScannerStartTag - Left = 104 + Left = 40 Top = 120 end object XmlScanner: TXmlScanner Normalize = False OnStartTag = XMLScannerStartTag OnEmptyTag = XMLScannerEmptyTag - Left = 8 - Top = 152 + Left = 72 + Top = 120 end end diff --git a/2.10/Source/Main.pas b/2.10/Source/Main.pas index 312485d..f7a3452 100644 --- a/2.10/Source/Main.pas +++ b/2.10/Source/Main.pas @@ -17,6 +17,7 @@ } //{$D-,L-,O+,Q-,R-,Y-,S-} + unit Main; interface @@ -25,9 +26,10 @@ uses Windows, Forms, Dialogs, Menus, Controls, ComCtrls, ToolWin, StdCtrls, Classes, Messages, ExtCtrls, ImgList, controlpoint, Jpeg, SyncObjs, SysUtils, ClipBrd, Graphics, Math, Global, MyTypes, - Registry, RenderThread, Cmap, ExtDlgs, AppEvnts, ShellAPI, IdComponent, - IdTCPConnection, IdTCPClient, IdHTTP, IdBaseComponent, IdIntercept, - IdLogBase, IdLogFile, LibXmlParser, LibXmlComps, Xform; + Registry, RenderThread, Cmap, ExtDlgs, AppEvnts, ShellAPI, +// IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, +// IdBaseComponent, IdIntercept, IdLogBase, IdLogFile, + LibXmlParser, LibXmlComps, Xform; const PixelCountMax = 32768; @@ -90,7 +92,6 @@ type ToolBar: TToolBar; btnOpen: TToolButton; btnSave: TToolButton; - btnCopyUPR: TToolButton; btnEditor: TToolButton; btnGradient: TToolButton; ToolButton9: TToolButton; @@ -112,7 +113,6 @@ type N11: TMenuItem; mnuAbout: TMenuItem; mnuFullScreen: TMenuItem; - N12: TMenuItem; mnuRender: TMenuItem; mnuMutate: TMenuItem; btnMutate: TToolButton; @@ -146,7 +146,6 @@ type mnuRun: TMenuItem; mnuEditScript: TMenuItem; N15: TMenuItem; - ToolButton2: TToolButton; btnRun: TToolButton; mnuStop: TMenuItem; btnStop: TToolButton; @@ -162,12 +161,8 @@ type mnuPaste: TMenuItem; mnuCopy: TMenuItem; N20: TMenuItem; - btnCopy: TToolButton; - btnPaste: TToolButton; mnuExportFLame: TMenuItem; mnuPostSheep: TMenuItem; - LogFile: TIdLogFile; - HTTP: TIdHTTP; ListXmlScanner: TEasyXmlScanner; N21: TMenuItem; XmlScanner: TXmlScanner; @@ -179,6 +174,12 @@ type mnuimage: TMenuItem; tbzoomoutwindow: TToolButton; mnuSaveAllAs: TMenuItem; + ToolButton5: TToolButton; + btnSize: TToolButton; + btnFullScreen: TToolButton; + ToolButton6: TToolButton; + tbQualityBox: TComboBox; + View1: TMenuItem; procedure tbzoomoutwindowClick(Sender: TObject); procedure mnuimageClick(Sender: TObject); procedure mnuExitClick(Sender: TObject); @@ -254,11 +255,13 @@ type procedure mnuCopyClick(Sender: TObject); procedure mnuExportFLameClick(Sender: TObject); procedure mnuPostSheepClick(Sender: TObject); +{ procedure HTTPRedirect(Sender: TObject; var dest: string; var NumRedirect: Integer; var Handled: Boolean; var VMethod: TIdHTTPMethod); procedure HTTPStatus(ASender: TObject; const AStatus: TIdStatus; const AStatusText: string); +} procedure ListXmlScannerStartTag(Sender: TObject; TagName: string; Attributes: TAttrList); procedure XMLScannerStartTag(Sender: TObject; TagName: string; @@ -276,12 +279,16 @@ type procedure tbDragClick(Sender: TObject); procedure tbRotateClick(Sender: TObject); procedure mnuSaveAllAsClick(Sender: TObject); + procedure tbQualityBoxKeyPress(Sender: TObject; var Key: Char); + procedure tbQualityBoxSet(Sender: TObject); + procedure ImageDblClick(Sender: TObject); private Renderer: TRenderThread; FMouseMoveState: TMouseMoveState; FSelectRect: TRect; FRotateAngle: double; + FClickAngle: double; // --Z-- FViewBMP: Graphics.TBitmap; procedure DrawZoomWindow(ARect: TRect); @@ -362,10 +369,10 @@ var implementation -uses Editor, Options, Regstry, Gradient, Render, +uses Editor, Options, Regstry, {Gradient,} Render, FullScreen, FormRender, Mutate, Adjust, Browser, Save, About, CmapData, - HtmlHlp, ScriptForm, FormFavorites, Size, FormExport, msMultiPartFormData, - ImageColoring, RndFlame; + HtmlHlp, ScriptForm, FormFavorites, {Size,} FormExport, msMultiPartFormData, + {Sheep,} ImageColoring, RndFlame; {$R *.DFM} @@ -565,7 +572,7 @@ var URL, HelpTopic: string; begin if EditForm.Active then HelpTopic := 'Transform editor.htm' - else if GradientForm.Active then HelpTopic := 'Gradient window.htm' +// else if GradientForm.Active then HelpTopic := 'Gradient window.htm' else if AdjustForm.Active then HelpTopic := 'Adjust window.htm' else if MutateForm.Active then HelpTopic := 'Mutation window.htm' else if RenderForm.Active then HelpTopic := 'Render window.htm'; @@ -906,6 +913,10 @@ begin btnRedo.Enabled := false; EditForm.mnuUndo.Enabled := True; EditForm.mnuRedo.Enabled := false; + EditForm.tbUndo.enabled := true; + EditForm.tbRedo.enabled := false; + AdjustForm.btnUndo.enabled := true; + AdjustForm.btnRedo.enabled := false; end; function GradientEntries(gFilename: string): string; @@ -972,7 +983,7 @@ function CleanEntry(ident: string): string; var i: integer; begin - for i := 0 to Length(ident) do + for i := 1 to Length(ident) do begin if ident[i] = #32 then ident[i] := '_' @@ -988,7 +999,7 @@ function CleanXMLName(ident: string): string; var i: integer; begin - for i := 0 to Length(ident) do + for i := 1 to Length(ident) do begin if ident[i] = '*' then ident[i] := '_' @@ -1004,7 +1015,7 @@ function CleanUPRTitle(ident: string): string; var i: integer; begin - for i := 0 to Length(ident) do + for i := 1 to Length(ident) do begin if ident[i] = '}' then ident[i] := '_' @@ -1778,8 +1789,14 @@ begin if not Assigned(Renderer) then begin if (MainCp.width <> Image.Width) or (MainCp.height <> Image.height) then + begin AdjustScale(MainCp, Image.width, Image.height); - AdjustForm.UpdateDisplay; + if EditForm.Visible then EditForm.UpdateDisplay(true); // preview only + end; + if AdjustForm.Visible then AdjustForm.UpdateDisplay; + +//z GradientForm.DrawPreview; + // following needed ? // cp.Zoom := Zoom; // cp.center[0] := center[0]; @@ -2077,7 +2094,7 @@ begin mnuListRename.Enabled := True; mnuItemDelete.Enabled := True; OpenFile := OpenDialog.FileName; - MainForm.Caption := 'Apophysis' + ' - ' + OpenFile; + MainForm.Caption := 'Apophysis 2.02zx' + ' - ' + OpenFile; // --Z-- OpenFileType := ftXML; if UpperCase(ExtractFileExt(OpenDialog.FileName)) = '.IFS' then begin @@ -2157,6 +2174,11 @@ end; procedure TMainForm.mnuOptionsClick(Sender: TObject); begin OptionsForm.ShowModal; + // --Z-- + StopThread; + RedrawTimer.Enabled := True; + tbQualityBox.Text := FloatToStr(defSampleDensity); + UpdateWindows; end; procedure TMainForm.mnuRefreshClick(Sender: TObject); @@ -2192,7 +2214,7 @@ begin RandomBatch; OpenFile := AppPath + 'apophysis.rand'; OpenFileType := ftXML; - MainForm.Caption := 'Apophysis' + ' - Random Batch'; + MainForm.Caption := 'Apophysis 2.02zx' + ' - Random Batch'; ListXML(OpenFile, 1); ListView.SetFocus; if batchsize = 1 then DrawFlame; @@ -2307,7 +2329,9 @@ begin MainCp.name := RandomPrefix + RandomDate + '-' + IntToStr(RandomIndex); Transforms := TrianglesFromCP(MainCp, MainTriangles); - if GradientForm.visible then GradientForm.UpdateGradient(Maincp.cmap); +// if GradientForm.visible then GradientForm.UpdateGradient(Maincp.cmap); + if AdjustForm.visible then AdjustForm.UpdateGradient(Maincp.cmap); + StatusBar.Panels[2].text := maincp.name; ResetLocation; RedrawTimer.Enabled := true; @@ -2516,7 +2540,7 @@ procedure TMainForm.FormCreate(Sender: TObject); var dte: string; begin - FMouseMoveState := msZoomWindow; + FMouseMoveState := msDrag; // --Z-- was: msZoomWindow; LimitVibrancy := True; Favorites := TStringList.Create; GetScripts; @@ -2539,6 +2563,8 @@ begin if VariationOptions = 0 then VariationOptions := 16383; // it shouldn't hapen but just in case; UnpackVariations(VariationOptions); FillVariantMenu; + + tbQualityBox.Text := FloatToStr(defSampleDensity); end; procedure TMainForm.FormShow(Sender: TObject); @@ -2546,7 +2572,7 @@ var Registry: TRegistry; i: integer; begin - { Read posution from registry } + { Read position from registry } Registry := TRegistry.Create; try Registry.RootKey := HKEY_CURRENT_USER; @@ -2599,7 +2625,7 @@ begin MainCp.Width := image.width; MainCp.Height := Image.Height; RandomBatch; - MainForm.Caption := 'Apophysis' + ' - Random Batch'; + MainForm.Caption := 'Apophysis 2.02zx' + ' - Random Batch'; OpenFile := AppPath + 'apophysis.rand'; ListXML(OpenFile, 1); OpenFileType := ftXML; @@ -2619,15 +2645,23 @@ begin OpenFileType := ftXML; MainForm.ListView.Selected := MainForm.ListView.Items[0]; end; - MainForm.Caption := 'Apophysis' + ' - ' + defFlameFile; + MainForm.Caption := 'Apophysis 2.02zx' + ' - ' + defFlameFile; end; ListView.SetFocus; CanDrawOnResize := True; Statusbar.Panels[2].Text := maincp.name; +{ gradientForm.cmbPalette.Items.clear; for i := 0 to NRCMAPS -1 do gradientForm.cmbPalette.Items.Add(cMapnames[i]); GradientForm.cmbPalette.ItemIndex := 0; +} + AdjustForm.cmbPalette.Items.clear; + for i := 0 to NRCMAPS -1 do + AdjustForm.cmbPalette.Items.Add(cMapnames[i]); + AdjustForm.cmbPalette.ItemIndex := 0; +// AdjustForm.cmbPalette.Items.clear; + ExportDialog.cmbDepth.ItemIndex := 2; end; @@ -2642,7 +2676,7 @@ begin if AdjustForm.visible then AdjustForm.close; if GradientBrowser.visible then GradientBrowser.close; if MutateForm.visible then MutateForm.Close; - if GradientForm.visible then GradientForm.Close; +// if GradientForm.visible then GradientForm.Close; if ScriptEditor.visible then ScriptEditor.Close; { Stop the render thread } if RenderForm.Visible then RenderForm.Close; @@ -2755,6 +2789,10 @@ begin mnuPopRedo.enabled := False; EditForm.mnuUndo.Enabled := False; EditForm.mnuRedo.enabled := False; + EditForm.tbUndo.enabled := false; + EditForm.tbRedo.enabled := false; + AdjustForm.btnUndo.enabled := false; + AdjustForm.btnRedo.enabled := false; btnUndo.Enabled := false; btnRedo.enabled := false; @@ -2766,6 +2804,9 @@ begin Statusbar.Panels[2].Text := Maincp.name; RedrawTimer.Enabled := True; Application.ProcessMessages; + + EditForm.SelectedTriangle := 1; // --Z-- + UpdateWindows; finally FileStrings.free; @@ -2888,6 +2929,10 @@ begin mnuPopRedo.enabled := False; EditForm.mnuUndo.Enabled := False; EditForm.mnuRedo.enabled := False; + EditForm.tbUndo.enabled := false; + EditForm.tbRedo.enabled := false; + AdjustForm.btnUndo.enabled := false; + AdjustForm.btnRedo.enabled := false; btnUndo.Enabled := false; btnRedo.enabled := false; Transforms := TrianglesFromCP(maincp, MainTriangles); @@ -2917,8 +2962,11 @@ end; procedure TMainForm.UpdateWindows; begin - if GradientForm.visible then GradientForm.UpdateGradient(maincp.cmap); + if AdjustForm.visible then AdjustForm.UpdateGradient(maincp.cmap); +// if GradientForm.visible then GradientForm.UpdateGradient(maincp.cmap); + if EditForm.visible then EditForm.UpdateDisplay; + // if AdjustForm.visible then AdjustForm.UpdateDisplay; if MutateForm.visible then MutateForm.UpdateDisplay; end; @@ -2988,7 +3036,8 @@ begin // Trim undo index from title maincp.name := Copy(Fstrings[0], 6, length(Fstrings[0]) - 7); if SavedPal then maincp.cmap := palette; - if GradientForm.visible then GradientForm.UpdateGradient(maincp.cmap); +// if GradientForm.visible then GradientForm.UpdateGradient(maincp.cmap); + if AdjustForm.visible then AdjustForm.UpdateGradient(maincp.cmap); RedrawTimer.Enabled := True; UpdateWindows; finally @@ -3055,8 +3104,11 @@ end; procedure TMainForm.mnuGradClick(Sender: TObject); begin - gradientForm.UpdateGradient(maincp.cmap); - GradientForm.Show; + //gradientForm.UpdateGradient(maincp.cmap); + //GradientForm.Show; + AdjustForm.UpdateDisplay; + AdjustForm.PageControl.TabIndex:=2; + AdjustForm.Show; end; /////////////////////////////////////////////////////////////////////////////// @@ -3230,7 +3282,9 @@ begin StopThread; UpdateUndo; maincp.cmap := Pal; - gradientForm.UpdateGradient(Pal); +// gradientForm.UpdateGradient(Pal); + {if AdjustForm.visible then} AdjustForm.UpdateGradient(maincp.cmap); + if EditForm.Visible then EditForm.UpdateDisplay; // if AdjustForm.Visible then AdjustForm.UpdateDisplay; if MutateForm.Visible then MutateForm.UpdateDisplay; @@ -3276,11 +3330,15 @@ begin mnuPopRedo.Enabled := True; btnRedo.Enabled := True; EditForm.mnuRedo.Enabled := True; + EditForm.tbRedo.enabled := true; + AdjustForm.btnRedo.enabled := true; if UndoIndex = 0 then begin mnuUndo.Enabled := false; mnuPopUndo.Enabled := false; btnUndo.Enabled := false; EditForm.mnuUndo.Enabled := false; + EditForm.tbUndo.enabled := false; + AdjustForm.btnUndo.enabled := false; end; end; @@ -3294,16 +3352,23 @@ procedure TMainForm.Redo; begin StopThread; Inc(UndoIndex); + + assert(UndoIndex < UndoMax, 'Undo list index out of range!'); + LoadUndoFlame(UndoIndex, AppPath + 'apophysis.undo'); mnuUndo.Enabled := True; mnuPopUndo.Enabled := True; btnUndo.Enabled := True; EditForm.mnuUndo.Enabled := True; + EditForm.tbUndo.enabled := true; + AdjustForm.btnUndo.enabled := true; if UndoIndex = UndoMax then begin mnuRedo.Enabled := false; - mnuPopRedo.Enabled := True; + mnuPopRedo.Enabled := false; btnRedo.Enabled := false; EditForm.mnuRedo.Enabled := false; + EditForm.tbRedo.enabled := false; + AdjustForm.btnRedo.enabled := false; end; end; @@ -3384,6 +3449,7 @@ end; procedure TMainForm.mnuAdjustClick(Sender: TObject); begin AdjustForm.UpdateDisplay; + AdjustForm.PageControl.TabIndex := 0; AdjustForm.Show; end; @@ -3597,30 +3663,37 @@ end; procedure TMainForm.mnuImageSizeClick(Sender: TObject); begin - SizeTool.Show; +// SizeTool.Show; + AdjustForm.UpdateDisplay; + AdjustForm.PageControl.TabIndex:=3; + AdjustForm.Show; end; procedure TMainForm.ApplicationEventsActivate(Sender: TObject); begin if GradientInClipboard then begin - GradientForm.mnuPaste.enabled := true; - GradientForm.btnPaste.enabled := true; +// GradientForm.mnuPaste.enabled := true; +// GradientForm.btnPaste.enabled := true; + AdjustForm.mnuPaste.enabled := true; + AdjustForm.btnPaste.enabled := true; end else begin - GradientForm.mnuPaste.enabled := false; - GradientForm.btnPaste.enabled := false; +// GradientForm.mnuPaste.enabled := false; +// GradientForm.btnPaste.enabled := false; + AdjustForm.mnuPaste.enabled := false; + AdjustForm.btnPaste.enabled := false; end; if FlameInClipboard then begin mnuPaste.enabled := true; - btnPaste.enabled := true; +//z btnPaste.enabled := true; end else begin mnuPaste.enabled := false; - btnPaste.enabled := false; +//z btnPaste.enabled := false; end; end; @@ -3653,7 +3726,7 @@ begin end; end; - if nxform < 12 then + if nxform < NXFORMS then for i := nxform to NXFORMS - 1 do cp1.xform[i].density := 0; NormalizeWeights(cp1); @@ -3686,9 +3759,12 @@ begin txt := Trim(FlameToXML(Maincp, false, true)); Clipboard.SetTextBuf(PChar(txt)); mnuPaste.enabled := true; - btnPaste.enabled := true; - GradientForm.mnuPaste.enabled := False; - GradientForm.btnPaste.enabled := False; +//z btnPaste.enabled := true; + +// GradientForm.mnuPaste.enabled := False; +// GradientForm.btnPaste.enabled := False; + AdjustForm.mnuPaste.enabled := False; + AdjustForm.btnPaste.enabled := False; end; procedure WinShellExecute(const Operation, AssociatedFile: string); @@ -3822,11 +3898,13 @@ begin end; procedure TMainForm.mnuPostSheepClick(Sender: TObject); -//var -// URL: string; -// StringList: TStringList; -// ResponseStream: TMemoryStream; -// MultiPartFormDataStream: TmsMultiPartFormDataStream; +{ +var + URL: string; + StringList: TStringList; + ResponseStream: TMemoryStream; + MultiPartFormDataStream: TmsMultiPartFormDataStream; +} begin // if MainCp.HasNewVariants then begin // showMessage('The posting of sheep with new variants (exponential, power, cosine and sawtooth) is disabled in this version.'); @@ -3837,7 +3915,7 @@ begin // showMessage('The posting of sheep with are rotated is disabled in this version.'); // Exit; // end; -(* +{ if SheepDialog.ShowModal = mrOK then begin DeleteFile('apophysis.log'); @@ -3856,7 +3934,7 @@ begin MultiPartFormDataStream.AddFormField('nick', SheepDialog.txtNick.text); MultiPartFormDataStream.AddFormField('url', SheepDialog.txtURL.text); MultiPartFormDataStream.AddFormField('pw', SheepPW); //SheepPw - { You must make sure you call this method *before* sending the stream } + // You must make sure you call this method *before* sending the stream MultiPartFormDataStream.PrepareStreamForDispatch; MultiPartFormDataStream.Position := 0; URL := URLEncode(SheepServer + 'cgi/apophysis.cgi'); @@ -3877,9 +3955,10 @@ begin logFile.Active := False; end; end; -*) +} end; +{ procedure TMainForm.HTTPRedirect(Sender: TObject; var dest: string; var NumRedirect: Integer; var Handled: Boolean; var VMethod: TIdHTTPMethod); @@ -3897,6 +3976,7 @@ procedure TMainForm.HTTPStatus(ASender: TObject; const AStatus: TIdStatus; begin StatusBar.SimpleText := AStatusTExt; end; +} procedure TMainForm.ListXmlScannerStartTag(Sender: TObject; TagName: string; Attributes: TAttrList); @@ -4147,6 +4227,8 @@ begin end; msRotate: begin + FClickAngle:=arctan2(y-Image.Height/2, Image.Width/2-x); + FRotateAngle := 0; FSelectRect.Left := x; DrawRotateLines(FRotateAngle); @@ -4189,13 +4271,21 @@ begin begin DrawRotatelines(FRotateAngle); - FRotateAngle := FRotateAngle + 0.004 * (FSelectRect.Left - X); +// FRotateAngle := FRotateAngle + 0.004 * (FSelectRect.Left - X); + FRotateAngle:=arctan2(y-Image.Height/2, Image.Width/2-x) - FClickAngle; FSelectRect.Left := x; // pdjpointgen.Rotate(FRotateAngle); // FRotateAngle := 0; DrawRotatelines(FRotateAngle); +{ + Image.Refresh; +if AdjustForm.Visible then begin +MainCp.FAngle:=-FRotateAngle; +AdjustForm.UpdateDisplay; +end; +} end; end; end; @@ -4245,8 +4335,9 @@ begin FSelectRect.BottomRight := Point(x, y); FMouseMoveState := msDrag; - if (x = 0) and (y = 0) then - Exit; // double clicked + if ((x = 0) and (y = 0)) or // double clicked + ((FSelectRect.left = FSelectRect.right) and (FSelectRect.top = FSelectRect.bottom)) + then Exit; StopThread; UpdateUndo; @@ -4261,12 +4352,11 @@ begin FMouseMoveState := msRotate; - if (FRotateAngle = 0) then - Exit; // double clicked + if (FRotateAngle = 0) then Exit; // double clicked StopThread; UpdateUndo; - MainCp.Rotate(FRotateAngle); + MainCp.Rotate(-FRotateAngle); // "-" by Zueuk RedrawTimer.Enabled := True; UpdateWindows; @@ -4289,14 +4379,14 @@ begin Image.Canvas.Brush.Style := bsClear; // Image.Canvas.Rectangle(FSelectRect); - points[0].x := -Image.Width div 4; - points[0].y := -Image.Height div 4; - points[1].x := -Image.Width div 4; - points[1].y := Image.Height div 4; - points[2].x := Image.Width div 4; - points[2].y := Image.Height div 4; - points[3].x := Image.Width div 4; - points[3].y := -Image.Height div 4; + points[0].x := (Image.Width div 2)-1; + points[0].y := (Image.Height div 2)-1; + points[1].x := (Image.Width div 2)-1; + points[1].y := -Image.Height div 2; + points[2].x := -Image.Width div 2; + points[2].y := -Image.Height div 2; + points[3].x := -Image.Width div 2; + points[3].y := (Image.Height div 2)-1; for i := 0 to 3 do begin x := points[i].x; @@ -4378,6 +4468,7 @@ begin end; /////////////////////////////////////////////////////////////////////////////// + procedure TMainForm.VariantMenuClick(Sender: TObject); begin TMenuItem(Sender).Checked := True; @@ -4389,4 +4480,98 @@ begin UpdateWindows; end; +//--Z--//////////////////////////////////////////////////////////////////////// + +procedure TMainForm.tbQualityBoxKeyPress(Sender: TObject; var Key: Char); +begin + if key = #13 then + begin + tbQualityBoxSet(Sender); + key := #0; + end + else if key = #27 then tbQualityBox.Text := FloatToStr(defSampleDensity); +end; + +procedure TMainForm.tbQualityBoxSet(Sender: TObject); +var + q: double; +begin + try + q := StrToFloat(tbQualityBox.Text); + except + exit; + end; + defSampleDensity := q; + + StopThread; + RedrawTimer.Enabled := True; + UpdateWindows; +end; + +procedure TMainForm.ImageDblClick(Sender: TObject); +begin + if FMouseMoveState = msRotateMove then + begin +// FRotateAngle := 0; + StopThread; + UpdateUndo; + MainCp.FAngle := 0; + RedrawTimer.Enabled := True; + UpdateWindows; + end + else mnuResetLocationClick(Sender); +{ msDragMove: + begin + FViewBMP.Free; + FViewBMP := nil; + + FSelectRect.BottomRight := Point(x, y); + FMouseMoveState := msDrag; + + if (x = 0) and (y = 0) then + Exit; // double clicked + + StopThread; + UpdateUndo; + MainCp.MoveRect(FSelectRect); + + RedrawTimer.Enabled := True; + UpdateWindows; + end; + msZoomWindowMove: + begin + DrawZoomWindow(FSelectRect); + FSelectRect.BottomRight := Point(x, y); + FMouseMoveState := msZoomWindow; + if (abs(FSelectRect.Left - FSelectRect.Right) < 10) or + (abs(FSelectRect.Top - FSelectRect.Bottom) < 10) then + Exit; // zoom to much or double clicked + + StopThread; + UpdateUndo; + MainCp.ZoomtoRect(FSelectRect); + + RedrawTimer.Enabled := True; + UpdateWindows; + end; + msZoomOutWindowMove: + begin + DrawZoomWindow(FSelectRect); + FSelectRect.BottomRight := Point(x, y); + FMouseMoveState := msZoomOutWindow; + if (abs(FSelectRect.Left - FSelectRect.Right) < 10) or + (abs(FSelectRect.Top - FSelectRect.Bottom) < 10) then + Exit; // zoom to much or double clicked + + StopThread; + UpdateUndo; + MainCp.ZoomOuttoRect(FSelectRect); + + RedrawTimer.Enabled := True; + UpdateWindows; + end; + end; +} +end; + end. diff --git a/2.10/Source/ScriptForm.pas b/2.10/Source/ScriptForm.pas index 565c87a..e6a25b1 100644 --- a/2.10/Source/ScriptForm.pas +++ b/2.10/Source/ScriptForm.pas @@ -22,7 +22,7 @@ interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, ControlPoint, cmap, Buttons, ComCtrls, ToolWin, - Menus, atScript, atPascal, AdvMemo, Advmps, XForm; + Menus, atScript, atPascal, AdvMemo, Advmps, XForm, GradientHlpr; const NCPS = 10; type @@ -324,7 +324,7 @@ implementation } uses Main, Editor, Adjust, Global, Mutate, Registry, Preview, - ScriptRender, Gradient, ap_math, ap_classes, ap_sysutils, MyTypes, + ScriptRender, {Gradient,} ap_math, ap_classes, ap_sysutils, MyTypes, SavePreset, ap_windows, ap_FileCtrl, bmdll32; {$R *.DFM} @@ -1188,7 +1188,7 @@ end; procedure TOperationLibrary.RandomGradientProc(AMachine: TatVirtualMachine); begin - ScriptEditor.cp.cmap := GradientForm.RandomGradient; + ScriptEditor.cp.cmap := GradientHelper.RandomGradient; end; procedure TOperationLibrary.CalculateScale(AMachine: TatVirtualMachine); @@ -1470,7 +1470,7 @@ begin HSVToRGB(h, s, v, cp1.cmap[i][0], cp1.cmap[i][1], cp1.cmap[i][2]); end; end; - if nxform < 12 then + if nxform < NXFORMS then for i := nxform to NXFORMS - 1 do cp1.xform[i].density := 0; NormalizeWeights(cp1); @@ -2713,7 +2713,7 @@ begin Scripter.AddConstant('V_FAN', 22); Scripter.AddConstant('V_RANDOM', -1); { Variables } - Scripter.AddVariable('SelectedTransform', SelectedTriangle); + Scripter.AddVariable('SelectedTransform', EditForm.SelectedTriangle); Scripter.AddVariable('Compatibility', Compatibility); Scripter.AddVariable('ActiveTransform', ActiveTransform); Scripter.AddVariable('UpdateFlame', UpdateIt); @@ -2863,7 +2863,7 @@ begin ResetLocation := False; Console.Clear; LastError := ''; - ActiveTransform := SelectedTriangle; + ActiveTransform := EditForm.SelectedTriangle; NumTransforms := Transforms; cp.copy(MainCp); cmap := MainCp.cmap; @@ -2959,7 +2959,8 @@ begin if EditForm.Visible then EditForm.UpdateDisplay; // if AdjustForm.Visible then AdjustForm.UpdateDisplay; if MutateForm.Visible then MutateForm.UpdateDisplay; - if GradientForm.Visible then GradientForm.UpdateGradient(cmap) +// if GradientForm.Visible then GradientForm.UpdateGradient(cmap) + if AdjustForm.Visible then AdjustForm.UpdateGradient(cmap) end; { ******************************* functions ********************************** }