123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- //
- // The graphics engine GXScene https://github.com/glscene
- //
- unit FRxTextureEdit;
- (* Basic editing frame for Textures *)
- interface
- // TODO : Replace STImageClass with a dropdown (polymorphism)
- uses
- System.SysUtils,
- System.Types,
- System.UITypes,
- System.TypInfo,
- System.Classes,
- System.Variants,
- FMX.Types,
- FMX.Graphics,
- FMX.Controls,
- FMX.Forms,
- FMX.Dialogs,
- FMX.StdCtrls,
- FMX.ListBox,
- FMX.Controls.Presentation,
- GXS.Graphics,
- Stage.TextureFormat,
- GXS.Texture,
- GXS.TextureImageEditors;
- type
- TTextureEditFrame = class(TFrame)
- LabelImage: TLabel;
- SBEditImage: TSpeedButton;
- CBMagFilter: TComboBox;
- LabelImageAlpha: TLabel;
- LabelTextureWrap: TLabel;
- CBMinFilter: TComboBox;
- CBTextureMode: TComboBox;
- LabelMagFilter: TLabel;
- LabelMinFilter: TLabel;
- CBTextureWrap: TComboBox;
- CBDisabled: TCheckBox;
- CBImageClass: TComboBox;
- CBImageAlpha: TComboBox;
- LabelFilterQuality: TLabel;
- CBFilteringQuality: TComboBox;
- LabelTextureMode: TLabel;
- procedure CBMagFilterChange(Sender: TObject);
- procedure CBMinFilterChange(Sender: TObject);
- procedure CBTextureModeChange(Sender: TObject);
- procedure CBTextureWrapChange(Sender: TObject);
- procedure CBDisabledClick(Sender: TObject);
- procedure SBEditImageClick(Sender: TObject);
- procedure CBImageClassChange(Sender: TObject);
- procedure CBImageAlphaChange(Sender: TObject);
- procedure CBFilteringQualityChange(Sender: TObject);
- private
- FTexture: TgxTexture;
- FOnChange: TNotifyEvent;
- Changeing: Boolean;
- protected
- procedure SetTexture(const val: TgxTexture);
- procedure DoOnChange; virtual;
- public
- constructor Create(AOwner: TComponent); override;
- destructor Destroy; override;
- property Texture: TgxTexture read FTexture write SetTexture;
- property OnChange: TNotifyEvent read FOnChange write FOnChange;
- end;
- //=====================================================================
- implementation
- //=====================================================================
- {$R *.fmx}
- constructor TTextureEditFrame.Create(AOwner: TComponent);
- var
- I: Integer;
- begin
- inherited;
- FTexture := TgxTexture.Create(Self);
- SetTexture(FTexture);
- SetTextureImageClassesToStrings(CBImageClass.Items);
- for I := 0 to Integer(High(TgxTextureImageAlpha)) do
- CBImageAlpha.Items.Add(GetEnumName(TypeInfo(TgxTextureImageAlpha), I));
- for I := 0 to Integer(High(TgxMagFilter)) do
- CBMagFilter.Items.Add(GetEnumName(TypeInfo(TgxMagFilter), I));
- for I := 0 to Integer(High(TgxMinFilter)) do
- CBMinFilter.Items.Add(GetEnumName(TypeInfo(TgxMinFilter), I));
- for I := 0 to Integer(High(TglTextureFilteringQuality)) do
- CBFilteringQuality.Items.Add
- (GetEnumName(TypeInfo(TglTextureFilteringQuality), I));
- for I := 0 to Integer(High(TgxTextureMode)) do
- CBTextureMode.Items.Add(GetEnumName(TypeInfo(TgxTextureMode), I));
- for I := 0 to Integer(High(TgxTextureWrap)) do
- CBTextureWrap.Items.Add(GetEnumName(TypeInfo(TgxTextureWrap), I));
- end;
- destructor TTextureEditFrame.Destroy;
- begin
- FTexture.Free;
- inherited;
- end;
- procedure TTextureEditFrame.SetTexture(const val: TgxTexture);
- begin
- FTexture.Assign(val);
- Changeing := True;
- try
- with CBImageClass do
- ItemIndex := Items.IndexOfObject(Pointer(FTexture.Image.ClassType));
- CBImageAlpha.ItemIndex := Integer(FTexture.ImageAlpha);
- CBMagFilter.ItemIndex := Integer(FTexture.MagFilter);
- CBMinFilter.ItemIndex := Integer(FTexture.MinFilter);
- CBFilteringQuality.ItemIndex := Integer(FTexture.FilteringQuality);
- CBTextureMode.ItemIndex := Integer(FTexture.TextureMode);
- CBTextureWrap.ItemIndex := Integer(FTexture.TextureWrap);
- CBDisabled.IsChecked := FTexture.Disabled;
- finally
- Changeing := False;
- DoOnChange;
- end;
- end;
- procedure TTextureEditFrame.DoOnChange;
- begin
- if (not Changeing) and Assigned(FOnChange) then
- OnChange(Self);
- end;
- procedure TTextureEditFrame.CBImageClassChange(Sender: TObject);
- var
- tic: TgxTextureImageClass;
- ti: TgxTextureImage;
- begin
- if not Changeing then
- begin
- with CBImageClass do
- tic := TgxTextureImageClass(Items.Objects[ItemIndex]);
- if FTexture.Image.ClassType <> tic then
- begin
- ti := TgxTextureImageClass(tic).Create(FTexture);
- FTexture.Image := ti;
- ti.Free;
- end;
- DoOnChange;
- end;
- end;
- procedure TTextureEditFrame.CBImageAlphaChange(Sender: TObject);
- begin
- FTexture.ImageAlpha := TgxTextureImageAlpha(CBImageAlpha.ItemIndex);
- DoOnChange;
- end;
- procedure TTextureEditFrame.CBMagFilterChange(Sender: TObject);
- begin
- FTexture.MagFilter := TgxMagFilter(CBMagFilter.ItemIndex);
- DoOnChange;
- end;
- procedure TTextureEditFrame.CBMinFilterChange(Sender: TObject);
- begin
- FTexture.MinFilter := TgxMinFilter(CBMinFilter.ItemIndex);
- DoOnChange;
- end;
- procedure TTextureEditFrame.CBTextureModeChange(Sender: TObject);
- begin
- FTexture.TextureMode := TgxTextureMode(CBTextureMode.ItemIndex);
- DoOnChange;
- end;
- procedure TTextureEditFrame.CBTextureWrapChange(Sender: TObject);
- begin
- FTexture.TextureWrap := TgxTextureWrap(CBTextureWrap.ItemIndex);
- DoOnChange;
- end;
- procedure TTextureEditFrame.CBDisabledClick(Sender: TObject);
- begin
- FTexture.Disabled := CBDisabled.IsChecked;
- DoOnChange;
- end;
- procedure TTextureEditFrame.SBEditImageClick(Sender: TObject);
- begin
- EditTextureImage(FTexture.Image);
- DoOnChange;
- end;
- procedure TTextureEditFrame.CBFilteringQualityChange(Sender: TObject);
- begin
- FTexture.FilteringQuality := TglTextureFilteringQuality
- (CBFilteringQuality.ItemIndex);
- DoOnChange;
- end;
- end.
|