spktoolbar: Fix fonts not changeable in OI

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@5982 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2017-07-08 16:24:34 +00:00
parent 9eb490f7e4
commit b70ca5e5d2
5 changed files with 100 additions and 51 deletions

View File

@ -1389,6 +1389,8 @@ procedure TSpkToolbar.ValidateBuffer;
TabRect := FTabRects[index]; TabRect := FTabRects[index];
FBuffer.canvas.font.Assign(AFont); FBuffer.canvas.font.Assign(AFont);
SpkScaleFont(FBuffer.Canvas.Font);
if AOverrideTextColor <> clNone then if AOverrideTextColor <> clNone then
clr := AOverrideTextColor else clr := AOverrideTextColor else
clr := AFont.Color; clr := AFont.Color;
@ -1730,6 +1732,7 @@ begin
else else
TabAppearance := FAppearance; TabAppearance := FAppearance;
FBuffer.Canvas.font.Assign(TabAppearance.Tab.TabHeaderFont); FBuffer.Canvas.font.Assign(TabAppearance.Tab.TabHeaderFont);
SpkScaleFont(FBuffer.Canvas.Font);
TabWidth := 2 + // Frame TabWidth := 2 + // Frame
2 * TabCornerRadius + 2 * TabCornerRadius +

View File

@ -53,6 +53,8 @@ type
procedure SetGradientType(const Value: TBackgroundKind); procedure SetGradientType(const Value: TBackgroundKind);
procedure SetInactiveHeaderFontColor(const Value: TColor); procedure SetInactiveHeaderFontColor(const Value: TColor);
procedure TabHeaderFontChange(Sender: TObject);
public public
// *** Konstruktor, destruktor, assign *** // *** Konstruktor, destruktor, assign ***
// <remarks>Appearance musi mieæ assign, bo wystêpuje jako w³asnoœæ // <remarks>Appearance musi mieæ assign, bo wystêpuje jako w³asnoœæ
@ -100,6 +102,8 @@ type
procedure SetHotTrackBrightnessChange(const Value: Integer); procedure SetHotTrackBrightnessChange(const Value: Integer);
procedure SetStyle(const Value: TSpkPaneStyle); procedure SetStyle(const Value: TSpkPaneStyle);
procedure CaptionFontChange(Sender: TObject);
public public
constructor Create(ADispatch: TSpkBaseAppearanceDispatch); constructor Create(ADispatch: TSpkBaseAppearanceDispatch);
destructor Destroy; override; destructor Destroy; override;
@ -176,6 +180,7 @@ type
procedure SetIdleInnerLightColor(const Value: TColor); procedure SetIdleInnerLightColor(const Value: TColor);
procedure SetStyle(const Value: TSpkElementStyle); procedure SetStyle(const Value: TSpkElementStyle);
procedure CaptionFontChange(Sender: TObject);
public public
constructor Create(ADispatch: TSpkBaseAppearanceDispatch); constructor Create(ADispatch: TSpkBaseAppearanceDispatch);
destructor Destroy; override; destructor Destroy; override;
@ -297,6 +302,7 @@ begin
inherited Create; inherited Create;
FDispatch := ADispatch; FDispatch := ADispatch;
FTabHeaderFont := TFont.Create; FTabHeaderFont := TFont.Create;
FTabHeaderFont.OnChange := TabHeaderFontChange;
Reset; Reset;
end; end;
@ -491,6 +497,12 @@ begin
FDispatch.NotifyAppearanceChanged; FDispatch.NotifyAppearanceChanged;
end; end;
procedure TSpkTabAppearance.TabHeaderFontChange(Sender: TObject);
begin
if FDispatch <> nil then
FDispatch.NotifyAppearanceChanged;
end;
{ TSpkPaneAppearance } { TSpkPaneAppearance }
@ -499,6 +511,7 @@ begin
inherited Create; inherited Create;
FDispatch := ADispatch; FDispatch := ADispatch;
FCaptionFont := TFont.Create; FCaptionFont := TFont.Create;
FCaptionFont.OnChange := CaptionFontChange;
FHotTrackBrightnessChange := 20; FHotTrackBrightnessChange := 20;
FStyle := psRectangleEtched; FStyle := psRectangleEtched;
Reset; Reset;
@ -534,6 +547,12 @@ begin
raise AssignException.create('TSpkPaneAppearance.Assign: Nie mogê przypisaæ obiektu '+Source.ClassName+' do TSpkPaneAppearance!'); raise AssignException.create('TSpkPaneAppearance.Assign: Nie mogê przypisaæ obiektu '+Source.ClassName+' do TSpkPaneAppearance!');
end; end;
procedure TSpkPaneAppearance.CaptionFontChange(Sender: TObject);
begin
if FDispatch <> nil then
FDispatch.NotifyAppearanceChanged;
end;
procedure TSpkPaneAppearance.LoadFromXML(Node: TSpkXMLNode); procedure TSpkPaneAppearance.LoadFromXML(Node: TSpkXMLNode);
var var
Subnode: TSpkXMLNode; Subnode: TSpkXMLNode;
@ -765,6 +784,7 @@ begin
inherited Create; inherited Create;
FDispatch := ADispatch; FDispatch := ADispatch;
FCaptionFont := TFont.Create; FCaptionFont := TFont.Create;
FCaptionFont.OnChange := CaptionFontChange;
FHotTrackBrightnessChange := 40; FHotTrackBrightnessChange := 40;
Reset; Reset;
end; end;
@ -814,6 +834,12 @@ begin
raise AssignException.create('TSpkElementAppearance.Assign: Nie mogê przypisaæ obiektu '+Source.ClassName+' do TSpkElementAppearance!'); raise AssignException.create('TSpkElementAppearance.Assign: Nie mogê przypisaæ obiektu '+Source.ClassName+' do TSpkElementAppearance!');
end; end;
procedure TSpkElementAppearance.CaptionFontChange(Sender: TObject);
begin
if FDispatch <> nil then
FDispatch.NotifyAppearanceChanged;
end;
procedure TSpkElementAppearance.GetActiveColors(IsChecked: Boolean; procedure TSpkElementAppearance.GetActiveColors(IsChecked: Boolean;
out AFrameColor, AInnerLightColor, AInnerDarkColor, AGradientFromColor, out AFrameColor, AInnerLightColor, AInnerDarkColor, AGradientFromColor,
AGradientToColor: TColor; out AGradientKind: TBackgroundKind; AGradientToColor: TColor; out AGradientKind: TBackgroundKind;

View File

@ -14,9 +14,13 @@ unit spkt_Const;
interface interface
uses
Graphics;
procedure SpkInitLayoutConsts(FromDPI: Integer; ToDPI: Integer = 0); procedure SpkInitLayoutConsts(FromDPI: Integer; ToDPI: Integer = 0);
function SpkScaleX(Size: Integer; FromDPI: Integer; ToDPI: Integer = 0): integer; function SpkScaleX(Size: Integer; FromDPI: Integer; ToDPI: Integer = 0): integer;
function SpkScaleY(Size: Integer; FromDPI: Integer; ToDPI: Integer = 0): integer; function SpkScaleY(Size: Integer; FromDPI: Integer; ToDPI: Integer = 0): integer;
procedure SpkScaleFont(AFont: TFont; ToDPI: Integer = 0);
const const
// **************** // ****************
@ -262,7 +266,7 @@ const
implementation implementation
uses uses
Graphics, LCLType; LCLType;
procedure SpkInitLayoutConsts(FromDPI: Integer; ToDPI: Integer = 0); procedure SpkInitLayoutConsts(FromDPI: Integer; ToDPI: Integer = 0);
begin begin
@ -383,6 +387,25 @@ begin
end; end;
procedure SpkScaleFont(AFont: TFont; ToDPI: Integer = 0);
var
FromDPI: Integer;
begin
if ToDPI = 0 then
ToDPI := ScreenInfo.PixelsPerInchY;
FromDPI := AFont.PixelsPerInch;
if (not DPI_AWARE) or (ToDPI = FromDPI) then
exit;
if AFont.Size = 0 then
AFont.Height := MulDiv(GetFontData(AFont.Reference.Handle).Height, FromDPI, ToDPI)
else
AFont.Height := MulDiv(AFont.Height, FromDPI, ToDPI);
AFont.PixelsPerInch := ToDPI;
end;
initialization initialization

View File

@ -261,43 +261,40 @@ implementation
{ TSpkToolbarEditor } { TSpkToolbarEditor }
procedure TSpkToolbarEditor.DoOpenContentsEditor; procedure TSpkToolbarEditor.DoOpenContentsEditor;
var var
Component : TComponent; Component: TComponent;
begin begin
Component:=self.GetComponent; Component:=self.GetComponent;
if not(Component is TSpkToolbar) then
exit;
if not(Component is TSpkToolbar) then EditWindow.SetData(TSpkToolbar(Component),Self.GetDesigner);
exit; EditWindow.Show;
EditWindow.SetData(TSpkToolbar(Component),Self.GetDesigner);
EditWindow.Show;
end; end;
procedure TSpkToolbarEditor.Edit; procedure TSpkToolbarEditor.Edit;
begin begin
DoOpenContentsEditor; DoOpenContentsEditor;
end; end;
procedure TSpkToolbarEditor.ExecuteVerb(Index: Integer); procedure TSpkToolbarEditor.ExecuteVerb(Index: Integer);
begin begin
case Index of case Index of
0 : DoOpenContentsEditor; 0 : DoOpenContentsEditor;
end; end;
end; end;
function TSpkToolbarEditor.GetVerb(Index: Integer): string; function TSpkToolbarEditor.GetVerb(Index: Integer): string;
begin begin
case Index of case Index of
0 : result:='Contents editor...'; 0 : result:='Contents editor...';
end; end;
end; end;
function TSpkToolbarEditor.GetVerbCount: Integer; function TSpkToolbarEditor.GetVerbCount: Integer;
begin begin
result:=1; Result := 1;
end; end;
{ TSpkToolbarCaptionEditor } { TSpkToolbarCaptionEditor }
@ -325,48 +322,47 @@ end;
{ TSpkToolbarAppearanceEditor } { TSpkToolbarAppearanceEditor }
procedure TSpkToolbarAppearanceEditor.Edit; procedure TSpkToolbarAppearanceEditor.Edit;
var
var Obj : TObject; Obj: TObject;
Toolbar : TSpkToolbar; Toolbar: TSpkToolbar;
Tab : TSpkTab; Tab: TSpkTab;
AppearanceEditor : tfrmAppearanceEditWindow; AppearanceEditor: tfrmAppearanceEditWindow;
begin begin
Obj:=GetComponent(0); Obj:=GetComponent(0);
if Obj is TSpkToolbar then if Obj is TSpkToolbar then
begin begin
Toolbar:=TSpkToolbar(Obj); Toolbar := TSpkToolbar(Obj);
AppearanceEditor:=TfrmAppearanceEditWindow.Create(nil); AppearanceEditor:=TfrmAppearanceEditWindow.Create(nil);
try try
AppearanceEditor.Appearance.Assign(Toolbar.Appearance); AppearanceEditor.Appearance.Assign(Toolbar.Appearance);
if AppearanceEditor.ShowModal = mrOK then if AppearanceEditor.ShowModal = mrOK then
begin begin
Toolbar.Appearance.Assign(AppearanceEditor.Appearance); Toolbar.Appearance.Assign(AppearanceEditor.Appearance);
Modified; Modified;
end; end;
finally finally
AppearanceEditor.Free; AppearanceEditor.Free;
end; end;
end else end else
if Obj is TSpkTab then if Obj is TSpkTab then
begin begin
Tab:=TSpkTab(Obj); Tab:=TSpkTab(Obj);
AppearanceEditor:=TfrmAppearanceEditWindow.Create(nil); AppearanceEditor:=TfrmAppearanceEditWindow.Create(nil);
try try
AppearanceEditor.Appearance.Assign(Tab.CustomAppearance); AppearanceEditor.Appearance.Assign(Tab.CustomAppearance);
if AppearanceEditor.ShowModal = mrOK then if AppearanceEditor.ShowModal = mrOK then
begin begin
Tab.CustomAppearance.Assign(AppearanceEditor.Appearance); Tab.CustomAppearance.Assign(AppearanceEditor.Appearance);
Modified; Modified;
end; end;
finally finally
AppearanceEditor.Free; AppearanceEditor.Free;
end; end;
end; end;
end; end;
function TSpkToolbarAppearanceEditor.GetAttributes: TPropertyAttributes; function TSpkToolbarAppearanceEditor.GetAttributes: TPropertyAttributes;

View File

@ -207,6 +207,7 @@ type
procedure bTabGradientToColorClick(Sender: TObject); procedure bTabGradientToColorClick(Sender: TObject);
procedure bActiveTabHeaderFontColorClick(Sender: TObject); procedure bActiveTabHeaderFontColorClick(Sender: TObject);
procedure bCopyToClipboardClick(Sender: TObject); procedure bCopyToClipboardClick(Sender: TObject);
procedure cbItemActiveGradientKindChange(Sender: TObject); procedure cbItemActiveGradientKindChange(Sender: TObject);
procedure cbItemHottrackGradientKindChange(Sender: TObject); procedure cbItemHottrackGradientKindChange(Sender: TObject);
procedure cbItemIdleGradientKindChange(Sender: TObject); procedure cbItemIdleGradientKindChange(Sender: TObject);