summaryrefslogtreecommitdiffstats
path: root/tdestyles/highcontrast/highcontrast.cpp
diff options
context:
space:
mode:
authorDarrell Anderson <humanreadable@yahoo.com>2013-08-18 10:14:48 -0500
committerDarrell Anderson <humanreadable@yahoo.com>2013-08-18 10:14:48 -0500
commitdad42352f4ad47d34caf50040367dc2a95772baa (patch)
tree6d2887d13f9b1403b8ce15be48a6ea7cec32fd96 /tdestyles/highcontrast/highcontrast.cpp
parent365f03061337a81bcffb4a45c4ad637edad27019 (diff)
downloadtdelibs-dad42352f4ad47d34caf50040367dc2a95772baa.tar.gz
tdelibs-dad42352f4ad47d34caf50040367dc2a95772baa.zip
Rename KStyle to TDEStyle to avoid conflicts with KDE4.
Diffstat (limited to 'tdestyles/highcontrast/highcontrast.cpp')
-rw-r--r--tdestyles/highcontrast/highcontrast.cpp1867
1 files changed, 1867 insertions, 0 deletions
diff --git a/tdestyles/highcontrast/highcontrast.cpp b/tdestyles/highcontrast/highcontrast.cpp
new file mode 100644
index 000000000..af021a91a
--- /dev/null
+++ b/tdestyles/highcontrast/highcontrast.cpp
@@ -0,0 +1,1867 @@
+/*
+ * High Contrast Style (version 1.0)
+ * Copyright (C) 2004 Olaf Schmidt <ojschmidt@kde.org>
+ *
+ * Derived from Axes Style
+ * Copyright (C) 2003 Maksim Orlovich <orlovich@cs.rochester.edu>
+ *
+ * Axes Style based on KDE 3 HighColor Style,
+ * Copyright (C) 2001-2002 Karol Szwed <gallium@kde.org>
+ * (C) 2001-2002 Fredrik Höglund <fredrik@kde.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <tqdrawutil.h>
+#include <tqpainter.h>
+#include <tqpointarray.h>
+#include <tqstyleplugin.h>
+
+#include <tqfont.h>
+#include <tqcombobox.h>
+#include <tqheader.h>
+#include <tqmenubar.h>
+#include <tqpushbutton.h>
+#include <tqscrollbar.h>
+#include <tqslider.h>
+#include <tqtabbar.h>
+#include <tqtoolbutton.h>
+#include <tqtoolbar.h>
+#include <tqpopupmenu.h>
+#include <tqprogressbar.h>
+#include <tqlistview.h>
+#include <tqsettings.h>
+
+#include <tqimage.h>
+#include <tqapplication.h>
+
+#include <kdrawutil.h>
+#include <kpixmapeffect.h>
+
+#include "highcontrast.h"
+#include "highcontrast.moc"
+
+// -- Style Plugin Interface -------------------------
+class HighContrastStylePlugin : public TQStylePlugin
+{
+ public:
+ HighContrastStylePlugin() {}
+ ~HighContrastStylePlugin() {}
+
+ TQStringList keys() const
+ {
+ return TQStringList() << "HighContrast";
+ }
+
+ TQStyle* create( const TQString& key )
+ {
+ if ( key == "highcontrast" )
+ return new HighContrastStyle();
+ return 0;
+ }
+};
+
+KDE_Q_EXPORT_PLUGIN (HighContrastStylePlugin)
+// ---------------------------------------------------
+
+
+
+static const int itemFrame = 1;
+static const int itemHMargin = 3;
+static const int itemVMargin = 0;
+static const int arrowHMargin = 6;
+static const int rightBorder = 12;
+
+
+void addOffset (TQRect* r, int offset, int lineWidth = 0)
+{
+ int offset1 = offset;
+ int offset2 = offset;
+
+ *r = r->normalize();
+
+ if (lineWidth > 0)
+ {
+ offset1 += lineWidth/2;
+ offset2 += lineWidth - lineWidth/2 - 1;
+ }
+
+ if (offset1 + offset2 > r->width())
+ r->addCoords (r->width()/2, 0, - (r->width() - r->width()/2), 0);
+ else
+ r->addCoords (offset1, 0, -offset2, 0);
+
+ if (offset1 + offset2 > r->height())
+ r->addCoords (0, r->height()/2, 0, - (r->height() - r->height()/2));
+ else
+ r->addCoords (0, offset1, 0, -offset2);
+}
+
+
+// ---------------------------------------------------------------------------
+
+HighContrastStyle::HighContrastStyle()
+ : TDEStyle( 0, ThreeButtonScrollBar )
+{
+ TQSettings settings;
+ settings.beginGroup("/highcontraststyle/Settings/");
+ bool useWideLines = settings.readBoolEntry("wideLines", false);
+ basicLineWidth = useWideLines ? 4 : 2;
+}
+
+
+HighContrastStyle::~HighContrastStyle()
+{
+}
+
+
+void HighContrastStyle::polish( TQPalette& pal )
+{
+ //We do not want the disabled widgets to be greyed out,
+ //as that may be hard indeed (and since we use crossed-out text instead),
+ //so we make disabled colors be the same as active foreground and
+ //background colour
+ for (int c = 0; c < TQColorGroup::NColorRoles; ++c)
+ switch (c)
+ {
+ case TQColorGroup::Button:
+ case TQColorGroup::Base:
+ case TQColorGroup::Highlight:
+ pal.setColor(TQPalette::Disabled, TQColorGroup::ColorRole(c), pal.color(TQPalette::Active, TQColorGroup::Background));
+ break;
+ case TQColorGroup::ButtonText:
+ case TQColorGroup::Text:
+ case TQColorGroup::HighlightedText:
+ pal.setColor(TQPalette::Disabled, TQColorGroup::ColorRole(c), pal.color(TQPalette::Active, TQColorGroup::Foreground));
+ break;
+ default:
+ pal.setColor(TQPalette::Disabled, TQColorGroup::ColorRole(c), pal.color(TQPalette::Active, TQColorGroup::ColorRole(c)));
+ }
+}
+
+
+void HighContrastStyle::polish (const TQStyleControlElementData &ceData, ControlElementFlags elementFlags, void *ptr)
+{
+ if (ceData.widgetObjectTypes.contains(TQWIDGET_OBJECT_NAME_STRING)) {
+ TQWidget *widget = reinterpret_cast<TQWidget*>(ptr);
+
+ if (widget->inherits (TQBUTTON_OBJECT_NAME_STRING)
+ || widget->inherits (TQCOMBOBOX_OBJECT_NAME_STRING)
+ || widget->inherits (TQSPINWIDGET_OBJECT_NAME_STRING)
+ || widget->inherits (TQLINEEDIT_OBJECT_NAME_STRING)
+ || widget->inherits (TQTEXTEDIT_OBJECT_NAME_STRING))
+ {
+ installObjectEventHandler(ceData, elementFlags, ptr, this);
+
+ TQSpinWidget* spinwidget = dynamic_cast<TQSpinWidget*>(widget);
+ if (spinwidget && spinwidget->editWidget()) {
+ TQWidget* spinEditWidget = spinwidget->editWidget();
+ TQStyleControlElementData swCeData = populateControlElementDataFromWidget(spinEditWidget, TQStyleOption());
+ ControlElementFlags swElementFlags = getControlElementFlagsForObject(spinEditWidget, swCeData.widgetObjectTypes, TQStyleOption());
+ installObjectEventHandler(swCeData, swElementFlags, spinEditWidget, this);
+ }
+ }
+ }
+
+ TDEStyle::polish (ceData, elementFlags, ptr);
+}
+
+
+void HighContrastStyle::unPolish (const TQStyleControlElementData &ceData, ControlElementFlags elementFlags, void *ptr)
+{
+ if (ceData.widgetObjectTypes.contains(TQWIDGET_OBJECT_NAME_STRING)) {
+ TQWidget *widget = reinterpret_cast<TQWidget*>(ptr);
+ if (widget->inherits (TQWIDGET_OBJECT_NAME_STRING) || widget->inherits (TQCOMBOBOX_OBJECT_NAME_STRING) || widget->inherits (TQSPINWIDGET_OBJECT_NAME_STRING) || widget->inherits (TQLINEEDIT_OBJECT_NAME_STRING) || widget->inherits (TQTEXTEDIT_OBJECT_NAME_STRING)) {
+ installObjectEventHandler(ceData, elementFlags, ptr, this);
+ }
+ }
+
+ TDEStyle::unPolish (ceData, elementFlags, ptr);
+}
+
+void HighContrastStyle::setColorsNormal (TQPainter* p, const TQColorGroup& cg, int flags, int highlight) const
+{
+ setColorsByState (p, cg, cg.foreground(), cg.background(), flags, highlight);
+}
+
+void HighContrastStyle::setColorsButton (TQPainter* p, const TQColorGroup& cg, int flags, int highlight) const
+{
+ setColorsByState (p, cg, cg.buttonText(), cg.button(), flags, highlight);
+}
+
+void HighContrastStyle::setColorsText (TQPainter* p, const TQColorGroup& cg, int flags, int highlight) const
+{
+ setColorsByState (p, cg, cg.text(), cg.base(), flags, highlight);
+}
+
+void HighContrastStyle::setColorsHighlight (TQPainter* p, const TQColorGroup& cg, int flags) const
+{
+ setColorsByState (p, cg, cg.highlightedText(), cg.highlight(), flags, 0);
+}
+
+void HighContrastStyle::setColorsByState (TQPainter* p, const TQColorGroup& cg, const TQColor& fg, const TQColor& bg, int flags, int highlight) const
+{
+ TQFont font = p->font();
+ font.setStrikeOut (! (flags & Style_Enabled));
+ p->setFont (font);
+
+ if ((flags & Style_Enabled) && (flags & highlight))
+ {
+ p->setPen (TQPen (cg.highlightedText(), basicLineWidth, flags & Style_Enabled ? Qt::SolidLine : Qt::DotLine));
+ p->setBackgroundColor (cg.highlight());
+ }
+ else
+ {
+ p->setPen (TQPen (fg, basicLineWidth, flags & Style_Enabled ? Qt::SolidLine : Qt::DotLine));
+ p->setBackgroundColor (bg);
+ }
+
+ p->setBrush (TQBrush ());
+}
+
+void HighContrastStyle::drawRect (TQPainter* p, TQRect r, int offset, bool filled) const
+{
+ addOffset (&r, offset, p->pen().width());
+ if (filled)
+ p->fillRect (r, p->backgroundColor());
+
+ p->drawRect (r);
+}
+
+void HighContrastStyle::drawRoundRect (TQPainter* p, TQRect r, int offset, bool filled) const
+{
+ int lineWidth = p->pen().width();
+ if ((r.width() >= 5*lineWidth + 2*offset) && (r.height() >= 5*lineWidth + 2*offset))
+ {
+ TQRect r2 (r);
+ addOffset (&r2, offset, lineWidth);
+
+ addOffset (&r, offset);
+ TQRect r3 (r);
+ addOffset (&r3, lineWidth);
+
+ p->save();
+ p->setPen (Qt::NoPen);
+ if (filled)
+ p->fillRect (r3, p->backgroundColor());
+ p->drawRect (r3);
+ p->restore();
+
+ p->drawLine (r.left()+lineWidth, r2.top(), r.right()+1-lineWidth, r2.top());
+ p->fillRect (r.left()+1, r.top()+1, lineWidth, lineWidth, p->pen().color());
+ p->drawLine (r2.left(), r.top()+lineWidth, r2.left(), r.bottom()+1-lineWidth);
+ p->fillRect (r.left()+1, r.bottom()-lineWidth, lineWidth, lineWidth, p->pen().color());
+ p->drawLine (r.left()+lineWidth, r2.bottom(), r.right()+1-lineWidth, r2.bottom());
+ p->fillRect (r.right()-lineWidth, r.bottom()-lineWidth, lineWidth, lineWidth, p->pen().color());
+ p->drawLine (r2.right(), r.top()+lineWidth, r2.right(), r.bottom()+1-lineWidth);
+ p->fillRect (r.right()-lineWidth, r.top()+1, lineWidth, lineWidth, p->pen().color());
+ }
+ else
+ drawRect (p, r, offset, filled);
+}
+
+void HighContrastStyle::drawEllipse (TQPainter* p, TQRect r, int offset, bool filled) const
+{
+ addOffset (&r, offset, p->pen().width());
+
+ if (filled) {
+ p->save();
+ p->setBrush (p->backgroundColor());
+ p->drawRoundRect (r, 99, 99);
+ p->restore();
+ }
+
+ p->drawRoundRect (r, 99, 99);
+}
+
+void HighContrastStyle::drawArrow (TQPainter* p, TQRect r, TQ_PrimitiveElement arrow, int offset) const
+{
+ p->save();
+ addOffset (&r, offset);
+
+ TQPoint center = r.center();
+ if (r.height() < r.width())
+ r.setWidth (r.height());
+ if (r.width() % 2 != 0)
+ r.setWidth (r.width() - 1);
+ r.setHeight (r.width());
+ r.moveCenter (center);
+
+ TQPointArray points (3);
+ switch (arrow) {
+ case PE_ArrowUp:
+ case PE_SpinWidgetUp:
+ case PE_SpinWidgetPlus: {
+ points.setPoint (0, r.bottomLeft());
+ points.setPoint (1, r.bottomRight());
+ points.setPoint (2, r.center().x(), r.top() + r.height()/7);
+ break;
+ }
+ case PE_ArrowDown:
+ case PE_SpinWidgetDown:
+ case PE_SpinWidgetMinus: {
+ points.setPoint (0, r.topLeft());
+ points.setPoint (1, r.topRight());
+ points.setPoint (2, r.center().x(), r.bottom() - r.height()/7);
+ break;
+ }
+ case PE_ArrowLeft: {
+ points.setPoint (0, r.topRight());
+ points.setPoint (1, r.bottomRight());
+ points.setPoint (2, r.left() + r.width()/7, r.center().y());
+ break;
+ }
+ default: {
+ points.setPoint (0, r.topLeft());
+ points.setPoint (1, r.bottomLeft());
+ points.setPoint (2, r.right() - r.width()/7, r.center().y());
+ }
+ }
+
+ p->setPen (p->pen().color());
+ p->setBrush (p->pen().color());
+ p->drawPolygon (points);
+ p->restore();
+}
+
+// This function draws primitive elements
+void HighContrastStyle::drawPrimitive (TQ_PrimitiveElement pe,
+ TQPainter *p,
+ const TQStyleControlElementData &ceData,
+ ControlElementFlags elementFlags,
+ const TQRect &r,
+ const TQColorGroup &cg,
+ SFlags flags,
+ const TQStyleOption& opt ) const
+{
+ switch(pe)
+ {
+ case PE_StatusBarSection: {
+ //### TODO: Not everything uses this!
+ setColorsNormal (p, cg, Style_Enabled);
+ drawRect (p, r);
+ break;
+ }
+ // BUTTONS
+ // -------------------------------------------------------------------
+ case PE_ButtonDefault:
+ case PE_ButtonDropDown:
+ case PE_ButtonCommand:
+ case PE_ButtonTool:
+ case PE_ButtonBevel: {
+ setColorsButton (p, cg, flags, Style_On|Style_MouseOver|Style_Down);
+ drawRoundRect (p, r, 0, false);
+ break;
+ }
+
+ // FOCUS RECT
+ // -------------------------------------------------------------------
+ case PE_FocusRect: {
+ p->save();
+ p->setBrush (TQBrush ());
+ p->setPen (TQPen (cg.highlight(), basicLineWidth, Qt::SolidLine));
+ drawRoundRect (p, r, basicLineWidth, false);
+ p->setPen (TQPen (cg.highlightedText(), basicLineWidth, Qt::DashLine));
+ drawRoundRect (p, r, basicLineWidth, false);
+ p->restore();
+ break;
+ }
+
+ case PE_HeaderArrow: {
+ setColorsButton (p, cg, flags, 0);
+ drawArrow (p, r, flags & Style_Down ? PE_ArrowDown : PE_ArrowUp, 2*basicLineWidth);
+ break;
+ }
+ // HEADER SECTION
+ // -------------------------------------------------------------------
+ case PE_HeaderSectionMenu:
+ case PE_HeaderSection: {
+ setColorsButton (p, cg, flags, 0);
+ drawRect (p, r);
+ break;
+ }
+
+
+ // SCROLLBAR
+ // -------------------------------------------------------------------
+ case PE_ScrollBarSlider: {
+ setColorsNormal (p, cg);
+ p->fillRect (r, p->backgroundColor());
+
+ if (flags & Style_Enabled) {
+ setColorsHighlight (p, cg, flags);
+ drawRoundRect (p, r);
+
+ if (r.width() >= 7*basicLineWidth && r.height() >= 7*basicLineWidth) {
+ TQRect r2 (r);
+ r2.setWidth (4*basicLineWidth);
+ r2.setHeight (4*basicLineWidth);
+ r2.moveCenter (r.center());
+ drawRect (p, r2, 0, false);
+ }
+ }
+ break;
+ }
+
+ case PE_ScrollBarAddPage:
+ case PE_ScrollBarSubPage: {
+ setColorsNormal (p, cg);
+ p->fillRect (r, p->backgroundColor());
+
+ TQRect r2 (r);
+ if (flags & Style_Horizontal)
+ {
+ if (r2.height() > 5*basicLineWidth)
+ {
+ r2.setHeight (5*basicLineWidth);
+ r2.moveCenter (r.center());
+ }
+ }
+ else
+ {
+ if (r2.width() > 5*basicLineWidth)
+ {
+ r2.setWidth (5*basicLineWidth);
+ r2.moveCenter (r.center());
+ }
+ }
+ setColorsText (p, cg, flags);
+ drawRect (p, r2);
+
+ if (flags & Style_Horizontal)
+ r2.addCoords (0, basicLineWidth, 0, -basicLineWidth);
+ else
+ r2.addCoords (basicLineWidth, 0, -basicLineWidth, 0);
+ TQPen pen = p->pen();
+ pen.setColor (p->backgroundColor());
+ p->setPen (pen);
+ drawRect (p, r2);
+
+ break;
+ }
+
+ case PE_ScrollBarAddLine:
+ case PE_ScrollBarSubLine:
+ case PE_ScrollBarFirst:
+ case PE_ScrollBarLast: {
+ setColorsNormal (p, cg);
+ p->fillRect (r, p->backgroundColor());
+
+ if (flags & Style_Enabled) {
+ setColorsButton (p, cg, flags);
+ drawRoundRect (p, r);
+ if (pe == PE_ScrollBarAddLine)
+ drawArrow (p, r, flags & Style_Horizontal ? PE_ArrowRight : PE_ArrowDown, r.height()/3);
+ else if (pe == PE_ScrollBarSubLine)
+ drawArrow (p, r, flags & Style_Horizontal ? PE_ArrowLeft : PE_ArrowUp, r.height()/3);
+ }
+ break;
+ }
+
+
+ case PE_ProgressBarChunk: {
+ p->fillRect (r, Qt::color1);
+ break;
+ }
+
+
+ // CHECKBOX
+ // -------------------------------------------------------------------
+ case PE_Indicator: {
+ setColorsText (p, cg, flags);
+
+ //Draw the outer rect
+ drawRect (p, r);
+
+ if (!(flags & Style_Off))
+ {
+ TQRect r2 (r);
+ addOffset (&r2, basicLineWidth);
+ if (flags & Style_On)
+ {
+ p->drawLine (r2.topLeft(), r2.bottomRight());
+ p->drawLine (r2.bottomLeft(), r2.topRight());
+ }
+ else
+ { // Tristate
+ p->drawLine (r2.left(), r2.top()+r2.width()/2, r2.right(), r2.top()+r2.width()/2);
+ }
+ TQPen pen = p->pen();
+ pen.setColor (p->backgroundColor());
+ p->setPen (pen);
+ drawRect (p, r2, 0, false);
+ }
+ break;
+ }
+ case PE_IndicatorMask: {
+ p->fillRect (r, Qt::color1);
+ break;
+ }
+ case PE_CheckMark: {
+ setColorsText (p, cg, flags);
+
+ if (flags & Style_On)
+ {
+ p->drawLine (r.topLeft(), r.bottomRight());
+ p->drawLine (r.bottomLeft(), r.topRight());
+ }
+ break;
+ }
+
+ // RADIOBUTTON (exclusive indicator)
+ // -------------------------------------------------------------------
+ case PE_ExclusiveIndicator: {
+ setColorsText (p, cg, flags);
+ drawEllipse (p, r);
+
+ // Indicator "dot"
+ if (flags & Style_On) {
+ p->setBackgroundColor (p->pen().color());
+ drawEllipse (p, r, 2*p->pen().width());
+ }
+
+ break;
+ }
+ case PE_ExclusiveIndicatorMask: {
+ p->fillRect (r, Qt::color0);
+ p->setBackgroundColor (Qt::color1);
+ p->setPen (Qt::NoPen);
+ p->setBrush (Qt::color1);
+ p->drawEllipse (r);
+ break;
+ }
+
+
+ // SPLITTER/DOCKWINDOW HANDLES
+ // -------------------------------------------------------------------
+ case PE_DockWindowResizeHandle:
+ case PE_Splitter: {
+ setColorsButton (p, cg, flags);
+ p->fillRect (r, p->backgroundColor());
+
+ p->setPen (TQPen (p->pen().color(), 1, Qt::DashLine));
+ if (flags & Style_Horizontal)
+ p->drawLine (r.center().x(), r.top(), r.center().x(), r.bottom());
+ else
+ p->drawLine (r.left(), r.center().y(), r.right(), r.center().y());
+ break;
+ }
+
+
+ // GENERAL PANELS
+ // -------------------------------------------------------------------
+ case PE_Panel:
+ case PE_GroupBoxFrame:
+ case PE_PanelPopup: {
+ setColorsNormal (p, cg, flags, 0);
+ if (!opt.isDefault())
+ {
+ TQPen pen = p->pen();
+ pen.setWidth (opt.lineWidth());
+ p->setPen (pen);
+ }
+ if (pe == PE_PanelPopup)
+ drawRect (p, r, 0, false);
+ else
+ drawRoundRect (p, r, 0, false);
+ break;
+ }
+ case PE_WindowFrame:
+ case PE_TabBarBase: {
+ setColorsNormal (p, cg, flags, 0);
+ drawRect (p, r, 0, false);
+ break;
+ }
+ case PE_PanelLineEdit: {
+ setColorsText (p, cg, flags, 0);
+ drawRoundRect (p, r);
+ if (flags & (Style_HasFocus | Style_Active))
+ drawPrimitive (PE_FocusRect, p, ceData, elementFlags, r, cg, flags, TQStyleOption (p->backgroundColor()));
+ break;
+ }
+ case PE_PanelTabWidget:
+ case PE_PanelGroupBox: {
+ setColorsNormal (p, cg, flags, 0);
+ drawRoundRect (p, r);
+ break;
+ }
+ case PE_PanelMenuBar: { // Menu
+ p->fillRect (r, cg.background());
+ break;
+ }
+ case PE_PanelDockWindow: { // Toolbar
+ p->fillRect (r, cg.button());
+ break;
+ }
+
+
+
+ // SEPARATORS
+ // -------------------------------------------------------------------
+ case PE_Separator: {
+ setColorsNormal (p, cg);
+ p->fillRect (r, p->backgroundColor());
+ p->setPen (p->pen().color());
+ if (flags & Style_Horizontal)
+ p->drawLine (r.center().x(), r.top()+basicLineWidth, r.center().x(), r.bottom()-basicLineWidth + 1);
+ else
+ p->drawLine (r.left()+basicLineWidth, r.center().y(), r.right()-basicLineWidth + 1, r.center().y());
+ break;
+ }
+ case PE_DockWindowSeparator: {
+ setColorsButton (p, cg);
+ p->fillRect (r, p->backgroundColor());
+ p->setPen (p->pen().color());
+ if (flags & Style_Horizontal)
+ p->drawLine (r.center().x(), r.top()+basicLineWidth, r.center().x(), r.bottom()-basicLineWidth);
+ else
+ p->drawLine (r.left()+basicLineWidth, r.center().y(), r.right()-basicLineWidth, r.center().y());
+ break;
+ }
+
+
+ case PE_MenuItemIndicatorFrame:
+ {
+ // Draw nothing
+ break;
+ }
+ break;
+ case PE_MenuItemIndicatorIconFrame:
+ {
+ int x, y, w, h;
+ r.rect( &x, &y, &w, &h );
+ int checkcol = styleHint(SH_MenuIndicatorColumnWidth, ceData, elementFlags, opt, NULL, NULL);
+ TQRect cr = visualRect( TQRect(x, y, checkcol, h), r );
+ drawRect (p, cr, 0, false);
+ break;
+ }
+ case PE_MenuItemIndicatorCheck:
+ {
+ int x, y, w, h;
+ r.rect( &x, &y, &w, &h );
+ int checkcol = styleHint(SH_MenuIndicatorColumnWidth, ceData, elementFlags, opt, NULL, NULL);
+
+ TQRect cr = visualRect( TQRect(x, y, checkcol, h), r );
+ bool reverse = TQApplication::reverseLayout();
+ int cx = reverse ? x+w - checkcol : x;
+ TQRect rc (cx, y, checkcol, h);
+ addOffset (&rc, 2*basicLineWidth);
+ TQPoint center = rc.center();
+ if (rc.width() > rc.height())
+ rc.setWidth (rc.height());
+ else
+ rc.setHeight (rc.width());
+ rc.moveCenter (center);
+
+ p->drawLine (rc.topLeft(), rc.bottomRight());
+ p->drawLine (rc.topRight(), rc.bottomLeft());
+ break;
+ }
+
+
+ // ARROWS
+ // -------------------------------------------------------------------
+ case PE_ArrowUp:
+ case PE_ArrowDown:
+ case PE_ArrowRight:
+ case PE_ArrowLeft:
+ case PE_SpinWidgetPlus:
+ case PE_SpinWidgetUp:
+ case PE_SpinWidgetMinus:
+ case PE_SpinWidgetDown: {
+ setColorsNormal (p, cg, flags);
+ drawArrow (p, r, pe);
+ break;
+ }
+
+ default: {
+ TDEStyle::drawPrimitive( pe, p, ceData, elementFlags, r, cg, flags, opt );
+ }
+ }
+}
+
+
+void HighContrastStyle::drawTDEStylePrimitive (TDEStylePrimitive kpe,
+ TQPainter* p,
+ const TQStyleControlElementData &ceData,
+ ControlElementFlags elementFlags,
+ const TQRect &r,
+ const TQColorGroup &cg,
+ SFlags flags,
+ const TQStyleOption &opt,
+ const TQWidget* widget ) const
+{
+ switch ( kpe )
+ {
+ // TOOLBAR HANDLE
+ // -------------------------------------------------------------------
+ case KPE_ToolBarHandle:
+ case KPE_DockWindowHandle:
+ case KPE_GeneralHandle:
+ {
+ setColorsButton (p, cg);
+ p->fillRect (r, p->backgroundColor());
+ p->setBrush (TQBrush (p->pen().color(), Qt::BDiagPattern));
+ drawRoundRect (p, r);
+ break;
+ }
+
+
+ // SLIDER GROOVE
+ // -------------------------------------------------------------------
+ case KPE_SliderGroove: {
+ setColorsText (p, cg, flags);
+ TQRect r2 (r);
+ if (ceData.widgetObjectTypes.contains(TQSLIDER_OBJECT_NAME_STRING))
+ {
+ if (ceData.orientation == TQt::Horizontal)
+ {
+ if (r2.height() > 5*basicLineWidth)
+ {
+ r2.setHeight (5*basicLineWidth);
+ r2.moveCenter (r.center());
+ }
+ }
+ else
+ {
+ if (r2.width() > 5*basicLineWidth)
+ {
+ r2.setWidth (5*basicLineWidth);
+ r2.moveCenter (r.center());
+ }
+ }
+ }
+
+ drawRoundRect (p, r2);
+ break;
+ }
+
+ // SLIDER HANDLE
+ // -------------------------------------------------------------------
+ case KPE_SliderHandle: {
+ setColorsHighlight (p, cg, flags);
+ drawRoundRect (p, r);
+ break;
+ }
+
+ case KPE_ListViewExpander: {
+ // TODO There is no pixelMetric associated with the
+ // ListViewExpander in TDEStyle.
+ // To have a properly large expander, the CC_ListView case of
+ // drawComplexControl should be handled.
+ // Probably it would be better to add a KPM_ListViewExpander metric
+ // to the TDEStyle TDEStylePixelMetric enum, and have the TDEStyle
+ // drawComplexControl handle it.
+ TQ_PrimitiveElement direction;
+ if (flags & Style_On) { // Collapsed = On
+ direction = PE_ArrowRight;
+
+ } else {
+ direction = PE_ArrowDown;
+ }
+ setColorsText (p, cg, flags);
+ drawArrow (p, r, direction);
+ break;
+ }
+ case KPE_ListViewBranch:
+ // TODO Draw (thick) dotted line. Check tdestyle.cpp
+ // Fall down for now
+ default:
+ TDEStyle::drawTDEStylePrimitive( kpe, p, ceData, elementFlags, r, cg, flags, opt, widget);
+ }
+}
+
+
+void HighContrastStyle::drawControl (TQ_ControlElement element,
+ TQPainter *p,
+ const TQStyleControlElementData &ceData,
+ ControlElementFlags elementFlags,
+ const TQRect &r,
+ const TQColorGroup &cg,
+ SFlags flags,
+ const TQStyleOption& opt,
+ const TQWidget *widget ) const
+{
+ switch (element)
+ {
+ // TABS
+ // -------------------------------------------------------------------
+ case CE_ToolBoxTab: {
+ setColorsNormal (p, cg, flags, Style_Selected);
+ drawRoundRect (p, r);
+ break;
+ }
+
+ case CE_TabBarTab: {
+ setColorsNormal (p, cg, flags, Style_Selected);
+ drawRoundRect (p, r);
+
+ TQTabBar::Shape shape = ceData.tabBarData.shape;
+ if (shape == TQTabBar::TriangularBelow ||
+ shape == TQTabBar::RoundedBelow) {
+ p->fillRect (r.left(), r.top(),
+ r.width(), 2*basicLineWidth,
+ p->pen().color());
+ p->fillRect (r.left()+basicLineWidth,
+ flags & Style_Selected ? basicLineWidth : 2*basicLineWidth,
+ r.width()-2*basicLineWidth,
+ basicLineWidth,
+ p->backgroundColor());
+ } else {
+ p->fillRect (r.left(), r.bottom()-2*basicLineWidth+1,
+ r.width(), 2*basicLineWidth,
+ p->pen().color());
+ p->fillRect (r.left()+basicLineWidth,
+ r.bottom()-2*basicLineWidth+1,
+ r.width()-2*basicLineWidth,
+ flags & Style_Selected ? 2*basicLineWidth : basicLineWidth,
+ p->backgroundColor());
+ }
+ break;
+ }
+
+
+ // PUSHBUTTON
+ // -------------------------------------------------------------------
+ case CE_PushButton: {
+ TQPushButton *button = (TQPushButton*) widget;
+ TQRect br = r;
+ bool btnDefault = (elementFlags & CEF_IsDefault);
+
+ if (( btnDefault || (elementFlags & CEF_AutoDefault) ) && (elementFlags & CEF_IsEnabled)) {
+ // Compensate for default indicator
+ static int di = pixelMetric( PM_ButtonDefaultIndicator, ceData, elementFlags );
+ addOffset (&br, di);
+ }
+
+ if ( btnDefault && (elementFlags & CEF_IsEnabled))
+ drawPrimitive( PE_ButtonDefault, p, ceData, elementFlags, r, cg, flags );
+
+ drawPrimitive( PE_ButtonCommand, p, ceData, elementFlags, br, cg, flags );
+
+ break;
+ }
+
+
+ // LABEL
+ // -------------------------------------------------------------------
+ case CE_ProgressBarLabel:
+ case CE_TabBarLabel:
+ case CE_RadioButtonLabel:
+ case CE_CheckBoxLabel:
+ case CE_ToolButtonLabel:
+ case CE_PushButtonLabel: {
+ const TQPixmap* pixmap = 0;
+ TQPixmap icon;
+ TQString text;
+ bool popup = false;
+
+ TQIconSet::Mode mode = flags & Style_Enabled ? ((flags & Style_HasFocus) ? TQIconSet::Active : TQIconSet::Normal) : TQIconSet::Disabled;
+ TQIconSet::State state = flags & Style_On ? TQIconSet::On : TQIconSet::Off;
+
+ int x, y, w, h;
+ r.rect( &x, &y, &w, &h );
+
+ if (element == CE_ProgressBarLabel) {
+ text = ceData.progressText;
+ setColorsNormal (p, cg, flags);
+ }
+ else if (element == CE_TabBarLabel) {
+ if (!opt.isDefault()) {
+ TQTab* tab = opt.tab();
+ text = tab->text();
+ }
+ setColorsNormal (p, cg, flags, Style_Selected);
+ }
+ else if (element == CE_ToolButtonLabel) {
+ text = ceData.text;
+ pixmap = (ceData.fgPixmap.isNull())?NULL:&ceData.fgPixmap;
+ if (!ceData.iconSet.isNull())
+ icon = ceData.iconSet.pixmap (TQIconSet::Small, mode, state);
+ popup = (elementFlags & CEF_HasPopupMenu);
+ setColorsButton (p, cg, flags);
+ }
+ else if (element == CE_PushButtonLabel) {
+ text = ceData.text;
+ pixmap = (ceData.fgPixmap.isNull())?NULL:&ceData.fgPixmap;
+ if (!ceData.iconSet.isNull())
+ icon = ceData.iconSet.pixmap (TQIconSet::Small, mode, state);
+ popup = (elementFlags & CEF_HasPopupMenu);
+ setColorsButton (p, cg, flags);
+ }
+ else {
+ pixmap = (ceData.fgPixmap.isNull())?NULL:&ceData.fgPixmap;
+ text = ceData.text;
+ setColorsNormal (p, cg);
+ }
+
+ // Does the button have a popup menu?
+ if (popup) {
+ int dx = pixelMetric (PM_MenuButtonIndicator, ceData, elementFlags, widget);
+ drawArrow (p, TQRect(x + w - dx - 2, y + 2, dx, h - 4), PE_ArrowDown);
+ w -= dx;
+ }
+
+ // Draw the icon if there is one
+ if (!icon.isNull())
+ {
+ // Center the iconset if there's no text or pixmap
+ if (text.isEmpty() && ((pixmap == 0) || pixmap->isNull()))
+ p->drawPixmap (x + (w - icon.width()) / 2,
+ y + (h - icon.height()) / 2, icon);
+ else
+ p->drawPixmap (x + 4, y + (h - icon.height()) / 2, icon);
+
+ int pw = icon.width();
+ x += pw + 4;
+ w -= pw + 4;
+ }
+
+ // Draw a focus rect if the button has focus
+ if (flags & Style_HasFocus)
+ drawPrimitive (PE_FocusRect, p, ceData, elementFlags, r, cg, flags, TQStyleOption (p->backgroundColor()));
+
+ // Draw the label itself
+ TQColor color = p->pen().color();
+ drawItem (p, TQRect(x, y, w, h),
+ (element == CE_RadioButtonLabel || element == CE_CheckBoxLabel || element == CE_ProgressBarLabel) ? AlignVCenter|AlignLeft|ShowPrefix : AlignCenter|ShowPrefix,
+ cg, flags & Style_Enabled, pixmap, text, -1, &color);
+ break;
+ }
+
+ // MENUBAR BACKGROUND
+ // -------------------------------------------------------------------
+ case CE_MenuBarEmptyArea:
+ {
+ p->fillRect (r, cg.background());
+ break;
+ }
+
+ // DOCKWINDOW BACKGROUND
+ // -------------------------------------------------------------------
+ case CE_DockWindowEmptyArea:
+ {
+ p->fillRect (r, cg.button());
+ break;
+ }
+
+ // MENUBAR ITEM
+ // -------------------------------------------------------------------
+ case CE_MenuBarItem: {
+ setColorsNormal (p, cg, flags, Style_Active|Style_MouseOver);
+ p->fillRect (r, p->backgroundColor ());
+ if (!opt.isDefault()) {
+ TQMenuItem *mi = opt.menuItem();
+
+ TQColor color = p->pen().color();
+ drawItem (p, r, AlignCenter | AlignVCenter | ShowPrefix
+ | DontClip | SingleLine, cg, flags,
+ mi->pixmap(), mi->text(), -1, &color);
+ }
+ break;
+ }
+
+ // CHECKBOX
+ // -------------------------------------------------------------------
+ case CE_CheckBox: {
+ drawPrimitive (PE_Indicator, p, ceData, elementFlags, r, cg, flags);
+ break;
+ }
+
+ // RADIOBUTTON
+ // -------------------------------------------------------------------
+ case CE_RadioButton: {
+ drawPrimitive (PE_ExclusiveIndicator, p, ceData, elementFlags, r, cg, flags);
+ break;
+ }
+
+ // PROGRESSBAR
+ // -------------------------------------------------------------------
+ case CE_ProgressBarGroove: {
+ setColorsText (p, cg, flags);
+ TQRect r2 (r);
+ r2.setLeft (p->boundingRect (r, AlignVCenter|AlignLeft|ShowPrefix, ceData.progressText).right()
+ + 4*basicLineWidth);
+ drawRoundRect (p, r2);
+ break;
+ }
+ case CE_ProgressBarContents: {
+ TQRect r2 (r);
+ r2.setLeft (p->boundingRect (r, AlignVCenter|AlignLeft|ShowPrefix, ceData.progressText).right()
+ + 4*basicLineWidth);
+ long progress = r2.width() * ceData.currentStep;
+ if (ceData.totalSteps > 0)
+ {
+ r2.setWidth (progress / ceData.totalSteps);
+ }
+ else
+ {
+ int width = r2.width() / 5;
+ int left = ceData.currentStep % (2*(r2.width() - width));
+ if (left > r2.width() - width)
+ left = 2*(r2.width() - width) - left;
+ r2.setLeft (r2.left() + left);
+ r2.setWidth (width);
+ }
+ setColorsHighlight (p, cg, flags);
+ if (r2.width() > 0)
+ drawRoundRect (p, r2);
+ break;
+ }
+
+ // POPUPMENU ITEM
+ // -------------------------------------------------------------------
+ case CE_PopupMenuItem: {
+ setColorsNormal (p, cg, flags, Style_Active|Style_MouseOver);
+ p->fillRect (r, p->backgroundColor ());
+
+ TQMenuItem *mi = opt.menuItem();
+ if (!mi)
+ break;
+
+ int tab = opt.tabWidth();
+ int checkcol = opt.maxIconWidth();
+ bool checkable = (elementFlags & CEF_IsCheckable);
+ bool reverse = TQApplication::reverseLayout();
+ int x, y, w, h;
+ r.rect( &x, &y, &w, &h );
+
+ if ( checkable )
+ checkcol = QMAX( checkcol, 20 );
+
+ // Are we a menu item separator?
+ if ( mi->isSeparator() ) {
+ p->drawLine (r.left() + 1, r.center().y(), r.right(), r.center().y());
+ break;
+ }
+
+ // Do we have an icon?
+ if ( mi->iconSet() && !mi->iconSet()->isNull() ) {
+ TQIconSet::Mode mode;
+ TQRect cr = visualRect( TQRect(x, y, checkcol, h), r );
+
+ // Select the correct icon from the iconset
+ if (!(flags & Style_Enabled))
+ mode = TQIconSet::Disabled;
+ else if (flags & Style_Active)
+ mode = TQIconSet::Active;
+ else
+ mode = TQIconSet::Normal;
+
+ // Draw the icon
+ TQPixmap pixmap = mi->iconSet()->pixmap( TQIconSet::Small, mode );
+ TQRect pmr( 0, 0, pixmap.width(), pixmap.height() );
+ pmr.moveCenter( cr.center() );
+ p->drawPixmap( pmr.topLeft(), pixmap );
+
+ // Do we have an icon and are checked at the same time?
+ // Then draw a square border around the icon
+ if ( checkable && mi->isChecked() )
+ {
+ drawPrimitive(PE_MenuItemIndicatorIconFrame, p, ceData, elementFlags, r, cg, flags, opt);
+ }
+ }
+
+ // Are we checked? (This time without an icon)
+ else if ( checkable && mi->isChecked() ) {
+ drawPrimitive(PE_MenuItemIndicatorCheck, p, ceData, elementFlags, r, cg, flags, opt);
+ }
+
+ // Time to draw the menu item label...
+ int xm = itemFrame + checkcol + itemHMargin; // X position margin
+
+ int xp = reverse ? // X position
+ x + tab + rightBorder + itemHMargin + itemFrame - 1 :
+ x + xm;
+
+ // Label width (minus the width of the accelerator portion)
+ int tw = w - xm - tab - arrowHMargin - itemHMargin * 3 - itemFrame + 1;
+
+ // Does the menu item draw it's own label?
+ if ( mi->custom() ) {
+ int m = itemVMargin;
+ // Save the painter state in case the custom
+ // paint method changes it in some way
+ p->save();
+ mi->custom()->paint( p, cg, flags & Style_Active, flags & Style_Enabled, xp, y+m, tw, h-2*m );
+ p->restore();
+ }
+ else {
+ // The menu item doesn't draw it's own label
+ TQString s = mi->text();
+
+ // Does the menu item have a text label?
+ if ( !s.isNull() ) {
+ int t = s.find( '\t' );
+ int m = itemVMargin;
+ int text_flags = AlignVCenter | ShowPrefix | DontClip | SingleLine;
+ text_flags |= reverse ? AlignRight : AlignLeft;
+
+ // Does the menu item have a tabstop? (for the accelerator text)
+ if ( t >= 0 ) {
+ int tabx = reverse ? x + rightBorder + itemHMargin + itemFrame :
+ x + w - tab - rightBorder - itemHMargin - itemFrame;
+
+ // Draw the right part of the label (accelerator text)
+ p->drawText( tabx, y+m, tab, h-2*m, text_flags, s.mid( t+1 ) );
+ s = s.left( t );
+ }
+
+ // Draw the left part of the label (or the whole label
+ // if there's no accelerator)
+
+ p->drawText( xp, y+m, tw, h-2*m, text_flags, s, t );
+
+ }
+
+ // The menu item doesn't have a text label
+ // Check if it has a pixmap instead
+ else if ( mi->pixmap() ) {
+ TQPixmap *pixmap = mi->pixmap();
+
+ // Draw the pixmap
+ if ( pixmap->depth() == 1 )
+ p->setBackgroundMode( Qt::OpaqueMode );
+
+ int diffw = ( ( w - pixmap->width() ) / 2 )
+ + ( ( w - pixmap->width() ) % 2 );
+ p->drawPixmap( x+diffw, y+itemFrame, *pixmap );
+
+ if ( pixmap->depth() == 1 )
+ p->setBackgroundMode( Qt::TransparentMode );
+ }
+ }
+
+ // Does the menu item have a submenu?
+ if ( mi->popup() ) {
+ TQ_PrimitiveElement arrow = reverse ? PE_ArrowLeft : PE_ArrowRight;
+ int dim = pixelMetric(PM_MenuButtonIndicator, ceData, elementFlags);
+ TQRect vr = visualRect( TQRect( x + w - arrowHMargin - 2*itemFrame - dim,
+ y + h / 2 - dim / 2, dim, dim), r );
+
+ // Draw an arrow at the far end of the menu item
+ drawArrow (p, vr, arrow);
+ }
+ break;
+ }
+
+ default:
+ TDEStyle::drawControl(element, p, ceData, elementFlags, r, cg, flags, opt, widget);
+ }
+}
+
+void HighContrastStyle::drawControlMask (TQ_ControlElement element,
+ TQPainter *p,
+ const TQStyleControlElementData &ceData,
+ ControlElementFlags elementFlags,
+ const TQRect &r,
+ const TQStyleOption &opt,
+ const TQWidget *w) const
+{
+ switch (element) {
+ case CE_PushButton:
+ case CE_ToolBoxTab:
+ case CE_TabBarTab:
+ case CE_ProgressBarLabel:
+ case CE_TabBarLabel:
+ case CE_RadioButtonLabel:
+ case CE_CheckBoxLabel:
+ case CE_ToolButtonLabel:
+ case CE_PushButtonLabel:
+ case CE_MenuBarEmptyArea:
+ case CE_MenuBarItem:
+ case CE_PopupMenuItem: {
+ p->fillRect (r, color0);
+ break;
+ }
+
+ default: {
+ TDEStyle::drawControlMask (element, p, ceData, elementFlags, r, opt, w);
+ }
+ }
+}
+
+// Helper to find the next sibling that's not hidden
+// Lifted from tdestyle.cpp
+static TQListViewItem* nextVisibleSibling(TQListViewItem* item)
+{
+ TQListViewItem* sibling = item;
+ do
+ {
+ sibling = sibling->nextSibling();
+ }
+ while (sibling && !sibling->isVisible());
+
+ return sibling;
+}
+
+void HighContrastStyle::drawComplexControl (TQ_ComplexControl control,
+ TQPainter *p,
+ const TQStyleControlElementData &ceData,
+ ControlElementFlags elementFlags,
+ const TQRect &r,
+ const TQColorGroup &cg,
+ SFlags flags,
+ SCFlags controls,
+ SCFlags active,
+ const TQStyleOption& opt,
+ const TQWidget *widget ) const
+{
+ switch(control)
+ {
+ // COMBOBOX
+ // -------------------------------------------------------------------
+ case CC_ComboBox: {
+ setColorsText (p, cg, flags);
+ drawRoundRect (p, r);
+
+ TQRect r2 = TQStyle::visualRect (querySubControlMetrics (CC_ComboBox, ceData, elementFlags, SC_ComboBoxArrow, TQStyleOption::Default, widget), ceData, elementFlags);
+ if (flags & Style_HasFocus) {
+ TQRect r3 (r);
+ if (r2.left() > 0)
+ r3.setRight (r2.left()+basicLineWidth-1);
+ else
+ r3.setLeft (r2.right()-basicLineWidth+1);
+
+ drawPrimitive (PE_FocusRect, p, ceData, elementFlags, r3, cg, flags, TQStyleOption (p->backgroundColor()));
+ }
+
+ setColorsButton (p, cg, flags);
+ // Draw arrow if required
+ if (controls & SC_ComboBoxArrow) {
+ drawRoundRect (p, r2);
+ drawArrow (p, r2, PE_ArrowDown, 2*basicLineWidth);
+ }
+
+ setColorsText (p, cg, flags);
+ break;
+ }
+
+ // SPINWIDGET
+ // -------------------------------------------------------------------
+ case CC_SpinWidget: {
+ if (controls & SC_SpinWidgetFrame) {
+ setColorsText (p, cg, flags);
+ drawRoundRect (p, r);
+ if (flags & Style_HasFocus)
+ drawPrimitive(PE_FocusRect, p, ceData, elementFlags, r, cg, flags, TQStyleOption (p->backgroundColor()));
+ }
+
+ setColorsButton (p, cg, flags);
+ // Draw arrows if required
+ if (controls & SC_SpinWidgetDown) {
+ TQRect r2 = TQStyle::visualRect (querySubControlMetrics ((TQ_ComplexControl)CC_SpinWidget, ceData, elementFlags, SC_SpinWidgetDown, TQStyleOption::Default, widget), ceData, elementFlags);
+ drawRoundRect (p, r2);
+ drawArrow (p, r2, PE_SpinWidgetDown, 2*basicLineWidth);
+ }
+ if (controls & SC_SpinWidgetUp) {
+ TQRect r2 = TQStyle::visualRect (querySubControlMetrics ((TQ_ComplexControl)CC_SpinWidget, ceData, elementFlags, SC_SpinWidgetUp, TQStyleOption::Default, widget), ceData, elementFlags);
+ drawRoundRect (p, r2);
+ drawArrow (p, r2, PE_SpinWidgetUp, 2*basicLineWidth);
+ }
+
+ setColorsText (p, cg, flags);
+ break;
+ }
+
+ // TOOLBUTTON
+ // -------------------------------------------------------------------
+ case CC_ToolButton: {
+ setColorsButton (p, cg, flags);
+ p->fillRect (r, p->backgroundColor ());
+
+ TQRect button, menuarea;
+ button = querySubControlMetrics(control, ceData, elementFlags, SC_ToolButton, opt, widget);
+ menuarea = querySubControlMetrics(control, ceData, elementFlags, SC_ToolButtonMenu, opt, widget);
+
+ SFlags bflags = flags,
+ mflags = flags;
+
+ if (active & SC_ToolButton)
+ bflags |= Style_Down;
+ if (active & SC_ToolButtonMenu)
+ mflags |= Style_Down;
+
+ if (controls & SC_ToolButton)
+ {
+ // If we're pressed, on, or raised...
+ if (bflags & (Style_Down | Style_On | Style_Raised))
+ drawPrimitive(PE_ButtonTool, p, ceData, elementFlags, button, cg, bflags, opt);
+
+ // Check whether to draw a background pixmap
+ else if ( !ceData.parentWidgetData.bgPixmap.isNull() )
+ {
+ TQPixmap pixmap = ceData.parentWidgetData.bgPixmap;
+ p->drawTiledPixmap( r, pixmap, ceData.pos );
+ }
+ }
+
+ // Draw a toolbutton menu indicator if required
+ if (controls & SC_ToolButtonMenu)
+ {
+ if (mflags & (Style_Down | Style_On | Style_Raised))
+ drawPrimitive(PE_ButtonDropDown, p, ceData, elementFlags, menuarea, cg, mflags, opt);
+ drawArrow (p, menuarea, PE_ArrowDown);
+ }
+
+ if ((elementFlags & CEF_HasFocus) && !(elementFlags & CEF_HasFocusProxy)) {
+ TQRect fr = ceData.rect;
+ addOffset (&fr, 3);
+ drawPrimitive(PE_FocusRect, p, ceData, elementFlags, fr, cg, flags, TQStyleOption (p->backgroundColor()));
+ }
+
+ break;
+ }
+
+ // LISTVIEW
+ // -------------------------------------------------------------------
+ case CC_ListView: {
+ /*
+ * Sigh... Lifted and modified from tdestyle.cpp
+ */
+ /*
+ * Many thanks to TrollTech AS for donating CC_ListView from TQWindowsStyle.
+ * CC_ListView code is Copyright (C) 1998-2000 TrollTech AS.
+ */
+
+ // Paint the icon and text.
+ if ( controls & SC_ListView )
+ TQCommonStyle::drawComplexControl( control, p, ceData, elementFlags, r, cg, flags, controls, active, opt, widget );
+
+ // If we're have a branch or are expanded...
+ if ( controls & (SC_ListViewBranch | SC_ListViewExpand) )
+ {
+ // If no list view item was supplied, break
+ if (opt.isDefault())
+ break;
+
+ TQListViewItem *item = opt.listViewItem();
+ TQListViewItem *child = item->firstChild();
+
+ int y = r.y();
+ int c; // dotline vertice count
+ int dotoffset = 0;
+ TQPointArray dotlines;
+
+ if ( active == SC_All && controls == SC_ListViewExpand ) {
+ // We only need to draw a vertical line
+ c = 2;
+ dotlines.resize(2);
+ dotlines[0] = TQPoint( r.right(), r.top() );
+ dotlines[1] = TQPoint( r.right(), r.bottom() );
+
+ } else {
+
+ int linetop = 0, linebot = 0;
+ // each branch needs at most two lines, ie. four end points
+ dotoffset = (item->itemPos() + item->height() - y) % 2;
+ dotlines.resize( item->childCount() * 4 );
+ c = 0;
+
+ // skip the stuff above the exposed rectangle
+ while ( child && y + child->height() <= 0 )
+ {
+ y += child->totalHeight();
+ child = nextVisibleSibling(child);
+ }
+
+ int bx = r.width() / 2;
+
+ // paint stuff in the magical area
+ TQListView* v = item->listView();
+ int lh = QMAX( p->fontMetrics().height() + 2 * v->itemMargin(),
+ TQApplication::globalStrut().height() );
+ if ( lh % 2 > 0 )
+ lh++;
+
+ // Draw all the expand/close boxes...
+ TQRect boxrect;
+ TQStyle::StyleFlags boxflags;
+ while ( child && y < r.height() )
+ {
+ linebot = y + lh/2;
+ if ( (child->isExpandable() || child->childCount()) &&
+ (child->height() > 0) )
+ {
+ int h = QMIN(lh, 24) - 4*basicLineWidth;
+ if (h < 10)
+ h = 10;
+ else
+ h &= ~1; // Force an even number of pixels
+
+ // The primitive requires a rect.
+ boxrect = TQRect( bx-h/2, linebot-h/2, h, h );
+ boxflags = child->isOpen() ? TQStyle::Style_Off : TQStyle::Style_On;
+
+ // TDEStyle extension: Draw the box and expand/collapse indicator
+ drawTDEStylePrimitive( KPE_ListViewExpander, p, ceData, elementFlags, boxrect, cg, boxflags, opt, NULL );
+
+ // dotlinery
+ p->setPen( cg.mid() );
+ dotlines[c++] = TQPoint( bx, linetop );
+ dotlines[c++] = TQPoint( bx, linebot - 5 );
+ dotlines[c++] = TQPoint( bx + 5, linebot );
+ dotlines[c++] = TQPoint( r.width(), linebot );
+ linetop = linebot + 5;
+ } else {
+ // just dotlinery
+ dotlines[c++] = TQPoint( bx+1, linebot );
+ dotlines[c++] = TQPoint( r.width(), linebot );
+ }
+
+ y += child->totalHeight();
+ child = nextVisibleSibling(child);
+ }
+
+ if ( child ) // there's a child to draw, so move linebot to edge of rectangle
+ linebot = r.height();
+
+ if ( linetop < linebot )
+ {
+ dotlines[c++] = TQPoint( bx, linetop );
+ dotlines[c++] = TQPoint( bx, linebot );
+ }
+ }
+
+ // Draw all the branches...
+ static int thickness = kPixelMetric( KPM_ListViewBranchThickness, ceData, elementFlags );
+ int line; // index into dotlines
+ TQRect branchrect;
+ TQStyle::StyleFlags branchflags;
+ for( line = 0; line < c; line += 2 )
+ {
+ // assumptions here: lines are horizontal or vertical.
+ // lines always start with the numerically lowest
+ // coordinate.
+
+ // point ... relevant coordinate of current point
+ // end ..... same coordinate of the end of the current line
+ // other ... the other coordinate of the current point/line
+ if ( dotlines[line].y() == dotlines[line+1].y() )
+ {
+ // Horizontal branch
+ int end = dotlines[line+1].x();
+ int point = dotlines[line].x();
+ int other = dotlines[line].y();
+
+ branchrect = TQRect( point, other-(thickness/2), end-point, thickness );
+ branchflags = TQStyle::Style_Horizontal;
+
+ // TDEStyle extension: Draw the horizontal branch
+ drawTDEStylePrimitive( KPE_ListViewBranch, p, ceData, elementFlags, branchrect, cg, branchflags, opt, NULL );
+
+ } else {
+ // Vertical branch
+ int end = dotlines[line+1].y();
+ int point = dotlines[line].y();
+ int other = dotlines[line].x();
+ int pixmapoffset = ((point & 1) != dotoffset ) ? 1 : 0;
+
+ branchrect = TQRect( other-(thickness/2), point, thickness, end-point );
+ if (!pixmapoffset) // ### Hackish - used to hint the offset
+ branchflags = TQStyle::Style_NoChange;
+ else
+ branchflags = TQStyle::Style_Default;
+
+ // TDEStyle extension: Draw the vertical branch
+ drawTDEStylePrimitive( KPE_ListViewBranch, p, ceData, elementFlags, branchrect, cg, branchflags, opt, NULL );
+ }
+ }
+ }
+ break;
+ }
+
+ default:
+ TDEStyle::drawComplexControl(control, p, ceData, elementFlags,
+ r, cg, flags, controls, active, opt, widget);
+ break;
+ }
+}
+
+void HighContrastStyle::drawComplexControlMask(TQ_ComplexControl c,
+ TQPainter *p,
+ const TQStyleControlElementData &ceData,
+ const ControlElementFlags elementFlags,
+ const TQRect &r,
+ const TQStyleOption &o,
+ const TQWidget *w) const
+{
+ switch (c) {
+ case CC_SpinWidget:
+ case CC_ToolButton:
+ case CC_ComboBox: {
+ p->fillRect (r, color0);
+ break;
+ }
+ default: {
+ TDEStyle::drawComplexControlMask (c, p, ceData, elementFlags, r, o, w);
+ }
+ }
+}
+
+void HighContrastStyle::drawItem( TQPainter *p,
+ const TQRect &r,
+ int flags,
+ const TQColorGroup &cg,
+ bool enabled,
+ const TQPixmap *pixmap,
+ const TQString &text,
+ int len,
+ const TQColor *penColor ) const
+{
+ p->save();
+
+ // make the disabled things use the cross-line
+ TQFont font = p->font();
+ font.setStrikeOut (!enabled);
+ p->setFont (font);
+
+ enabled = true; //do not ghost it in Qt
+
+ TDEStyle::drawItem (p, r, flags, cg, enabled, pixmap, text, len, penColor);
+
+ p->restore();
+}
+
+TQRect HighContrastStyle::querySubControlMetrics( TQ_ComplexControl control,
+ const TQStyleControlElementData &ceData,
+ ControlElementFlags elementFlags,
+ SubControl subcontrol,
+ const TQStyleOption& opt,
+ const TQWidget* widget ) const
+{
+ switch (control)
+ {
+ case CC_ComboBox : {
+ int arrow = pixelMetric (PM_ScrollBarExtent, ceData, elementFlags, widget);
+ switch (subcontrol)
+ {
+ case SC_ComboBoxFrame:
+ return TQRect (0, 0, ceData.rect.width(), ceData.rect.height());
+ case SC_ComboBoxArrow:
+ return TQRect (ceData.rect.width() - arrow, 0, arrow, ceData.rect.height());
+ case SC_ComboBoxEditField:
+ return TQRect (2*basicLineWidth, 2*basicLineWidth,
+ ceData.rect.width() - arrow - 3*basicLineWidth, ceData.rect.height() - 4*basicLineWidth);
+
+ default: break;
+ }
+ break;
+ }
+ case CC_SpinWidget : {
+ int arrow = pixelMetric (PM_ScrollBarExtent, ceData, elementFlags, 0);
+ switch (subcontrol)
+ {
+ case SC_SpinWidgetFrame:
+ return TQRect (0, 0, ceData.rect.width(), ceData.rect.height());
+ case SC_SpinWidgetButtonField:
+ return TQRect (ceData.rect.width() - arrow, 0, arrow, ceData.rect.height());
+ case SC_SpinWidgetUp:
+ return TQRect (ceData.rect.width() - arrow, 0, arrow, ceData.rect.height()/2);
+ case SC_SpinWidgetDown:
+ return TQRect (ceData.rect.width() - arrow, ceData.rect.height()/2,
+ arrow, ceData.rect.height()-ceData.rect.height()/2);
+ case SC_SpinWidgetEditField:
+ return TQRect (2*basicLineWidth, 2*basicLineWidth,
+ ceData.rect.width() - arrow - 3*basicLineWidth, ceData.rect.height() - 4*basicLineWidth);
+
+ default: break;
+ }
+ break;
+ }
+
+ default: break;
+ }
+
+ return TDEStyle::querySubControlMetrics (control, ceData, elementFlags, subcontrol, opt, widget);
+}
+
+
+int HighContrastStyle::pixelMetric(PixelMetric m, const TQStyleControlElementData &ceData, ControlElementFlags elementFlags, const TQWidget *widget) const
+{
+ //### TODO: Use the tab metrics changes from Ker.
+ switch(m)
+ {
+ // BUTTONS
+ // -------------------------------------------------------------------
+ case PM_ButtonMargin: // Space btw. frame and label
+ return 2*basicLineWidth;
+
+ case PM_ButtonDefaultIndicator: {
+ if ((widget != 0) && !(elementFlags & CEF_IsEnabled))
+ return 0;
+ else
+ return 2*basicLineWidth;
+ }
+
+ case PM_ButtonShiftHorizontal:
+ case PM_ButtonShiftVertical:
+ return 0;
+
+ case PM_ScrollBarExtent: {
+ int h = 0;
+ if (widget != 0)
+ h = (2*TQFontMetrics(ceData.font).lineSpacing())/3;
+
+ if (h > 9*basicLineWidth+4)
+ return h;
+ else
+ return 9*basicLineWidth+4;
+ }
+
+ case PM_DefaultFrameWidth: {
+ if (widget && (ceData.widgetObjectTypes.contains (TQLINEEDIT_OBJECT_NAME_STRING) || ceData.widgetObjectTypes.contains (TQTEXTEDIT_OBJECT_NAME_STRING)))
+ return 2*basicLineWidth;
+ else
+ return basicLineWidth;
+ }
+
+ case PM_SpinBoxFrameWidth: {
+ return 2*basicLineWidth;
+ }
+
+ case PM_MenuButtonIndicator: { // Arrow width
+ int h = 0;
+ if (widget != 0)
+ h = TQFontMetrics(ceData.font).lineSpacing()/2;
+
+ if (h > 3*basicLineWidth)
+ return h;
+ else
+ return 3*basicLineWidth;
+ }
+
+ // CHECKBOXES / RADIO BUTTONS
+ // -------------------------------------------------------------------
+ case PM_ExclusiveIndicatorWidth: // Radiobutton size
+ case PM_ExclusiveIndicatorHeight:
+ case PM_IndicatorWidth: // Checkbox size
+ case PM_IndicatorHeight: {
+ int h = 0;
+ if (widget != 0)
+ h = TQFontMetrics(ceData.font).lineSpacing()-2*basicLineWidth;
+
+ if (h > 6*basicLineWidth)
+ return h;
+ else
+ return 6*basicLineWidth;
+ }
+
+ case PM_DockWindowSeparatorExtent: {
+ return 2*basicLineWidth + 1;
+ }
+ case PM_DockWindowHandleExtent: {
+ int w = 0;
+ if (widget != 0)
+ w = TQFontMetrics(ceData.font).lineSpacing()/4;
+ if (w > 5*basicLineWidth)
+ return w;
+ else
+ return 5*basicLineWidth;
+ }
+
+ case PM_MenuIndicatorFrameHBorder:
+ case PM_MenuIndicatorFrameVBorder:
+ case PM_MenuIconIndicatorFrameHBorder:
+ case PM_MenuIconIndicatorFrameVBorder:
+ return 0;
+
+ default:
+ return TDEStyle::pixelMetric(m, ceData, elementFlags, widget);
+ }
+}
+
+int HighContrastStyle::kPixelMetric( TDEStylePixelMetric kpm, const TQStyleControlElementData &ceData, ControlElementFlags elementFlags, const TQWidget *widget ) const
+{
+ switch (kpm) {
+ case KPM_ListViewBranchThickness:
+ // XXX Proper support of thick branches requires reimplementation of
+ // the drawTDEStylePrimitive KPE_ListViewBranch case.
+ return basicLineWidth;
+ default:
+ return TDEStyle::kPixelMetric(kpm, ceData, elementFlags, widget);
+ }
+}
+
+TQSize HighContrastStyle::sizeFromContents( ContentsType contents,
+ const TQStyleControlElementData &ceData,
+ ControlElementFlags elementFlags,
+ const TQSize &contentSize,
+ const TQStyleOption& opt,
+ const TQWidget* widget ) const
+{
+ switch (contents)
+ {
+ // PUSHBUTTON SIZE
+ // ------------------------------------------------------------------
+ case CT_PushButton: {
+ const TQPushButton* button = (const TQPushButton*) widget;
+ int w = contentSize.width();
+ int h = contentSize.height();
+ int bm = pixelMetric( PM_ButtonMargin, ceData, elementFlags, widget );
+ int fw = pixelMetric( PM_DefaultFrameWidth, ceData, elementFlags, widget ) * 2;
+
+ w += bm + fw + 6; // ### Add 6 to make way for bold font.
+ h += bm + fw;
+
+ // Ensure we stick to standard width and heights.
+ if (( button->isDefault() || button->autoDefault() ) && (button->isEnabled())) {
+ if ( w < 80 && !button->text().isEmpty() )
+ w = 80;
+
+ // Compensate for default indicator
+ int di = pixelMetric( PM_ButtonDefaultIndicator, ceData, elementFlags );
+ w += di * 2;
+ h += di * 2;
+ }
+
+ if ( h < 22 )
+ h = 22;
+
+ return TQSize( w + basicLineWidth*2, h + basicLineWidth*2 );
+ }
+
+ // TOOLBUTTON SIZE
+ // -----------------------------------------------------------------
+ case CT_ToolButton: {
+ int w = contentSize.width();
+ int h = contentSize.height();
+ return TQSize(w + basicLineWidth*2 + 6, h + basicLineWidth*2 + 5);
+ break;
+ }
+
+ // COMBOBOX SIZE
+ // -----------------------------------------------------------------
+ case CT_ComboBox: {
+ const TQComboBox *cb = static_cast< const TQComboBox* > (widget);
+ int borderSize = (cb->editable() ? 4 : 2) * basicLineWidth;
+ int arrowSize = pixelMetric (PM_ScrollBarExtent, ceData, elementFlags, cb);
+ return TQSize(borderSize + basicLineWidth + arrowSize, borderSize) + contentSize;
+ }
+
+ // POPUPMENU ITEM SIZE
+ // -----------------------------------------------------------------
+ case CT_PopupMenuItem: {
+ if ( ! widget || opt.isDefault() )
+ return contentSize;
+
+ const TQPopupMenu *popup = (const TQPopupMenu *) widget;
+ bool checkable = popup->isCheckable();
+ TQMenuItem *mi = opt.menuItem();
+ int maxpmw = opt.maxIconWidth();
+ int w = contentSize.width(), h = contentSize.height();
+
+ if ( mi->custom() ) {
+ w = mi->custom()->sizeHint().width();
+ h = mi->custom()->sizeHint().height();
+ if ( ! mi->custom()->fullSpan() )
+ h += 2*itemVMargin + 2*itemFrame;
+ }
+ else if ( mi->widget() ) {
+ } else if ( mi->isSeparator() ) {
+ w = 10; // Arbitrary
+ h = 4;
+ }
+ else {
+ if ( mi->pixmap() )
+ h = QMAX( h, mi->pixmap()->height() + 2*itemFrame );
+ else {
+ // Ensure that the minimum height for text-only menu items
+ // is the same as the icon size used by KDE.
+ h = QMAX( h, 16 + 2*itemFrame );
+ h = QMAX( h, popup->fontMetrics().height()
+ + 2*itemVMargin + 2*itemFrame );
+ }
+
+ if ( mi->iconSet() && ! mi->iconSet()->isNull() )
+ h = QMAX( h, mi->iconSet()->pixmap(
+ TQIconSet::Small, TQIconSet::Normal).height() +
+ 2 * itemFrame );
+ }
+
+ if ( ! mi->text().isNull() && mi->text().find('\t') >= 0 )
+ w += 12;
+ else if ( mi->popup() )
+ w += 2 * arrowHMargin;
+
+ if ( maxpmw )
+ w += maxpmw + 6;
+ if ( checkable && maxpmw < 20 )
+ w += 20 - maxpmw;
+ if ( checkable || maxpmw > 0 )
+ w += 12;
+
+ w += rightBorder;
+
+ return TQSize( w, h );
+ }
+
+
+ // LINEDIT SIZE
+ // -----------------------------------------------------------------
+ case CT_LineEdit: {
+ return contentSize + TQSize (4*basicLineWidth, 4*basicLineWidth);
+ }
+
+
+ default:
+ return TDEStyle::sizeFromContents( contents, ceData, elementFlags, contentSize, opt, widget );
+ }
+}
+
+TQRect HighContrastStyle::subRect (SubRect subrect, const TQStyleControlElementData &ceData, const ControlElementFlags elementFlags, const TQWidget * widget) const
+{
+ switch (subrect) {
+ case SR_ProgressBarGroove:
+ case SR_ProgressBarContents:
+ case SR_ProgressBarLabel:
+ return ceData.rect;
+ default:
+ return TDEStyle::subRect (subrect, ceData, elementFlags, widget);
+ }
+}
+
+bool HighContrastStyle::objectEventHandler( const TQStyleControlElementData &ceData, ControlElementFlags elementFlags, void* source, TQEvent *event )
+{
+ return TDEStyle::objectEventHandler (ceData, elementFlags, source, event);
+}
+
+/*! \reimp */
+int HighContrastStyle::styleHint(StyleHint sh, const TQStyleControlElementData &ceData, ControlElementFlags elementFlags, const TQStyleOption &opt, TQStyleHintReturn *returnData, const TQWidget *w) const
+{
+ int ret;
+
+ switch (sh) {
+ case SH_MenuIndicatorColumnWidth:
+ {
+ int checkcol = opt.maxIconWidth();
+ bool checkable = (elementFlags & CEF_IsCheckable);
+
+ if ( checkable )
+ checkcol = QMAX( checkcol, 20 );
+
+ ret = checkcol;
+ }
+ break;
+ default:
+ ret = TDEStyle::styleHint(sh, ceData, elementFlags, opt, returnData, w);
+ break;
+ }
+
+ return ret;
+}
+
+// vim: set noet ts=4 sw=4:
+// kate: indent-width 4; replace-tabs off; smart-indent on; tab-width 4;