Qt: bugfix for #13083

git-svn-id: trunk@19073 -
This commit is contained in:
zeljko 2009-03-23 13:00:08 +00:00
parent 45c85c3a98
commit 8c2e23e096
2 changed files with 100 additions and 86 deletions

View File

@ -1931,7 +1931,12 @@ begin
if lineWidth > 1 then if lineWidth > 1 then
q_DrawWinPanel(Widget, x, y, w, h, Palette, Sunken, FillBrush) q_DrawWinPanel(Widget, x, y, w, h, Palette, Sunken, FillBrush)
else else
q_DrawShadePanel(Widget, x, y, w, h, Palette, Sunken, 1, FillBrush); begin
if FillBrush = nil then
q_DrawShadePanel(Widget, x, y, w, h, Palette, Sunken, 1, QPalette_background(Palette))
else
q_DrawShadePanel(Widget, x, y, w, h, Palette, Sunken, 1, FillBrush);
end;
end; end;
{------------------------------------------------------------------------------ {------------------------------------------------------------------------------

View File

@ -114,102 +114,111 @@ var
Element: TQtDrawElement; Element: TQtDrawElement;
Features: QStyleOptionButtonButtonFeatures; Features: QStyleOptionButtonButtonFeatures;
Position: QStyleOptionHeaderSectionPosition; Position: QStyleOptionHeaderSectionPosition;
Palette: QPaletteH;
begin begin
if (Context <> nil) then if (Context <> nil) then
begin begin
ARect := R; Context.save;
Element := GetDrawElement(Details); try
case Element.DrawVariant of if Context.Parent <> nil then
qdvNone:
inherited DrawElement(DC, Details, R, ClipRect);
qdvControl:
begin begin
if (Element.ControlElement in [QStyleCE_PushButton, QStyleCE_RadioButton, QStyleCE_CheckBox]) then Palette := QWidget_palette(Context.Parent);
begin QPainter_setBackground(Context.Widget, QPalette_background(Palette));
opt := QStyleOptionButton_create();
Features := QStyleOptionButtonNone;
if Details.Element = teToolBar then
Features := Features or QStyleOptionButtonFlat;
QStyleOptionButton_setFeatures(QStyleOptionButtonH(opt), Features);
end
else
if (Element.ControlElement = QStyleCE_HeaderSection) then
begin
opt := QStyleOptionHeader_create();
case Details.Part of
HP_HEADERITEM: Position := QStyleOptionHeaderMiddle;
HP_HEADERITEMLEFT: Position := QStyleOptionHeaderBeginning;
HP_HEADERITEMRIGHT: Position := QStyleOptionHeaderEnd;
end;
QStyleOptionHeader_setPosition(QStyleOptionHeaderH(opt), Position);
QStyleOptionHeader_setOrientation(QStyleOptionHeaderH(opt), QtHorizontal);
end
else
opt := QStyleOptionComplex_create(LongInt(QStyleOptionVersion), LongInt(QStyleOptionSO_Default));
QStyleOption_setState(opt, GetControlState(Details));
QStyleOption_setRect(opt, @ARect);
QStyle_drawControl(Style, Element.ControlElement, opt, Context.Widget);
QStyleOption_Destroy(opt);
end; end;
qdvComplexControl: ARect := R;
begin Element := GetDrawElement(Details);
Context.save; case Element.DrawVariant of
case Element.ComplexControl of qdvNone:
QStyleCC_ToolButton: opt := QStyleOptionToolButton_create(); inherited DrawElement(DC, Details, R, ClipRect);
qdvControl:
QStyleCC_TitleBar, QStyleCC_MdiControls: begin
if (Element.ControlElement in [QStyleCE_PushButton, QStyleCE_RadioButton, QStyleCE_CheckBox]) then
begin begin
opt := QStyleOptionTitleBar_create(); opt := QStyleOptionButton_create();
QStyleOptionTitleBar_setTitleBarFlags(QStyleOptionTitleBarH(opt), QtWindow or QtWindowSystemMenuHint); Features := QStyleOptionButtonNone;
// workaround: qt has own minds about position of requested part - if Details.Element = teToolBar then
// but we need a way to draw it at our position Features := Features or QStyleOptionButtonFlat;
Context.translate(ARect.Left, ARect.Top); QStyleOptionButton_setFeatures(QStyleOptionButtonH(opt), Features);
OffsetRect(ARect, -ARect.Left, -ARect.Top); end
end; else
QStyleCC_Slider, QStyleCC_ScrollBar: if (Element.ControlElement = QStyleCE_HeaderSection) then
begin begin
opt := QStyleOptionSlider_create(); opt := QStyleOptionHeader_create();
QStyleOptionSlider_setMinimum(QStyleOptionSliderH(opt), 0); case Details.Part of
QStyleOptionSlider_setMaximum(QStyleOptionSliderH(opt), 100); HP_HEADERITEM: Position := QStyleOptionHeaderMiddle;
end; HP_HEADERITEMLEFT: Position := QStyleOptionHeaderBeginning;
else HP_HEADERITEMRIGHT: Position := QStyleOptionHeaderEnd;
opt := QStyleOptionComplex_create(LongInt(QStyleOptionVersion), LongInt(QStyleOptionSO_Default)); end;
QStyleOptionHeader_setPosition(QStyleOptionHeaderH(opt), Position);
QStyleOptionHeader_setOrientation(QStyleOptionHeaderH(opt), QtHorizontal);
end
else
opt := QStyleOptionComplex_create(LongInt(QStyleOptionVersion), LongInt(QStyleOptionSO_Default));
QStyleOption_setState(opt, GetControlState(Details));
QStyleOption_setRect(opt, @ARect);
QStyle_drawControl(Style, Element.ControlElement, opt, Context.Widget);
QStyleOption_Destroy(opt);
end; end;
qdvComplexControl:
QStyleOptionComplex_setSubControls(QStyleOptionComplexH(opt), Element.SubControls); begin
case Element.ComplexControl of
QStyleOption_setState(opt, GetControlState(Details)); QStyleCC_ToolButton: opt := QStyleOptionToolButton_create();
QStyleOption_setRect(opt, @ARect);
QStyle_drawComplexControl(Style, Element.ComplexControl, QStyleOptionComplexH(opt), Context.Widget); QStyleCC_TitleBar, QStyleCC_MdiControls:
QStyleOption_Destroy(opt); begin
Context.restore; opt := QStyleOptionTitleBar_create();
end; QStyleOptionTitleBar_setTitleBarFlags(QStyleOptionTitleBarH(opt), QtWindow or QtWindowSystemMenuHint);
qdvPrimitive: // workaround: qt has own minds about position of requested part -
begin // but we need a way to draw it at our position
if Element.PrimitiveElement = QStylePE_FrameTabWidget then Context.translate(ARect.Left, ARect.Top);
OffsetRect(ARect, -ARect.Left, -ARect.Top);
end;
QStyleCC_Slider, QStyleCC_ScrollBar:
begin
opt := QStyleOptionSlider_create();
QStyleOptionSlider_setMinimum(QStyleOptionSliderH(opt), 0);
QStyleOptionSlider_setMaximum(QStyleOptionSliderH(opt), 100);
end;
else
opt := QStyleOptionComplex_create(LongInt(QStyleOptionVersion), LongInt(QStyleOptionSO_Default));
end;
QStyleOptionComplex_setSubControls(QStyleOptionComplexH(opt), Element.SubControls);
QStyleOption_setState(opt, GetControlState(Details));
QStyleOption_setRect(opt, @ARect);
QStyle_drawComplexControl(Style, Element.ComplexControl, QStyleOptionComplexH(opt), Context.Widget);
QStyleOption_Destroy(opt);
end;
qdvPrimitive:
begin
if Element.PrimitiveElement = QStylePE_FrameTabWidget then
begin
opt := QStyleOptionTabWidgetFrame_create();
// need widget to draw gradient
end
else
opt := QStyleOption_create(Integer(QStyleOptionVersion), Integer(QStyleOptionSO_Default));
QStyleOption_setState(opt, GetControlState(Details));
QStyleOption_setRect(opt, @ARect);
QStyle_drawPrimitive(Style, Element.PrimitiveElement, opt, Context.Widget);
QStyleOption_Destroy(opt);
end;
qdvStandardPixmap:
begin begin
opt := QStyleOptionTabWidgetFrame_create();
// need widget to draw gradient
end
else
opt := QStyleOption_create(Integer(QStyleOptionVersion), Integer(QStyleOptionSO_Default)); opt := QStyleOption_create(Integer(QStyleOptionVersion), Integer(QStyleOptionSO_Default));
QStyleOption_setState(opt, GetControlState(Details)); AIcon := QIcon_create();
QStyleOption_setRect(opt, @ARect); QStyle_standardIcon(Style, AIcon, Element.StandardPixmap, opt);
QStyle_drawPrimitive(Style, Element.PrimitiveElement, opt, Context.Widget); QIcon_paint(AIcon, Context.Widget, ARect.Left, ARect.Top,
QStyleOption_Destroy(opt); ARect.Right - ARect.Left, ARect.Bottom - ARect.Top);
end; QIcon_destroy(AIcon);
qdvStandardPixmap: QStyleOption_Destroy(opt);
begin end;
opt := QStyleOption_create(Integer(QStyleOptionVersion), Integer(QStyleOptionSO_Default));
AIcon := QIcon_create();
QStyle_standardIcon(Style, AIcon, Element.StandardPixmap, opt);
QIcon_paint(AIcon, Context.Widget, ARect.Left, ARect.Top,
ARect.Right - ARect.Left, ARect.Bottom - ARect.Top);
QIcon_destroy(AIcon);
QStyleOption_Destroy(opt);
end; end;
finally
Context.restore;
end; end;
end; end;
end; end;