GuiButton.pas
上传用户:ctlcnc
上传日期:2021-12-10
资源大小:4933k
文件大小:6k
源码类别:

2D图形编程

开发平台:

Delphi

  1. unit GuiButton;
  2. //---------------------------------------------------------------------------
  3. // GuiButton.pas                                        Modified: 03-Mar-2007
  4. // A simple button class for Asphyre GUI foundation               Version 1.0
  5. //---------------------------------------------------------------------------
  6. // Important Notice:
  7. //
  8. // If you modify/use this code or one of its parts either in original or
  9. // modified form, you must comply with Mozilla Public License v1.1,
  10. // specifically section 3, "Distribution Obligations". Failure to do so will
  11. // result in the license breach, which will be resolved in the court.
  12. // Remember that violating author's rights is considered a serious crime in
  13. // many countries. Thank you!
  14. //
  15. // !! Please *read* Mozilla Public License 1.1 document located at:
  16. //  http://www.mozilla.org/MPL/
  17. //
  18. // If you require any clarifications about the license, feel free to contact
  19. // us or post your question on our forums at: http://www.afterwarp.net
  20. //---------------------------------------------------------------------------
  21. // The contents of this file are subject to the Mozilla Public License
  22. // Version 1.1 (the "License"); you may not use this file except in
  23. // compliance with the License. You may obtain a copy of the License at
  24. // http://www.mozilla.org/MPL/
  25. //
  26. // Software distributed under the License is distributed on an "AS IS"
  27. // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
  28. // License for the specific language governing rights and limitations
  29. // under the License.
  30. //
  31. // The Original Code is GuiButton.pas.
  32. //
  33. // The Initial Developer of the Original Code is M. Sc. Yuriy Kotsarenko.
  34. // Portions created by M. Sc. Yuriy Kotsarenko are Copyright (C) 2007,
  35. // Afterwarp Interactive. All Rights Reserved.
  36. //---------------------------------------------------------------------------
  37. interface
  38. //---------------------------------------------------------------------------
  39. uses
  40.  Types, Vectors2px, AsphyreTypes, AsphyreFonts, GuiSkins, GuiTypes, GuiUtils,
  41.  GuiObjects, GuiControls;
  42. //---------------------------------------------------------------------------
  43. type
  44.  TGuiButton = class(TGuiControl)
  45.  private
  46.   FCaptCol   : TGuiFontCol;
  47.   FCaptRect  : TRect;
  48.   FCaptFont  : string;
  49.   FCaptHAlign: THorizontalAlign;
  50.   FCaptVAlign: TVerticalAlign;
  51.   FCaption   : string;
  52.   FCaptOpt   : TFontOptions;
  53.   procedure DrawText(const DrawPos: TPoint2px);
  54.   function GetCaptOpt(): PFontOptions;
  55.  protected
  56.   procedure DoDestroy(); override;
  57.   procedure DoDraw(const DrawPos: TPoint2px); override;
  58.   procedure DoDescribe(); override;
  59.   procedure WriteProperty(Code: Cardinal; Source: Pointer); override;
  60.  public
  61.   property CaptCol: TGuiFontCol read FCaptCol;
  62.   property CaptHAlign: THorizontalAlign read FCaptHAlign write FCaptHAlign;
  63.   property CaptVAlign: TVerticalAlign read FCaptVAlign write FCaptVAlign;
  64.   property CaptRect  : TRect read FCaptRect write FCaptRect;
  65.   property CaptFont  : string read FCaptFont write FCaptFont;
  66.   property CaptOpt   : PFontOptions read GetCaptOpt;
  67.   property Caption   : string read FCaption write FCaption;
  68.   constructor Create(AOwner: TGuiObject); override;
  69.  end;
  70. //---------------------------------------------------------------------------
  71. implementation
  72. uses
  73.  SysUtils;
  74. //---------------------------------------------------------------------------
  75. const
  76.  PropBase = $1000;
  77. //---------------------------------------------------------------------------
  78. constructor TGuiButton.Create(AOwner: TGuiObject);
  79. begin
  80.  inherited;
  81.  FCaptHAlign:= haCenter;
  82.  FCaptVAlign:= vaCenter;
  83.  FCaptCol:= TGuiFontCol.Create();
  84.  FCaptOpt.Reset();
  85. end;
  86. //---------------------------------------------------------------------------
  87. procedure TGuiButton.DoDestroy();
  88. begin
  89.  FCaptCol.Free();
  90.  inherited;
  91. end;
  92. //---------------------------------------------------------------------------
  93. function TGuiButton.GetCaptOpt(): PFontOptions;
  94. begin
  95.  Result:= @FCaptOpt;
  96. end;
  97. //---------------------------------------------------------------------------
  98. procedure TGuiButton.DoDraw(const DrawPos: TPoint2px);
  99. begin
  100.  inherited;
  101.  if (FCaptFont <> '')and(FCaption <> '') then DrawText(DrawPos);
  102. end;
  103. //---------------------------------------------------------------------------
  104. procedure TGuiButton.DoDescribe();
  105. begin
  106.  inherited;
  107.  Describe(PropBase + $0, 'Caption',    gdtString);
  108.  Describe(PropBase + $1, 'CaptOpt',    gdtFontOpt);
  109.  Describe(PropBase + $2, 'CaptFont',   gdtString);
  110.  Describe(PropBase + $3, 'CaptRect',   gdtRect);
  111.  Describe(PropBase + $4, 'CaptHAlign', gdtHAlign);
  112.  Describe(PropBase + $5, 'CaptVAlign', gdtVAlign);
  113.  Describe(PropBase + $6, 'CaptCol',    gdtFontColor);
  114. end;
  115. //---------------------------------------------------------------------------
  116. procedure TGuiButton.WriteProperty(Code: Cardinal; Source: Pointer);
  117. begin
  118.  case Code of
  119.   PropBase + $0:
  120.    FCaption:= PChar(Source);
  121.   PropBase + $1:
  122.    FCaptOpt:= PFontOptions(Source)^;
  123.   PropBase + $2:
  124.    FCaptFont:= PChar(Source);
  125.   PropBase + $3:
  126.    FCaptRect:= PRect(Source)^;
  127.   PropBase + $4:
  128.    FCaptHAlign:= THorizontalAlign(Source^);
  129.   PropBase + $5:
  130.    FCaptVAlign:= TVerticalAlign(Source^);
  131.   PropBase + $6:
  132.    FCaptCol.Assign(TGuiFontCol(Source));
  133.   else inherited WriteProperty(Code, Source);
  134.  end;
  135. end;
  136. //---------------------------------------------------------------------------
  137. procedure TGuiButton.DrawText(const DrawPos: TPoint2px);
  138. var
  139.  Font: TAsphyreNativeFont;
  140.  Shift: TPoint2px;
  141. begin
  142.  Font:= GuiFonts.Font[FCaptFont];
  143.  if (Font = nil) then Exit;
  144.  Font.Options^:= FCaptOpt;
  145.  Shift:= ZeroPoint2px;
  146.  if (MouseDown) then Shift:= Point2px(1, 1);
  147.  Font.TextRect(FCaption, MoveRect(FCaptRect, DrawPos + Shift),
  148.   FCaptHAlign, FCaptVAlign, FCaptCol.UseColor(GetSkinDrawType()));
  149. end;
  150. //---------------------------------------------------------------------------
  151. end.