From 38a2f4a30dc484a2e6a9ff584114b95aa2a09ffc Mon Sep 17 00:00:00 2001 From: zeljko Date: Sun, 23 Oct 2011 09:06:50 +0000 Subject: [PATCH] Qt: TQtBrush added Style property, implemented TQtWidgetSet.GetObject() returning TLogBrush. git-svn-id: trunk@33040 - --- lcl/interfaces/qt/qtobjects.pas | 33 +++++++++++++++++++++++++- lcl/interfaces/qt/qtwinapi.inc | 41 +++++++++++++++++++++------------ 2 files changed, 58 insertions(+), 16 deletions(-) diff --git a/lcl/interfaces/qt/qtobjects.pas b/lcl/interfaces/qt/qtobjects.pas index 125b8348df..d5b0175f74 100644 --- a/lcl/interfaces/qt/qtobjects.pas +++ b/lcl/interfaces/qt/qtobjects.pas @@ -233,15 +233,18 @@ type TQtBrush = class(TQtResource) private + function getStyle: QtBrushStyle; + procedure setStyle(style: QtBrushStyle); public Widget: QBrushH; constructor Create(CreateHandle: Boolean); virtual; destructor Destroy; override; function getColor: PQColor; + function GetLBStyle(out AStyle: LongWord; out AHatch: PtrUInt): Boolean; procedure setColor(AColor: PQColor); - procedure setStyle(style: QtBrushStyle); procedure setTexture(pixmap: QPixmapH); procedure setTextureImage(image: QImageH); + property Style: QtBrushStyle read getStyle write setStyle; end; { TQtPen } @@ -1601,11 +1604,39 @@ begin Result := QBrush_Color(Widget); end; +function TQtBrush.GetLBStyle(out AStyle: LongWord; out AHatch: PtrUInt + ): Boolean; +var + BrushStyle: QtBrushStyle; +begin + AStyle := BS_SOLID; + if BrushStyle in [QtHorPattern, QtVerPattern, QtCrossPattern, + QtBDiagPattern, QtFDiagPattern, QtDiagCrossPattern] then + AStyle := BS_HATCHED + else + AHatch := 0; + case BrushStyle of + QtNoBrush: AStyle := BS_NULL; + QtHorPattern: AHatch := HS_HORIZONTAL; + QtVerPattern: AHatch := HS_VERTICAL; + QtCrossPattern: AHatch := HS_CROSS; + QtBDiagPattern: AHatch := HS_BDIAGONAL; + QtFDiagPattern: AHatch := HS_FDIAGONAL; + QtDiagCrossPattern: AHatch := HS_DIAGCROSS; + QtTexturePattern: AStyle := BS_PATTERN; + end; +end; + procedure TQtBrush.setColor(AColor: PQColor); begin QBrush_setColor(Widget, AColor); end; +function TQtBrush.getStyle: QtBrushStyle; +begin + Result := QBrush_style(Widget); +end; + {------------------------------------------------------------------------------ Function: TQtBrush.setStyle Params: None diff --git a/lcl/interfaces/qt/qtwinapi.inc b/lcl/interfaces/qt/qtwinapi.inc index 27ac8f9301..b048c6bc2d 100644 --- a/lcl/interfaces/qt/qtwinapi.inc +++ b/lcl/interfaces/qt/qtwinapi.inc @@ -415,25 +415,25 @@ begin // BS_HOLLOW, // Hollow brush. BS_NULL: // Same as BS_HOLLOW. begin - QtBrush.setStyle(QtNoBrush); + QtBrush.Style := QtNoBrush; end; BS_SOLID: // Solid brush. begin - QtBrush.setStyle(QtSolidPattern); + QtBrush.Style := QtSolidPattern; end; BS_HATCHED: // Hatched brush. begin case LogBrush.lbHatch of - HS_BDIAGONAL: QtBrush.setStyle(QtBDiagPattern); - HS_CROSS: QtBrush.setStyle(QtCrossPattern); - HS_DIAGCROSS: QtBrush.setStyle(QtDiagCrossPattern); - HS_FDIAGONAL: QtBrush.setStyle(QtFDiagPattern); - HS_HORIZONTAL: QtBrush.setStyle(QtHorPattern); - HS_VERTICAL: QtBrush.setStyle(QtVerPattern); + HS_BDIAGONAL: QtBrush.Style := QtBDiagPattern; + HS_CROSS: QtBrush.Style := QtCrossPattern; + HS_DIAGCROSS: QtBrush.Style := QtDiagCrossPattern; + HS_FDIAGONAL: QtBrush.Style := QtFDiagPattern; + HS_HORIZONTAL: QtBrush.Style := QtHorPattern; + HS_VERTICAL: QtBrush.Style := QtVerPattern; else - QtBrush.setStyle(QtSolidPattern); + QtBrush.Style := QtSolidPattern; end; end; @@ -451,6 +451,7 @@ begin BS_PATTERN8X8: // Same as BS_PATTERN. begin QtBrush.setTextureImage(TQtImage(LogBrush.lbHatch).Handle); + QtBrush.Style := QtTexturePattern; end; else DebugLn(Format('Unsupported Style %d',[LogBrush.lbStyle])); @@ -473,7 +474,7 @@ begin // set brush color Color := QBrush_Color(QtBrush.Widget)^; ColorRefToTQColor(ColorToRGB(TColor(logBrush.lbColor)), Color); - QBrush_setColor(QtBrush.Widget, @Color); + QtBrush.setColor(@Color); except {$ifdef VerboseQtWinAPI} WriteLn('[WinAPI CreateBrushIndirect] Failed'); @@ -3011,10 +3012,12 @@ var aObject: TObject; AFont: TQtFont absolute aObject; APen: TQtPen absolute aObject; + ABrush: TQtBrush absolute aObject; BitmapSection : TDIBSECTION; ALogFont: PLogFont absolute Buf; ALogPen: PLogPen absolute Buf; AExtLogPen: PExtLogPen absolute Buf; + ALogBrush: PLogBrush absolute Buf; Dashes: TQRealArray; i: integer; {$ifdef VerboseQtWinAPI} @@ -3158,7 +3161,7 @@ begin end; end {------------------------------------------------------------------------------ - Brush + Region ------------------------------------------------------------------------------} else if aObject is TQtRegion then @@ -3168,12 +3171,20 @@ begin ObjType := 'Region'; {$endif} end else + {------------------------------------------------------------------------------ + Brush + ------------------------------------------------------------------------------} if aObject is TQtBrush then begin - {TODO: implement Brush} - {$ifdef VerboseQtWinAPI} - ObjType := 'Brush'; - {$endif} + if Buf = nil then + Result := SizeOf(TLogBrush) + else + if BufSize >= SizeOf(TLogBrush) then + begin + Result := SizeOf(TLogBrush); + TQColorToColorRef(ABrush.getColor^, ALogBrush^.lbColor); + ABrush.GetLbStyle(ALogBrush^.lbStyle, ALogBrush^.lbHatch); + end; end {------------------------------------------------------------------------------ Image