From f015d2e525e6778e047d3b8958e019e3ee0c35be Mon Sep 17 00:00:00 2001 From: wp Date: Wed, 31 Oct 2018 20:14:12 +0000 Subject: [PATCH] VirtualTreeView: Scaled sort arrows in header. git-svn-id: trunk@59410 - --- components/virtualtreeview/VirtualTrees.pas | 40 +++++++++++++------- components/virtualtreeview/VirtualTrees.res | Bin 86360 -> 89280 bytes 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/components/virtualtreeview/VirtualTrees.pas b/components/virtualtreeview/VirtualTrees.pas index 9bbac23a01..de0afe9727 100644 --- a/components/virtualtreeview/VirtualTrees.pas +++ b/components/virtualtreeview/VirtualTrees.pas @@ -226,14 +226,14 @@ const crVT_MOVEN = TCursor(73); crVT_MOVES = TCursor(74); - UtilityImageSize = 16; // Needed by descendants for hittests. - {$if defined(LCLCarbon) or defined(LCLCocoa)} ssCtrlOS = ssMeta; // Mac OS X fix {$else} ssCtrlOS = ssCtrl; {$endif} + cUtilityImageSize = 16; // Needed by descendants for hittests. + DEFAULT_CHECK_WIDTH = 16; DEFAULT_COLUMN_WIDTH = 50; DEFAULT_DRAG_HEIGHT = 350; @@ -256,6 +256,8 @@ var // Clipboard format IDs used in OLE drag'n drop and clipboard transfers. MMXAvailable: Boolean; // necessary to know because the blend code uses MMX instructions IsWinVistaOrAbove: Boolean; + UtilityImageSize: Integer = cUtilityImageSize; + type // The exception used by the trees. EVirtualTreeError = class(Exception); @@ -4357,7 +4359,7 @@ var XPImages, // global XP style check images SystemCheckImages, // global system check images SystemFlatCheckImages: TImageList; // global flat system check images - UtilityImages: TBitmap; // some small additional images (e.g for header dragging) + UtilityImages: TCustomBitmap; // some small additional images (e.g for header dragging) Initialized: Boolean; // True if global structures have been initialized. NeedToUnitialize: Boolean; // True if the OLE subsystem could be initialized successfully. @@ -5232,6 +5234,20 @@ begin {$IFEND} end; +// Support resources with bmp as well as png +procedure LoadBitmapFromResource(ABitmap: TBitmap; AResName: String); +var + bm: TCustomBitmap; +begin + bm := CreateBitmapFromResourceName(0, BuildResourceName(AResName)); + try + bm.Transparent := true; + ABitmap.Assign(bm); + finally + bm.Free; + end; +end; + //---------------------------------------------------------------------------------------------------------------------- function CreateCheckImageList(CheckKind: TCheckImageKind): TImageList; @@ -5436,9 +5452,8 @@ begin // Register the tree reference clipboard format. Others will be handled in InternalClipboarFormats. CF_VTREFERENCE := ClipboardRegisterFormat(CFSTR_VTREFERENCE); - UtilityImages := TBitmap.Create; - UtilityImages.Transparent := True; - UtilityImages.LoadFromResourceName(0, 'VT_UTILITIES'); + UtilityImages := CreateBitmapFromResourceName(0, BuildResourceName('vt_utilities')); + UtilityImageSize := UtilityImages.Height; SystemCheckImages := CreateCheckImageList(ckSystemDefault); @@ -9319,6 +9334,7 @@ var DrawHot: Boolean; ImageWidth: Integer; w, h: Integer; + Rsrc, Rdest: TRect; begin ColImageInfo.Ghosted := False; PaintInfo.Column := Items[AColumn]; @@ -9490,6 +9506,8 @@ var // sort glyph if not (hpeSortGlyph in ActualElements) and ShowSortGlyph then begin + Rsrc := Rect(0, 0, UtilityImageSize-1, UtilityImageSize-1); + Rdest := Rsrc; if tsUseExplorerTheme in FHeader.Treeview.FStates then begin Pos.TopLeft := SortGlyphPos; @@ -9505,13 +9523,9 @@ var else begin SortIndex := SortGlyphs[FHeader.FSortDirection, tsUseThemes in FHeader.Treeview.FStates]; - {$ifdef USE_DELPHICOMPAT} - DirectMaskBlt(FHeaderBitmap.Canvas.Handle, SortGlyphPos.X, SortGlyphPos.Y, UtilityImageSize, UtilityImageSize, UtilityImages.Canvas.Handle, - SortIndex * UtilityImageSize, 0, UtilityImages.MaskHandle); - {$else} - StretchMaskBlt(FHeaderBitmap.Canvas.Handle, SortGlyphPos.X, SortGlyphPos.Y, UtilityImageSize, UtilityImageSize, UtilityImages.Canvas.Handle, - SortIndex * UtilityImageSize, 0, UtilityImageSize, UtilityImageSize, UtilityImages.MaskHandle,SortIndex * UtilityImageSize, 0, SRCCOPY); - {$endif} + OffsetRect(Rsrc, SortIndex * UtilityImageSize, 0); + OffsetRect(Rdest, SortGlyphPos.x, SortGlyphPos.y); + FHeaderBitmap.Canvas.CopyRect(Rdest, UtilityImages.Canvas, Rsrc); end; end; diff --git a/components/virtualtreeview/VirtualTrees.res b/components/virtualtreeview/VirtualTrees.res index 5172fc8d4a08703e0c1c00d65328b84428a0fe68..5c5428dc203c9f6dcf7c104e15217bc5ea9ba27b 100644 GIT binary patch delta 6012 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 VI^ONP42MYXKX9<7^2hh&{{k9nk#PV3 delta 2512 zcmdUvze>YU6voeO+M1XqX_KWsfFM4Bi_c(P#ODySW42BmDuot1I*E&di!MbdMZrQv z5L`M)7e^-%9OAh*X?t=LTGI&PDGBF0H}`zMp8UDJ$-SKBE-UByh5@hz0G^j=4lmZ) zS&Nn31{R8VFi`P~p#eC$e_)X>K($(h^@Aa79zKGHzmM`Kyzafh&hZ%bTVtrzYEZA& zq1kLgr_+IMw+q*I576)TVK5j#@97yvqY=D+;cm|pHo>Xgs4%Ow%kJsXZfvt7SNYrc zFa9OVG)=2C9hR)83kj2D|9`2VYnrAPCPcFSDaNw?a{p4n<^ih#k*vk_4%y}S;X1TP z*3+gI$5D|;w?r${sAifMRnwvWU&UK&njs#YVCa(|wFIf);Ru>3c44NfwmU2EDiV>F zQ6NMh>j4m{BuNE;D-#io%{YNfM71Cwrm`kW@hP3Z!Y6_=36F>uf{`r-icSP8@y>oV z0m&mG0}6OT3?ZKR{&7J3sj=s=J@^%I9nRv0L zAEMwjn`(YXd61zfBv0)hPh^u%H7BGxv?HN^HW%8RUL^F77#apk5QZT)Nb4{6Q;IB~ ZATn+-(&3j2EWa`*Y