From 2b58d03bb86a62cca3bca249c1bfca0d1e0dd0b8 Mon Sep 17 00:00:00 2001 From: paul Date: Wed, 18 Jul 2007 00:54:42 +0000 Subject: [PATCH] (Qt) - better handling of BorderStyle property - Destroy GlobalCaret in QtWidgetset destructor - fix possible problems with splitter painting under linux git-svn-id: trunk@11561 - --- lcl/interfaces/qt/qtcaret.pas | 7 +++++++ lcl/interfaces/qt/qtobject.inc | 1 + lcl/interfaces/qt/qtthemes.pas | 12 ++++++++++++ lcl/interfaces/qt/qtwidgets.pas | 2 -- lcl/interfaces/qt/qtwscontrols.pp | 15 ++++++++------- 5 files changed, 28 insertions(+), 9 deletions(-) diff --git a/lcl/interfaces/qt/qtcaret.pas b/lcl/interfaces/qt/qtcaret.pas index 74db54399c..88fd827722 100644 --- a/lcl/interfaces/qt/qtcaret.pas +++ b/lcl/interfaces/qt/qtcaret.pas @@ -87,6 +87,7 @@ function SetCaretPos(X, Y: Integer): Boolean; function GetCaretPos(var Pt: TPoint): Boolean; function DestroyCaret: Boolean; procedure DrawCaret; +procedure DestroyGlobalCaret; implementation @@ -119,6 +120,12 @@ begin end; end; +procedure DestroyGlobalCaret; +begin + GlobalCaret.Free; + GlobalCaret := nil; +end; + function CreateCaret(Widget: TQtWidget; Pixmap: QPixmapH; Width, Height: Integer): Boolean; begin GlobalCaretNeeded; diff --git a/lcl/interfaces/qt/qtobject.inc b/lcl/interfaces/qt/qtobject.inc index bb2eefc989..b3bd6c6155 100644 --- a/lcl/interfaces/qt/qtobject.inc +++ b/lcl/interfaces/qt/qtobject.inc @@ -38,6 +38,7 @@ end; ------------------------------------------------------------------------------} destructor TQtWidgetSet.Destroy; begin + DestroyGlobalCaret; QtWidgetSet := nil; diff --git a/lcl/interfaces/qt/qtthemes.pas b/lcl/interfaces/qt/qtthemes.pas index 9251a3c3b6..3f429caf67 100644 --- a/lcl/interfaces/qt/qtthemes.pas +++ b/lcl/interfaces/qt/qtthemes.pas @@ -46,6 +46,7 @@ type procedure InternalDrawParentBackground(Window: HWND; Target: HDC; Bounds: PRect); override; function GetControlState(Details: TThemedElementDetails): QStyleState; + function GetDetailSize(Details: TThemedElementDetails): Integer; override; function GetDrawElement(Details: TThemedElementDetails): TQtDrawElement; property Style: QStyleH read GetStyle; public @@ -226,6 +227,17 @@ begin Result := Result or QStyleState_Horizontal; end; +function TQtThemeServices.GetDetailSize(Details: TThemedElementDetails): Integer; +begin + case Details.Element of + teRebar : + if Details.Part in [RP_GRIPPER, RP_GRIPPERVERT] then + Result := -1; + else + Result := inherited; + end; +end; + function TQtThemeServices.GetDrawElement(Details: TThemedElementDetails): TQtDrawElement; const ButtonMap: array[BP_PUSHBUTTON..BP_USERBUTTON] of QStyleControlElement = diff --git a/lcl/interfaces/qt/qtwidgets.pas b/lcl/interfaces/qt/qtwidgets.pas index 74c9b46e58..0c2dc6bd4d 100644 --- a/lcl/interfaces/qt/qtwidgets.pas +++ b/lcl/interfaces/qt/qtwidgets.pas @@ -5137,8 +5137,6 @@ begin FViewPortWidget := NiL; Parent := TQtWidget(LCLObject.Parent.Handle).GetContainerWidget; Result := QAbstractScrollArea_create(Parent); - // remove default shape - QFrame_setFrameShape(QFrameH(Result), QFrameNoFrame); end; {------------------------------------------------------------------------------ diff --git a/lcl/interfaces/qt/qtwscontrols.pp b/lcl/interfaces/qt/qtwscontrols.pp index e75eca0381..9464d55c4d 100644 --- a/lcl/interfaces/qt/qtwscontrols.pp +++ b/lcl/interfaces/qt/qtwscontrols.pp @@ -121,6 +121,12 @@ type implementation +const + TBorderStyleToQtFrameShapeMap: array[TBorderStyle] of QFrameShape = + ( + {bsNone} QFrameNoFrame, + {bsSingle} QFrameStyledPanel + ); {------------------------------------------------------------------------------ Method: TQtWSCustomControl.CreateHandle @@ -137,10 +143,11 @@ begin {$endif} QtAbstractScrollArea := TQtAbstractScrollArea.Create(AWinControl, AParams); + QtAbstractScrollArea.setFrameShape(TBorderStyleToQtFrameShapeMap[TCustomControl(AWinControl).BorderStyle]); QtAbstractScrollArea.AttachEvents; QtAbstractScrollArea.viewportNeeded; Result := THandle(QtAbstractScrollArea); - + {$ifdef VerboseQt} WriteLn('< TQtWSCustomControl.CreateHandle for ',dbgsname(AWinControl),' Result: ', dbgHex(Result)); {$endif} @@ -443,12 +450,6 @@ end; class procedure TQtWSWinControl.SetBorderStyle(const AWinControl: TWinControl; const ABorderStyle: TBorderStyle); -const - TBorderStyleToQtFrameShapeMap: array[TBorderStyle] of QFrameShape = - ( - {bsNone} QFrameNoFrame, - {bsSingle} QFrameStyledPanel - ); var Widget: TQtWidget; begin