926 lines
39 KiB
ObjectPascal
926 lines
39 KiB
ObjectPascal
{*******************************************************************}
|
|
{ }
|
|
{ Developer Express Visual Component Library }
|
|
{ ExpressNavBar }
|
|
{ }
|
|
{ Copyright (c) 2002-2009 Developer Express Inc. }
|
|
{ ALL RIGHTS RESERVED }
|
|
{ }
|
|
{ The entire contents of this file is protected by U.S. and }
|
|
{ International Copyright Laws. Unauthorized reproduction, }
|
|
{ reverse-engineering, and distribution of all or any portion of }
|
|
{ the code contained in this file is strictly prohibited and may }
|
|
{ result in severe civil and criminal penalties and will be }
|
|
{ prosecuted to the maximum extent possible under the law. }
|
|
{ }
|
|
{ RESTRICTIONS }
|
|
{ }
|
|
{ THIS SOURCE CODE AND ALL RESULTING INTERMEDIATE FILES }
|
|
{ (DCU, OBJ, DLL, ETC.) ARE CONFIDENTIAL AND PROPRIETARY TRADE }
|
|
{ SECRETS OF DEVELOPER EXPRESS INC. THE REGISTERED DEVELOPER IS }
|
|
{ LICENSED TO DISTRIBUTE THE EXPRESSNAVBAR AND ALL ACCOMPANYING }
|
|
{ VCL CONTROLS AS PART OF AN EXECUTABLE PROGRAM ONLY. }
|
|
{ }
|
|
{ THE SOURCE CODE CONTAINED WITHIN THIS FILE AND ALL RELATED }
|
|
{ FILES OR ANY PORTION OF ITS CONTENTS SHALL AT NO TIME BE }
|
|
{ COPIED, TRANSFERRED, SOLD, DISTRIBUTED, OR OTHERWISE MADE }
|
|
{ AVAILABLE TO OTHER INDIVIDUALS WITHOUT EXPRESS WRITTEN CONSENT }
|
|
{ AND PERMISSION FROM DEVELOPER EXPRESS INC. }
|
|
{ }
|
|
{ CONSULT THE END USER LICENSE AGREEMENT FOR INFORMATION ON }
|
|
{ ADDITIONAL RESTRICTIONS. }
|
|
{ }
|
|
{*******************************************************************}
|
|
|
|
unit dxNavBarCustomPainters;
|
|
|
|
{$I cxVer.inc}
|
|
|
|
interface
|
|
|
|
uses
|
|
{$IFDEF DELPHI6}
|
|
Types,
|
|
{$ENDIF}
|
|
Windows, Graphics, ImgList, dxNavBar, dxNavBarStyles;
|
|
|
|
type
|
|
TdxNavBarCustomImagePainter = class
|
|
protected
|
|
class function GetRGBColor(Value: TColor): DWORD;
|
|
class procedure InternalDrawImage(ACanvas: TCanvas; AImageList: TCustomImageList;
|
|
AImageIndex: Integer; ARect: TRect; AEnabled: Boolean); virtual;
|
|
public
|
|
class procedure DrawImage(ACanvas: TCanvas; AImageList: TCustomImageList;
|
|
AImageIndex: Integer; ARect: TRect; AEnabled: Boolean = True);
|
|
class function IsValidImage(AImageList: TCustomImageList;AImageIndex: Integer): Boolean;
|
|
end;
|
|
TdxNavBarCustomImagePainterClass = class of TdxNavBarCustomImagePainter;
|
|
|
|
TdxNavBarCustomSelectionPainter = class
|
|
protected
|
|
class procedure GetColors(AState: TdxNavBarObjectStates; ABackColor: TColor; out AFillColor,
|
|
ATopLeftOuterColor, ABottomRightOuterColor, ATopLeftInnerColor, ABottomRightInnerColor: TColor); virtual;
|
|
class procedure InternalDrawSelection(ACanvas: TCanvas; ARect: TRect;
|
|
ABackColor: TColor; AState: TdxNavBarObjectStates); virtual;
|
|
class function IsPressed(AState: TdxNavBarObjectStates): Boolean; virtual;
|
|
public
|
|
class procedure DrawSelection(ACanvas: TCanvas; ARect: TRect;
|
|
ABackColor: TColor; AState: TdxNavBarObjectStates);
|
|
end;
|
|
TdxNavBarCustomSelectionPainterClass = class of TdxNavBarCustomSelectionPainter;
|
|
|
|
TdxNavBarUltraFlatSelectionPainter = class(TdxNavBarCustomSelectionPainter)
|
|
protected
|
|
class procedure GetColors(AState: TdxNavBarObjectStates; ABackColor: TColor; out AFillColor,
|
|
ATopLeftOuterColor, ABottomRightOuterColor, ATopLeftInnerColor, ABottomRightInnerColor: TColor); override;
|
|
class function IsPressed(AState: TdxNavBarObjectStates): Boolean; override;
|
|
end;
|
|
|
|
TdxNavBarCustomBackgroundPainter = class
|
|
private
|
|
class procedure InternalDrawGradientBackground(ACanvas: TCanvas; ARect: TRect; APicture: TPicture;
|
|
AEraseBackground: Boolean; ABackgroundColor: TColor;
|
|
AColor1, AColor2: TColor; AAlphaBlend1, AAlphaBlend2: Byte;
|
|
AGradientMode: TdxBarStyleGradientMode);
|
|
protected
|
|
class procedure DrawPicture(ACanvas: TCanvas; ARect: TRect; APicture: TPicture);
|
|
class procedure FillGradientRect(DC: HDC; const ARect: TRect;
|
|
AColor1, AColor2: TColor; AAlphaBlend1, AAlphaBlend2: Byte; AGradientMode: TdxBarStyleGradientMode);
|
|
class procedure InternalDrawBackground(ACanvas: TCanvas; ARect: TRect; APicture: TPicture;
|
|
AEraseBackground: Boolean; ABackgroundColor: TColor;
|
|
AColor1, AColor2: TColor; AAlphaBlend1, AAlphaBlend2: Byte;
|
|
AGradientMode: TdxBarStyleGradientMode); virtual;
|
|
public
|
|
class procedure DrawBackground(ACanvas: TCanvas; ARect: TRect; APicture: TPicture;
|
|
AEraseBackground: Boolean; ABackgroundColor: TColor;
|
|
AColor1, AColor2: TColor; AAlphaBlend1, AAlphaBlend2: Byte;
|
|
AGradientMode: TdxBarStyleGradientMode);
|
|
end;
|
|
TdxNavBarCustomBackgroundPainterClass = class of TdxNavBarCustomBackgroundPainter;
|
|
|
|
TdxNavBarCustomGroupBackgroundPainter = class
|
|
protected
|
|
class procedure InternalDrawBackground(ACanvas: TCanvas; ARect: TRect; APicture: TPicture;
|
|
AColor1, AColor2: TColor; AAlphaBlend1, AAlphaBlend2: Byte;
|
|
AGradientMode: TdxBarStyleGradientMode); virtual;
|
|
public
|
|
class procedure DrawBackground(ACanvas: TCanvas; ARect: TRect; APicture: TPicture;
|
|
AColor1, AColor2: TColor; AAlphaBlend1, AAlphaBlend2: Byte;
|
|
AGradientMode: TdxBarStyleGradientMode);
|
|
end;
|
|
TdxNavBarCustomGroupBackgroundPainterClass = class of TdxNavBarCustomGroupBackgroundPainter;
|
|
|
|
TdxNavBarCustomGroupBorderPainter = class
|
|
protected
|
|
class procedure InternalDrawBorder(ACanvas: TCanvas; ARect: TRect; AColor: TColor; AWithCaption: Boolean); virtual;
|
|
public
|
|
class procedure DrawBorder(ACanvas: TCanvas; ARect: TRect; AColor: TColor; AWithCaption: Boolean);
|
|
end;
|
|
TdxNavBarCustomGroupBorderPainterClass = class of TdxNavBarCustomGroupBorderPainter;
|
|
|
|
TdxNavBarCustomSignPainter = class
|
|
protected
|
|
class procedure InternalDrawSign(ACanvas: TCanvas; ARect: TRect;
|
|
AForeColor, ABackColor1, ABackColor2: TColor; AState: TdxNavBarObjectStates); virtual;
|
|
public
|
|
class procedure DrawSign(ACanvas: TCanvas; ARect: TRect;
|
|
AForeColor, ABackColor1, ABackColor2: TColor; AState: TdxNavBarObjectStates);
|
|
end;
|
|
TdxNavBarCustomSignPainterClass = class of TdxNavBarCustomSignPainter;
|
|
|
|
TdxNavBarCustomHintPainter = class
|
|
protected
|
|
class procedure InternalDrawHint(ACanvas: TCanvas; ARect: TRect; AHint: string;
|
|
APicture: TPicture; AColor1, AColor2: TColor; AAlphaBlend1, AAlphaBlend2: Byte;
|
|
AGradientMode: TdxBarStyleGradientMode; AFont: TFont); virtual;
|
|
public
|
|
class procedure DrawHint(ACanvas: TCanvas; ARect: TRect; AHint: string;
|
|
APicture: TPicture; AColor1, AColor2: TColor; AAlphaBlend1, AAlphaBlend2: Byte;
|
|
AGradientMode: TdxBarStyleGradientMode; AFont: TFont);
|
|
end;
|
|
TdxNavBarCustomHintPainterClass = class of TdxNavBarCustomHintPainter;
|
|
|
|
TdxNavBarCustomButtonPainter = class
|
|
protected
|
|
class procedure InternalDrawButton(ACanvas: TCanvas; ARect: TRect; APicture: TPicture;
|
|
AColor1, AColor2: TColor; AAlphaBlend1, AAlphaBlend2: Byte;
|
|
AGradientMode: TdxBarStyleGradientMode; ABorderColor: TColor;
|
|
AState: TdxNavBarObjectStates); virtual;
|
|
public
|
|
class procedure DrawButton(ACanvas: TCanvas; ARect: TRect; APicture: TPicture;
|
|
AColor1, AColor2: TColor; AAlphaBlend1, AAlphaBlend2: Byte;
|
|
AGradientMode: TdxBarStyleGradientMode; ABorderColor: TColor;
|
|
AState: TdxNavBarObjectStates);
|
|
end;
|
|
TdxNavBarCustomButtonPainterClass = class of TdxNavBarCustomButtonPainter;
|
|
|
|
TdxNavBarCustomScrollButtonsPainter = class
|
|
protected
|
|
class procedure InternalDrawBottomButton(ACanvas: TCanvas; ARect: TRect;
|
|
AButtonPainterClass: TdxNavBarCustomButtonPainterClass; AColor1, AColor2: TColor;
|
|
AAlphaBlend1, AAlphaBlend2: Byte; AGradientMode: TdxBarStyleGradientMode;
|
|
ABorderColor: TColor; AState: TdxNavBarObjectStates); virtual;
|
|
class procedure InternalDrawTopButton(ACanvas: TCanvas; ARect: TRect;
|
|
AButtonPainterClass: TdxNavBarCustomButtonPainterClass; AColor1, AColor2: TColor;
|
|
AAlphaBlend1, AAlphaBlend2: Byte; AGradientMode: TdxBarStyleGradientMode;
|
|
ABorderColor: TColor; AState: TdxNavBarObjectStates); virtual;
|
|
public
|
|
class procedure DrawBottomButton(ACanvas: TCanvas; ARect: TRect;
|
|
AButtonPainterClass: TdxNavBarCustomButtonPainterClass; AColor1, AColor2: TColor;
|
|
AAlphaBlend1, AAlphaBlend2: Byte; AGradientMode: TdxBarStyleGradientMode;
|
|
ABorderColor: TColor; AState: TdxNavBarObjectStates);
|
|
class procedure DrawTopButton(ACanvas: TCanvas; ARect: TRect;
|
|
AButtonPainterClass: TdxNavBarCustomButtonPainterClass; AColor1, AColor2: TColor;
|
|
AAlphaBlend1, AAlphaBlend2: Byte; AGradientMode: TdxBarStyleGradientMode;
|
|
ABorderColor: TColor; AState: TdxNavBarObjectStates);
|
|
end;
|
|
TdxNavBarCustomScrollButtonsPainterClass = class of TdxNavBarCustomScrollButtonsPainter;
|
|
|
|
TdxNavBarCustomDropTargetLinkPainter = class
|
|
protected
|
|
class procedure InternalDrawTargetLink(ACanvas: TCanvas;
|
|
pt1, pt2, pt3, pt4, pt5, pt6: TPoint; AColor: TColor); virtual;
|
|
public
|
|
class procedure DrawTargetLink(ACanvas: TCanvas;
|
|
pt1, pt2, pt3, pt4, pt5, pt6: TPoint; AColor: TColor);
|
|
end;
|
|
TdxNavBarCustomDropTargetLinkPainterClass = class of TdxNavBarCustomDropTargetLinkPainter;
|
|
|
|
TdxNavBarCustomDropTargetGroupPainter = class
|
|
protected
|
|
class procedure InternalDrawTargetGroup(ACanvas: TCanvas; ARect: TRect;
|
|
AColor1, AColor2: TColor; AAlphaBlend1, AAlphaBlend2: Byte;
|
|
AGradientMode: TdxBarStyleGradientMode); virtual;
|
|
public
|
|
class procedure DrawTargetGroup(ACanvas: TCanvas; ARect: TRect;
|
|
AColor1, AColor2: TColor; AAlphaBlend1, AAlphaBlend2: Byte;
|
|
AGradientMode: TdxBarStyleGradientMode);
|
|
end;
|
|
TdxNavBarCustomDropTargetGroupPainterClass = class of TdxNavBarCustomDropTargetGroupPainter;
|
|
|
|
TdxNavBarViewInfoAccess = class(TdxNavBarViewInfo);
|
|
TdxNavBarLinkViewInfoAccess = class(TdxNavBarLinkViewInfo);
|
|
|
|
TdxNavBarElementPainter = class(TdxNavBarPainter)
|
|
protected
|
|
// Drawing
|
|
procedure DoDrawDropTargetLinkSelection(AItemGroup: TdxNavBarGroupViewInfo; AItem1, AItem2: TdxNavBarLinkViewInfo); virtual;
|
|
procedure DoDrawHint(ACanvas: TCanvas; const ARect: TRect); override;
|
|
// Painters
|
|
class function BackgroundPainterClass: TdxNavBarCustomBackgroundPainterClass; virtual;
|
|
class function ButtonPainterClass: TdxNavBarCustomButtonPainterClass; virtual;
|
|
class function DropTargetGroupPainterClass: TdxNavBarCustomDropTargetGroupPainterClass; virtual;
|
|
class function DropTargetLinkPainterClass: TdxNavBarCustomDropTargetLinkPainterClass; virtual;
|
|
class function GroupBackgroundPainterClass: TdxNavBarCustomGroupBackgroundPainterClass; virtual;
|
|
class function GroupBorderPainterClass: TdxNavBarCustomGroupBorderPainterClass; virtual;
|
|
class function ImagePainterClass: TdxNavBarCustomImagePainterClass; virtual;
|
|
class function ScrollButtonsPainterClass: TdxNavBarCustomScrollButtonsPainterClass; virtual;
|
|
class function SelectionPainterClass: TdxNavBarCustomSelectionPainterClass; virtual;
|
|
class function SignPainterClass: TdxNavBarCustomSignPainterClass; virtual;
|
|
public
|
|
// Drawing
|
|
procedure DrawBackground; override;
|
|
procedure DrawDropTargetGroupSelection; override;
|
|
procedure DrawDropTargetLinkSelection; override;
|
|
procedure DrawGroupBackground(AGroupViewInfo: TdxNavBarGroupViewInfo); override;
|
|
procedure DrawGroupBorder(AGroupViewInfo: TdxNavBarGroupViewInfo); override;
|
|
procedure DrawGroupCaptionButton(AGroupViewInfo: TdxNavBarGroupViewInfo); override;
|
|
procedure DrawGroupCaptionImage(AGroupViewInfo: TdxNavBarGroupViewInfo); override;
|
|
procedure DrawGroupCaptionSign(AGroupViewInfo: TdxNavBarGroupViewInfo); override;
|
|
procedure DrawGroupControl(ACanvas: TCanvas; ARect: TRect; AGroupViewInfo: TdxNavBarGroupViewInfo); override;
|
|
procedure DrawItemImage(ALinkViewInfo: TdxNavBarLinkViewInfo); override;
|
|
procedure DrawItemSelection(ALinkViewInfo: TdxNavBarLinkViewInfo); override;
|
|
procedure DrawBottomScrollButton; override;
|
|
procedure DrawTopScrollButton; override;
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses
|
|
CommCtrl, cxGraphics, cxGeometry, dxOffice11, dxNavBarGraphics;
|
|
|
|
{ TdxNavBarCustomImagePainter }
|
|
|
|
class procedure TdxNavBarCustomImagePainter.DrawImage(ACanvas: TCanvas;
|
|
AImageList: TCustomImageList; AImageIndex: Integer; ARect: TRect; AEnabled: Boolean);
|
|
begin
|
|
InternalDrawImage(ACanvas, AImageList, AImageIndex, ARect, AEnabled);
|
|
end;
|
|
|
|
class function TdxNavBarCustomImagePainter.IsValidImage(AImageList: TCustomImageList; AImageIndex: Integer): Boolean;
|
|
begin
|
|
Result := IsImageAssigned(AImageList, AImageIndex);
|
|
end;
|
|
|
|
class function TdxNavBarCustomImagePainter.GetRGBColor(Value: TColor): DWORD;
|
|
begin
|
|
Result := ColorToRGB(Value);
|
|
case Result of
|
|
clNone: Result := CLR_NONE;
|
|
clDefault: Result := CLR_DEFAULT;
|
|
end;
|
|
end;
|
|
|
|
class procedure TdxNavBarCustomImagePainter.InternalDrawImage(ACanvas: TCanvas;
|
|
AImageList: TCustomImageList; AImageIndex: Integer; ARect: TRect; AEnabled: Boolean);
|
|
var
|
|
ASavedDCInfo: Integer;
|
|
begin
|
|
if IsValidImage(AImageList, AImageIndex) then
|
|
begin
|
|
ASavedDCInfo := SaveDC(ACanvas.Handle);
|
|
AImageList.Draw(ACanvas, ARect.Left, ARect.Top, AImageIndex, AEnabled or DrawIconsAsEnabled);
|
|
RestoreDC(ACanvas.Handle, ASavedDCInfo);
|
|
end;
|
|
end;
|
|
|
|
{ TdxNavBarCustomSelectionPainter }
|
|
|
|
class procedure TdxNavBarCustomSelectionPainter.DrawSelection(ACanvas: TCanvas;
|
|
ARect: TRect; ABackColor: TColor; AState: TdxNavBarObjectStates);
|
|
begin
|
|
InternalDrawSelection(ACanvas, ARect, ABackColor, AState);
|
|
end;
|
|
|
|
class procedure TdxNavBarCustomSelectionPainter.GetColors(AState: TdxNavBarObjectStates; ABackColor: TColor;
|
|
out AFillColor, ATopLeftOuterColor, ABottomRightOuterColor, ATopLeftInnerColor, ABottomRightInnerColor: TColor);
|
|
begin
|
|
AFillColor := clNone;
|
|
ATopLeftOuterColor := clNone;
|
|
ABottomRightOuterColor := clNone;
|
|
ATopLeftInnerColor := clNone;
|
|
ABottomRightInnerColor := clNone;
|
|
end;
|
|
|
|
class procedure TdxNavBarCustomSelectionPainter.InternalDrawSelection(
|
|
ACanvas: TCanvas; ARect: TRect; ABackColor: TColor; AState: TdxNavBarObjectStates);
|
|
var
|
|
AFillColor, ATopLeftOuterColor, ABottomRightOuterColor,
|
|
ATopLeftInnerColor, ABottomRightInnerColor: TColor;
|
|
begin
|
|
if [sSelected, sPressed, sHotTracked] * AState <> [] then
|
|
begin
|
|
GetColors(AState, ABackColor, AFillColor, ATopLeftOuterColor, ABottomRightOuterColor,
|
|
ATopLeftInnerColor, ABottomRightInnerColor);
|
|
dxNavBarDrawSelectedFrame(ACanvas, ARect, ATopLeftOuterColor, ABottomRightOuterColor,
|
|
ATopLeftInnerColor, ABottomRightInnerColor);
|
|
if AFillColor <> clNone then
|
|
FillRectByColor(ACanvas.Handle, cxRectInflate(ARect, -1, -1), AFillColor);
|
|
end;
|
|
end;
|
|
|
|
class function TdxNavBarCustomSelectionPainter.IsPressed(AState: TdxNavBarObjectStates): Boolean;
|
|
begin
|
|
Result := [sPressed, sSelected] * AState <> [];
|
|
end;
|
|
|
|
{ TdxNavBarUltraFlatSelectionPainter }
|
|
|
|
class procedure TdxNavBarUltraFlatSelectionPainter.GetColors(AState: TdxNavBarObjectStates; ABackColor: TColor;
|
|
out AFillColor, ATopLeftOuterColor, ABottomRightOuterColor, ATopLeftInnerColor, ABottomRightInnerColor: TColor);
|
|
begin
|
|
inherited;
|
|
ATopLeftOuterColor := ColorToRGB(clHighlight);
|
|
ABottomRightOuterColor := ColorToRGB(clHighlight);
|
|
if IsPressed(AState) then
|
|
AFillColor := GetRealColor(GetLightColor(14, 44, 40))
|
|
else
|
|
AFillColor := GetRealColor(GetLightColor(-2, 30, 72));
|
|
end;
|
|
|
|
class function TdxNavBarUltraFlatSelectionPainter.IsPressed(AState: TdxNavBarObjectStates): Boolean;
|
|
begin
|
|
Result := (sPressed in AState) and not (sSelected in AState);
|
|
end;
|
|
|
|
{ TdxNavBarCustomBackgroundPainter }
|
|
|
|
class procedure TdxNavBarCustomBackgroundPainter.DrawBackground(ACanvas: TCanvas; ARect: TRect;
|
|
APicture: TPicture; AEraseBackground: Boolean; ABackgroundColor: TColor;
|
|
AColor1, AColor2: TColor; AAlphaBlend1, AAlphaBlend2: Byte; AGradientMode: TdxBarStyleGradientMode);
|
|
begin
|
|
InternalDrawBackground(ACanvas, ARect, APicture, AEraseBackground, ABackgroundColor,
|
|
AColor1, AColor2, AAlphaBlend1, AAlphaBlend2, AGradientMode);
|
|
end;
|
|
|
|
class procedure TdxNavBarCustomBackgroundPainter.DrawPicture(ACanvas: TCanvas; ARect: TRect;
|
|
APicture: TPicture);
|
|
var
|
|
dLeft, dTop, dWidth, dHeight: Integer;
|
|
ABmp: TBitmap;
|
|
ACreatedFlag: Boolean;
|
|
begin
|
|
ACreatedFlag := not(APicture.Graphic is TBitmap);
|
|
if ACreatedFlag then
|
|
begin
|
|
ABmp := cxCreateBitmap(APicture.Graphic.Height, APicture.Graphic.Height);
|
|
ABmp.Canvas.Draw(0, 0, APicture.Graphic);
|
|
end
|
|
else
|
|
ABmp := APicture.Bitmap;
|
|
|
|
if ABmp <> nil then
|
|
begin
|
|
dTop := ARect.Top;
|
|
while (dTop < ARect.Bottom) do begin
|
|
dHeight := ABmp.Height;
|
|
if (dTop + dHeight > ARect.Bottom) then
|
|
dHeight := ARect.Bottom - dTop;
|
|
dLeft := ARect.Left;
|
|
while (dLeft < ARect.Right) do begin
|
|
dWidth := ABmp.Width;
|
|
if (dLeft + dWidth > ARect.Right) then
|
|
dWidth := ARect.Right - dLeft;
|
|
BitBlt(ACanvas.Handle, dLeft, dTop, dWidth, dHeight, ABmp.Canvas.Handle, 0, 0, SRCCOPY);
|
|
Inc(dLeft, dWidth);
|
|
end;
|
|
Inc(dTop, dHeight);
|
|
end;
|
|
if ACreatedFlag then ABmp.Free;
|
|
end;
|
|
end;
|
|
|
|
class procedure TdxNavBarCustomBackgroundPainter.FillGradientRect(DC: HDC; const ARect: TRect;
|
|
AColor1, AColor2: TColor; AAlphaBlend1, AAlphaBlend2: Byte; AGradientMode: TdxBarStyleGradientMode);
|
|
|
|
function CalcColorComponent(AFromColorComponent, AToColorComponent: Byte;
|
|
AGradientSize: TSize; AGradientPos: TPoint): Integer;
|
|
var
|
|
AFromToColorSize: Integer;
|
|
begin
|
|
AFromToColorSize := AToColorComponent - AFromColorComponent;
|
|
case AGradientMode of
|
|
gmHorizontal:
|
|
Result := AFromColorComponent +
|
|
MulDiv(AGradientPos.X, AFromToColorSize, (AGradientSize.cx - 1));
|
|
gmVertical:
|
|
Result := AFromColorComponent +
|
|
MulDiv(AGradientPos.Y, AFromToColorSize, (AGradientSize.cy - 1));
|
|
gmForwardDiagonal:
|
|
Result := AFromColorComponent +
|
|
(MulDiv(AGradientPos.X, AFromToColorSize, (AGradientSize.cx - 1)) +
|
|
MulDiv(AGradientPos.Y, AFromToColorSize, (AGradientSize.cy - 1))) div 2;
|
|
gmBackwardDiagonal:
|
|
Result := AFromColorComponent +
|
|
(MulDiv(AGradientSize.cx - 1 - AGradientPos.X, AFromToColorSize, (AGradientSize.cx - 1)) +
|
|
MulDiv(AGradientPos.Y, AFromToColorSize, (AGradientSize.cy - 1))) div 2;
|
|
else
|
|
Result := 0;
|
|
end
|
|
end;
|
|
|
|
function CalcRGBColor(AFromColor, AToColor: TColor;
|
|
AGradientSize: TSize; AGradientPos: TPoint): TColor;
|
|
var
|
|
R, G, B: Byte;
|
|
begin
|
|
R := CalcColorComponent(GetRValue(AFromColor), GetRValue(AToColor),
|
|
AGradientSize, AGradientPos);
|
|
G := CalcColorComponent(GetGValue(AFromColor), GetGValue(AToColor),
|
|
AGradientSize, AGradientPos);
|
|
B := CalcColorComponent(GetBValue(AFromColor), GetBValue(AToColor),
|
|
AGradientSize, AGradientPos);
|
|
Result := RGB(R, G, B);
|
|
end;
|
|
|
|
function GetGradientSize(ARect: TRect): TSize;
|
|
const
|
|
MaxGradientHeight = 256;
|
|
MaxGradientWidth = 256;
|
|
var
|
|
ARectWidth, ARectHeight: Integer;
|
|
begin
|
|
ARectWidth := ARect.Right - ARect.Left;
|
|
ARectHeight := ARect.Bottom - ARect.Top;
|
|
if ARectWidth < MaxGradientWidth then
|
|
Result.cx := ARectWidth
|
|
else
|
|
Result.cx := MaxGradientWidth;
|
|
if ARectHeight < MaxGradientHeight then
|
|
Result.cy := ARectHeight
|
|
else
|
|
Result.cy := MaxGradientHeight;
|
|
end;
|
|
|
|
var
|
|
AOneColorRect: TRect;
|
|
I, J, ARectWidth, ARectHeight: Integer;
|
|
AGradientSize: TSize;
|
|
|
|
begin
|
|
AColor1 := ColorToRGB(AColor1);
|
|
AColor2 := ColorToRGB(AColor2);
|
|
if AColor1 = AColor2 then
|
|
begin
|
|
FillRectByColor(DC, ARect, AColor1);
|
|
Exit;
|
|
end;
|
|
|
|
AOneColorRect := ARect;
|
|
ARectWidth := ARect.Right - ARect.Left;
|
|
ARectHeight := ARect.Bottom - ARect.Top;
|
|
AGradientSize := GetGradientSize(ARect);
|
|
|
|
for I := 0 to AGradientSize.cy - 1 do
|
|
begin
|
|
AOneColorRect.Bottom := ARect.Top + MulDiv(I + 1, ARectHeight, AGradientSize.cy);
|
|
for J := 0 to AGradientSize.cx - 1 do
|
|
begin
|
|
AOneColorRect.Right := ARect.Left + MulDiv(J + 1, ARectWidth, AGradientSize.cx);
|
|
if not IsRectEmpty(AOneColorRect) then
|
|
FillRectByColor(DC, AOneColorRect, CalcRGBColor(AColor1, AColor2, AGradientSize, Point(J, I)));
|
|
AOneColorRect.Left := AOneColorRect.Right;
|
|
if AOneColorRect.Left >= ARect.Right then
|
|
Break;
|
|
end;
|
|
AOneColorRect.Top := AOneColorRect.Bottom;
|
|
if AOneColorRect.Top >= ARect.Bottom then
|
|
Break;
|
|
AOneColorRect.Left := ARect.Left;
|
|
end;
|
|
end;
|
|
|
|
class procedure TdxNavBarCustomBackgroundPainter.InternalDrawBackground(ACanvas: TCanvas; ARect: TRect;
|
|
APicture: TPicture; AEraseBackground: Boolean; ABackgroundColor: TColor;
|
|
AColor1, AColor2: TColor; AAlphaBlend1, AAlphaBlend2: Byte; AGradientMode: TdxBarStyleGradientMode);
|
|
begin
|
|
if (APicture <> nil) and (APicture.Graphic <> nil) and not APicture.Graphic.Empty then
|
|
DrawPicture(ACanvas, ARect, APicture)
|
|
else
|
|
if AEraseBackground then
|
|
FillRectByColor(ACanvas.Handle, ARect, ABackgroundColor);
|
|
if (AColor1 = AColor2) and (AAlphaBlend1 = 255) and (AAlphaBlend2 = 255) then
|
|
FillRectByColor(ACanvas.Handle, ARect, AColor1)
|
|
else
|
|
InternalDrawGradientBackground(ACanvas, ARect, APicture, AEraseBackground,
|
|
ABackgroundColor, AColor1, AColor2, AAlphaBlend1, AAlphaBlend2, AGradientMode);
|
|
end;
|
|
|
|
class procedure TdxNavBarCustomBackgroundPainter.InternalDrawGradientBackground(ACanvas: TCanvas; ARect: TRect; APicture: TPicture;
|
|
AEraseBackground: Boolean; ABackgroundColor: TColor;
|
|
AColor1, AColor2: TColor; AAlphaBlend1, AAlphaBlend2: Byte;
|
|
AGradientMode: TdxBarStyleGradientMode);
|
|
begin
|
|
if IsGdiPlusAvailable then
|
|
GdipFillGradientRect(ACanvas.Handle, ARect, AColor1, AColor2, AAlphaBlend1, AAlphaBlend2, AGradientMode)
|
|
else
|
|
if (AAlphaBlend1 <> 0) or (AAlphaBlend2 <> 0) then
|
|
FillGradientRect(ACanvas.Handle, ARect, AColor1, AColor2, AAlphaBlend1, AAlphaBlend2, AGradientMode);
|
|
end;
|
|
|
|
{ TdxNavBarCustomGroupBackgroundPainter }
|
|
|
|
class procedure TdxNavBarCustomGroupBackgroundPainter.DrawBackground(ACanvas: TCanvas;
|
|
ARect: TRect; APicture: TPicture; AColor1, AColor2: TColor; AAlphaBlend1, AAlphaBlend2: Byte;
|
|
AGradientMode: TdxBarStyleGradientMode);
|
|
begin
|
|
InternalDrawBackground(ACanvas, ARect, APicture, AColor1, AColor2,
|
|
AAlphaBlend1, AAlphaBlend2, AGradientMode);
|
|
end;
|
|
|
|
class procedure TdxNavBarCustomGroupBackgroundPainter.InternalDrawBackground(ACanvas: TCanvas; ARect:
|
|
TRect; APicture: TPicture; AColor1, AColor2: TColor; AAlphaBlend1, AAlphaBlend2: Byte;
|
|
AGradientMode: TdxBarStyleGradientMode);
|
|
begin
|
|
TdxNavBarCustomBackgroundPainter.DrawBackground(ACanvas, ARect, APicture, False, clNone,
|
|
AColor1, AColor2, AAlphaBlend1, AAlphaBlend2, AGradientMode);
|
|
end;
|
|
|
|
{ TdxNavBarCustomGroupBorderPainter }
|
|
|
|
class procedure TdxNavBarCustomGroupBorderPainter.InternalDrawBorder(ACanvas: TCanvas;
|
|
ARect: TRect; AColor: TColor; AWithCaption: Boolean);
|
|
begin
|
|
end;
|
|
|
|
class procedure TdxNavBarCustomGroupBorderPainter.DrawBorder(ACanvas: TCanvas;
|
|
ARect: TRect; AColor: TColor; AWithCaption: Boolean);
|
|
begin
|
|
InternalDrawBorder(ACanvas, ARect, AColor, AWithCaption);
|
|
end;
|
|
|
|
{ TdxNavBarCustomSignPainter }
|
|
|
|
class procedure TdxNavBarCustomSignPainter.DrawSign(ACanvas: TCanvas; ARect: TRect;
|
|
AForeColor, ABackColor1, ABackColor2: TColor; AState: TdxNavBarObjectStates);
|
|
begin
|
|
InternalDrawSign(ACanvas, ARect, AForeColor, ABackColor1, ABackColor2, AState);
|
|
end;
|
|
|
|
class procedure TdxNavBarCustomSignPainter.InternalDrawSign(ACanvas: TCanvas; ARect: TRect;
|
|
AForeColor, ABackColor1, ABackColor2: TColor; AState: TdxNavBarObjectStates);
|
|
begin
|
|
|
|
end;
|
|
|
|
{ TdxNavBarCustomHintPainter }
|
|
|
|
class procedure TdxNavBarCustomHintPainter.DrawHint(ACanvas: TCanvas; ARect: TRect;
|
|
AHint: string; APicture: TPicture; AColor1, AColor2: TColor;
|
|
AAlphaBlend1, AAlphaBlend2: Byte; AGradientMode: TdxBarStyleGradientMode;
|
|
AFont: TFont);
|
|
begin
|
|
InternalDrawHint(ACanvas, ARect, AHint, APicture, AColor1, AColor2,
|
|
AAlphaBlend1, AAlphaBlend2, AGradientMode, AFont);
|
|
end;
|
|
|
|
class procedure TdxNavBarCustomHintPainter.InternalDrawHint(ACanvas: TCanvas;
|
|
ARect: TRect; AHint: string; APicture: TPicture; AColor1,
|
|
AColor2: TColor; AAlphaBlend1, AAlphaBlend2: Byte;
|
|
AGradientMode: TdxBarStyleGradientMode; AFont: TFont);
|
|
begin
|
|
if AHint <> '' then
|
|
begin
|
|
TdxNavBarCustomBackgroundPainter.DrawBackground(ACanvas, ARect, APicture, True, clInfoBk,
|
|
AColor1, AColor2, AAlphaBlend1, AAlphaBlend2, AGradientMode);
|
|
Windows.DrawEdge(ACanvas.Handle, ARect, BDR_RAISEDOUTER, BF_RECT);
|
|
InflateRect(ARect, -1, -1);
|
|
Inc(ARect.Left, dxNavBarHintWindowTextOffset.X);
|
|
Inc(ARect.Top, dxNavBarHintWindowTextOffset.Y);
|
|
ACanvas.Font := AFont;
|
|
dxNavBarDrawText(ACanvas, AHint, ARect, DT_LEFT or DT_NOPREFIX or DT_WORDBREAK);
|
|
end;
|
|
end;
|
|
|
|
{ TdxNavBarCustomButtonPainter }
|
|
|
|
class procedure TdxNavBarCustomButtonPainter.DrawButton(ACanvas: TCanvas;
|
|
ARect: TRect; APicture: TPicture; AColor1, AColor2: TColor; AAlphaBlend1,
|
|
AAlphaBlend2: Byte; AGradientMode: TdxBarStyleGradientMode;
|
|
ABorderColor: TColor; AState: TdxNavBarObjectStates);
|
|
begin
|
|
InternalDrawButton(ACanvas, ARect, APicture, AColor1, AColor2,
|
|
AAlphaBlend1, AAlphaBlend2, AGradientMode, ABorderColor, AState);
|
|
end;
|
|
|
|
class procedure TdxNavBarCustomButtonPainter.InternalDrawButton(ACanvas: TCanvas;
|
|
ARect: TRect; APicture: TPicture; AColor1, AColor2: TColor; AAlphaBlend1,
|
|
AAlphaBlend2: Byte; AGradientMode: TdxBarStyleGradientMode;
|
|
ABorderColor: TColor; AState: TdxNavBarObjectStates);
|
|
begin
|
|
TdxNavBarCustomBackgroundPainter.DrawBackground(ACanvas, ARect, APicture, False, clBtnFace, AColor1, AColor2,
|
|
AAlphaBlend1, AAlphaBlend2, AGradientMode);
|
|
end;
|
|
|
|
{ TdxNavBarCustomScrollButtonsPainter }
|
|
|
|
class procedure TdxNavBarCustomScrollButtonsPainter.DrawBottomButton(
|
|
ACanvas: TCanvas; ARect: TRect;
|
|
AButtonPainterClass: TdxNavBarCustomButtonPainterClass; AColor1, AColor2: TColor;
|
|
AAlphaBlend1, AAlphaBlend2: Byte; AGradientMode: TdxBarStyleGradientMode;
|
|
ABorderColor: TColor; AState: TdxNavBarObjectStates);
|
|
begin
|
|
InternalDrawBottomButton(ACanvas, ARect, AButtonPainterClass, AColor1, AColor2,
|
|
AAlphaBlend1, AAlphaBlend2, AGradientMode, ABorderColor, AState);
|
|
end;
|
|
|
|
class procedure TdxNavBarCustomScrollButtonsPainter.DrawTopButton(ACanvas: TCanvas;
|
|
ARect: TRect; AButtonPainterClass: TdxNavBarCustomButtonPainterClass; AColor1,
|
|
AColor2: TColor; AAlphaBlend1, AAlphaBlend2: Byte; AGradientMode: TdxBarStyleGradientMode;
|
|
ABorderColor: TColor; AState: TdxNavBarObjectStates);
|
|
begin
|
|
InternalDrawTopButton(ACanvas, ARect, AButtonPainterClass, AColor1, AColor2,
|
|
AAlphaBlend1, AAlphaBlend2, AGradientMode, ABorderColor, AState);
|
|
end;
|
|
|
|
class procedure TdxNavBarCustomScrollButtonsPainter.InternalDrawBottomButton(
|
|
ACanvas: TCanvas; ARect: TRect;
|
|
AButtonPainterClass: TdxNavBarCustomButtonPainterClass; AColor1, AColor2: TColor;
|
|
AAlphaBlend1, AAlphaBlend2: Byte; AGradientMode: TdxBarStyleGradientMode;
|
|
ABorderColor: TColor; AState: TdxNavBarObjectStates);
|
|
begin
|
|
|
|
end;
|
|
|
|
class procedure TdxNavBarCustomScrollButtonsPainter.InternalDrawTopButton(
|
|
ACanvas: TCanvas; ARect: TRect;
|
|
AButtonPainterClass: TdxNavBarCustomButtonPainterClass; AColor1, AColor2: TColor;
|
|
AAlphaBlend1, AAlphaBlend2: Byte; AGradientMode: TdxBarStyleGradientMode;
|
|
ABorderColor: TColor; AState: TdxNavBarObjectStates);
|
|
begin
|
|
|
|
end;
|
|
|
|
{ TdxNavBarCustomDropTargetLinkPainter }
|
|
|
|
class procedure TdxNavBarCustomDropTargetLinkPainter.DrawTargetLink(
|
|
ACanvas: TCanvas; pt1, pt2, pt3, pt4, pt5, pt6: TPoint; AColor: TColor);
|
|
begin
|
|
InternalDrawTargetLink(ACanvas, pt1, pt2, pt3, pt4, pt5, pt6, AColor);
|
|
end;
|
|
|
|
class procedure TdxNavBarCustomDropTargetLinkPainter.InternalDrawTargetLink(
|
|
ACanvas: TCanvas; pt1, pt2, pt3, pt4, pt5, pt6: TPoint; AColor: TColor);
|
|
begin
|
|
ACanvas.Brush.Style := bsSolid;
|
|
ACanvas.Brush.Color := AColor;
|
|
ACanvas.Pen.Style := psSolid;
|
|
ACanvas.Pen.Color := AColor;
|
|
ACanvas.Polygon([pt1, pt2, pt3, pt1, pt4, pt5, pt6, pt4]);
|
|
end;
|
|
|
|
{ TdxNavBarCustomDropTargetGroupPainter }
|
|
|
|
class procedure TdxNavBarCustomDropTargetGroupPainter.DrawTargetGroup(ACanvas: TCanvas;
|
|
ARect: TRect; AColor1, AColor2: TColor; AAlphaBlend1, AAlphaBlend2: Byte;
|
|
AGradientMode: TdxBarStyleGradientMode);
|
|
begin
|
|
InternalDrawTargetGroup(ACanvas, ARect, AColor1, AColor2,
|
|
AAlphaBlend1, AAlphaBlend2, AGradientMode);
|
|
end;
|
|
|
|
class procedure TdxNavBarCustomDropTargetGroupPainter.InternalDrawTargetGroup(
|
|
ACanvas: TCanvas; ARect: TRect; AColor1, AColor2: TColor; AAlphaBlend1,
|
|
AAlphaBlend2: Byte; AGradientMode: TdxBarStyleGradientMode);
|
|
begin
|
|
if IsGdiPlusAvailable then
|
|
TdxNavBarCustomBackgroundPainter.DrawBackground(ACanvas, ARect, nil, False, clBlack,
|
|
AColor1, AColor2, AAlphaBlend1, AAlphaBlend2, AGradientMode)
|
|
else
|
|
with TcxCanvas.Create(ACanvas) do
|
|
begin
|
|
DrawComplexFrame(ARect, AColor1, AColor1, cxBordersAll, 2);
|
|
Free;
|
|
end;
|
|
end;
|
|
|
|
{ TdxNavBarElementPainter }
|
|
|
|
procedure TdxNavBarElementPainter.DrawBackground;
|
|
begin
|
|
with ViewInfo do
|
|
BackgroundPainterClass.DrawBackground(Canvas, NavBar.ClientRect, BgImage, True, NavBar.Color,
|
|
BgBackColor, BgBackColor2, BgAlphaBlend, BgAlphaBlend2,
|
|
BgGradientMode);
|
|
end;
|
|
|
|
procedure TdxNavBarElementPainter.DrawDropTargetGroupSelection;
|
|
var
|
|
AGroupViewInfo: TdxNavBarGroupViewInfo;
|
|
begin
|
|
if not NavBar.EnableDragging or (NavBar.SourceGroup = nil) or
|
|
not (fAllowDropGroup in NavBar.DragDropFlags) then exit;
|
|
AGroupViewInfo := ViewInfo.GetGroupViewInfoAtCaptionPos(NavBar.TargetPoint);
|
|
if AGroupViewInfo = nil then
|
|
AGroupViewInfo := ViewInfo.GetGroupViewInfoAtItemsPos(NavBar.TargetPoint);
|
|
if (AGroupViewInfo <> nil) and (AGroupViewInfo.Group <> NavBar.SourceGroup) then
|
|
with ViewInfo do
|
|
DropTargetGroupPainterClass.DrawTargetGroup(Canvas, AGroupViewInfo.CaptionRect,
|
|
DragDropGroupTargetBackColor, DragDropGroupTargetBackColor2,
|
|
DragDropGroupTargetAlphaBlend, DragDropGroupTargetAlphaBlend2,
|
|
DragDropGroupTargetGradient);
|
|
end;
|
|
|
|
procedure TdxNavBarElementPainter.DrawDropTargetLinkSelection;
|
|
var
|
|
Item1, Item2: TdxNavBarLinkViewInfo;
|
|
ItemGroup: TdxNavBarGroupViewInfo;
|
|
begin
|
|
if not NavBar.EnableDragging or ((NavBar.SourceLink = nil) and (NavBar.SourceItem = nil)) or
|
|
not (fAllowDropLink in NavBar.DragDropFlags) then exit;
|
|
ViewInfo.GetViewInfoAtDragPosition(NavBar.TargetPoint, ItemGroup, Item1, Item2);
|
|
if (Item1 <> nil) and (NavBar.SourceItem = nil) and (Item1.Link = NavBar.SourceLink) then exit;
|
|
if (Item2 <> nil) and (NavBar.SourceItem = nil) and (Item2.Link = NavBar.SourceLink) then exit;
|
|
if (Item1 <> nil) or (Item2 <> nil) then
|
|
DoDrawDropTargetLinkSelection(ItemGroup, Item1, Item2)
|
|
end;
|
|
|
|
procedure TdxNavBarElementPainter.DrawGroupBackground(AGroupViewInfo: TdxNavBarGroupViewInfo);
|
|
begin
|
|
with AGroupViewInfo do
|
|
GroupBackgroundPainterClass.DrawBackground(Canvas, ItemsRect, BgImage,
|
|
BgBackColor, BgBackColor2, BgAlphaBlend, BgAlphaBlend2, BgGradientMode);
|
|
end;
|
|
|
|
procedure TdxNavBarElementPainter.DrawGroupBorder(AGroupViewInfo: TdxNavBarGroupViewInfo);
|
|
begin
|
|
if not TdxNavBarViewInfoAccess(ViewInfo).IsGroupActive(AGroupViewInfo.Group) then exit;
|
|
with AGroupViewInfo do
|
|
GroupBorderPainterClass.DrawBorder(Canvas, ItemsRect, BorderColor, IsCaptionVisible);
|
|
end;
|
|
|
|
procedure TdxNavBarElementPainter.DrawGroupCaptionButton(AGroupViewInfo: TdxNavBarGroupViewInfo);
|
|
begin
|
|
with AGroupViewInfo do
|
|
ButtonPainterClass.DrawButton(Canvas, CaptionRect, CaptionImage,
|
|
CaptionBackColor, CaptionBackColor2, CaptionAlphaBlend, CaptionAlphaBlend2,
|
|
CaptionGradientMode, CaptionBorderColor, State);
|
|
end;
|
|
|
|
procedure TdxNavBarElementPainter.DrawGroupCaptionImage(AGroupViewInfo: TdxNavBarGroupViewInfo);
|
|
begin
|
|
with AGroupViewInfo do
|
|
ImagePainterClass.DrawImage(Canvas, ImageList, ImageIndex, CaptionImageRect);
|
|
end;
|
|
|
|
procedure TdxNavBarElementPainter.DrawGroupCaptionSign(AGroupViewInfo: TdxNavBarGroupViewInfo);
|
|
begin
|
|
if AGroupViewInfo.Group.ShowExpandButton then
|
|
with AGroupViewInfo do
|
|
SignPainterClass.DrawSign(Canvas, CaptionSignRect, CaptionSignColor,
|
|
CaptionBackColor, CaptionBackColor2, State);
|
|
end;
|
|
|
|
procedure TdxNavBarElementPainter.DrawGroupControl(ACanvas: TCanvas; ARect: TRect; AGroupViewInfo: TdxNavBarGroupViewInfo);
|
|
begin
|
|
with AGroupViewInfo do
|
|
GroupBackgroundPainterClass.DrawBackground(ACanvas, ARect, ControlImage,
|
|
ControlBackColor, ControlBackColor2, ControlAlphaBlend, ControlAlphaBlend2,
|
|
ControlGradientMode);
|
|
end;
|
|
|
|
procedure TdxNavBarElementPainter.DrawItemImage(ALinkViewInfo: TdxNavBarLinkViewInfo);
|
|
begin
|
|
with TdxNavBarLinkViewInfoAccess(ALinkViewInfo) do
|
|
begin
|
|
ImagePainterClass.DrawImage(Canvas, ImageList, ImageIndex, ImageRect,
|
|
IsEnabled or UseDisabledImages);
|
|
if IsRectEmpty(CaptionRect) and Link.IAccessibilityHelper.IsFocused then
|
|
DrawSolidFocusRect(cxRectInflate(ImageRect, 1, 1), FontColor);
|
|
end;
|
|
end;
|
|
|
|
procedure TdxNavBarElementPainter.DrawItemSelection(ALinkViewInfo: TdxNavBarLinkViewInfo);
|
|
begin
|
|
with ALinkViewInfo do
|
|
if Item.Enabled then
|
|
SelectionPainterClass.DrawSelection(Canvas, SelectionRect, GroupViewInfo.BgBackColor, State);
|
|
end;
|
|
|
|
procedure TdxNavBarElementPainter.DrawBottomScrollButton;
|
|
begin
|
|
with ViewInfo do
|
|
begin
|
|
ScrollButtonsPainterClass.DrawBottomButton(Canvas, BottomScrollButtonRect,
|
|
ButtonPainterClass, BottomScrollButtonBackColor, BottomScrollButtonBackColor2,
|
|
BottomScrollButtonAlphaBlend, BottomScrollButtonAlphaBlend2, BottomScrollButtonGradientMode,
|
|
BorderColor, BottomScrollButtonState);
|
|
with BottomScrollButtonRect do
|
|
ExcludeClipRect(Canvas.Handle, Left, Top, Right, Bottom);
|
|
end;
|
|
end;
|
|
|
|
procedure TdxNavBarElementPainter.DrawTopScrollButton;
|
|
begin
|
|
with ViewInfo do
|
|
begin
|
|
ScrollButtonsPainterClass.DrawTopButton(Canvas, TopScrollButtonRect,
|
|
ButtonPainterClass, TopScrollButtonBackColor, TopScrollButtonBackColor2,
|
|
TopScrollButtonAlphaBlend, TopScrollButtonAlphaBlend2, TopScrollButtonGradientMode,
|
|
BorderColor, TopScrollButtonState);
|
|
with TopScrollButtonRect do
|
|
ExcludeClipRect(Canvas.Handle, Left, Top, Right, Bottom);
|
|
end;
|
|
end;
|
|
|
|
procedure TdxNavBarElementPainter.DoDrawDropTargetLinkSelection(AItemGroup: TdxNavBarGroupViewInfo;
|
|
AItem1, AItem2: TdxNavBarLinkViewInfo);
|
|
var
|
|
lpt1, lpt2, lapt1, lapt2, lapt3, rapt1, rapt2, rapt3: TPoint;
|
|
AViewInfoAccess: TdxNavBarViewInfoAccess;
|
|
begin
|
|
if AItem1 <> nil then
|
|
begin
|
|
if not AItemGroup.IsViewAsIconView then
|
|
lpt1 := cxRectLeftBottom(AItem1.Rect)
|
|
else
|
|
lpt1 := cxRectRightTop(AItem1.Rect);
|
|
lpt2 := AItem1.Rect.BottomRight;
|
|
end
|
|
else
|
|
begin
|
|
lpt1 := AItem2.Rect.TopLeft;
|
|
if not AItemGroup.IsViewAsIconView then
|
|
lpt2 := cxRectRightTop(AItem2.Rect)
|
|
else
|
|
lpt2 := cxRectLeftBottom(AItem2.Rect);
|
|
end;
|
|
|
|
AViewInfoAccess := TdxNavBarViewInfoAccess(ViewInfo);
|
|
if PtInRect(cxRectInflate(AItemGroup.ItemsRect, 1, 1), lpt1) and PtInRect(cxRectInflate(AItemGroup.ItemsRect, 1, 1), lpt2) then
|
|
begin
|
|
lapt1 := lpt1;
|
|
lapt2 := lpt1;
|
|
lapt3 := lpt1;
|
|
rapt1 := lpt2;
|
|
rapt2 := lpt2;
|
|
rapt3 := lpt2;
|
|
if not AItemGroup.IsViewAsIconView then
|
|
begin
|
|
lapt1.x := lpt1.x + AViewInfoAccess.GetDragArrowWidth;
|
|
if AItem1 <> nil then
|
|
lapt2.y := lpt1.y - AViewInfoAccess.GetDragArrowHeight div 2;
|
|
if AItem2 <> nil then
|
|
lapt3.y := lpt1.y + AViewInfoAccess.GetDragArrowHeight div 2;
|
|
rapt1.x := lapt1.x + cxRectWidth(AItemGroup.Rect) - 1 - 2 * AViewInfoAccess.GetDragArrowWidth;
|
|
rapt2.x := lapt2.x + cxRectWidth(AItemGroup.Rect) - 1;
|
|
rapt2.y := lapt2.y;
|
|
rapt3.x := lapt3.x + cxRectWidth(AItemGroup.Rect) - 1;
|
|
rapt3.y := lapt3.y;
|
|
end;
|
|
DropTargetLinkPainterClass.DrawTargetLink(Canvas, lapt1, lapt2, lapt3, rapt1, rapt2, rapt3,
|
|
ViewInfo.DragDropItemTargetBackColor);
|
|
end;
|
|
end;
|
|
|
|
procedure TdxNavBarElementPainter.DoDrawHint(ACanvas: TCanvas; const ARect: TRect);
|
|
begin
|
|
with ViewInfo do
|
|
TdxNavBarCustomHintPainter.DrawHint(ACanvas, ARect,
|
|
ViewInfo.HintText, HintImage, HintBackColor, HintBackColor2,
|
|
HintAlphaBlend, HintAlphaBlend2, HintGradientMode, HintFont);
|
|
end;
|
|
|
|
class function TdxNavBarElementPainter.BackgroundPainterClass: TdxNavBarCustomBackgroundPainterClass;
|
|
begin
|
|
Result := TdxNavBarCustomBackgroundPainter;
|
|
end;
|
|
|
|
class function TdxNavBarElementPainter.ButtonPainterClass: TdxNavBarCustomButtonPainterClass;
|
|
begin
|
|
Result := TdxNavBarCustomButtonPainter;
|
|
end;
|
|
|
|
class function TdxNavBarElementPainter.DropTargetGroupPainterClass: TdxNavBarCustomDropTargetGroupPainterClass;
|
|
begin
|
|
Result := TdxNavBarCustomDropTargetGroupPainter;
|
|
end;
|
|
|
|
class function TdxNavBarElementPainter.DropTargetLinkPainterClass: TdxNavBarCustomDropTargetLinkPainterClass;
|
|
begin
|
|
Result := TdxNavBarCustomDropTargetLinkPainter;
|
|
end;
|
|
|
|
class function TdxNavBarElementPainter.GroupBackgroundPainterClass: TdxNavBarCustomGroupBackgroundPainterClass;
|
|
begin
|
|
Result := TdxNavBarCustomGroupBackgroundPainter;
|
|
end;
|
|
|
|
class function TdxNavBarElementPainter.GroupBorderPainterClass: TdxNavBarCustomGroupBorderPainterClass;
|
|
begin
|
|
Result := TdxNavBarCustomGroupBorderPainter;
|
|
end;
|
|
|
|
class function TdxNavBarElementPainter.ImagePainterClass: TdxNavBarCustomImagePainterClass;
|
|
begin
|
|
Result := TdxNavBarCustomImagePainter;
|
|
end;
|
|
|
|
class function TdxNavBarElementPainter.ScrollButtonsPainterClass: TdxNavBarCustomScrollButtonsPainterClass;
|
|
begin
|
|
Result := TdxNavBarCustomScrollButtonsPainter;
|
|
end;
|
|
|
|
class function TdxNavBarElementPainter.SelectionPainterClass: TdxNavBarCustomSelectionPainterClass;
|
|
begin
|
|
Result := TdxNavBarCustomSelectionPainter;
|
|
end;
|
|
|
|
class function TdxNavBarElementPainter.SignPainterClass: TdxNavBarCustomSignPainterClass;
|
|
begin
|
|
Result := TdxNavBarCustomSignPainter;
|
|
end;
|
|
|
|
end.
|