unit ImageColoring;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, cmap;

type
  TfrmImageColoring = class(TForm)
    cbEnable: TCheckBox;
    Panel1: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    cmbPalette1: TComboBox;
    Label4: TLabel;
    imgPal1: TImage;
    imgpal2: TImage;
    Label5: TLabel;
    cmbPalette2: TComboBox;
    procedure cmbPalette2Change(Sender: TObject);
    procedure cmbPalette1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
    procedure cmbPalette1Change(Sender: TObject);
  private
    FPal1: TColorMap;
    FPal2: TColorMap;
    FBkuPal1: TColorMap;
    FBkuPal2: TColorMap;
    Index1: integer;
    Index2: integer;

    procedure DrawPalette1;
    procedure DrawPalette2;

    procedure Apply;
  public
    procedure Update;
  end;

var
  frmImageColoring: TfrmImageColoring;

implementation

{$R *.dfm}

uses
  Main, Editor, Mutate, GradientHlpr;

{ TfrmImageColoring }

procedure TfrmImageColoring.Update;
begin
//  FPal1 := MainCP.Pal;
  FBkuPal1 := FPal1;
end;

procedure TfrmImageColoring.cmbPalette1Change(Sender: TObject);
begin
  Index1 := cmbPalette1.ItemIndex;
  GetCmap(Index1, 1, FPal1);
  FBkuPal1 := FPal1;
//  ScrollBar.Position := 0;
  DrawPalette1;
  Apply;
end;

procedure TfrmImageColoring.Apply;
begin
  MainForm.StopThread;
  MainForm.UpdateUndo;

  MainCp.CmapIndex := cmbPalette1.ItemIndex;
  MainCp.cmap := FPal1;

  if EditForm.visible then EditForm.UpdateDisplay;
  if MutateForm.Visible then MutateForm.UpdateDisplay;

  MainForm.RedrawTimer.enabled := true;
end;

procedure TfrmImageColoring.cmbPalette1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
var
  Bitmap: TBitmap;
  PalName: string;
begin
  BitMap := GradientHelper.GetGradientBitmap(Index, 1);

  GetCmapName(index, PalName);

  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 TfrmImageColoring.DrawPalette1;
var
  Bitmap: TBitmap;
begin
  BitMap := GradientHelper.GetGradientBitmap(Index1, 1);

  imgPal1.Picture.Graphic := Bitmap;
  imgPal1.Refresh;

  BitMap.Free;
end;

procedure TfrmImageColoring.DrawPalette2;
var
  Bitmap: TBitmap;
begin
  BitMap := GradientHelper.GetGradientBitmap(Index2, 1);

  imgPal2.Picture.Graphic := Bitmap;
  imgPal2.Refresh;

  BitMap.Free;
end;

procedure TfrmImageColoring.cmbPalette2Change(Sender: TObject);
begin
  Index2 := cmbPalette2.ItemIndex;
  GetCmap(Index2, 1, FPal2);
  FBkuPal2 := FPal2;
//  ScrollBar.Position := 0;
  DrawPalette2;
  Apply;
end;

end.
