diff --git a/components/jvcllaz/examples/JvTabBar_PageList/JvTabBarDemo_PageList.lpi b/components/jvcllaz/examples/JvTabBar_PageList/JvTabBarDemo_PageList.lpi
index 558d61ec5..169299a85 100644
--- a/components/jvcllaz/examples/JvTabBar_PageList/JvTabBarDemo_PageList.lpi
+++ b/components/jvcllaz/examples/JvTabBar_PageList/JvTabBarDemo_PageList.lpi
@@ -57,7 +57,7 @@
-
+
diff --git a/components/jvcllaz/examples/JvTabBar_PageList/main.lfm b/components/jvcllaz/examples/JvTabBar_PageList/main.lfm
index 62bab6d3a..fe9581f1c 100644
--- a/components/jvcllaz/examples/JvTabBar_PageList/main.lfm
+++ b/components/jvcllaz/examples/JvTabBar_PageList/main.lfm
@@ -788,6 +788,7 @@ object MainForm: TMainForm
end
object ImageList1: TImageList
Height = 24
+ Scaled = True
Width = 24
left = 493
top = 150
@@ -836,5 +837,155 @@ object MainForm: TMainForm
C41A1E1E86ECEC6C49D856E3CBEBC1F291C7CE03E563389D4E496AFEF5D69BFA
A60AB7FFC7FBFB3D9EF13F63520965
}
+ BitmapAdv = {
+ 4C69020000004C7A040000002400000024000000570700000000000078DAED9B
+ 7D4C13671CC78BBC487DD9E6B219C3A6738912D1E15C18BD2263B298F9C79C84
+ 18F0AF69B69954E9159C9BD9A69BC2E6A6222051E8E4AD99BA6922A09BA0288E
+ F600D14D44790D03A310793102CE1714C2FB6FCF735068CB5D7B072D77E2FD92
+ 6FB83EF7BC7CEEF772CF5D536432C944684EB2A9410B64533FF244C7CEF46721
+ 59DC562D9AE2FC77E7DAB5255D735E0F50A0B6A9B6B8727591606F5D488B8493
+ 09DB61D6AC22387204202EAE137C7DB3BAE42FFB2E474BCA91A658E3B1A70D0C
+ 0C404B4B0B24A7A4404C742644473F86952B1BC0D3B31CDCE5FBDA653367BE32
+ E42787F36096A6E66628BA7C196ED7D541EEC58B1012BAF7FEC285C5209F9635
+ E0E2F2C11E7777F737D0B2D31DCD83594AEFDC81DDC78E417E4101CD5372FD3A
+ A4E974B0C45BD5EAE2EA1FEFEAEA4AC8E5F2798EE631B228AAAA602F45C1D1AC
+ 2C3883949D9D0D3A9DEE899FBFFF0F2EEEEE016E6E6E8BD092BCE3E5E3E36353
+ A62C6588C5B7BC1CE24B4B21F6FE7D5875EF1E7C959000BB76ED04FF152B760E
+ B12C46CBCD76643E0FB3545440DC8D1B1083F2F863D43EE5DC3970D6EBE16BF2
+ 13606071B67693182B8F698C62AF5D83FD432C4E393920436CEA5F7E8103DB37
+ 02038B135F1E2E3132B2C4219698B6B6411694333294C36AAD162E151541DA4F
+ 24F061198B7F4C6384F3657F6BEB084B490990432CD5D5D570327E1BF061E1CB
+ 63992FFB51DE0EC708F985443132B2E07B62D6E1EF80EFBE652B5EA62CE50D0D
+ 237E3165B1F00B66E9ECEC84F3A9BB80EF1ECAD53FDDDDDDB0FE900E7666FE39
+ 12A333675859FAFAFAE87D8CEF26CC8507FBE682BE100AAB9F8236230F56F7F4
+ 80D3E9D32043B91C9198C8C882C7E0B9EDC163595749494970489709650DE89A
+ CB9EC2A63D99E0545C0C11E89E87594CFB1A59B0D98BC7D23A3A3A20F2C79F21
+ EB9F1688CEA887E0AD47E0FB84447ADF64F28BD11CC57321371762636321E2CB
+ 1D70EC4406BD5F16A358D5D6D6422BCA2526167BF258D657575717B4A075F1FA
+ 959595505353030D8D8D70F0E041B3985A9AA3FCD383F2B7BDBD1DDAD05ED98A
+ EEC50F1F3DA26388DBFBFBFB59C7398A67ACE6A8FA3255727232A73D6E32FB47
+ ECF1628B1153BB142F8947681E474AFA8A4732C924139BA9542A109BC462A2E7
+ D9FD8E3062E3890D14466C3CDA20ABBAF5BB0A52A844D877E528FDF7F66F2A9B
+ 6338898D47B79E516DC7D510525F0C4E300032D4CD28FC39B4EE2A7D9E6D2C27
+ B1F19CD08C52DBA96F61617BAB1987A5F079DC8F693C27B1F1FCB16394429A2B
+ ADB218B5AEA982713C27B1F19C8F36D3AD82641413E0C483FBD5E5278D9A8393
+ D878F20F9B29A5369F138B516935D4A83938898DE7EA0933ED692CE3C583FB5B
+ CEC1496C3C1567CD94DA54CECF3F8DE5A3E6E024369E9B97CC74ABFE1ABFFC41
+ FD2DE7E024161EAAF4F82805DECC01593D6553B81FD3782E62E399113D4310B1
+ F1CC4D9C2B88D878BC7FF516446C3C01190182888D2728274810B1F16C28D820
+ 88D87822AE470822369EC89A4841F4CC3CCF8B84474C92DED025934C32315870
+ 70F093356BD6C04409AF678D07F7B97BF7EE8409AFF7ACF14CB4B8FA071FDB32
+ 2E7D6C8D9F0C3CE8949998782CFBB0C9748C142F71C7ABAAAA6A52FA47AA2F29
+ 5E527D3D3FF1128A476CCFABE3314AA30C349004509F06BA8BE15D40281E4A1D
+ 388352FB2DB05CD794272A4A36A540A378B3E873FF996CF35CD9EA27CF23159E
+ 94DA77CE5838F49BFD5EA348C280D7446A47EAA634C4164B1E4398DF0AF4B70E
+ E92952BF41439C35E54A8F5AE286E68947E73A913A06FB280FF0E5C90B2396EA
+ 35C436EA8B652F0DFA49B109CDD57351E3EF61C6431245056AA5D7601FDF65E8
+ 7333A5266286AF8B54A4A2B6C6BC7045002A2E27CC8A78FCC71D3714177C6D7A
+ 35B1CA94C7F8D96806521981DAFFC3C77F6DF19947FB234CB17ABCEBA787863A
+ 531AC546E4FF5368CE7F0DA4A28BF6875AB9D62C7F86FC37E20FDFF771FBA5B0
+ F766E9358A5074DC8B63365E1EC4A1C5798162F65981C6CF3B5BE5338DCE010B
+ 1E9CA766E3902F507B1F6640BE5A87AF03E7FBB87948E28141ADD8609ADF4CFE
+ 31842BDE36F78F621F6AAFC5C7F83A06734C49D881A781522B0FE36BA36B9E54
+ A6E3EB1EC5431254EEE6E5B3E91A20890F712D9AD5A19A28D4934405A5F15B44
+ E794CAE7455C93FCEF3B44C8509D3F407A8CE346D7AB058F9E54860DD5FA435C
+ 7FB8B64CE353181EF02A6A3F873480F39CBE6F90CA6FC6E2A3DC6D4BA7E78513
+ 8B73C28917ACF5C3E7A9CDEFBE85AF9DAD0FE6C2F1B3D64732664B494979827F
+ D3ED68A17558CFA5A6A60E1879F067FCBF1D8E96F177EC4C86CF09C9535F5F4F
+ CB16CF62F40A6094A37830C7FCF9F3691999D87864E9558CB2174F6F6F2F7879
+ 798156ABA5858F71DB58793C3C3C7889C93F4D4D4DC371321E0BE59FB1E67354
+ 549443F2C79A84E0C9CEBFCC28BE3CF6A83B7BF2D823AFC6CB63AAF1D4DD64F5
+ 8F98F359AAAFE7A3BE26B37FA4FA9AF8E743BE3C8E7EFEB1370FDF67C2C9E69F
+ E7ADBEECF5BC6AAFFDCB5ECFF3F6BA3FF37DDF71F4FEC5F77D904DF6F40F9FF7
+ 65B17D9F2086EF5BC4F67D9498EC7F08F3F2454C7A0400000030000000300000
+ 00F10A00000000000078DAED9D0B5015D719C741AFAFF898441D131D93D6198D
+ 0F6CD421DC7B4D6D478C334CAAC44E1C4CDA69896D2C817BC1C4C7686350F081
+ 623BE018B523356626828A170D2A5210810B828009A2C3C388150BA2B49AF840
+ 1441E07E3DE7B84B96651F775FDEBDBADFCC7FD8C7D9B3BF73EEFF7C67772FB3
+ D7C7C7082304C397435EC43E7C581FD31717868F5AB410ADF7473221F5F18276
+ 1076DF3E298D3366007CFC719DEBB571F343D1F6C1543BFAEAB80DDDEC0B1600
+ 6464002424B4426060A96BF8CB7396A0FDC39006506D108C937B63E0692AFBCB
+ 1848DFF519C47CBE1282831D70EF1E405C5C2BCC9BD70466F36578F5D5E35DFD
+ 5EF8F547541BFAEB891FB31FFDC71A48F9720724A7A4C0D163C760F19F0EDFA7
+ D9C78DAB8021430AC0D7B430D367F0E097292FB9C5AF75B85C2E686E6E86B4C3
+ 87E1E2F7DF434B4B0B9CCCC981430E074C9BFEF7E69FD87F5FDEAF5FBF193E83
+ 06BD467D061EE7C7EC7710FB8EAFBE828C1327E0CA952BA40DF5F5F570E0E041
+ 48DCB6CD3562C49A165FD3FB15A68103E7E8899F669F8CFAFA0FE7CF43417131
+ 14161642595919EC3F7000724E9D8284C444D7DB73E79E320D1810641A346866
+ FFFEFD2721FFBCE269FF74B39F3C0951683D11FD8D46DC47B2B2E0606A2AA4A5
+ A541FAD1A3AE90458BBEA1D87F89D8FD50DF8F953A7ED9E1EFEF2F49EEB0EF7A
+ F408FE8C96C71714C0D69D5FC0A6B84D306FFEFC4C06FB548AFD45A9F9534D7E
+ 367B42767637FB44B4DD1779C674341D3EFA701188B0FB3E6DFF60F6BBF7EFC3
+ 14E47736FB24CC8EBCE373F52A8C8D5E0D9B5784821276B5F9B9D877D2EC68A2
+ A2D95FDFBA95B06FFB7C09286157E21F3E76BFDC5CC2FE37942769F689981D79
+ 06B34FDABC99E47DCCFECF8D3650C2AE167F373B5FBFA375CC3E11F53B663F53
+ 5242D8F7272C0725EC6AF847889DD9EF93E3E2BAD9ABABAB09FB911DAB4109BB
+ 527E3ACFF821469223317B6B6BCF7EAFAB83C91B37F6606FBC7E9DB09F488A06
+ A5D7C9EEFA47323B1EABE83A610A07FBDDBB77097BD69E75A0F41A5F0E3F667F
+ 843C62DDB79FB0C7A7A773B2FF821AAB6CF6B6B636C28EAF4795DE48C8F14F57
+ 57171CCFCA831365FF851DFBB220F1F66DC2FE3A62F345731666F75BBF9EB097
+ 9496F662EFECEC24ECF8BC4F9B1FF73D3E7FC2EE5428A96D85EFEA5AE1836359
+ 3001F1F9666612F6A9B1B1DDFD5E5353D38B1DD7419F572B7EBEBC495FC7A766
+ 5F800BD73AA1B8B61DF6396FC1BB6BF610F6691B361076F6714C761C9EE2C7DE
+ 493DE480B4ECB3843DA5F0366C3AD4008BD66543407474B767D8C731D99F063F
+ 5F74747440F4DAB59089BCB26E7B3AD8E3332074C576D8BD3719F29D4E283B7B
+ 162E5EBCC8E91966788AFFF1E3C7B03B2909C22322602FBA9F2A3E73064E1715
+ 913EAFA8A880DADA5AB8D1D484EECBEFF1B27BC23F4C7EECFFEB376EC0A54B97
+ A0B2B212AAAAAA0877434303E778E10A4FF163FF3C78F0007E443913B7E15A63
+ 23E9EF5B3FFC40FA5C6CDEF3B47FF0F86D6F6F276DC09F03165EC6F319FE6C68
+ BFF0F5BBA7F9D50A4FE54F3E7F48BD5F30F89F6DFF3CABFE97BBDFE037FC6FF0
+ 1BFC9EFEFE8BADE79DDF08238C30C208238C503FC2C2C2C090E7E56DF1CCF26F
+ 98A66F89F1C7BFA56F89F16F9BAB6F89F1EF5AA06F89F1EFF99D5BAA3CB20A96
+ 566781DF9D4618DCD14684973FA9CA82AAC3ABDCAE47B2C4F8BF5E22A8B69470
+ 88B8E4843E2E17F8A0E25CEAEBEA02FBA57C684F0E17AD4FB2C4F85397F2AACD
+ B11C026F5EE6E5666BCEFF6AA1DDB14CB04EC912E3FFE6335E855F2D739B9D56
+ 645D89609D9225C67F6223A72A0B93043DC3EF25175417EEE6AD57B2C4F87312
+ 39B5B4A142323BAD65F5E778EB952C317EDC571C9AF2F08E6CFEA90F6EF3D62B
+ 5962FCA5FB3835A4B34336FFD0CEC7BCF54A9618FFB9239C1AAA807F18E6E7A9
+ 57B2C4F8D1FCC3A5296D2DF2FDF3A885B75EC912E3BF7C9A539FDCBD2E9B7FF9
+ 9DEBBCF54A96187F7D39A7AA6ED4405F90913FD1313537AA79EB952C11FE90D4
+ DFF26ABC6321F8A68548D204748C509D5225C63F74EB505D4B8C7FF4F6D1BA96
+ 18FF84A409BA9618FFF47DD3752D31FE598E59BA96187FD0F1205D4B8C7F61CE
+ 425D4B8C3FF474A8AE25C66FFBD6A66B89F1AFAA5CA56B89F1AFBFBC5ED77AE6
+ 9FDF7A29BF21CFC8F806D008238C30C208233C1FC1C1C14548A0331549E0073D
+ 4A2A7F5353932EF4BCF27BBB7F9E15FFD3EBEE86D4F2EED667F03F095484537C
+ FC7CE5C564F01BFE7F1EFD6FF01BFE37F2BF91FF0DFF1BF9DFE037FCEF297E2F
+ BE7FF4EAE7575A445EA43924DF6E01A7CDBAD81B9F491AFC063F5F3823CD6F3A
+ ED163BE2DB9C6F332FCB8B9A6916E24789C437D7660974DACC31F81874EC078E
+ 583FDEF7203BC3FC47E2E3F2EDD6385476A3D36EFEB02862D64B6AB0A3F33B31
+ 17D2A3FC484B13FAEBA2D6D771F2DBAD4B901C54991F913AF1729EDD52E9B405
+ BCD2ABDD36EB5FD0FE16AAFC4D7A392FD21AAB0ABFCD528ACE114CF79F33DCFA
+ 73547F1DE6724659C6B2F991FE8DFA301F9723E56DB387A06DDBA97D993DD8ED
+ 963F526DFE3637C2F206BD3DD7161080F8DF51839FEB7347E7FDF4C979CDF339
+ F81B31732F8FD82D25647FC49B13F17A4698FF0BF976F32DB4ED9AF3D3E92F3E
+ 8D71703ACC7F746E94F95788651B61B1596C6CFE3CBB399E7B7C5BA398E31BB7
+ 9DCB876A47BE3DE0ED3CBB35039DE71E753EAC2ECAA351BDF8919F39EB89B4BE
+ 4B8E8D34AF7AC26F5DFDA40FACEF699777ACEF53E3B5DA69B3AC408C73F2EC6F
+ FD0CADFF868F9F2F7FA2BC15CA3C86CA4DA096CF79724F35F628DBCFF4B8E3E2
+ A7FBB7779E316F62F25279077D96D6A51AF23F40FA8E63FC1EE4E5B75B8A81F5
+ 3E61E7E2D903A9DCDB4CF70595C7706E3DE78C9D6DD288FF3C523B9E8B482E0A
+ 09E99B176959893904F8DB11EBAE932BDF20BF3B80E721C67CB0AEE798B0ECA2
+ E686349C1BBAF327CA1178BC28E68F340721FFB45163A011E921523D620DE7F7
+ 3FF6B5B5012D77205D457A4CB1EF65F7F3BFA2DE1980DAF0352327FCE7A7BEB1
+ AC54650CDB668ECFB359FE8AE7207C0D8173359E47312FDED75D0ECD65641BF2
+ 052983CB465A77E079D41961B10AF65384C51FE5E2B5E81C3BF16784F30478D7
+ 6F08196184E69194945484045EA2660E7EF026F1F1E3F71F0B09BF435848F8DD
+ C342C2EFACE6127D7EB150C2AF153B1F3FBD4F0D7E2DD9B9F8F131F8D9555050
+ 107977B41CFE29D5D0435AB1633E263FCD4E3F9366B6416D7E35D8D9FC515151
+ 847BD4A8514478196F93CAEFE3A816945AEC6CFE9B376F4260602079EF3B165E
+ C6DBA4F0E3BE75977FCC9831B2C4C7AF34FFD0DEF0467EA6B7E5F8478A67B8F8
+ 95CE5F5C6334363696484DBFEB8D5F093B933FA3E08CA0D4E467E757B9ECADAD
+ AD9AF1634E25FCEEB06BC54F73D2FC6C898D6F77D9B5E067F6B3527EA11CAA05
+ 3FDB276CFFD0DED0233F576E61F233BD2DC73F4CCF68E11F217EA539928F5D0F
+ FC4AD83DC5CFCE9F72D91F3E7CA8193FE654C2EF0EBB56FC34A7DCFCE92EBB16
+ FCCC7E56CA2F943FB5E067FB84ED1FDA1B7AE4E7CA2D4C7EA6B7E5F887E9192D
+ FC2327BF481DAB7AE457C28E7F1F4C0B7E77AF0F94B27B925F6C7C0A8D599ADD
+ 53FCEEE4173E7E26BB16FC72F38B14CF70F12BBD7FE7BA16A3F3A79A7ED78A9F
+ 2BB730F9B56067F22B7D7E25C4CF6665E757B9EC5CFCF8B722B9963DC12FC6DE
+ D2D2D283BFBCBC1C468E1C09C9C9C9E0703860C48811505A5AAA985FEAF59BBB
+ EC6CFE2D5BB69067E6269389082FE36D72F8713FCBE5A719857229173F798D7C
+ 7C7CF7F717F85C72FC233656B5E4C7111313432467FCBA9367DCE5E7F30C536A
+ E61FAD72241FBB9AFC5EFCFDB557FFFF80119E89FF031F73DEA7
+ }
end
end
diff --git a/components/jvcllaz/run/JvPageComps/jvtabbar.pas b/components/jvcllaz/run/JvPageComps/jvtabbar.pas
index d67ad4de2..d52f156f1 100644
--- a/components/jvcllaz/run/JvPageComps/jvtabbar.pas
+++ b/components/jvcllaz/run/JvPageComps/jvtabbar.pas
@@ -153,7 +153,8 @@ type
function GetTabBar(ATab: TJvTabBarItem): TJvCustomTabBar;
function GetTabSize(Canvas: TCanvas; Tab: TJvTabBarItem): TSize; virtual; abstract;
function Options: TJvTabBarPainterOptions; virtual; abstract;
- public
+ function Scale(ABar: TJvCustomTabBar; n: Integer): Integer;
+public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;
@@ -314,12 +315,6 @@ type
procedure SetOrientation(const Value: TJvTabBarOrientation);
procedure TimerExpired(Sender: TObject);
procedure SetHeight(AValue: Integer);
- {$IF LCL_FullVersion >= 1090000}
- private
- procedure SetImagesWidth(const AValue: Integer);
- protected
- property ImagesWidth: Integer read FImagesWidth write SetImagesWidth default 0;
-{$ENDIF}
protected
procedure CalcTabsRects;
procedure CalculatePreferredSize(var PreferredWidth, PreferredHeight: integer;
@@ -371,6 +366,9 @@ type
procedure DoAutoAdjustLayout(const AMode: TLayoutAdjustmentPolicy;
const AXProportion, AYProportion: Double); override;
{$IFEND}
+ {$IF LCL_FullVersion >= 1090000}
+ procedure SetImagesWidth(const AValue: Integer);
+ {$ENDIF}
public
constructor Create(AOwner: TComponent); override;
@@ -389,6 +387,9 @@ type
property PageList: TCustomControl read FPageList write SetPageList;
property Painter: TJvTabBarPainter read FPainter write SetPainter;
property Images: TCustomImageList read FImages write SetImages;
+ {$IF LCL_FullVersion >= 1090000}
+ property ImagesWidth: Integer read FImagesWidth write SetImagesWidth default 0;
+ {$ENDIF}
property Tabs: TJvTabBarItems read FTabs write SetTabs;
// Status
@@ -2226,11 +2227,27 @@ begin
end;
{$ELSE}
begin
- Result.CX := ATab.GetImages.Width;
- Result.CY := ATab.GetImages.Height;
+ if Assigned(ATab.GetImages) then
+ begin
+ Result.CX := ATab.GetImages.Width;
+ Result.CY := ATab.GetImages.Height;
+ end else
+ begin
+ Result.CX := 0;
+ Result.CY := 0;
+ end;
end;
{$ENDIF}
+function TJvTabBarPainter.Scale(ABar: TJvCustomTabBar; n: Integer): Integer;
+begin
+ {$IF LCL_FullVersion >= 1080000}
+ Result := ABar.Scale96ToFont(n);
+ {$ELSE}
+ Result := MulDiv(n, Screen.PixelsPerInch, 96);
+ {$IFEND}
+end;
+
procedure TJvTabBarPainter.GetScrollButtons(TabBar: TJvCustomTabBar; var LeftButton, RightButton: TRect);
begin
{ reserved for future use }
@@ -2366,18 +2383,21 @@ begin
end;
procedure TJvModernTabBarPainter.DrawDivider(Canvas: TCanvas; LeftTab: TJvTabBarItem; R: TRect);
+var
+ delta: Integer;
begin
if not LeftTab.Selected then
begin
if (LeftTab.TabBar.SelectedTab = nil) or
(LeftTab.GetNextVisible <> LeftTab.TabBar.SelectedTab) then
begin
+ delta := Scale(LeftTab.TabBar, 3);
with Canvas do
begin
Pen.Color := DividerColor;
Pen.Width := 1;
- MoveTo(R.Right - 1, R.Top + 3);
- LineTo(R.Right - 1, R.Bottom - 3);
+ MoveTo(R.Right - 1, R.Top + delta);
+ LineTo(R.Right - 1, R.Bottom - delta);
end;
end;
end;
@@ -2386,21 +2406,23 @@ end;
procedure TJvModernTabBarPainter.DrawMoveDivider(Canvas: TCanvas; Tab: TJvTabBarItem; MoveLeft: Boolean);
var
R: TRect;
+ delta: integer;
begin
+ delta := Scale(Tab.TabBar, 4);
with Canvas do
begin
R := Tab.DisplayRect;
- Inc(R.Top, 4);
- Dec(R.Bottom, 2);
+ Inc(R.Top, delta);
+ Dec(R.Bottom, delta div 2);
if MoveLeft then
begin
Dec(R.Left);
- R.Right := R.Left + 4
+ R.Right := R.Left + delta
end
else
begin
Dec(R.Right, 1);
- R.Left := R.Right - 4;
+ R.Left := R.Right - delta;
end;
Brush.Color := MoveDividerColor;
FillRect(R);
diff --git a/components/jvcllaz/run/JvPageComps/jvtabbarxppainter.pas b/components/jvcllaz/run/JvPageComps/jvtabbarxppainter.pas
index 412876ba8..0f1d4f703 100644
--- a/components/jvcllaz/run/JvPageComps/jvtabbarxppainter.pas
+++ b/components/jvcllaz/run/JvPageComps/jvtabbarxppainter.pas
@@ -53,7 +53,7 @@ type
implementation
uses
- Math, Themes;
+ LCLVersion, Math, Themes, imgList;
{ TJvTabBarXPPainter }
@@ -87,36 +87,55 @@ end;
procedure TJvTabBarXPPainter.DrawTab(Canvas: TCanvas; Tab: TJvTabBarItem;
R: TRect);
var
- TabDetails, ButtonDetails: TThemedElementDetails;
+ tabBar: TJvCustomTabBar;
+ tabDetails, buttonDetails: TThemedElementDetails;
CloseRect, TextRect: TRect;
+ imgsize: TSize;
+ x, y: Integer;
+ {$IF LCL_FullVersion >= 1090000}
+ imageRes: TScaledImageListResolution;
+ f: Double;
+ ppi: Integer;
+ {$IFEND}
begin
+ tabBar := GetTabBar(Tab);
+
if ThemeServices.ThemesEnabled then
begin
if Tab.Selected then
begin
- ButtonDetails := ThemeServices.GetElementDetails(twSmallCloseButtonNormal);
- TabDetails := ThemeServices.GetElementDetails(ttTabItemSelected);
+ buttonDetails := ThemeServices.GetElementDetails(twSmallCloseButtonNormal);
+ tabDetails := ThemeServices.GetElementDetails(ttTabItemSelected);
end
else if Tab.Hot then
begin
- ButtonDetails := ThemeServices.GetElementDetails(twSmallCloseButtonHot);
- TabDetails := ThemeServices.GetElementDetails(ttTabItemHot);
+ buttonDetails := ThemeServices.GetElementDetails(twSmallCloseButtonHot);
+ tabDetails := ThemeServices.GetElementDetails(ttTabItemHot);
end
else
begin
- ButtonDetails := ThemeServices.GetElementDetails(twSmallCloseButtonNormal);
- TabDetails := ThemeServices.GetElementDetails(ttTabItemNormal);
+ buttonDetails := ThemeServices.GetElementDetails(twSmallCloseButtonNormal);
+ tabDetails := ThemeServices.GetElementDetails(ttTabItemNormal);
end;
if Tab.Closing then
- ButtonDetails := ThemeServices.GetElementDetails(twSmallCloseButtonPushed);
- ThemeServices.DrawElement(Canvas.Handle, TabDetails, R);
+ buttonDetails := ThemeServices.GetElementDetails(twSmallCloseButtonPushed);
+ ThemeServices.DrawElement(Canvas.Handle, tabDetails, R);
if (Tab.ImageIndex <> -1) and (Tab.GetImages <> nil) then
begin
- Tab.GetImages.Draw(Canvas, R.Left + 4, R.Top + (R.Bottom - R.Top - Tab.GetImages.Height) div 2,
- Tab.ImageIndex, Tab.Enabled);
- Inc(R.Left, Tab.GetImages.Width + 2);
+ imgSize := GetRealImageSize(Tab);
+ x := R.Left + Scale(tabBar, 4);
+ y := (R.Top + R.Bottom - imgSize.CY) div 2;
+ {$IF LCL_FullVersion >= 1090000}
+ f := tabBar.GetCanvasScaleFactor;
+ ppi := GetPixelsPerInch;
+ imageRes := Tab.GetImages.ResolutionForPPI[tabBar.ImagesWidth, ppi, f];
+ imageRes.Draw(Canvas, x, y, Tab.ImageIndex, Tab.Enabled);
+ {$ELSE}
+ Tab.GetImages.Draw(Canvas, x, y, Tab.ImageIndex, Tab.Enabled);
+ {$IFEND}
+ Inc(R.Left, imgSize.CX + Scale(tabBar, 2));
end;
TextRect := R;
@@ -124,10 +143,10 @@ begin
if Tab.TabBar.CloseButton then
begin
CloseRect := GetCloseRect(Canvas, Tab, R);
- TextRect.Right := CloseRect.Left - 3;
+ TextRect.Right := CloseRect.Left - Scale(tabBar, 3);
end
else
- Dec(TextRect.Right, 3);
+ Dec(TextRect.Right, Scale(tabBar, 3));
Canvas.Brush.Style := bsClear;
ThemeServices.DrawText(Canvas.Handle, TabDetails, Tab.Caption, TextRect, DT_SINGLELINE or DT_VCENTER or DT_END_ELLIPSIS, 0);
@@ -140,13 +159,19 @@ end;
function TJvTabBarXPPainter.GetCloseRect(Canvas: TCanvas; Tab: TJvTabBarItem;
R: TRect): TRect;
+var
+ tabBar: TJvCustomTabBar;
+ p15: Integer;
begin
if ThemeServices.ThemesEnabled then
begin
- Result.Right := R.Right - 5;
- Result.Top := R.Top + ((R.Bottom div 2) - 8);
- Result.Left := Result.Right - 15;
- Result.Bottom := Result.Top + 15;
+ tabBar := GetTabBar(Tab);
+ p15 := Scale(tabBar, 15);
+// Result.Top := R.Top + R.Bottom div 2 - Scale(tabBar, 8);
+ Result.Top := (R.Top + R.Bottom - p15) div 2;
+ Result.Bottom := Result.Top + p15;
+ Result.Right := R.Right - Scale(tabBar, 5);
+ Result.Left := Result.Right - p15;
end
else
Result := inherited GetCloseRect(Canvas, Tab, R);
@@ -161,28 +186,31 @@ begin
end;
function TJvTabBarXPPainter.GetTabSize(Canvas: TCanvas; Tab: TJvTabBarItem): TSize;
+var
+ tabBar: TJvCustomTabBar;
begin
+ tabBar := GetTabBar(Tab);
if FixedTabSize > 0 then
begin
if ThemeServices.ThemesEnabled then
Result.cx := FixedTabSize
else
- Result.cx := Min(FixedTabSize + 40, Canvas.TextWidth(Tab.Caption) + 26);
+ Result.cx := Min(FixedTabSize + Scale(tabBar, 40), Canvas.TextWidth(Tab.Caption) + Scale(tabBar, 26));
end
else
begin
if ThemeServices.ThemesEnabled then
begin
- Result.cx := Canvas.TextWidth(Tab.Caption) + 16;
+ Result.cx := Canvas.TextWidth(Tab.Caption) + Scale(tabBar, 16);
if (Tab.ImageIndex <> -1) and (Tab.GetImages <> nil) then
- Inc(Result.cx, Tab.GetImages.Width + 2);
+ Inc(Result.cx, GetRealImageSize(Tab).CX + Scale(tabBar, 2));
if Tab.TabBar.CloseButton then
- Inc(Result.cx, 18);
+ Inc(Result.cx, Scale(tabBar, 18));
end
else
Result := inherited GetTabSize(Canvas, Tab);
end;
- Result.cy := Tab.TabBar.Height - 3;
+ Result.cy := Tab.TabBar.Height - Scale(tabBar, 3);
end;
procedure TJvTabBarXPPainter.SetFixedTabSize(const Value: Integer);