You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1553 lines
44 KiB
1553 lines
44 KiB
/****************************************************************************
|
|
**
|
|
** Implementation of Platinum-like style class
|
|
**
|
|
** Created : 981231
|
|
**
|
|
** Copyright (C) 1998-2008 Trolltech ASA. All rights reserved.
|
|
**
|
|
** This file is part of the widgets module of the TQt GUI Toolkit.
|
|
**
|
|
** This file may be used under the terms of the GNU General
|
|
** Public License versions 2.0 or 3.0 as published by the Free
|
|
** Software Foundation and appearing in the files LICENSE.GPL2
|
|
** and LICENSE.GPL3 included in the packaging of this file.
|
|
** Alternatively you may (at your option) use any later version
|
|
** of the GNU General Public License if such license has been
|
|
** publicly approved by Trolltech ASA (or its successors, if any)
|
|
** and the KDE Free TQt Foundation.
|
|
**
|
|
** Please review the following information to ensure GNU General
|
|
** Public Licensing requirements will be met:
|
|
** http://trolltech.com/products/qt/licenses/licensing/opensource/.
|
|
** If you are unsure which license is appropriate for your use, please
|
|
** review the following information:
|
|
** http://trolltech.com/products/qt/licenses/licensing/licensingoverview
|
|
** or contact the sales department at sales@trolltech.com.
|
|
**
|
|
** This file may be used under the terms of the Q Public License as
|
|
** defined by Trolltech ASA and appearing in the file LICENSE.TQPL
|
|
** included in the packaging of this file. Licensees holding valid TQt
|
|
** Commercial licenses may use this file in accordance with the TQt
|
|
** Commercial License Agreement provided with the Software.
|
|
**
|
|
** This file is provided "AS IS" with NO WARRANTY OF ANY KIND,
|
|
** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR
|
|
** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted
|
|
** herein.
|
|
**
|
|
**********************************************************************/
|
|
|
|
#include "ntqplatinumstyle.h"
|
|
|
|
#if !defined(QT_NO_STYLE_PLATINUM) || defined(QT_PLUGIN)
|
|
|
|
#include "ntqapplication.h"
|
|
#include "ntqcombobox.h"
|
|
#include "ntqdrawutil.h"
|
|
#include "ntqpainter.h"
|
|
#include "ntqpalette.h"
|
|
#include "ntqpixmap.h"
|
|
#include "ntqpushbutton.h"
|
|
#include "ntqscrollbar.h"
|
|
#include "ntqslider.h"
|
|
#include <limits.h>
|
|
|
|
/*!
|
|
\class TQPlatinumStyle ntqplatinumstyle.h
|
|
\brief The TQPlatinumStyle class provides Mac/Platinum look and feel.
|
|
|
|
\ingroup appearance
|
|
|
|
This class implements the Platinum look and feel. It's an
|
|
experimental class that tries to resemble a Macinosh-like GUI
|
|
style with the TQStyle system. The emulation is currently far from
|
|
perfect.
|
|
|
|
\sa TQAquaStyle
|
|
*/
|
|
|
|
|
|
/*!
|
|
Constructs a TQPlatinumStyle
|
|
*/
|
|
TQPlatinumStyle::TQPlatinumStyle()
|
|
{
|
|
}
|
|
|
|
/*!\reimp
|
|
*/
|
|
TQPlatinumStyle::~TQPlatinumStyle()
|
|
{
|
|
}
|
|
|
|
|
|
/*!\reimp
|
|
*/
|
|
void TQPlatinumStyle::drawPrimitive( 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_HeaderSection:
|
|
{
|
|
// adjust the sunken flag, otherwise headers are drawn
|
|
// sunken...
|
|
if ( flags & Style_Sunken )
|
|
flags ^= Style_Sunken;
|
|
drawPrimitive( PE_ButtonBevel, p, ceData, elementFlags, r, cg, flags, opt );
|
|
break;
|
|
}
|
|
case PE_ButtonTool:
|
|
{
|
|
// tool buttons don't change color when pushed in platinum,
|
|
// so we need to make the mid and button color the same
|
|
TQColorGroup myCG = cg;
|
|
TQBrush fill;
|
|
|
|
// quick trick to make sure toolbuttons drawn sunken
|
|
// when they are activated...
|
|
if ( flags & Style_On )
|
|
flags |= Style_Sunken;
|
|
|
|
fill = myCG.brush( TQColorGroup::Button );
|
|
myCG.setBrush( TQColorGroup::Mid, fill );
|
|
drawPrimitive( PE_ButtonBevel, p, ceData, elementFlags, r, myCG, flags, opt );
|
|
break;
|
|
}
|
|
case PE_ButtonBevel:
|
|
{
|
|
int x,
|
|
y,
|
|
w,
|
|
h;
|
|
r.rect( &x, &y, &w, &h );
|
|
|
|
TQPen oldPen = p->pen();
|
|
if ( w * h < 1600 ||
|
|
TQABS(w - h) > 10 ) {
|
|
// small buttons
|
|
|
|
if ( !(flags & (Style_Sunken | Style_Down)) ) {
|
|
p->fillRect( x + 2, y + 2, w - 4, h - 4,
|
|
cg.brush(TQColorGroup::Button) );
|
|
// the bright side
|
|
p->setPen( cg.dark() );
|
|
// the bright side
|
|
p->setPen( cg.dark() );
|
|
p->drawLine( x, y, x + w - 1, y );
|
|
p->drawLine( x, y, x, y + h - 1 );
|
|
|
|
p->setPen( cg.light() );
|
|
p->drawLine( x + 1, y + 1, x + w - 2, y + 1 );
|
|
p->drawLine( x + 1, y + 1, x + 1, y + h - 2 );
|
|
|
|
// the dark side
|
|
p->setPen( cg.mid() );
|
|
p->drawLine( x + 2, y + h - 2, x + w - 2, y + h - 2 );
|
|
p->drawLine( x + w - 2, y + 2, x + w - 2, y + h - 3 );
|
|
|
|
p->setPen( cg.dark().dark() );
|
|
p->drawLine( x + 1, y + h - 1, x + w - 1,
|
|
y + h - 1 );
|
|
p->drawLine( x + w - 1, y + 1,
|
|
x + w - 1,
|
|
y + h - 2 );
|
|
} else {
|
|
p->fillRect(x + 2, y + 2,
|
|
w - 4, h - 4,
|
|
cg.brush( TQColorGroup::Mid ));
|
|
|
|
// the dark side
|
|
p->setPen( cg.dark().dark() );
|
|
p->drawLine( x, y, x + w - 1, y );
|
|
p->drawLine( x, y, x, y + h - 1 );
|
|
|
|
p->setPen( cg.mid().dark());
|
|
p->drawLine( x + 1, y + 1,
|
|
x + w-2, y + 1);
|
|
p->drawLine( x + 1, y + 1,
|
|
x + 1, y + h - 2 );
|
|
|
|
|
|
// the bright side!
|
|
|
|
p->setPen(cg.button());
|
|
p->drawLine( x + 1, y + h - 2,
|
|
x + w - 2,
|
|
y + h - 2 );
|
|
p->drawLine( x + w - 2, y + 1,
|
|
x + w - 2,
|
|
y + h - 2 );
|
|
p->setPen(cg.dark());
|
|
p->drawLine(x, y + h - 1,
|
|
x + w - 1,
|
|
y + h - 1 );
|
|
p->drawLine(x + w - 1, y,
|
|
x + w - 1,
|
|
y + h - 1 );
|
|
}
|
|
} else {
|
|
// big ones
|
|
if ( !(flags & (Style_Sunken | Style_Down)) ) {
|
|
p->fillRect( x + 3, y + 3, w - 6,
|
|
h - 6,
|
|
cg.brush(TQColorGroup::Button) );
|
|
|
|
// the bright side
|
|
p->setPen( cg.button().dark() );
|
|
p->drawLine( x, y, x + w - 1, y );
|
|
p->drawLine( x, y, x, y + h - 1 );
|
|
|
|
p->setPen( cg.button() );
|
|
p->drawLine( x + 1, y + 1,
|
|
x + w - 2, y + 1 );
|
|
p->drawLine( x + 1, y + 1,
|
|
x + 1, y + h - 2 );
|
|
|
|
p->setPen( cg.light() );
|
|
p->drawLine( x + 2, y + 2,
|
|
x + 2, y + h - 2 );
|
|
p->drawLine( x + 2, y + 2,
|
|
x + w - 2, y + 2 );
|
|
// the dark side!
|
|
|
|
p->setPen( cg.mid() );
|
|
p->drawLine( x + 3, y + h - 3,
|
|
x + w - 3,
|
|
y + h - 3 );
|
|
p->drawLine( x + w - 3, y + 3,
|
|
x + w - 3,
|
|
y + h - 3 );
|
|
p->setPen( cg.dark() );
|
|
p->drawLine( x + 2, y + h - 2,
|
|
x + w - 2,
|
|
y + h - 2 );
|
|
p->drawLine( x + w - 2, y + 2,
|
|
x + w - 2,
|
|
y + h - 2 );
|
|
|
|
p->setPen( cg.dark().dark() );
|
|
p->drawLine( x + 1, y + h - 1,
|
|
x + w - 1,
|
|
y + h - 1 );
|
|
p->drawLine( x + w - 1, y + 1,
|
|
x + w - 1,
|
|
y + h - 1 );
|
|
} else {
|
|
p->fillRect( x + 3, y + 3, w - 6,
|
|
h - 6,
|
|
cg.brush( TQColorGroup::Mid ) );
|
|
|
|
// the dark side
|
|
p->setPen( cg.dark().dark().dark() );
|
|
p->drawLine( x, y, x + w - 1, y );
|
|
p->drawLine( x, y, x, y + h - 1 );
|
|
|
|
p->setPen( cg.dark().dark() );
|
|
p->drawLine( x + 1, y + 1,
|
|
x + w - 2, y + 1 );
|
|
p->drawLine( x + 1, y + 1,
|
|
x + 1, y + h - 2 );
|
|
|
|
p->setPen( cg.mid().dark() );
|
|
p->drawLine( x + 2, y + 2,
|
|
x + 2, y + w - 2 );
|
|
p->drawLine( x + 2, y + 2,
|
|
x + w - 2, y + 2 );
|
|
|
|
|
|
// the bright side!
|
|
|
|
p->setPen( cg.button() );
|
|
p->drawLine( x + 2, y + h - 3,
|
|
x + w - 3,
|
|
y + h - 3 );
|
|
p->drawLine( x + w - 3, y + 3,
|
|
x + w - 3,
|
|
y + h - 3 );
|
|
|
|
p->setPen( cg.midlight() );
|
|
p->drawLine( x + 1, y + h - 2,
|
|
x + w - 2,
|
|
y + h - 2 );
|
|
p->drawLine( x + w - 2, y + 1,
|
|
x + w - 2,
|
|
y + h - 2 );
|
|
|
|
p->setPen( cg.dark() );
|
|
p->drawLine( x, y + h - 1,
|
|
x + w - 1,
|
|
y + h - 1 );
|
|
p->drawLine( x + w - 1, y,
|
|
x + w - 1,
|
|
y + h - 1 );
|
|
|
|
|
|
// corners
|
|
p->setPen( mixedColor(cg.dark().dark().dark(),
|
|
cg.dark()) );
|
|
p->drawPoint( x, y + h - 1 );
|
|
p->drawPoint( x + w - 1, y );
|
|
|
|
p->setPen( mixedColor(cg.dark().dark(), cg.midlight()) );
|
|
p->drawPoint( x + 1, y + h - 2 );
|
|
p->drawPoint( x + w - 2, y + 1 );
|
|
|
|
p->setPen( mixedColor(cg.mid().dark(), cg.button() ) );
|
|
p->drawPoint( x + 2, y + h - 3 );
|
|
p->drawPoint( x + w - 3, y + 2 );
|
|
}
|
|
}
|
|
p->setPen( oldPen );
|
|
break;
|
|
}
|
|
case PE_ButtonCommand:
|
|
{
|
|
TQPen oldPen = p->pen();
|
|
int x,
|
|
y,
|
|
w,
|
|
h;
|
|
r.rect( &x, &y, &w, &h);
|
|
|
|
if ( !(flags & (Style_Down | Style_On)) ) {
|
|
p->fillRect( x+3, y+3, w-6, h-6,
|
|
cg.brush( TQColorGroup::Button ));
|
|
// the bright side
|
|
p->setPen( cg.shadow() );
|
|
p->drawLine( x, y, x+w-1, y );
|
|
p->drawLine( x, y, x, y + h - 1 );
|
|
|
|
p->setPen( cg.button() );
|
|
p->drawLine( x + 1, y + 1, x + w - 2, y + 1 );
|
|
p->drawLine( x + 1, y + 1, x + 1, y + h - 2 );
|
|
|
|
p->setPen( cg.light() );
|
|
p->drawLine( x + 2, y + 2, x + 2, y + h - 2 );
|
|
p->drawLine( x + 2, y + 2, x + w - 2, y + 2 );
|
|
|
|
|
|
// the dark side!
|
|
|
|
p->setPen( cg.mid() );
|
|
p->drawLine( x + 3, y + h - 3 ,x + w - 3, y + h - 3 );
|
|
p->drawLine( x + w - 3, y + 3, x + w - 3, y + h - 3 );
|
|
|
|
p->setPen( cg.dark() );
|
|
p->drawLine( x + 2, y + h - 2, x + w - 2, y + h - 2 );
|
|
p->drawLine( x + w - 2, y + 2, x + w - 2, y + h - 2 );
|
|
|
|
p->setPen( cg.shadow() );
|
|
p->drawLine( x + 1, y + h - 1, x + w - 1, y + h - 1 );
|
|
p->drawLine( x + w - 1, y, x + w - 1, y + h - 1 );
|
|
|
|
|
|
// top left corner:
|
|
p->setPen( cg.background() );
|
|
p->drawPoint( x, y );
|
|
p->drawPoint( x + 1, y );
|
|
p->drawPoint( x, y+1 );
|
|
p->setPen( cg.shadow() );
|
|
p->drawPoint( x + 1, y + 1 );
|
|
p->setPen( cg.button() );
|
|
p->drawPoint( x + 2, y + 2 );
|
|
p->setPen( white );
|
|
p->drawPoint( x + 3, y + 3 );
|
|
// bottom left corner:
|
|
p->setPen( cg.background() );
|
|
p->drawPoint( x, y + h - 1 );
|
|
p->drawPoint( x + 1, y + h - 1 );
|
|
p->drawPoint( x, y + h - 2 );
|
|
p->setPen( cg.shadow() );
|
|
p->drawPoint( x + 1, y + h - 2 );
|
|
p->setPen( cg.dark() );
|
|
p->drawPoint( x + 2, y + h - 3 );
|
|
// top right corner:
|
|
p->setPen( cg.background() );
|
|
p->drawPoint( x + w -1, y );
|
|
p->drawPoint( x + w - 2, y );
|
|
p->drawPoint( x + w - 1, y + 1 );
|
|
p->setPen( cg.shadow() );
|
|
p->drawPoint( x + w - 2, y + 1 );
|
|
p->setPen( cg.dark() );
|
|
p->drawPoint( x + w - 3, y + 2 );
|
|
// bottom right corner:
|
|
p->setPen( cg.background() );
|
|
p->drawPoint( x + w - 1, y + h - 1 );
|
|
p->drawPoint( x + w - 2, y + h - 1 );
|
|
p->drawPoint( x + w - 1, y + h - 2 );
|
|
p->setPen( cg.shadow() );
|
|
p->drawPoint( x + w - 2, y + h - 2 );
|
|
p->setPen( cg.dark() );
|
|
p->drawPoint( x + w - 3, y + h - 3 );
|
|
p->setPen( cg.mid() );
|
|
p->drawPoint( x + w - 4, y + h - 4 );
|
|
|
|
} else {
|
|
p->fillRect( x + 2, y + 2, w - 4, h - 4,
|
|
cg.brush(TQColorGroup::Dark) );
|
|
|
|
// the dark side
|
|
p->setPen( cg.shadow() );
|
|
p->drawLine( x, y, x + w - 1, y );
|
|
p->drawLine( x, y, x, y + h - 1 );
|
|
|
|
p->setPen( cg.dark().dark() );
|
|
p->drawLine( x + 1, y + 1, x + w - 2, y + 1 );
|
|
p->drawLine( x + 1, y + 1, x + 1, y + h - 2 );
|
|
|
|
// the bright side!
|
|
|
|
p->setPen( cg.button() );
|
|
p->drawLine( x + 1, y + h - 2, x + w - 2, y + h - 2 );
|
|
p->drawLine( x + w - 2, y + 1, x + w - 2, y + h - 2 );
|
|
|
|
p->setPen( cg.dark() );
|
|
p->drawLine( x, y + h - 1, x + w - 1, y + h - 1 );
|
|
p->drawLine( x + w - 1, y, x + w - 1, y + h - 1 );
|
|
|
|
// top left corner:
|
|
p->setPen( cg.background() );
|
|
p->drawPoint( x, y );
|
|
p->drawPoint( x + 1, y );
|
|
p->drawPoint( x, y + 1 );
|
|
p->setPen( cg.shadow() );
|
|
p->drawPoint( x + 1, y + 1 );
|
|
p->setPen( cg.dark().dark() );
|
|
p->drawPoint( x + 3, y + 3 );
|
|
// bottom left corner:
|
|
p->setPen( cg.background() );
|
|
p->drawPoint( x, y + h - 1 );
|
|
p->drawPoint( x + 1, y + h - 1 );
|
|
p->drawPoint( x, y + h - 2 );
|
|
p->setPen( cg.shadow() );
|
|
p->drawPoint( x + 1, y + h - 2 );
|
|
// top right corner:
|
|
p->setPen( cg.background() );
|
|
p->drawPoint( x + w - 1, y );
|
|
p->drawPoint( x + w - 2, y );
|
|
p->drawPoint( x + w - 1, y + 1 );
|
|
p->setPen( cg.shadow() );
|
|
p->drawPoint( x + w - 2, y + 1 );
|
|
// bottom right corner:
|
|
p->setPen( cg.background() );
|
|
p->drawPoint( x + w - 1, y + h - 1 );
|
|
p->drawPoint( x + w - 2, y + h - 1 );
|
|
p->drawPoint( x + w - 1, y + h - 2 );
|
|
p->setPen( cg.shadow() );
|
|
p->drawPoint( x + w - 2, y + h - 2 );
|
|
p->setPen( cg.dark() );
|
|
p->drawPoint( x + w - 3, y + h - 3 );
|
|
p->setPen( cg.mid() );
|
|
p->drawPoint( x + w - 4, y + h - 4 );
|
|
}
|
|
p->setPen( oldPen );
|
|
break;
|
|
}
|
|
case PE_Indicator:
|
|
{
|
|
drawPrimitive( PE_ButtonBevel, p, ceData, elementFlags, TQRect(r.x(), r.y(),
|
|
r.width() - 2, r.height()),
|
|
cg, flags );
|
|
p->fillRect( r.x() + r.width() - 2, r.y(), 2, r.height(),
|
|
cg.brush( TQColorGroup::Background ) );
|
|
p->setPen( cg.shadow() );
|
|
p->drawRect( r.x(), r.y(), r.width() - 2, r.height() );
|
|
|
|
static const TQCOORD nochange_mark[] = { 3,5, 9,5, 3,6, 9,6 };
|
|
static const TQCOORD check_mark[] = {
|
|
3,5, 5,5, 4,6, 5,6, 5,7, 6,7, 5,8, 6,8, 6,9, 9,9,
|
|
6,10, 8,10, 7,11, 8,11, 7,12, 7,12, 8,8, 9,8, 8,7, 10,7,
|
|
9,6, 10,6, 9,5, 11,5, 10,4, 11,4, 10,3, 12,3,
|
|
11,2, 12,2, 11,1, 13,1, 12,0, 13,0 };
|
|
if ( !(flags & Style_Off) ) {
|
|
TQPen oldPen = p->pen();
|
|
int x1 = r.x();
|
|
int y1 = r.y();
|
|
if ( flags & Style_Down ) {
|
|
x1++;
|
|
y1++;
|
|
}
|
|
TQPointArray amark;
|
|
if ( flags & Style_On ) {
|
|
amark = TQPointArray( sizeof(check_mark)/(sizeof(TQCOORD)*2),
|
|
check_mark );
|
|
// ### KLUDGE!!
|
|
flags ^= Style_On;
|
|
flags ^= Style_Down;
|
|
} else if ( flags & Style_NoChange ) {
|
|
amark = TQPointArray( sizeof(nochange_mark)
|
|
/ (sizeof(TQCOORD) * 2),
|
|
nochange_mark );
|
|
}
|
|
|
|
amark.translate( x1 + 1, y1 + 1 );
|
|
p->setPen( cg.dark() );
|
|
p->drawLineSegments( amark );
|
|
amark.translate( -1, -1 );
|
|
p->setPen( cg.foreground() );
|
|
p->drawLineSegments( amark );
|
|
p->setPen( oldPen );
|
|
}
|
|
break;
|
|
}
|
|
case PE_IndicatorMask:
|
|
{
|
|
int x,
|
|
y,
|
|
w,
|
|
h;
|
|
r.rect( &x, &y, &w, &h );
|
|
p->fillRect( x, y, w - 2, h, color1);
|
|
if ( flags & Style_Off ) {
|
|
TQPen oldPen = p->pen();
|
|
p->setPen ( TQPen(color1, 2));
|
|
p->drawLine( x + 2, y + h / 2 - 1,
|
|
x + w / 2 - 1, y + h - 4 );
|
|
p->drawLine( x + w / 2 - 1, y + h - 4,
|
|
x + w, 0);
|
|
p->setPen( oldPen );
|
|
}
|
|
break;
|
|
}
|
|
case PE_ExclusiveIndicator:
|
|
{
|
|
#define TQCOORDARRLEN(x) sizeof(x) / (sizeof(TQCOORD) * 2 )
|
|
bool down = flags & Style_Down;
|
|
bool on = flags & Style_On;
|
|
|
|
static const TQCOORD pts1[] = { // normal circle
|
|
5,0, 8,0, 9,1, 10,1, 11,2, 12,3, 12,4, 13,5,
|
|
13,8, 12,9, 12,10, 11,11, 10,12, 9,12, 8,13,
|
|
5,13, 4,12, 3,12, 2,11, 1,10, 1,9, 0,8, 0,5,
|
|
1,4, 1,3, 2,2, 3,1, 4,1 };
|
|
static const TQCOORD pts2[] = { // top left shadow
|
|
5,1, 8,1, 3,2, 7,2, 2,3, 5,3, 2,4, 4,4,
|
|
1,5, 3,5, 1,6, 1,8, 2,6, 2,7 };
|
|
static const TQCOORD pts3[] = { // bottom right, dark
|
|
5,12, 8,12, 7,11, 10,11, 8,10, 11,10,
|
|
9,9, 11,9, 10,8, 12,8, 11,7, 11,7,
|
|
12,5, 12,7 };
|
|
static const TQCOORD pts4[] = { // bottom right, light
|
|
5,12, 8,12, 7,11, 10,11, 9,10, 11,10,
|
|
10,9, 11,9, 11,7, 11,8, 12,5, 12,8 };
|
|
static const TQCOORD pts5[] = { // check mark
|
|
6,4, 8,4, 10,6, 10,8, 8,10, 6,10, 4,8, 4,6 };
|
|
static const TQCOORD pts6[] = { // check mark extras
|
|
4,5, 5,4, 9,4, 10,5, 10,9, 9,10, 5,10, 4,9 };
|
|
int x, y;
|
|
x = r.x();
|
|
y = r.y();
|
|
p->eraseRect( r );
|
|
p->setBrush( (down||on) ? cg.brush( TQColorGroup::Dark )
|
|
: cg.brush( TQColorGroup::Button) );
|
|
p->setPen( NoPen );
|
|
p->drawEllipse( x, y, 13, 13 );
|
|
p->setPen( cg.shadow() );
|
|
TQPointArray a( TQCOORDARRLEN(pts1), pts1 );
|
|
a.translate( x, y );
|
|
p->drawPolyline( a ); // draw normal circle
|
|
TQColor tc, bc;
|
|
const TQCOORD *bp;
|
|
int bl;
|
|
if ( down || on ) { // pressed down or on
|
|
tc = cg.dark().dark();
|
|
bc = cg.light();
|
|
bp = pts4;
|
|
bl = TQCOORDARRLEN(pts4);
|
|
} else { // released
|
|
tc = cg.light();
|
|
bc = cg.dark();
|
|
bp = pts3;
|
|
bl = TQCOORDARRLEN(pts3);
|
|
}
|
|
p->setPen( tc );
|
|
a.setPoints( TQCOORDARRLEN(pts2), pts2 );
|
|
a.translate( x, y );
|
|
p->drawLineSegments( a ); // draw top shadow
|
|
p->setPen( bc );
|
|
a.setPoints( bl, bp );
|
|
a.translate( x, y );
|
|
p->drawLineSegments( a );
|
|
if ( on ) { // draw check mark
|
|
int x1 = x,
|
|
y1 = y;
|
|
p->setBrush( cg.foreground() );
|
|
p->setPen( cg.foreground() );
|
|
a.setPoints( TQCOORDARRLEN(pts5), pts5 );
|
|
a.translate( x1, y1 );
|
|
p->drawPolygon( a );
|
|
p->setBrush( NoBrush );
|
|
p->setPen( cg.dark() );
|
|
a.setPoints( TQCOORDARRLEN(pts6), pts6 );
|
|
a.translate( x1, y1 );
|
|
p->drawLineSegments( a );
|
|
}
|
|
break;
|
|
}
|
|
|
|
case PE_ExclusiveIndicatorMask:
|
|
{
|
|
static const TQCOORD pts1[] = { // normal circle
|
|
5,0, 8,0, 9,1, 10,1, 11,2, 12,3, 12,4, 13,5,
|
|
13,8, 12,9, 12,10, 11,11, 10,12, 9,12, 8,13,
|
|
5,13, 4,12, 3,12, 2,11, 1,10, 1,9, 0,8, 0,5,
|
|
1,4, 1,3, 2,2, 3,1, 4,1 };
|
|
TQPointArray a(TQCOORDARRLEN(pts1), pts1);
|
|
a.translate(r.x(), r.y());
|
|
p->setPen(color1);
|
|
p->setBrush(color1);
|
|
p->drawPolygon(a);
|
|
break;
|
|
}
|
|
case PE_ScrollBarAddLine:
|
|
{
|
|
drawPrimitive( PE_ButtonBevel, p, ceData, elementFlags, r, cg,
|
|
(flags & Style_Enabled) | ((flags & Style_Down)
|
|
? Style_Sunken
|
|
: Style_Raised) );
|
|
p->setPen( cg.shadow() );
|
|
p->drawRect( r );
|
|
drawPrimitive( ((flags & Style_Horizontal) ? PE_ArrowRight
|
|
: PE_ArrowDown), p, ceData, elementFlags, TQRect(r.x() + 2,
|
|
r.y() + 2,
|
|
r.width() - 4,
|
|
r.height() - 4),
|
|
cg, flags );
|
|
break;
|
|
}
|
|
case PE_ScrollBarSubLine:
|
|
{
|
|
drawPrimitive( PE_ButtonBevel, p, ceData, elementFlags, r, cg,
|
|
(flags & Style_Enabled) | ((flags & Style_Down)
|
|
? Style_Sunken
|
|
: Style_Raised) );
|
|
p->setPen( cg.shadow() );
|
|
p->drawRect( r );
|
|
drawPrimitive( ((flags & Style_Horizontal) ? PE_ArrowLeft
|
|
: PE_ArrowUp ), p, ceData, elementFlags, TQRect(r.x() + 2,
|
|
r.y() + 2,
|
|
r.width() - 4,
|
|
r.height() - 4),
|
|
cg, flags );
|
|
break;
|
|
}
|
|
case PE_ScrollBarAddPage:
|
|
case PE_ScrollBarSubPage:
|
|
{
|
|
TQPen oldPen = p->pen();
|
|
if ( r.width() < 3 || r.height() < 3 ) {
|
|
p->fillRect( r, cg.brush(TQColorGroup::Mid) );
|
|
p->setPen( cg.shadow() );
|
|
p->drawRect( r );
|
|
p->setPen( oldPen );
|
|
} else {
|
|
int x,
|
|
y,
|
|
w,
|
|
h;
|
|
r.rect( &x, &y, &w, &h );
|
|
if ( flags & Style_Horizontal ) {
|
|
p->fillRect( x + 2, y + 2, w - 2,
|
|
h - 4,
|
|
cg.brush(TQColorGroup::Mid) );
|
|
// the dark side
|
|
p->setPen( cg.dark().dark() );
|
|
p->drawLine( x, y, x + w - 1, y );
|
|
p->setPen( cg.shadow());
|
|
p->drawLine( x, y, x, y + h - 1 );
|
|
|
|
p->setPen( cg.mid().dark());
|
|
p->drawLine( x + 1, y + 1, x + w - 1,
|
|
y + 1 );
|
|
p->drawLine( x + 1, y + 1, x + 1,
|
|
y + h - 2 );
|
|
|
|
// the bright side!
|
|
|
|
p->setPen( cg.button());
|
|
p->drawLine( x + 1, y + h - 2,
|
|
x + w - 1,
|
|
y + h - 2 );
|
|
p->setPen( cg.shadow());
|
|
p->drawLine( x, y + h - 1,
|
|
x + w - 1,
|
|
y + h - 1 );
|
|
|
|
} else {
|
|
p->fillRect( x + 2, y + 2, w - 4,
|
|
h - 2,
|
|
cg.brush(TQColorGroup::Mid) );
|
|
|
|
// the dark side
|
|
p->setPen( cg.dark().dark() );
|
|
p->drawLine( x, y, x + w - 1, y );
|
|
p->setPen( cg.shadow() );
|
|
p->drawLine( x, y, x, y + h - 1 );
|
|
|
|
p->setPen( cg.mid().dark() );
|
|
p->drawLine( x + 1, y + 1, x + w - 2,
|
|
y + 1 );
|
|
p->drawLine( x + 1, y + 1, x + 1,
|
|
y + h - 1 );
|
|
|
|
// the bright side!
|
|
p->setPen( cg.button() );
|
|
p->drawLine( x + w - 2, y + 1,
|
|
x + w - 2,
|
|
y + h - 1 );
|
|
|
|
p->setPen( cg.shadow() );
|
|
p->drawLine( x + w - 1, y,
|
|
x + w - 1,
|
|
y + h - 1 );
|
|
|
|
}
|
|
}
|
|
p->setPen( oldPen );
|
|
break;
|
|
}
|
|
case PE_ScrollBarSlider:
|
|
{
|
|
TQPoint bo = p->brushOrigin();
|
|
p->setBrushOrigin( r.topLeft() );
|
|
drawPrimitive( PE_ButtonBevel, p, ceData, elementFlags, r, cg, Style_Raised );
|
|
p->setBrushOrigin( bo );
|
|
drawRiffles( p, r.x(), r.y(), r.width(), r.height(), cg,
|
|
flags & Style_Horizontal );
|
|
p->setPen( cg.shadow() );
|
|
p->drawRect( r );
|
|
if ( flags & Style_HasFocus ) {
|
|
drawPrimitive( PE_FocusRect, p, ceData, elementFlags, TQRect(r.x() + 2, r.y() + 2,
|
|
r.width() - 5,
|
|
r.height() - 5 ),
|
|
cg, flags );
|
|
}
|
|
break;
|
|
}
|
|
default:
|
|
TQWindowsStyle::drawPrimitive( pe, p, ceData, elementFlags, r, cg, flags, opt );
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
/*!\reimp
|
|
*/
|
|
void TQPlatinumStyle::drawControl( ControlElement element,
|
|
TQPainter *p,
|
|
const TQStyleControlElementData &ceData,
|
|
ControlElementFlags elementFlags,
|
|
const TQRect &r,
|
|
const TQColorGroup &cg,
|
|
SFlags how,
|
|
const TQStyleOption& opt,
|
|
const TQWidget *widget ) const
|
|
{
|
|
switch( element ) {
|
|
case CE_PushButton:
|
|
{
|
|
#ifndef QT_NO_PUSHBUTTON
|
|
TQColorGroup myCg( cg );
|
|
int x1, y1, x2, y2;
|
|
bool useBevelButton;
|
|
SFlags flags;
|
|
flags = Style_Default;
|
|
p->setBrushOrigin( -ceData.bgOffset.x(),
|
|
-ceData.bgOffset.y() );
|
|
|
|
// take care of the flags based on what we know...
|
|
if ( elementFlags & CEF_IsDown )
|
|
flags |= Style_Down;
|
|
if ( elementFlags & CEF_IsOn )
|
|
flags |= Style_On;
|
|
if ( elementFlags & CEF_IsEnabled )
|
|
flags |= Style_Enabled;
|
|
if ( elementFlags & CEF_IsDefault )
|
|
flags |= Style_Default;
|
|
if (! ( elementFlags & CEF_IsFlat ) && !(flags & Style_Down))
|
|
flags |= Style_Raised;
|
|
|
|
r.coords( &x1, &y1, &x2, &y2 );
|
|
|
|
p->setPen( cg.foreground() );
|
|
p->setBrush( TQBrush(cg.button(), NoBrush) );
|
|
|
|
TQBrush fill;
|
|
if ( elementFlags & CEF_IsDown ) {
|
|
fill = cg.brush( TQColorGroup::Dark );
|
|
// this could be done differently, but this
|
|
// makes a down Bezel drawn correctly...
|
|
myCg.setBrush( TQColorGroup::Mid, fill );
|
|
} else if ( elementFlags & CEF_IsOn ) {
|
|
fill = TQBrush( cg.mid(), Dense4Pattern );
|
|
myCg.setBrush( TQColorGroup::Mid, fill );
|
|
}
|
|
// to quote the old TQPlatinumStlye drawPushButton...
|
|
// small or square image buttons as well as toggle buttons are
|
|
// bevel buttons (what a heuristic....)
|
|
if ( ( elementFlags & CEF_BiState )
|
|
|| ( (!ceData.fgPixmap.isNull()) &&
|
|
(ceData.rect.width() * ceData.rect.height() < 1600 ||
|
|
TQABS( ceData.rect.width() - ceData.rect.height()) < 10 )) )
|
|
useBevelButton = TRUE;
|
|
else
|
|
useBevelButton = FALSE;
|
|
|
|
int diw = pixelMetric( PM_ButtonDefaultIndicator, ceData, elementFlags, widget );
|
|
if ( elementFlags & CEF_IsDefault ) {
|
|
x1 += 1;
|
|
y1 += 1;
|
|
x2 -= 1;
|
|
y2 -= 1;
|
|
TQColorGroup cg2( myCg );
|
|
SFlags myFlags = flags;
|
|
// don't draw the default button sunken, unless it's necessary.
|
|
if ( myFlags & Style_Down )
|
|
myFlags ^= Style_Down;
|
|
if ( myFlags & Style_Sunken )
|
|
myFlags ^= Style_Sunken;
|
|
|
|
cg2.setColor( TQColorGroup::Button, cg.mid() );
|
|
if ( useBevelButton ) {
|
|
drawPrimitive( PE_ButtonBevel, p, ceData, elementFlags, TQRect( x1, y1,
|
|
x2 - x1 + 1,
|
|
y2 - y1 + 1 ),
|
|
myCg, myFlags, opt );
|
|
} else {
|
|
drawPrimitive( PE_ButtonCommand, p, ceData, elementFlags, TQRect( x1, y1,
|
|
x2 - x1 + 1,
|
|
y2 - y1 + 1 ),
|
|
cg2, myFlags, opt );
|
|
}
|
|
}
|
|
|
|
if ( ( elementFlags & CEF_IsDefault ) || ( elementFlags & CEF_AutoDefault ) ) {
|
|
x1 += diw;
|
|
y1 += diw;
|
|
x2 -= diw;
|
|
y2 -= diw;
|
|
}
|
|
|
|
if ( (!( elementFlags & CEF_IsFlat )) || ( elementFlags & CEF_IsOn ) || ( elementFlags & CEF_IsDown ) ) {
|
|
if ( useBevelButton ) {
|
|
// fix for toggle buttons...
|
|
if ( flags & (Style_Down | Style_On) )
|
|
flags |= Style_Sunken;
|
|
drawPrimitive( PE_ButtonBevel, p, ceData, elementFlags, TQRect( x1, y1,
|
|
x2 - x1 + 1,
|
|
y2 - y1 + 1 ),
|
|
myCg, flags, opt );
|
|
} else {
|
|
|
|
drawPrimitive( PE_ButtonCommand, p, ceData, elementFlags, TQRect( x1, y1,
|
|
x2 - x1 + 1,
|
|
y2 - y1 + 1 ),
|
|
myCg, flags, opt );
|
|
}
|
|
}
|
|
|
|
|
|
if ( p->brush().style() != NoBrush )
|
|
p->setBrush( NoBrush );
|
|
break;
|
|
#endif
|
|
}
|
|
case CE_PushButtonLabel:
|
|
{
|
|
#ifndef QT_NO_PUSHBUTTON
|
|
bool on;
|
|
int x, y, w, h;
|
|
SFlags flags;
|
|
flags = Style_Default;
|
|
on = (( elementFlags & CEF_IsDown ) || ( elementFlags & CEF_IsOn ));
|
|
r.rect( &x, &y, &w, &h );
|
|
if ( elementFlags & CEF_IsMenuWidget ) {
|
|
int dx = pixelMetric( PM_MenuButtonIndicator, ceData, elementFlags, widget );
|
|
|
|
TQColorGroup g = cg;
|
|
int xx = x + w - dx - 4;
|
|
int yy = y - 3;
|
|
int hh = h + 6;
|
|
|
|
if ( !on ) {
|
|
p->setPen( g.mid() );
|
|
p->drawLine( xx, yy + 2, xx, yy + hh - 3 );
|
|
p->setPen( g.button() );
|
|
p->drawLine( xx + 1, yy + 1, xx + 1, yy + hh - 2 );
|
|
p->setPen( g.light() );
|
|
p->drawLine( xx + 2, yy + 2, xx + 2, yy + hh - 2 );
|
|
}
|
|
if ( elementFlags & CEF_IsEnabled )
|
|
flags |= Style_Enabled;
|
|
drawPrimitive( PE_ArrowDown, p, ceData, elementFlags, TQRect(x + w - dx - 1, y + 2,
|
|
dx, h - 4),
|
|
g, flags, opt );
|
|
w -= dx;
|
|
}
|
|
#ifndef QT_NO_ICONSET
|
|
if ( !ceData.iconSet.isNull() ) {
|
|
TQIconSet::Mode mode = ( elementFlags & CEF_IsEnabled )
|
|
? TQIconSet::Normal : TQIconSet::Disabled;
|
|
if ( mode == TQIconSet::Normal && ( elementFlags & CEF_HasFocus ) )
|
|
mode = TQIconSet::Active;
|
|
TQIconSet::State state = TQIconSet::Off;
|
|
if ( ( elementFlags & CEF_BiState ) && ( elementFlags & CEF_IsOn ) )
|
|
state = TQIconSet::On;
|
|
TQPixmap pixmap = ceData.iconSet.pixmap( TQIconSet::Small,
|
|
mode, state );
|
|
int pixw = pixmap.width();
|
|
int pixh = pixmap.height();
|
|
p->drawPixmap( x + 2, y + h / 2 - pixh / 2, pixmap );
|
|
x += pixw + 4;
|
|
w -= pixw + 4;
|
|
}
|
|
#endif
|
|
drawItem( p, TQRect( x, y, w, h ),
|
|
AlignCenter | ShowPrefix,
|
|
ceData.colorGroup, ( elementFlags & CEF_IsEnabled ),
|
|
(ceData.fgPixmap.isNull())?NULL:&ceData.fgPixmap, ceData.text, -1,
|
|
on ? &ceData.colorGroup.brightText()
|
|
: &ceData.colorGroup.buttonText() );
|
|
if ( elementFlags & CEF_HasFocus )
|
|
drawPrimitive( PE_FocusRect, p, ceData, elementFlags,
|
|
subRect(SR_PushButtonFocusRect, ceData, elementFlags, widget),
|
|
cg, flags );
|
|
break;
|
|
#endif
|
|
}
|
|
default:
|
|
TQWindowsStyle::drawControl( element, p, ceData, elementFlags, r, cg, how, opt, widget );
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*!\reimp
|
|
*/
|
|
void TQPlatinumStyle::drawComplexControl( ComplexControl control,
|
|
TQPainter *p,
|
|
const TQStyleControlElementData &ceData,
|
|
ControlElementFlags elementFlags,
|
|
const TQRect &r,
|
|
const TQColorGroup &cg,
|
|
SFlags how,
|
|
SCFlags sub,
|
|
SCFlags subActive,
|
|
const TQStyleOption& opt,
|
|
const TQWidget *widget ) const
|
|
{
|
|
switch ( control ) {
|
|
case CC_ComboBox:
|
|
{
|
|
int x,
|
|
y,
|
|
w,
|
|
h;
|
|
r.rect( &x, &y, &w, &h );
|
|
p->fillRect( x + 2, y + 2, w - 4,
|
|
h - 4, cg.brush(TQColorGroup::Button) );
|
|
// the bright side
|
|
p->setPen(cg.shadow());
|
|
p->drawLine( x, y, x + w - 1, y );
|
|
p->drawLine( x, y, x, y + h - 1 );
|
|
|
|
p->setPen( cg.light() );
|
|
p->drawLine( x + 1, y + 1,
|
|
x + w - 2, y + 1 );
|
|
p->drawLine( x + 1, y + 1,
|
|
x + 1, y + h - 2 );
|
|
|
|
// the dark side!
|
|
|
|
|
|
p->setPen( cg.mid() );
|
|
p->drawLine( x + 2, y + h - 2,
|
|
x + w - 2, y + h - 2 );
|
|
p->drawLine( x + w - 2, y + 2,
|
|
x + w - 2, y + h - 2 );
|
|
|
|
p->setPen (cg.shadow() );
|
|
p->drawLine( x + 1, y + h - 1,
|
|
x + w - 1, y + h - 1 );
|
|
p->drawLine( x + w - 1, y,
|
|
x + w - 1, y + h - 1 );
|
|
|
|
// top left corner:
|
|
p->setPen( cg.background() );
|
|
p->drawPoint( x, y );
|
|
p->drawPoint( x + 1, y );
|
|
p->drawPoint( x, y + 1 );
|
|
p->setPen( cg.shadow() );
|
|
p->drawPoint( x + 1, y + 1 );
|
|
p->setPen( white );
|
|
p->drawPoint( x + 3, y + 3 );
|
|
// bottom left corner:
|
|
p->setPen( cg.background() );
|
|
p->drawPoint( x, y + h - 1 );
|
|
p->drawPoint( x + 1, y + h - 1 );
|
|
p->drawPoint( x, y + h - 2 );
|
|
p->setPen( cg.shadow() );
|
|
p->drawPoint( x + 1, y + h - 2 );
|
|
// top right corner:
|
|
p->setPen( cg.background() );
|
|
p->drawPoint( x + w - 1, y );
|
|
p->drawPoint( x + w - 2, y );
|
|
p->drawPoint( x + w - 1, y + 1 );
|
|
p->setPen( cg.shadow() );
|
|
p->drawPoint( x + w - 2, y + 1 );
|
|
// bottom right corner:
|
|
p->setPen( cg.background() );
|
|
p->drawPoint( x + w - 1, y + h - 1 );
|
|
p->drawPoint( x + w - 2, y + h - 1 );
|
|
p->drawPoint( x + w - 1, y + h - 2 );
|
|
p->setPen( cg.shadow() );
|
|
p->drawPoint( x + w - 2, y + h - 2 );
|
|
p->setPen( cg.dark() );
|
|
p->drawPoint( x + w - 3, y + h - 3 );
|
|
|
|
if ( sub & SC_ComboBoxArrow ) {
|
|
TQRect rTmp = querySubControlMetrics( CC_ComboBox, ceData, elementFlags,
|
|
SC_ComboBoxArrow, opt, widget );
|
|
int xx = rTmp.x(),
|
|
yy = rTmp.y(),
|
|
ww = rTmp.width(),
|
|
hh = rTmp.height();
|
|
// the bright side
|
|
|
|
p->setPen( cg.mid() );
|
|
p->drawLine( xx, yy+2, xx, yy+hh-3 );
|
|
|
|
p->setPen( cg.button() );
|
|
p->drawLine( xx+1, yy+1, xx+ww-2, yy+1 );
|
|
p->drawLine( xx+1, yy+1, xx+1, yy+hh-2 );
|
|
|
|
p->setPen( cg.light() );
|
|
p->drawLine( xx+2, yy+2, xx+2, yy+hh-2 );
|
|
p->drawLine( xx+2, yy+2, xx+ww-2, yy+2 );
|
|
|
|
|
|
// the dark side!
|
|
|
|
p->setPen( cg.mid() );
|
|
p->drawLine( xx+3, yy+hh-3 ,xx+ww-3, yy+hh-3 );
|
|
p->drawLine( xx+ww-3, yy+3, xx+ww-3, yy+hh-3 );
|
|
|
|
p->setPen( cg.dark() );
|
|
p->drawLine( xx+2, yy+hh-2 ,xx+ww-2, yy+hh-2 );
|
|
p->drawLine( xx+ww-2, yy+2, xx+ww-2, yy+hh-2 );
|
|
|
|
p->setPen( cg.shadow() );
|
|
p->drawLine( xx+1, yy+hh-1,xx+ww-1, yy+hh-1 );
|
|
p->drawLine( xx+ww-1, yy, xx+ww-1, yy+hh-1 );
|
|
|
|
// top right corner:
|
|
p->setPen( cg.background() );
|
|
p->drawPoint( xx + ww - 1, yy );
|
|
p->drawPoint( xx + ww - 2, yy );
|
|
p->drawPoint( xx + ww - 1, yy + 1 );
|
|
p->setPen( cg.shadow() );
|
|
p->drawPoint( xx + ww - 2, yy + 1 );
|
|
// bottom right corner:
|
|
p->setPen( cg.background() );
|
|
p->drawPoint( xx + ww - 1, yy + hh - 1 );
|
|
p->drawPoint( xx + ww - 2, yy + hh - 1 );
|
|
p->drawPoint( xx + ww - 1, yy + hh - 2 );
|
|
p->setPen( cg.shadow() );
|
|
p->drawPoint( xx + ww - 2, yy + hh - 2 );
|
|
p->setPen( cg.dark() );
|
|
p->drawPoint( xx + ww - 3, yy + hh - 3 );
|
|
p->setPen( cg.mid() );
|
|
p->drawPoint( xx + ww - 4, yy + hh - 4 );
|
|
|
|
// and the arrows
|
|
p->setPen( cg.foreground() );
|
|
TQPointArray a ;
|
|
a.setPoints( 7, -3,1, 3,1, -2,0, 2,0, -1,-1, 1,-1, 0,-2 );
|
|
a.translate( xx + ww / 2, yy + hh / 2 - 3 );
|
|
p->drawLineSegments( a, 0, 3 ); // draw arrow
|
|
p->drawPoint( a[6] );
|
|
a.setPoints( 7, -3,-1, 3,-1, -2,0, 2,0, -1,1, 1,1, 0,2 );
|
|
a.translate( xx + ww / 2, yy + hh / 2 + 2 );
|
|
p->drawLineSegments( a, 0, 3 ); // draw arrow
|
|
p->drawPoint( a[6] );
|
|
|
|
}
|
|
#ifndef QT_NO_COMBOBOX
|
|
if ( sub & SC_ComboBoxEditField ) {
|
|
// sadly this is pretty much the windows code, except
|
|
// for the first fillRect call...
|
|
TQRect re =
|
|
TQStyle::visualRect( querySubControlMetrics( CC_ComboBox,
|
|
ceData, elementFlags,
|
|
SC_ComboBoxEditField, TQStyleOption::Default, widget ),
|
|
ceData, elementFlags );
|
|
if ( ( elementFlags & CEF_HasFocus ) && (!( elementFlags & CEF_IsEditable )) )
|
|
p->fillRect( re.x() + 1, re.y() + 1,
|
|
re.width() - 2, re.height() - 2,
|
|
cg.brush( TQColorGroup::Highlight ) );
|
|
|
|
if ( elementFlags & CEF_HasFocus ) {
|
|
p->setPen( cg.highlightedText() );
|
|
p->setBackgroundColor( cg.highlight() );
|
|
} else {
|
|
p->setPen( cg.text() );
|
|
p->setBackgroundColor( cg.background() );
|
|
}
|
|
|
|
if ( ( elementFlags & CEF_HasFocus ) && (!( elementFlags & CEF_IsEditable )) ) {
|
|
TQRect re =
|
|
TQStyle::visualRect( subRect( SR_ComboBoxFocusRect, ceData, elementFlags,
|
|
widget ),
|
|
ceData, elementFlags );
|
|
drawPrimitive( PE_FocusRect, p, ceData, elementFlags, re, cg,
|
|
Style_FocusAtBorder,
|
|
TQStyleOption(cg.highlight()));
|
|
}
|
|
if ( elementFlags & CEF_IsEditable ) {
|
|
// need this for the moment...
|
|
// was the code in comboButton rect
|
|
TQRect ir( x + 3, y + 3,
|
|
w - 6 - 16, h - 6 );
|
|
if ( TQApplication::reverseLayout() )
|
|
ir.moveBy( 16, 0 );
|
|
// end comboButtonRect...
|
|
ir.setRect( ir.left() - 1, ir.top() - 1, ir.width() + 2,
|
|
ir.height() + 2 );
|
|
qDrawShadePanel( p, ir, cg, TRUE, 2, 0 );
|
|
}
|
|
}
|
|
#endif
|
|
break;
|
|
}
|
|
case CC_Slider:
|
|
{
|
|
#ifndef QT_NO_SLIDER
|
|
int thickness = pixelMetric( PM_SliderControlThickness, ceData, elementFlags, widget );
|
|
int len = pixelMetric( PM_SliderLength, ceData, elementFlags, widget );
|
|
int ticks = ceData.tickMarkSetting;
|
|
|
|
TQRect groove = querySubControlMetrics(CC_Slider, ceData, elementFlags, SC_SliderGroove,
|
|
opt, widget),
|
|
handle = querySubControlMetrics(CC_Slider, ceData, elementFlags, SC_SliderHandle,
|
|
opt, widget);
|
|
|
|
if ((sub & SC_SliderGroove) && groove.isValid()) {
|
|
p->fillRect( groove, cg.brush(TQColorGroup::Background) );
|
|
|
|
int x, y, w, h;
|
|
int mid = thickness / 2;
|
|
|
|
if ( ticks & TQSlider::Above )
|
|
mid += len / 8;
|
|
if ( ticks & TQSlider::Below )
|
|
mid -= len / 8;
|
|
|
|
if ( ceData.orientation == Horizontal ) {
|
|
x = 0;
|
|
y = groove.y() + mid - 3;
|
|
w = ceData.rect.width();
|
|
h = 7;
|
|
} else {
|
|
x = groove.x() + mid - 3;
|
|
y = 0;
|
|
w = 7;
|
|
h = ceData.rect.height();
|
|
}
|
|
|
|
p->fillRect( x, y, w, h, cg.brush( TQColorGroup::Dark ));
|
|
// the dark side
|
|
p->setPen( cg.dark() );
|
|
p->drawLine( x, y, x + w - 1, y );
|
|
p->drawLine( x, y, x, y + h - 1);
|
|
p->setPen( cg.shadow() );
|
|
p->drawLine( x + 1, y + 1, x + w - 2, y + 1 );
|
|
p->drawLine( x + 1, y + 1, x + 1, y + h - 2 );
|
|
// the bright side!
|
|
p->setPen(cg.shadow());
|
|
p->drawLine( x + 1, y + h - 2, x + w - 2, y + h - 2 );
|
|
p->drawLine( x + w - 2, y + 1, x + w - 2, y + h - 2 );
|
|
p->setPen( cg.light() );
|
|
p->drawLine( x, y + h - 1, x + w - 1, y + h - 1 );
|
|
p->drawLine( x + w - 1, y, x + w - 1, y + h - 1 );
|
|
// top left corner:
|
|
p->setPen(cg.background());
|
|
p->drawPoint( x, y );
|
|
p->drawPoint( x + 1, y );
|
|
p->drawPoint( x, y + 1 );
|
|
p->setPen(cg.shadow());
|
|
p->drawPoint( x + 1, y + 1 );
|
|
// bottom left corner:
|
|
p->setPen( cg.background() );
|
|
p->drawPoint( x, y + h - 1 );
|
|
p->drawPoint( x + 1, y + h - 1 );
|
|
p->drawPoint( x, y + h - 2 );
|
|
p->setPen( cg.light() );
|
|
p->drawPoint( x + 1, y + h - 2 );
|
|
// top right corner:
|
|
p->setPen( cg.background() );
|
|
p->drawPoint( x + w - 1, y );
|
|
p->drawPoint( x + w - 2, y );
|
|
p->drawPoint( x + w - 1, y + 1 );
|
|
p->setPen( cg.dark() );
|
|
p->drawPoint( x + w - 2, y + 1 );
|
|
// bottom right corner:
|
|
p->setPen( cg.background() );
|
|
p->drawPoint( x + w - 1, y + h - 1 );
|
|
p->drawPoint( x + w - 2, y + h - 1 );
|
|
p->drawPoint( x + w - 1, y + h - 2 );
|
|
p->setPen( cg.light() );
|
|
p->drawPoint( x + w - 2, y + h - 2 );
|
|
p->setPen( cg.dark() );
|
|
p->drawPoint( x + w - 3, y + h - 3 );
|
|
// ### end slider groove
|
|
|
|
if ( how & Style_HasFocus )
|
|
drawPrimitive( PE_FocusRect, p, ceData, elementFlags, groove, cg );
|
|
}
|
|
|
|
if ((sub & SC_SliderHandle) && handle.isValid()) {
|
|
const TQColor c0 = cg.shadow();
|
|
const TQColor c1 = cg.dark();
|
|
const TQColor c3 = cg.light();
|
|
|
|
int x1 = handle.x();
|
|
int x2 = handle.x() + handle.width() - 1;
|
|
int y1 = handle.y();
|
|
int y2 = handle.y() + handle.height() - 1;
|
|
int mx = handle.width() / 2;
|
|
int my = handle.height() / 2;
|
|
|
|
if ( ceData.orientation == Vertical ) {
|
|
// Background
|
|
TQBrush oldBrush = p->brush();
|
|
p->setBrush( cg.brush( TQColorGroup::Button ) );
|
|
p->setPen( NoPen );
|
|
TQPointArray a(6);
|
|
a.setPoint( 0, x1 + 1, y1 + 1 );
|
|
a.setPoint( 1, x2 - my + 2, y1 + 1 );
|
|
a.setPoint( 2, x2 - 1, y1 + my - 1 );
|
|
a.setPoint( 3, x2 - 1, y2 - my + 1 );
|
|
a.setPoint( 4, x2 - my + 2, y2 - 1 );
|
|
a.setPoint( 5, x1 + 1, y2 - 1 );
|
|
p->drawPolygon( a );
|
|
p->setBrush( oldBrush );
|
|
|
|
// shadow border
|
|
p->setPen( c0 );
|
|
p->drawLine( x1, y1 + 1, x1,y2 - 1 );
|
|
p->drawLine( x2 - my + 2, y1, x2, y1 + my - 2 );
|
|
p->drawLine( x2 - my + 2, y2, x2, y1 + my + 2 );
|
|
p->drawLine( x2, y1 + my - 2, x2, y1 + my + 2 );
|
|
p->drawLine( x1 + 1, y1, x2 - my + 2, y1 );
|
|
p->drawLine( x1 + 1, y2, x2 - my + 2, y2 );
|
|
|
|
// light shadow
|
|
p->setPen( c3 );
|
|
p->drawLine( x1 + 1, y1 + 2, x1 + 1, y2 - 2 );
|
|
p->drawLine( x1 + 1, y1 + 1, x2 - my + 2, y1 + 1 );
|
|
p->drawLine( x2 - my + 2, y1 + 1, x2 - 1, y1 + my - 2 );
|
|
|
|
// dark shadow
|
|
p->setPen(c1);
|
|
p->drawLine( x2 - 1, y1 + my - 2, x2 - 1, y1 + my + 2 );
|
|
p->drawLine( x2 - my + 2, y2 - 1, x2 - 1, y1 + my + 2 );
|
|
p->drawLine( x1 + 1, y2 - 1, x2 -my + 2, y2 - 1 );
|
|
|
|
drawRiffles( p, handle.x(), handle.y() + 2, handle.width() - 3,
|
|
handle.height() - 4, cg, TRUE );
|
|
} else { // Horizontal
|
|
TQBrush oldBrush = p->brush();
|
|
p->setBrush( cg.brush( TQColorGroup::Button ) );
|
|
p->setPen( NoPen );
|
|
TQPointArray a(6);
|
|
a.setPoint( 0, x2 - 1, y1 + 1 );
|
|
a.setPoint( 1, x2 - 1, y2 - mx + 2 );
|
|
a.setPoint( 2, x2 - mx + 1, y2 - 1 );
|
|
a.setPoint( 3, x1 + mx - 1, y2 - 1 );
|
|
a.setPoint( 4, x1 + 1, y2 - mx + 2 );
|
|
a.setPoint( 5, x1 + 1, y1 + 1 );
|
|
p->drawPolygon( a );
|
|
p->setBrush( oldBrush );
|
|
|
|
// shadow border
|
|
p->setPen( c0 );
|
|
p->drawLine( x1 + 1, y1, x2 - 1, y1 );
|
|
p->drawLine( x1, y2 - mx + 2, x1 + mx - 2, y2 );
|
|
p->drawLine( x2, y2 - mx + 2, x1 + mx + 2, y2 );
|
|
p->drawLine( x1 + mx - 2, y2, x1 + mx + 2, y2 );
|
|
p->drawLine( x1, y1 + 1, x1, y2 - mx + 2 );
|
|
p->drawLine( x2, y1 + 1, x2, y2 - mx + 2 );
|
|
|
|
// light shadow
|
|
p->setPen(c3);
|
|
p->drawLine( x1 + 1, y1 + 1, x2 - 1, y1 + 1 );
|
|
p->drawLine( x1 + 1, y1 + 1, x1 + 1, y2 - mx + 2 );
|
|
|
|
// dark shadow
|
|
p->setPen(c1);
|
|
p->drawLine( x2 - 1, y1 + 1, x2 - 1, y2 - mx + 2 );
|
|
p->drawLine( x1 + 1, y2 - mx + 2, x1 + mx - 2, y2 - 1 );
|
|
p->drawLine( x2 - 1, y2 - mx + 2, x1 + mx + 2, y2 - 1 );
|
|
p->drawLine( x1 + mx - 2, y2 - 1, x1 + mx + 2, y2 - 1 );
|
|
|
|
drawRiffles( p, handle.x() + 2, handle.y(), handle.width() - 4,
|
|
handle.height() - 5, cg, FALSE );
|
|
}
|
|
}
|
|
|
|
if ( sub & SC_SliderTickmarks )
|
|
TQCommonStyle::drawComplexControl( control, p, ceData, elementFlags, r,
|
|
cg, how, SC_SliderTickmarks,
|
|
subActive, opt, widget );
|
|
#endif
|
|
break;
|
|
}
|
|
default:
|
|
TQWindowsStyle::drawComplexControl( control, p, ceData, elementFlags, r, cg,
|
|
how, sub, subActive, opt, widget );
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/*!\reimp
|
|
*/
|
|
TQRect TQPlatinumStyle::querySubControlMetrics( ComplexControl control,
|
|
const TQStyleControlElementData &ceData,
|
|
ControlElementFlags elementFlags,
|
|
SubControl sc,
|
|
const TQStyleOption& opt,
|
|
const TQWidget *widget ) const
|
|
{
|
|
switch( control ) {
|
|
#ifndef QT_NO_COMBOBOX
|
|
case CC_ComboBox:
|
|
switch( sc ) {
|
|
case SC_ComboBoxArrow: {
|
|
TQRect ir = ceData.rect;
|
|
int xx;
|
|
if( TQApplication::reverseLayout() )
|
|
xx = ir.x();
|
|
else
|
|
xx = ir.x() + ir.width() - 20;
|
|
return TQRect( xx, ir.y(), 20, ir.height()); }
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
#endif
|
|
#ifndef QT_NO_SCROLLBAR
|
|
case CC_ScrollBar: {
|
|
int sliderStart = ceData.startStep;
|
|
int sbextent = pixelMetric( PM_ScrollBarExtent, ceData, elementFlags, widget );
|
|
int maxlen = ((ceData.orientation == TQt::Horizontal) ?
|
|
ceData.rect.width() : ceData.rect.height()) - ( sbextent * 2 );
|
|
|
|
int sliderlen;
|
|
|
|
// calculate length
|
|
if ( ceData.maxSteps != ceData.minSteps ) {
|
|
uint range = ceData.maxSteps - ceData.minSteps;
|
|
sliderlen = ( ceData.pageStep * maxlen ) /
|
|
( range + ceData.pageStep );
|
|
|
|
int slidermin = pixelMetric( PM_ScrollBarSliderMin, ceData, elementFlags, widget );
|
|
if ( sliderlen < slidermin || range > INT_MAX / 2 )
|
|
sliderlen = slidermin;
|
|
if ( sliderlen > maxlen )
|
|
sliderlen = maxlen;
|
|
} else {
|
|
sliderlen = maxlen;
|
|
}
|
|
|
|
switch ( sc ) {
|
|
case SC_ScrollBarSubLine:
|
|
if ( ceData.orientation == TQt::Horizontal ) {
|
|
int buttonw = TQMIN( ceData.rect.width() / 2, sbextent );
|
|
return TQRect( ceData.rect.width() - 2 * buttonw, 0, buttonw, sbextent );
|
|
} else {
|
|
int buttonh = TQMIN( ceData.rect.height() / 2, sbextent );
|
|
return TQRect( 0, ceData.rect.height() - 2 * buttonh, sbextent, buttonh );
|
|
}
|
|
case SC_ScrollBarAddLine:
|
|
if ( ceData.orientation == TQt::Horizontal ) {
|
|
int buttonw = TQMIN( ceData.rect.width() / 2, sbextent );
|
|
return TQRect( ceData.rect.width() - buttonw, 0, sbextent, buttonw );
|
|
} else {
|
|
int buttonh = TQMIN( ceData.rect.height() / 2, sbextent );
|
|
return TQRect(0, ceData.rect.height() - buttonh, sbextent, buttonh );
|
|
}
|
|
case SC_ScrollBarSubPage:
|
|
if ( ceData.orientation == TQt::Horizontal )
|
|
return TQRect( 1, 0, sliderStart, sbextent );
|
|
return TQRect( 0, 1, sbextent, sliderStart );
|
|
case SC_ScrollBarAddPage:
|
|
if ( ceData.orientation == TQt::Horizontal )
|
|
return TQRect( sliderStart + sliderlen, 0, maxlen - sliderStart - sliderlen, sbextent );
|
|
return TQRect( 0, sliderStart + sliderlen, sbextent, maxlen - sliderStart - sliderlen );
|
|
case SC_ScrollBarGroove:
|
|
if ( ceData.orientation == TQt::Horizontal )
|
|
return TQRect( 1, 0, ceData.rect.width() - sbextent * 2, ceData.rect.height() );
|
|
return TQRect( 0, 1, ceData.rect.width(), ceData.rect.height() - sbextent * 2 );
|
|
default:
|
|
break;
|
|
}
|
|
break; }
|
|
#endif
|
|
#ifndef QT_NO_SLIDER
|
|
case CC_Slider: {
|
|
int tickOffset = pixelMetric( PM_SliderTickmarkOffset, ceData, elementFlags, widget);
|
|
int thickness = pixelMetric( PM_SliderControlThickness, ceData, elementFlags, widget);
|
|
int mid = thickness / 2;
|
|
int ticks = ceData.tickMarkSetting;
|
|
int len = pixelMetric( PM_SliderLength, ceData, elementFlags, widget );
|
|
|
|
switch ( sc ) {
|
|
case SC_SliderGroove:
|
|
if ( ticks & TQSlider::Above )
|
|
mid += len / 8;
|
|
if ( ticks & TQSlider::Below )
|
|
mid -= len / 8;
|
|
if ( ceData.orientation == TQSlider::Horizontal )
|
|
return TQRect( 0, tickOffset, ceData.rect.width(), thickness );
|
|
return TQRect( tickOffset, 0, thickness, ceData.rect.height() );
|
|
default:
|
|
break;
|
|
}
|
|
break; }
|
|
#endif
|
|
default:
|
|
break;
|
|
}
|
|
return TQWindowsStyle::querySubControlMetrics( control, ceData, elementFlags, sc, opt, widget );
|
|
}
|
|
|
|
|
|
/*!\reimp
|
|
*/
|
|
int TQPlatinumStyle::pixelMetric( PixelMetric metric, const TQStyleControlElementData &ceData, ControlElementFlags elementFlags,
|
|
const TQWidget *widget ) const
|
|
{
|
|
int ret;
|
|
switch( metric ) {
|
|
case PM_ButtonDefaultIndicator:
|
|
ret = 3;
|
|
break;
|
|
case PM_ButtonShiftHorizontal:
|
|
case PM_ButtonShiftVertical:
|
|
ret = 0;
|
|
break;
|
|
case PM_IndicatorWidth:
|
|
ret = 15;
|
|
break;
|
|
case PM_IndicatorHeight:
|
|
ret = 13;
|
|
break;
|
|
case PM_ExclusiveIndicatorHeight:
|
|
case PM_ExclusiveIndicatorWidth:
|
|
ret = 15;
|
|
break;
|
|
case PM_SliderLength:
|
|
ret = 17;
|
|
break;
|
|
case PM_MaximumDragDistance:
|
|
ret = -1;
|
|
break;
|
|
default:
|
|
ret = TQWindowsStyle::pixelMetric( metric, ceData, elementFlags, widget );
|
|
break;
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
/*!\reimp
|
|
*/
|
|
TQRect TQPlatinumStyle::subRect( SubRect r, const TQStyleControlElementData &ceData, ControlElementFlags elementFlags, const TQWidget *widget ) const
|
|
{
|
|
TQRect rect;
|
|
switch ( r ) {
|
|
case SR_ComboBoxFocusRect:
|
|
{
|
|
TQRect tmpR = ceData.rect;
|
|
rect = TQRect( tmpR.x() + 4, tmpR.y() + 4, tmpR.width() - 8 - 16,
|
|
tmpR.height() - 8 );
|
|
break;
|
|
}
|
|
default:
|
|
rect = TQWindowsStyle::subRect( r, ceData, elementFlags, widget );
|
|
break;
|
|
}
|
|
return rect;
|
|
}
|
|
|
|
/*!
|
|
Mixes two colors \a c1 and \a c2 to a new color.
|
|
*/
|
|
TQColor TQPlatinumStyle::mixedColor(const TQColor &c1, const TQColor &c2) const
|
|
{
|
|
int h1,s1,v1,h2,s2,v2;
|
|
c1.hsv(&h1,&s1,&v1);
|
|
c2.hsv(&h2,&s2,&v2);
|
|
return TQColor( (h1+h2)/2, (s1+s2)/2, (v1+v2)/2, TQColor::Hsv );
|
|
}
|
|
|
|
/*!
|
|
Draws the nifty Macintosh decoration used on sliders using painter
|
|
\a p and colorgroup \a g. \a x, \a y, \a w, \a h and \a horizontal
|
|
specify the geometry and orientation of the riffles.
|
|
*/
|
|
void TQPlatinumStyle::drawRiffles( TQPainter* p, int x, int y, int w, int h,
|
|
const TQColorGroup &g, bool horizontal ) const
|
|
{
|
|
if (!horizontal) {
|
|
if (h > 20) {
|
|
y += (h-20)/2 ;
|
|
h = 20;
|
|
}
|
|
if (h > 8) {
|
|
int n = h / 4;
|
|
int my = y+h/2-n;
|
|
int i ;
|
|
p->setPen(g.light());
|
|
for (i=0; i<n; i++) {
|
|
p->drawLine(x+3, my+2*i, x+w-5, my+2*i);
|
|
}
|
|
p->setPen(g.dark());
|
|
my++;
|
|
for (i=0; i<n; i++) {
|
|
p->drawLine(x+4, my+2*i, x+w-4, my+2*i);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
if (w > 20) {
|
|
x += (w-20)/2 ;
|
|
w = 20;
|
|
}
|
|
if (w > 8) {
|
|
int n = w / 4;
|
|
int mx = x+w/2-n;
|
|
int i ;
|
|
p->setPen(g.light());
|
|
for (i=0; i<n; i++) {
|
|
p->drawLine(mx+2*i, y+3, mx + 2*i, y+h-5);
|
|
}
|
|
p->setPen(g.dark());
|
|
mx++;
|
|
for (i=0; i<n; i++) {
|
|
p->drawLine(mx+2*i, y+4, mx + 2*i, y+h-4);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
#endif
|