mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-28 22:23:09 +02:00
131 lines
3.8 KiB
ObjectPascal
131 lines
3.8 KiB
ObjectPascal
unit customdrawn_android;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
// RTL
|
|
Classes, SysUtils, Types,
|
|
// fpimage
|
|
fpcanvas, fpimgcanv, fpimage,
|
|
// LCL -> Use only TForm, TWinControl, TCanvas and TLazIntfImage
|
|
Graphics, Controls, LCLType, LCLIntf, IntfGraphics, LResources,
|
|
//
|
|
customdrawndrawers, customdrawn_common;
|
|
|
|
type
|
|
|
|
{ TCDDrawerAndroid }
|
|
|
|
TCDDrawerAndroid = class(TCDDrawerCommon)
|
|
public
|
|
// General drawing routines
|
|
{procedure DrawFocusRect(ADest: TCanvas; ADestPos: TPoint; ASize: TSize); override;
|
|
procedure DrawRaisedFrame(ADest: TCanvas; ADestPos: TPoint; ASize: TSize); override;
|
|
procedure DrawSunkenFrame(ADest: TCanvas; ADestPos: TPoint; ASize: TSize); override;
|
|
procedure DrawShallowSunkenFrame(ADest: TCanvas; ADestPos: TPoint; ASize: TSize); override;}
|
|
procedure DrawTickmark(ADest: TCanvas; ADestPos: TPoint); override;
|
|
{procedure DrawSlider(ADest: TCanvas; ADestPos: TPoint; ASize: TSize; AState: TCDControlState); override;
|
|
procedure DrawCompactArrow(ADest: TCanvas; ADestPos: TPoint; ADirection: TCDControlState); override;}
|
|
// ===================================
|
|
// Standard Tab
|
|
// ===================================
|
|
// TCDButton
|
|
{ procedure DrawButton(ADest: TCanvas; ADestPos: TPoint; ASize: TSize;
|
|
AState: TCDControlState; AStateEx: TCDControlStateEx); override;
|
|
// TCDEdit
|
|
procedure DrawEditBackground(ADest: TCanvas; ADestPos: TPoint; ASize: TSize;
|
|
AState: TCDControlState; AStateEx: TCDEditStateEx); override;}
|
|
// TCDCheckBox
|
|
procedure DrawCheckBoxSquare(ADest: TCanvas; ADestPos: TPoint; ASize: TSize;
|
|
AState: TCDControlState; AStateEx: TCDControlStateEx); override;
|
|
end;
|
|
|
|
implementation
|
|
|
|
const
|
|
ANDROID_DPI = 'vldpi';
|
|
|
|
{procedure TCDButtonDrawerAndroid.DrawToIntfImage(ADest: TFPImageCanvas;
|
|
CDButton: TCDButton);
|
|
begin
|
|
|
|
end;
|
|
|
|
procedure TCDButtonDrawerAndroid.DrawToCanvas(ADest: TCanvas; CDButton: TCDButton);
|
|
var
|
|
//TmpB: TBitmap;
|
|
Str: string;
|
|
begin
|
|
// Button shape -> This crashes in Gtk2
|
|
{ TmpB.Canvas.Brush.Color := CDButton.Color;
|
|
TmpB.Canvas.Brush.Style := bsSolid;
|
|
TmpB.Canvas.RoundRect(0, 0, TmpB.Width, TmpB.Height, 8, 8);
|
|
CDButton.SetShape(TmpB);
|
|
ADest.Draw(0, 0, TmpB);
|
|
TmpB.Free;
|
|
}
|
|
|
|
ADest.Brush.Color := CDButton.Parent.Color;
|
|
ADest.Brush.Style := bsSolid;
|
|
ADest.Pen.Color := ADest.Brush.Color;
|
|
ADest.RecTangle(0, 0, CDButton.Width, CDButton.Height);
|
|
|
|
// Button image
|
|
if CDButton.IsDown then
|
|
DrawCDButtonDown(ADest, CDButton.GetRGBBackgroundColor)
|
|
else if CDButton.Focused then
|
|
DrawAndroidButton(ADest, GetAColor(CDButton.Color, 98))
|
|
else
|
|
DrawAndroidButton(ADest, GetAColor(CDButton.Color, 96));
|
|
|
|
// Button text
|
|
ADest.Font.Assign(CDButton.Font);
|
|
ADest.Brush.Style := bsClear;
|
|
ADest.Pen.Style := psSolid;
|
|
Str := CDButton.Caption;
|
|
ADest.TextOut((CDButton.Width - ADest.TextWidth(Str)) div 2,
|
|
(CDButton.Height - ADest.TextHeight(Str)) div 2, Str);
|
|
end;
|
|
|
|
initialization
|
|
RegisterButtonDrawer(TCDButtonDrawerAndroid.Create, dsAndroid);}
|
|
|
|
{ TCDDrawerAndroid }
|
|
|
|
procedure TCDDrawerAndroid.DrawTickmark(ADest: TCanvas; ADestPos: TPoint);
|
|
begin
|
|
|
|
end;
|
|
|
|
procedure TCDDrawerAndroid.DrawCheckBoxSquare(ADest: TCanvas; ADestPos: TPoint;
|
|
ASize: TSize; AState: TCDControlState; AStateEx: TCDControlStateEx);
|
|
var
|
|
Bitmap: TBitmap;
|
|
begin
|
|
Bitmap := TBitmap.Create;
|
|
try
|
|
if csfOn in AState then
|
|
Bitmap.LoadFromLazarusResource('android_checkbox_checked_'+ANDROID_DPI)
|
|
else
|
|
Bitmap.LoadFromLazarusResource('android_checkbox_'+ANDROID_DPI);
|
|
ADest.Draw(0, 0, Bitmap);
|
|
finally
|
|
Bitmap.Free;
|
|
end;
|
|
end;
|
|
|
|
initialization
|
|
//{$if defined(Android)}
|
|
// Use ldpi when in the real Android OS
|
|
// {$I android_ldpi.lrs}
|
|
//{$else}
|
|
// of vldpi for desktop targets
|
|
{$I customdrawnimages/android_vldpi.lrs}
|
|
//{$endif}
|
|
|
|
RegisterDrawer(TCDDrawerAndroid.Create, dsAndroid);
|
|
end.
|
|
|