|
Packit |
8e9c33 |
/*************************************************************************
|
|
Packit |
8e9c33 |
* Copyright (C) 2014 by Hugo Pereira Da Costa <hugo.pereira@free.fr> *
|
|
Packit |
8e9c33 |
* *
|
|
Packit |
8e9c33 |
* This program is free software; you can redistribute it and/or modify *
|
|
Packit |
8e9c33 |
* it under the terms of the GNU General Public License as published by *
|
|
Packit |
8e9c33 |
* the Free Software Foundation; either version 2 of the License, or *
|
|
Packit |
8e9c33 |
* (at your option) any later version. *
|
|
Packit |
8e9c33 |
* *
|
|
Packit |
8e9c33 |
* This program is distributed in the hope that it will be useful, *
|
|
Packit |
8e9c33 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
Packit |
8e9c33 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
Packit |
8e9c33 |
* GNU General Public License for more details. *
|
|
Packit |
8e9c33 |
* *
|
|
Packit |
8e9c33 |
* You should have received a copy of the GNU General Public License *
|
|
Packit |
8e9c33 |
* along with this program; if not, write to the *
|
|
Packit |
8e9c33 |
* Free Software Foundation, Inc., *
|
|
Packit |
8e9c33 |
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
|
Packit |
8e9c33 |
*************************************************************************/
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
#include "adwaitahelper.h"
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
#include "adwaita.h"
|
|
Packit |
8e9c33 |
#include "fakeadwaitastyleconfigdata.h"
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
#include <QApplication>
|
|
Packit |
8e9c33 |
#include <QPainter>
|
|
Packit |
8e9c33 |
#include <QLibrary>
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
#if ADWAITA_HAVE_X11 && QT_VERSION < 0x050000
|
|
Packit |
8e9c33 |
#include <X11/Xlib-xcb.h>
|
|
Packit |
8e9c33 |
#endif
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
namespace Adwaita
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* contrast for arrow and treeline rendering
|
|
Packit |
8e9c33 |
static const qreal arrowShade = 0.15;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________________
|
|
Packit |
8e9c33 |
Helper::Helper( )
|
|
Packit |
8e9c33 |
{ init(); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________________
|
|
Packit |
8e9c33 |
#if ADWAITA_USE_KDE4
|
|
Packit |
8e9c33 |
Helper::Helper( const QByteArray& name )
|
|
Packit |
8e9c33 |
{ init(); }
|
|
Packit |
8e9c33 |
#endif
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________________
|
|
Packit |
8e9c33 |
QColor Helper::frameOutlineColor( const QPalette& palette, bool mouseOver, bool hasFocus, qreal opacity, AnimationMode mode ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// I really can't remember why we have differed these two cases. This seems right.
|
|
Packit |
8e9c33 |
return inputOutlineColor(palette, mouseOver, hasFocus, opacity, mode);
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QColor Helper::inputOutlineColor(const QPalette &palette, bool mouseOver, bool hasFocus, qreal opacity, AnimationMode mode) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
QColor outline( buttonOutlineColor( palette, mouseOver, false ) );
|
|
Packit |
8e9c33 |
QColor focus( palette.color( QPalette::Active, QPalette::Highlight ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// focus takes precedence over hover
|
|
Packit |
8e9c33 |
if( mode == AnimationFocus )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
outline = mix( outline, focus, opacity );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else if( hasFocus ) {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
outline = focusColor( palette );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return outline;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________________
|
|
Packit |
8e9c33 |
QColor Helper::focusOutlineColor( const QPalette& palette ) const
|
|
Packit |
8e9c33 |
{ return mix( focusColor( palette ), palette.color( QPalette::WindowText ), 0.15 ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________________
|
|
Packit |
8e9c33 |
QColor Helper::hoverOutlineColor( const QPalette& palette ) const
|
|
Packit |
8e9c33 |
{ return mix( hoverColor( palette ), palette.color( QPalette::WindowText ), 0.15 ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________________
|
|
Packit |
8e9c33 |
QColor Helper::buttonFocusOutlineColor( const QPalette& palette ) const
|
|
Packit |
8e9c33 |
{ return mix( focusColor( palette ), palette.color( QPalette::ButtonText ), 0.15 ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________________
|
|
Packit |
8e9c33 |
QColor Helper::buttonHoverOutlineColor( const QPalette& palette ) const
|
|
Packit |
8e9c33 |
{ return mix( hoverColor( palette ), palette.color( QPalette::ButtonText ), 0.15 ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________________
|
|
Packit |
8e9c33 |
QColor Helper::sidePanelOutlineColor( const QPalette& palette, bool hasFocus, qreal opacity, AnimationMode mode ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QColor outline( palette.color( QPalette::Inactive, QPalette::Highlight ) );
|
|
Packit |
8e9c33 |
QColor focus( palette.color( QPalette::Active, QPalette::Highlight ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( mode == AnimationFocus )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
outline = mix( outline, focus, opacity );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else if( hasFocus ) {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
outline = focus;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return outline;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________________
|
|
Packit |
8e9c33 |
QColor Helper::frameBackgroundColor( const QPalette& palette, QPalette::ColorGroup group ) const
|
|
Packit |
8e9c33 |
{ return mix( palette.color( group, QPalette::Window ), palette.color( group, QPalette::Base ), 0.3 ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________________
|
|
Packit |
8e9c33 |
QColor Helper::arrowColor( const QPalette& palette, QPalette::ColorGroup group, QPalette::ColorRole role ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
switch( role )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
case QPalette::Text: return mix( palette.color( group, QPalette::Text ), palette.color( group, QPalette::Base ), arrowShade );
|
|
Packit |
8e9c33 |
case QPalette::WindowText: return mix( palette.color( group, QPalette::WindowText ), palette.color( group, QPalette::Window ), arrowShade );
|
|
Packit |
8e9c33 |
case QPalette::ButtonText: return mix( palette.color( group, QPalette::ButtonText ), palette.color( group, QPalette::Button ), arrowShade );
|
|
Packit |
8e9c33 |
default: return palette.color( group, role );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________________
|
|
Packit |
8e9c33 |
QColor Helper::arrowColor( const QPalette& palette, bool mouseOver, bool hasFocus, qreal opacity, AnimationMode mode ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
Q_UNUSED(mouseOver);
|
|
Packit |
8e9c33 |
Q_UNUSED(hasFocus);
|
|
Packit |
8e9c33 |
Q_UNUSED(opacity);
|
|
Packit |
8e9c33 |
Q_UNUSED(mode);
|
|
Packit |
8e9c33 |
return palette.text().color();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________________
|
|
Packit |
8e9c33 |
QColor Helper::buttonOutlineColor( const QPalette& palette, bool mouseOver, bool hasFocus, qreal opacity, AnimationMode mode ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QColor outline( mix( palette.color( QPalette::Button ), palette.color( QPalette::Shadow ), 0.3 ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return outline;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________________
|
|
Packit |
8e9c33 |
QColor Helper::buttonBackgroundColor( const QPalette& palette, bool mouseOver, bool hasFocus, bool sunken, qreal opacity, AnimationMode mode ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QColor background( palette.color( QPalette::Button ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if ( mode == AnimationPressed) {
|
|
Packit |
8e9c33 |
background = background.darker(100 + 15.0 * opacity);
|
|
Packit |
8e9c33 |
} else if ( sunken ) {
|
|
Packit |
8e9c33 |
background = background.darker(115);
|
|
Packit |
8e9c33 |
} else if( mode == AnimationHover )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
background = mix(background, background.lighter( 120 ), opacity);
|
|
Packit |
8e9c33 |
//if( hasFocus ) background = mix( focus, hover, opacity );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else if( mouseOver ) {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
background = background.lighter( 120 );
|
|
Packit |
8e9c33 |
//background = hoverColor( palette );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return background;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________________
|
|
Packit |
8e9c33 |
QColor Helper::toolButtonColor( const QPalette& palette, bool mouseOver, bool hasFocus, bool sunken, qreal opacity, AnimationMode mode ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if (sunken || (mode != AnimationNone && mode != AnimationHover) )
|
|
Packit |
8e9c33 |
return buttonBackgroundColor(palette, mouseOver, hasFocus, sunken, opacity, mode);
|
|
Packit |
8e9c33 |
return Qt::transparent;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________________
|
|
Packit |
8e9c33 |
QColor Helper::sliderOutlineColor( const QPalette& palette, bool mouseOver, bool hasFocus, qreal opacity, AnimationMode mode ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QColor outline( mix( palette.color( QPalette::Window ), palette.color( QPalette::Shadow ), 0.5 ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// hover takes precedence over focus
|
|
Packit |
8e9c33 |
if( mode == AnimationHover )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QColor hover( hoverColor( palette ) );
|
|
Packit |
8e9c33 |
QColor focus( focusColor( palette ) );
|
|
Packit |
8e9c33 |
if( hasFocus ) outline = mix( focus, hover, opacity );
|
|
Packit |
8e9c33 |
else outline = mix( outline, hover, opacity );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else if( mouseOver ) {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
outline = hoverColor( palette );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else if( mode == AnimationFocus ) {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QColor focus( focusColor( palette ) );
|
|
Packit |
8e9c33 |
outline = mix( outline, focus, opacity );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else if( hasFocus ) {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
outline = focusColor( palette );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return outline;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________________
|
|
Packit |
8e9c33 |
QColor Helper::scrollBarHandleColor( const QPalette& palette, bool mouseOver, bool hasFocus, qreal opacity, AnimationMode mode ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QColor color( alphaColor( palette.color( QPalette::WindowText ), 0.5 ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// hover takes precedence over focus
|
|
Packit |
8e9c33 |
if( mode == AnimationHover )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QColor hover( hoverColor( palette ) );
|
|
Packit |
8e9c33 |
QColor focus( focusColor( palette ) );
|
|
Packit |
8e9c33 |
if( hasFocus ) color = mix( focus, hover, opacity );
|
|
Packit |
8e9c33 |
else color = mix( color, hover, opacity );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else if( mouseOver ) {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
color = hoverColor( palette );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else if( mode == AnimationFocus ) {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QColor focus( focusColor( palette ) );
|
|
Packit |
8e9c33 |
color = mix( color, focus, opacity );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else if( hasFocus ) {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
color = focusColor( palette );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return color;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________________________
|
|
Packit |
8e9c33 |
QColor Helper::checkBoxIndicatorColor( const QPalette& palette, bool mouseOver, bool active, qreal opacity, AnimationMode mode ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
Q_UNUSED(mouseOver);
|
|
Packit |
8e9c33 |
Q_UNUSED(active);
|
|
Packit |
8e9c33 |
Q_UNUSED(opacity);
|
|
Packit |
8e9c33 |
Q_UNUSED(mode);
|
|
Packit |
8e9c33 |
return palette.text().color();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________________________
|
|
Packit |
8e9c33 |
QColor Helper::separatorColor( const QPalette& palette ) const
|
|
Packit |
8e9c33 |
{ return mix( palette.color( QPalette::Window ), palette.color( QPalette::WindowText ), 0.25 ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________________
|
|
Packit |
8e9c33 |
QColor Helper::headerTextColor( const QPalette& palette, const QStyle::State state ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
QColor col(palette.color(QPalette::WindowText));
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if (state & QStyle::State_Enabled)
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
if (state & QStyle::State_Sunken)
|
|
Packit |
8e9c33 |
return alphaColor( col, 0.9 );
|
|
Packit |
8e9c33 |
else if (state & QStyle::State_MouseOver)
|
|
Packit |
8e9c33 |
return alphaColor( col, 0.7 );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
return alphaColor( col, 0.5 );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QColor Helper::tabBarColor(const QPalette &palette, const QStyle::State state) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QColor background( mix(palette.window().color(), palette.shadow().color(), 0.15) );
|
|
Packit |
8e9c33 |
if (!(state & QStyle::State_Enabled))
|
|
Packit |
8e9c33 |
background = background.lighter(115);
|
|
Packit |
8e9c33 |
if (!(state & QStyle::State_Active))
|
|
Packit |
8e9c33 |
background = background.lighter(115);
|
|
Packit |
8e9c33 |
return background;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________________________
|
|
Packit |
8e9c33 |
QPalette Helper::disabledPalette( const QPalette& source, qreal ratio ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QPalette copy( source );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
const QList<QPalette::ColorRole> roles = { QPalette::Background, QPalette::Highlight, QPalette::WindowText, QPalette::ButtonText, QPalette::Text, QPalette::Button };
|
|
Packit |
8e9c33 |
foreach( const QPalette::ColorRole& role, roles )
|
|
Packit |
8e9c33 |
{ copy.setColor( role, mix( source.color( QPalette::Active, role ), source.color( QPalette::Disabled, role ), 1.0-ratio ) ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return copy;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________________
|
|
Packit |
8e9c33 |
QColor Helper::alphaColor( QColor color, qreal alpha ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
if( alpha >= 0 && alpha < 1.0 )
|
|
Packit |
8e9c33 |
{ color.setAlphaF( alpha*color.alphaF() ); }
|
|
Packit |
8e9c33 |
return color;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________________________
|
|
Packit |
8e9c33 |
void Helper::renderDebugFrame( QPainter* painter, const QRect& rect ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
painter->save();
|
|
Packit |
8e9c33 |
painter->setRenderHints( QPainter::Antialiasing );
|
|
Packit |
8e9c33 |
painter->setBrush( Qt::NoBrush );
|
|
Packit |
8e9c33 |
painter->setPen( Qt::red );
|
|
Packit |
8e9c33 |
painter->drawRect( QRectF( rect ).adjusted( 0.5, 0.5, -0.5, -0.5 ) );
|
|
Packit |
8e9c33 |
painter->restore();
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________________________
|
|
Packit |
8e9c33 |
void Helper::renderFocusRect( QPainter* painter, const QRect& rect, const QColor& color, const QColor& outline, Sides sides ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
if( !color.isValid() ) return;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->save();
|
|
Packit |
8e9c33 |
painter->setRenderHints( QPainter::Antialiasing );
|
|
Packit |
8e9c33 |
painter->setBrush( color );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( !( outline.isValid() && sides ) )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->setPen( Qt::NoPen );
|
|
Packit |
8e9c33 |
painter->drawRect( rect );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->setClipRect( rect );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRectF copy( rect );
|
|
Packit |
8e9c33 |
copy.adjust( 0.5, 0.5, -0.5, -0.5 );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
qreal radius( frameRadius( -1.0 ) );
|
|
Packit |
8e9c33 |
if( !(sides&SideTop) ) copy.adjust( 0, -radius, 0, 0 );
|
|
Packit |
8e9c33 |
if( !(sides&SideBottom) ) copy.adjust( 0, 0, 0, radius );
|
|
Packit |
8e9c33 |
if( !(sides&SideLeft) ) copy.adjust( -radius, 0, 0, 0 );
|
|
Packit |
8e9c33 |
if( !(sides&SideRight) ) copy.adjust( 0, 0, radius, 0 );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->setPen( outline );
|
|
Packit |
8e9c33 |
// painter->setBrush( Qt::NoBrush );
|
|
Packit |
8e9c33 |
painter->drawRoundedRect( copy, radius, radius );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->restore();
|
|
Packit |
8e9c33 |
return;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________________________
|
|
Packit |
8e9c33 |
void Helper::renderFocusLine( QPainter* painter, const QRect& rect, const QColor& color ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
if( !color.isValid() ) return;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->save();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QPen pen(color, 1);
|
|
Packit |
8e9c33 |
pen.setStyle(Qt::DotLine);
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->setRenderHint( QPainter::Antialiasing, false );
|
|
Packit |
8e9c33 |
painter->setPen( pen );
|
|
Packit |
8e9c33 |
painter->setBrush( Qt::NoBrush );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->drawRoundedRect( rect, 1, 1 );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->restore();
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________________________
|
|
Packit |
8e9c33 |
void Helper::renderFrame(
|
|
Packit |
8e9c33 |
QPainter* painter, const QRect& rect,
|
|
Packit |
8e9c33 |
const QColor& color, const QColor& outline, bool hasFocus ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->setRenderHint( QPainter::Antialiasing );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRectF frameRect( rect.adjusted( 1, 1, -1, -1 ) );
|
|
Packit |
8e9c33 |
qreal radius( frameRadius() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// set pen
|
|
Packit |
8e9c33 |
if( outline.isValid() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if (hasFocus) {
|
|
Packit |
8e9c33 |
painter->setPen( QPen( outline, 2 ) );
|
|
Packit |
8e9c33 |
frameRect.adjust(0.5, 0.5, -0.5, -0.5);
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
else {
|
|
Packit |
8e9c33 |
painter->setPen( outline );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
frameRect.adjust( 0.5, 0.5, -0.5, -0.5 );
|
|
Packit |
8e9c33 |
radius = qMax( radius - 1, qreal( 0.0 ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->setPen( Qt::NoPen );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// set brush
|
|
Packit |
8e9c33 |
if( color.isValid() ) painter->setBrush( color );
|
|
Packit |
8e9c33 |
else painter->setBrush( Qt::NoBrush );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// render
|
|
Packit |
8e9c33 |
painter->drawRoundedRect( frameRect, radius, radius );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________________________
|
|
Packit |
8e9c33 |
void Helper::renderSquareFrame(
|
|
Packit |
8e9c33 |
QPainter* painter, const QRect& rect,
|
|
Packit |
8e9c33 |
QColor color, bool hasFocus ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
painter->setPen( color );
|
|
Packit |
8e9c33 |
painter->drawRect( rect.adjusted(1, 1, -2, -2) );
|
|
Packit |
8e9c33 |
if (hasFocus) {
|
|
Packit |
8e9c33 |
color.setAlphaF( 0.5 );
|
|
Packit |
8e9c33 |
painter->setPen( color );
|
|
Packit |
8e9c33 |
painter->drawRect( rect.adjusted(0, 0, -1, -1) );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________________________
|
|
Packit |
8e9c33 |
void Helper::renderFlatFrame(
|
|
Packit |
8e9c33 |
QPainter* painter, const QRect& rect,
|
|
Packit |
8e9c33 |
const QColor& color, const QColor& outline, bool hasFocus ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->setRenderHint( QPainter::Antialiasing );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRectF frameRect( rect.adjusted( 1, 1, -1, -1 ) );
|
|
Packit |
8e9c33 |
qreal radius( frameRadius() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// set pen
|
|
Packit |
8e9c33 |
if( outline.isValid() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if (hasFocus) {
|
|
Packit |
8e9c33 |
painter->setPen( QPen( outline, 2 ) );
|
|
Packit |
8e9c33 |
frameRect.adjust(0.5, 0.5, -0.5, -0.5);
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
else {
|
|
Packit |
8e9c33 |
painter->setPen( outline );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
frameRect.adjust( 0.5, 0.5, -0.5, -0.5 );
|
|
Packit |
8e9c33 |
radius = qMax( radius - 1, qreal( 0.0 ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->setPen( Qt::NoPen );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// set brush
|
|
Packit |
8e9c33 |
if( color.isValid() ) painter->setBrush( color );
|
|
Packit |
8e9c33 |
else painter->setBrush( Qt::NoBrush );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QPainterPath path;
|
|
Packit |
8e9c33 |
path.setFillRule( Qt::WindingFill );
|
|
Packit |
8e9c33 |
path.addRect( frameRect.adjusted(2 * radius, 0, 0, 0) );
|
|
Packit |
8e9c33 |
path.addRoundedRect( frameRect.adjusted(0, 0, - 2 *radius, 0), radius, radius);
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->drawPath( path.simplified() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// render
|
|
Packit |
8e9c33 |
//painter->drawRoundedRect( frameRect, radius, radius );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________________________
|
|
Packit |
8e9c33 |
void Helper::renderSidePanelFrame( QPainter* painter, const QRect& rect, const QColor& outline, Side side ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// check color
|
|
Packit |
8e9c33 |
if( !outline.isValid() ) return;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// adjust rect
|
|
Packit |
8e9c33 |
QRectF frameRect( rect.adjusted( 1, 1, -1, -1 ) );
|
|
Packit |
8e9c33 |
frameRect.adjust( 0.5, 0.5, -0.5, -0.5 );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// setup painter
|
|
Packit |
8e9c33 |
painter->setRenderHint( QPainter::Antialiasing );
|
|
Packit |
8e9c33 |
painter->setPen( outline );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// render
|
|
Packit |
8e9c33 |
switch( side )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
default:
|
|
Packit |
8e9c33 |
case SideLeft:
|
|
Packit |
8e9c33 |
frameRect.adjust( 0, 1, 0, -1 );
|
|
Packit |
8e9c33 |
painter->drawLine( frameRect.topRight(), frameRect.bottomRight() );
|
|
Packit |
8e9c33 |
break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case SideTop:
|
|
Packit |
8e9c33 |
frameRect.adjust( 1, 0, -1, 0 );
|
|
Packit |
8e9c33 |
painter->drawLine( frameRect.topLeft(), frameRect.topRight() );
|
|
Packit |
8e9c33 |
break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case SideRight:
|
|
Packit |
8e9c33 |
frameRect.adjust( 0, 1, 0, -1 );
|
|
Packit |
8e9c33 |
painter->drawLine( frameRect.topLeft(), frameRect.bottomLeft() );
|
|
Packit |
8e9c33 |
break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case SideBottom:
|
|
Packit |
8e9c33 |
frameRect.adjust( 1, 0, -1, 0 );
|
|
Packit |
8e9c33 |
painter->drawLine( frameRect.bottomLeft(), frameRect.bottomRight() );
|
|
Packit |
8e9c33 |
break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case AllSides:
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
qreal radius( frameRadius( -1.0 ) );
|
|
Packit |
8e9c33 |
painter->drawRoundedRect( frameRect, radius, radius );
|
|
Packit |
8e9c33 |
break;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________________________
|
|
Packit |
8e9c33 |
void Helper::renderMenuFrame(
|
|
Packit |
8e9c33 |
QPainter* painter, const QRect& rect,
|
|
Packit |
8e9c33 |
const QColor& color, const QColor& outline, bool roundCorners ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// set brush
|
|
Packit |
8e9c33 |
if( color.isValid() ) painter->setBrush( color );
|
|
Packit |
8e9c33 |
else painter->setBrush( Qt::NoBrush );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->setRenderHint( QPainter::Antialiasing, false );
|
|
Packit |
8e9c33 |
QRect frameRect( rect );
|
|
Packit |
8e9c33 |
if( outline.isValid() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->setPen( outline );
|
|
Packit |
8e9c33 |
frameRect.adjust( 0, 0, -1, -1 );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else painter->setPen( Qt::NoPen );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->drawRect( frameRect );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________________________
|
|
Packit |
8e9c33 |
void Helper::renderButtonFrame(
|
|
Packit |
8e9c33 |
QPainter* painter, const QRect& rect,
|
|
Packit |
8e9c33 |
const QColor& color, const QColor& outline, const QColor& shadow,
|
|
Packit |
8e9c33 |
bool hasFocus, bool sunken, bool mouseOver, bool active ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// setup painter
|
|
Packit |
8e9c33 |
painter->setRenderHint( QPainter::Antialiasing, true );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// copy rect
|
|
Packit |
8e9c33 |
QRectF frameRect( rect );
|
|
Packit |
8e9c33 |
frameRect.adjust( 1, 1, -1, -1 );
|
|
Packit |
8e9c33 |
qreal radius( frameRadius() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( outline.isValid() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->setPen( QPen( outline, 1.0 ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
frameRect.adjust( 0.5, 0.5, -0.5, -0.5 );
|
|
Packit |
8e9c33 |
radius = qMax( radius - 1, qreal( 0.0 ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else painter->setPen( Qt::NoPen );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// content
|
|
Packit |
8e9c33 |
if( color.isValid() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QLinearGradient gradient( frameRect.topLeft(), frameRect.bottomLeft() );
|
|
Packit |
8e9c33 |
//gradient.setColorAt( 0, color.darker( sunken ? 110 : (hasFocus|mouseOver) ? 85 : 100 ) );
|
|
Packit |
8e9c33 |
//gradient.setColorAt( 1, color.darker( sunken ? 130 : (hasFocus|mouseOver) ? 95 : 110 ) );
|
|
Packit |
8e9c33 |
if (!active) {
|
|
Packit |
8e9c33 |
gradient.setColorAt( 0, color );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
else if (sunken) {
|
|
Packit |
8e9c33 |
gradient.setColorAt( 0, color );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
else {
|
|
Packit |
8e9c33 |
gradient.setColorAt( 0, mix(color, Qt::white, 0.07) );
|
|
Packit |
8e9c33 |
gradient.setColorAt( 1, mix(color, Qt::black, 0.1) );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
painter->setBrush( gradient );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else painter->setBrush( Qt::NoBrush );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// render
|
|
Packit |
8e9c33 |
painter->drawRoundedRect( frameRect, radius, radius );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if (!sunken && active && color.isValid()) {
|
|
Packit |
8e9c33 |
painter->setPen(color.lighter(140));
|
|
Packit |
8e9c33 |
painter->drawLine(frameRect.topLeft() + QPoint(3, 1), frameRect.topRight() + QPoint(-3, 1));
|
|
Packit |
8e9c33 |
painter->setPen(outline.darker(114));
|
|
Packit |
8e9c33 |
painter->drawLine(frameRect.bottomLeft() + QPointF(2.7, 0), frameRect.bottomRight() + QPointF(-2.7, 0));
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________________________
|
|
Packit |
8e9c33 |
void Helper::renderFlatButtonFrame(
|
|
Packit |
8e9c33 |
QPainter* painter, const QRect& rect,
|
|
Packit |
8e9c33 |
const QColor& color, const QColor& outline, const QColor& shadow,
|
|
Packit |
8e9c33 |
bool hasFocus, bool sunken, bool mouseOver, bool active ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// setup painter
|
|
Packit |
8e9c33 |
painter->setRenderHint( QPainter::Antialiasing, true );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// copy rect
|
|
Packit |
8e9c33 |
QRectF frameRect( rect );
|
|
Packit |
8e9c33 |
frameRect.adjust( 1, 1, -1, -1 );
|
|
Packit |
8e9c33 |
qreal radius( frameRadius() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( outline.isValid() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->setPen( QPen( outline, 1.0 ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
frameRect.adjust( 0.5, 0.5, -0.5, -0.5 );
|
|
Packit |
8e9c33 |
radius = qMax( radius - 1, qreal( 0.0 ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else painter->setPen( Qt::NoPen );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// content
|
|
Packit |
8e9c33 |
if( color.isValid() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QLinearGradient gradient( frameRect.topLeft(), frameRect.bottomLeft() );
|
|
Packit |
8e9c33 |
//gradient.setColorAt( 0, color.darker( sunken ? 110 : (hasFocus|mouseOver) ? 85 : 100 ) );
|
|
Packit |
8e9c33 |
//gradient.setColorAt( 1, color.darker( sunken ? 130 : (hasFocus|mouseOver) ? 95 : 110 ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if (!active) {
|
|
Packit |
8e9c33 |
gradient.setColorAt( 0, color );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
else if (sunken) {
|
|
Packit |
8e9c33 |
gradient.setColorAt( 0, color);
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
else {
|
|
Packit |
8e9c33 |
gradient.setColorAt( 0, mix(color, Qt::white, 0.07) );
|
|
Packit |
8e9c33 |
gradient.setColorAt( 1, mix(color, Qt::black, 0.1) );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
painter->setBrush( gradient );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else painter->setBrush( Qt::NoBrush );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QPainterPath path;
|
|
Packit |
8e9c33 |
path.setFillRule( Qt::WindingFill );
|
|
Packit |
8e9c33 |
path.addRoundedRect( frameRect.adjusted(2*radius, 0, 0, 0), radius, radius );
|
|
Packit |
8e9c33 |
path.addRect( frameRect.adjusted(0, 0, -2*radius, 0) );
|
|
Packit |
8e9c33 |
painter->drawPath( path.simplified() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if (!sunken && active) {
|
|
Packit |
8e9c33 |
painter->setPen(color.lighter(140));
|
|
Packit |
8e9c33 |
painter->drawLine(frameRect.topLeft() + QPoint(1, 1), frameRect.topRight() + QPoint(-3, 1));
|
|
Packit |
8e9c33 |
painter->setPen(outline.darker(114));
|
|
Packit |
8e9c33 |
painter->drawLine(frameRect.bottomLeft() + QPointF(0.7, 0), frameRect.bottomRight() + QPointF(-2.7, 0));
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// render
|
|
Packit |
8e9c33 |
//painter->drawRoundedRect( frameRect, radius, radius );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________________________
|
|
Packit |
8e9c33 |
void Helper::renderToolButtonFrame(
|
|
Packit |
8e9c33 |
QPainter* painter, const QRect& rect,
|
|
Packit |
8e9c33 |
const QColor& color, bool sunken ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// do nothing for invalid color
|
|
Packit |
8e9c33 |
if( !color.isValid() ) return;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// setup painter
|
|
Packit |
8e9c33 |
painter->setRenderHints( QPainter::Antialiasing );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRectF baseRect( rect );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( sunken )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
qreal radius( frameRadius() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->setPen( Qt::NoPen );
|
|
Packit |
8e9c33 |
painter->setBrush( color );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRectF contentRect( baseRect.adjusted( 1, 1, -1, -1 ) );
|
|
Packit |
8e9c33 |
painter->drawRoundedRect( contentRect, radius, radius );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
qreal radius( frameRadius(-0.5) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->setPen( color );
|
|
Packit |
8e9c33 |
painter->setBrush( Qt::NoBrush );
|
|
Packit |
8e9c33 |
QRectF outlineRect( baseRect.adjusted( 1.5, 1.5, -1.5, -1.5 ) );
|
|
Packit |
8e9c33 |
painter->drawRoundedRect( outlineRect, radius, radius );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________________________
|
|
Packit |
8e9c33 |
void Helper::renderToolBoxFrame(
|
|
Packit |
8e9c33 |
QPainter* painter, const QRect& rect, int tabWidth,
|
|
Packit |
8e9c33 |
const QColor& outline ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( !outline.isValid() ) return;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// round radius
|
|
Packit |
8e9c33 |
qreal radius( frameRadius() );
|
|
Packit |
8e9c33 |
QSizeF cornerSize( 2*radius, 2*radius );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// if rect - tabwidth is even, need to increase tabWidth by 1 unit
|
|
Packit |
8e9c33 |
// for anti aliasing
|
|
Packit |
8e9c33 |
if( !((rect.width() - tabWidth)%2) ) ++tabWidth;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// adjust rect for antialiasing
|
|
Packit |
8e9c33 |
QRectF baseRect( rect );
|
|
Packit |
8e9c33 |
baseRect.adjust( 0.5, 0.5, -0.5, -0.5 );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// create path
|
|
Packit |
8e9c33 |
QPainterPath path;
|
|
Packit |
8e9c33 |
path.moveTo( 0, baseRect.height()-1 );
|
|
Packit |
8e9c33 |
path.lineTo( ( baseRect.width() - tabWidth )/2 - radius, baseRect.height()-1 );
|
|
Packit |
8e9c33 |
path.arcTo( QRectF( QPointF( ( baseRect.width() - tabWidth )/2 - 2*radius, baseRect.height()-1 - 2*radius ), cornerSize ), 270, 90 );
|
|
Packit |
8e9c33 |
path.lineTo( ( baseRect.width() - tabWidth )/2, radius );
|
|
Packit |
8e9c33 |
path.arcTo( QRectF( QPointF( ( baseRect.width() - tabWidth )/2, 0 ), cornerSize ), 180, -90 );
|
|
Packit |
8e9c33 |
path.lineTo( ( baseRect.width() + tabWidth )/2 -1 - radius, 0 );
|
|
Packit |
8e9c33 |
path.arcTo( QRectF( QPointF( ( baseRect.width() + tabWidth )/2 - 1 - 2*radius, 0 ), cornerSize ), 90, -90 );
|
|
Packit |
8e9c33 |
path.lineTo( ( baseRect.width() + tabWidth )/2 -1, baseRect.height()-1 - radius );
|
|
Packit |
8e9c33 |
path.arcTo( QRectF( QPointF( ( baseRect.width() + tabWidth )/2 -1, baseRect.height()-1 - 2*radius ), cornerSize ), 180, 90 );
|
|
Packit |
8e9c33 |
path.lineTo( baseRect.width()-1, baseRect.height()-1 );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// render
|
|
Packit |
8e9c33 |
painter->save();
|
|
Packit |
8e9c33 |
painter->setRenderHints( QPainter::Antialiasing );
|
|
Packit |
8e9c33 |
painter->setBrush( Qt::NoBrush );
|
|
Packit |
8e9c33 |
painter->setPen( outline );
|
|
Packit |
8e9c33 |
painter->translate( baseRect.topLeft() );
|
|
Packit |
8e9c33 |
painter->drawPath( path );
|
|
Packit |
8e9c33 |
painter->restore();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________________________
|
|
Packit |
8e9c33 |
void Helper::renderTabWidgetFrame(
|
|
Packit |
8e9c33 |
QPainter* painter, const QRect& rect,
|
|
Packit |
8e9c33 |
const QColor& color, const QColor& outline, Corners corners ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->setRenderHint( QPainter::Antialiasing );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRectF frameRect( rect.adjusted( 1, 1, -1, -1 ) );
|
|
Packit |
8e9c33 |
qreal radius( frameRadius() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// set pen
|
|
Packit |
8e9c33 |
if( outline.isValid() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->setPen( outline );
|
|
Packit |
8e9c33 |
frameRect.adjust( 0.5, 0.5, -0.5, -0.5 );
|
|
Packit |
8e9c33 |
radius = qMax( radius-1, qreal( 0.0 ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else painter->setPen( Qt::NoPen );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// set brush
|
|
Packit |
8e9c33 |
if( color.isValid() ) painter->setBrush( color );
|
|
Packit |
8e9c33 |
else painter->setBrush( Qt::NoBrush );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// render
|
|
Packit |
8e9c33 |
QPainterPath path( roundedPath( frameRect, corners, radius ) );
|
|
Packit |
8e9c33 |
painter->drawPath( path );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________________________
|
|
Packit |
8e9c33 |
void Helper::renderSelection(
|
|
Packit |
8e9c33 |
QPainter* painter, const QRect& rect,
|
|
Packit |
8e9c33 |
const QColor& color ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->setRenderHint( QPainter::Antialiasing );
|
|
Packit |
8e9c33 |
painter->setPen( Qt::NoPen );
|
|
Packit |
8e9c33 |
painter->setBrush( color );
|
|
Packit |
8e9c33 |
painter->drawRect( rect );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________________________
|
|
Packit |
8e9c33 |
void Helper::renderSeparator(
|
|
Packit |
8e9c33 |
QPainter* painter, const QRect& rect,
|
|
Packit |
8e9c33 |
const QColor& color, bool vertical ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->save();
|
|
Packit |
8e9c33 |
painter->setRenderHint( QPainter::Antialiasing, false );
|
|
Packit |
8e9c33 |
painter->setBrush( Qt::NoBrush );
|
|
Packit |
8e9c33 |
painter->setPen( color );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( vertical )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->translate( rect.width()/2, 0 );
|
|
Packit |
8e9c33 |
painter->drawLine( rect.topLeft(), rect.bottomLeft() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->translate( 0, rect.height()/2 );
|
|
Packit |
8e9c33 |
painter->drawLine( rect.topLeft(), rect.topRight() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->restore();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________________________
|
|
Packit |
8e9c33 |
void Helper::renderCheckBoxBackground(
|
|
Packit |
8e9c33 |
QPainter* painter, const QRect& rect,
|
|
Packit |
8e9c33 |
const QColor& color, const QColor &outline, bool sunken ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// setup painter
|
|
Packit |
8e9c33 |
painter->setRenderHint( QPainter::Antialiasing, true );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// copy rect and radius
|
|
Packit |
8e9c33 |
QRectF frameRect( rect );
|
|
Packit |
8e9c33 |
frameRect.adjust( 3, 3, -3, -3 );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->setPen( outline );
|
|
Packit |
8e9c33 |
painter->setBrush( color );
|
|
Packit |
8e9c33 |
painter->drawRect( frameRect );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________________________
|
|
Packit |
8e9c33 |
void Helper::renderCheckBox(
|
|
Packit |
8e9c33 |
QPainter* painter, const QRect& rect,
|
|
Packit |
8e9c33 |
const QColor& background, const QColor& outline, const QColor& tickColor,
|
|
Packit |
8e9c33 |
bool sunken, CheckBoxState state, qreal animation, bool active ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// setup painter
|
|
Packit |
8e9c33 |
painter->save();
|
|
Packit |
8e9c33 |
painter->setRenderHint( QPainter::Antialiasing, true );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// copy rect and radius
|
|
Packit |
8e9c33 |
QRectF frameRect( rect );
|
|
Packit |
8e9c33 |
frameRect.adjust( 2, 2, -2, -2 );
|
|
Packit |
8e9c33 |
qreal radius( frameRadius() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// content
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
renderButtonFrame(painter, rect, background, outline, Qt::transparent, false, sunken, false, active);
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// mark
|
|
Packit |
8e9c33 |
if( state == CheckOn )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
painter->save();
|
|
Packit |
8e9c33 |
painter->setRenderHint(QPainter::Antialiasing);
|
|
Packit |
8e9c33 |
painter->setBrush( Qt::NoBrush );
|
|
Packit |
8e9c33 |
QPen pen( tickColor, 3 );
|
|
Packit |
8e9c33 |
pen.setJoinStyle(Qt::MiterJoin);
|
|
Packit |
8e9c33 |
painter->setPen( pen );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRectF markerRect(frameRect);
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QPainterPath path;
|
|
Packit |
8e9c33 |
path.moveTo( markerRect.right(), markerRect.top() + markerRect.height() / 4 );
|
|
Packit |
8e9c33 |
path.lineTo( markerRect.center().x(), markerRect.bottom() - markerRect.height() / 3.0 );
|
|
Packit |
8e9c33 |
path.lineTo( markerRect.left() + markerRect.width() / 3.0, markerRect.center().y() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->setClipRect(markerRect);
|
|
Packit |
8e9c33 |
painter->drawPath( path );
|
|
Packit |
8e9c33 |
painter->restore();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else if( state == CheckPartial ) {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QPen pen( tickColor, 4 );
|
|
Packit |
8e9c33 |
pen.setCapStyle( Qt::RoundCap );
|
|
Packit |
8e9c33 |
painter->setPen( pen );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRectF markerRect( frameRect.adjusted( 4, 4, -4, -4 ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->drawLine( markerRect.center() - QPoint(3, 0), markerRect.center() + QPoint(3, 0) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else if( state == CheckAnimated ) {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->save();
|
|
Packit |
8e9c33 |
painter->setRenderHint(QPainter::Antialiasing);
|
|
Packit |
8e9c33 |
painter->setBrush( Qt::NoBrush );
|
|
Packit |
8e9c33 |
QPen pen( tickColor, 3 );
|
|
Packit |
8e9c33 |
pen.setJoinStyle(Qt::MiterJoin);
|
|
Packit |
8e9c33 |
painter->setPen( pen );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRectF markerRect(frameRect);
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QPainterPath path;
|
|
Packit |
8e9c33 |
path.moveTo( markerRect.right(), markerRect.top() + markerRect.height() / 4 );
|
|
Packit |
8e9c33 |
path.lineTo( markerRect.center().x(), markerRect.bottom() - markerRect.height() / 3.0 );
|
|
Packit |
8e9c33 |
path.lineTo( markerRect.left() + markerRect.width() / 3.0, markerRect.center().y() );
|
|
Packit |
8e9c33 |
path.translate(-markerRect.right(), -markerRect.top());
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->setClipRect(markerRect.adjusted(1, 1, -1, -1));
|
|
Packit |
8e9c33 |
painter->translate(markerRect.right(), markerRect.top());
|
|
Packit |
8e9c33 |
painter->scale(animation, 0.5 + 0.5 * animation);
|
|
Packit |
8e9c33 |
painter->drawPath( path );
|
|
Packit |
8e9c33 |
painter->restore();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->restore();
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________________________
|
|
Packit |
8e9c33 |
void Helper::renderRadioButtonBackground( QPainter* painter, const QRect& rect, const QColor& color, const QColor& outline, bool sunken ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// setup painter
|
|
Packit |
8e9c33 |
painter->setRenderHint( QPainter::Antialiasing, true );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// copy rect
|
|
Packit |
8e9c33 |
QRectF frameRect( rect );
|
|
Packit |
8e9c33 |
frameRect.adjust( 3, 3, -3, -3 );
|
|
Packit |
8e9c33 |
if( sunken ) frameRect.translate(1, 1);
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->setPen( outline );
|
|
Packit |
8e9c33 |
painter->setBrush( color );
|
|
Packit |
8e9c33 |
painter->drawEllipse( frameRect );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________________________
|
|
Packit |
8e9c33 |
void Helper::renderRadioButton(
|
|
Packit |
8e9c33 |
QPainter* painter, const QRect& rect,
|
|
Packit |
8e9c33 |
const QColor& background, const QColor& outline, const QColor& tickColor,
|
|
Packit |
8e9c33 |
bool sunken, bool enabled, RadioButtonState state, qreal animation ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// setup painter
|
|
Packit |
8e9c33 |
painter->setRenderHint( QPainter::Antialiasing, true );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// copy rect
|
|
Packit |
8e9c33 |
QRectF frameRect( rect );
|
|
Packit |
8e9c33 |
frameRect.adjust( 2, 2, -2, -2 );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// content
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if (background.isValid()) {
|
|
Packit |
8e9c33 |
if (enabled) {
|
|
Packit |
8e9c33 |
QLinearGradient gradient( frameRect.topLeft(), frameRect.bottomLeft() );
|
|
Packit |
8e9c33 |
if (sunken) {
|
|
Packit |
8e9c33 |
gradient.setColorAt( 0, background);
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
else {
|
|
Packit |
8e9c33 |
gradient.setColorAt( 0, mix(background, Qt::white, 0.07) );
|
|
Packit |
8e9c33 |
gradient.setColorAt( 1, mix(background, Qt::black, 0.1) );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
painter->setBrush( gradient );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
else {
|
|
Packit |
8e9c33 |
painter->setBrush( background );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
} else {
|
|
Packit |
8e9c33 |
painter->setBrush( Qt::NoBrush );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->setPen( QPen( outline, 1 ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRectF contentRect( frameRect.adjusted( 0.5, 0.5, -0.5, -0.5 ) );
|
|
Packit |
8e9c33 |
painter->drawEllipse( contentRect );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// mark
|
|
Packit |
8e9c33 |
if( state == RadioOn )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->setBrush( tickColor );
|
|
Packit |
8e9c33 |
painter->setPen( Qt::NoPen );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRectF markerRect( frameRect.adjusted( 5, 5, -5, -5 ) );
|
|
Packit |
8e9c33 |
painter->drawEllipse( markerRect );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else if( state == RadioAnimated ) {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->setBrush( tickColor );
|
|
Packit |
8e9c33 |
painter->setPen( Qt::NoPen );
|
|
Packit |
8e9c33 |
QRectF markerRect( frameRect.adjusted( 5, 5, -5, -5 ) );
|
|
Packit |
8e9c33 |
qreal remaining = markerRect.width() / 2.0 * (1.0 - animation);
|
|
Packit |
8e9c33 |
markerRect.adjust(remaining, remaining, -remaining, -remaining);
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->drawEllipse( markerRect );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________________________
|
|
Packit |
8e9c33 |
void Helper::renderSliderGroove(
|
|
Packit |
8e9c33 |
QPainter* painter, const QRect& rect,
|
|
Packit |
8e9c33 |
const QColor& color ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// setup painter
|
|
Packit |
8e9c33 |
painter->setRenderHint( QPainter::Antialiasing, true );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRectF baseRect( rect );
|
|
Packit |
8e9c33 |
qreal radius( 0.5*Metrics::Slider_GrooveThickness );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// content
|
|
Packit |
8e9c33 |
if( color.isValid() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
painter->setPen( Qt::NoPen );
|
|
Packit |
8e9c33 |
painter->setBrush( color );
|
|
Packit |
8e9c33 |
painter->drawRoundedRect( baseRect, radius, radius );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________________________
|
|
Packit |
8e9c33 |
void Helper::renderDialGroove(
|
|
Packit |
8e9c33 |
QPainter* painter, const QRect& rect,
|
|
Packit |
8e9c33 |
const QColor& color ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// setup painter
|
|
Packit |
8e9c33 |
painter->setRenderHint( QPainter::Antialiasing, true );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRectF baseRect( rect );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// content
|
|
Packit |
8e9c33 |
if( color.isValid() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
qreal penWidth( Metrics::Slider_GrooveThickness );
|
|
Packit |
8e9c33 |
QRectF grooveRect( rect.adjusted( penWidth/2, penWidth/2, -penWidth/2, -penWidth/2 ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->setPen( QPen( color, penWidth ) );
|
|
Packit |
8e9c33 |
painter->setBrush( Qt::NoBrush );
|
|
Packit |
8e9c33 |
painter->drawEllipse( grooveRect );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________________________
|
|
Packit |
8e9c33 |
void Helper::renderDialContents(
|
|
Packit |
8e9c33 |
QPainter* painter, const QRect& rect,
|
|
Packit |
8e9c33 |
const QColor& color,
|
|
Packit |
8e9c33 |
qreal first, qreal second ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// setup painter
|
|
Packit |
8e9c33 |
painter->setRenderHint( QPainter::Antialiasing, true );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRectF baseRect( rect );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// content
|
|
Packit |
8e9c33 |
if( color.isValid() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// setup groove rect
|
|
Packit |
8e9c33 |
qreal penWidth( Metrics::Slider_GrooveThickness );
|
|
Packit |
8e9c33 |
QRectF grooveRect( rect.adjusted( penWidth/2, penWidth/2, -penWidth/2, -penWidth/2 ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// setup angles
|
|
Packit |
8e9c33 |
int angleStart( first * 180 * 16 / M_PI );
|
|
Packit |
8e9c33 |
int angleSpan( (second - first ) * 180 * 16 / M_PI );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// setup pen
|
|
Packit |
8e9c33 |
if( angleSpan != 0 )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
QPen pen( color, penWidth );
|
|
Packit |
8e9c33 |
pen.setCapStyle( Qt::RoundCap );
|
|
Packit |
8e9c33 |
painter->setPen( pen );
|
|
Packit |
8e9c33 |
painter->setBrush( Qt::NoBrush );
|
|
Packit |
8e9c33 |
painter->drawArc( grooveRect, angleStart, angleSpan );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________________________
|
|
Packit |
8e9c33 |
void Helper::renderSliderHandle(QPainter* painter, const QRect& rect,
|
|
Packit |
8e9c33 |
const QColor& color,
|
|
Packit |
8e9c33 |
const QColor& outline,
|
|
Packit |
8e9c33 |
const QColor& shadow,
|
|
Packit |
8e9c33 |
bool sunken,
|
|
Packit |
8e9c33 |
bool enabled,
|
|
Packit |
8e9c33 |
Side ticks,
|
|
Packit |
8e9c33 |
qreal angle) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// setup painter
|
|
Packit |
8e9c33 |
painter->setRenderHint( QPainter::Antialiasing, true );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// copy rect
|
|
Packit |
8e9c33 |
QRectF frameRect( rect );
|
|
Packit |
8e9c33 |
frameRect.adjust( 1, 1, -1, -1 );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// set pen
|
|
Packit |
8e9c33 |
if( outline.isValid() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QPen pen(outline);
|
|
Packit |
8e9c33 |
pen.setCapStyle( Qt::FlatCap );
|
|
Packit |
8e9c33 |
pen.setJoinStyle( Qt::MiterJoin );
|
|
Packit |
8e9c33 |
painter->setPen(pen);
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
frameRect.adjust( 0.5, 0.5, -0.5, -0.5 );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else painter->setPen( Qt::NoPen );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// set brush
|
|
Packit |
8e9c33 |
if( color.isValid() ) {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if (enabled) {
|
|
Packit |
8e9c33 |
QLinearGradient gradient( frameRect.topLeft(), frameRect.bottomLeft() );
|
|
Packit |
8e9c33 |
if (sunken) {
|
|
Packit |
8e9c33 |
gradient.setColorAt( 0, color);
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
else {
|
|
Packit |
8e9c33 |
gradient.setColorAt( 0, mix(color, Qt::white, 0.07) );
|
|
Packit |
8e9c33 |
gradient.setColorAt( 1, mix(color, Qt::black, 0.1) );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
painter->setBrush(gradient);
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
else {
|
|
Packit |
8e9c33 |
painter->setBrush(color);
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
else painter->setBrush( Qt::NoBrush );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRect r(rect.right() - rect.height(), rect.top(), rect.height(), rect.height());
|
|
Packit |
8e9c33 |
r.adjust(4.5, 3.5, -2.5, -3.5);
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QPainterPath circle;
|
|
Packit |
8e9c33 |
circle.addEllipse(r);
|
|
Packit |
8e9c33 |
circle.closeSubpath();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if (ticks & SideBottom) {
|
|
Packit |
8e9c33 |
QPainterPath triangle(r.center());
|
|
Packit |
8e9c33 |
triangle.moveTo(r.left() + 1.5, r.center().y() + 5.5);
|
|
Packit |
8e9c33 |
triangle.lineTo(r.center().x() + 1, r.bottom() + 4.5);
|
|
Packit |
8e9c33 |
triangle.lineTo(r.right() - 0.5, r.center().y() + 5.5);
|
|
Packit |
8e9c33 |
triangle.closeSubpath();
|
|
Packit |
8e9c33 |
circle = circle.united(triangle);
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
else if (ticks & SideTop) {
|
|
Packit |
8e9c33 |
QPainterPath triangle(r.center());
|
|
Packit |
8e9c33 |
triangle.moveTo(r.left() + 1.5, r.center().y() - 3.5);
|
|
Packit |
8e9c33 |
triangle.lineTo(r.center().x() + 1, r.top() - 2.5);
|
|
Packit |
8e9c33 |
triangle.lineTo(r.right() - 0.5, r.center().y() - 3.5);
|
|
Packit |
8e9c33 |
triangle.closeSubpath();
|
|
Packit |
8e9c33 |
circle = circle.united(triangle);
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
else if (ticks & SideLeft) {
|
|
Packit |
8e9c33 |
QPainterPath triangle(r.center());
|
|
Packit |
8e9c33 |
triangle.moveTo(r.center().x() - 3.5, r.top() + 1.5);
|
|
Packit |
8e9c33 |
triangle.lineTo(r.left() - 2.5, r.center().y() + 1);
|
|
Packit |
8e9c33 |
triangle.lineTo(r.center().x() - 3.5, r.bottom() - 0.5);
|
|
Packit |
8e9c33 |
triangle.closeSubpath();
|
|
Packit |
8e9c33 |
circle = circle.united(triangle);
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
else if (ticks & SideRight) {
|
|
Packit |
8e9c33 |
QPainterPath triangle(r.center());
|
|
Packit |
8e9c33 |
triangle.moveTo(r.center().x() + 3.5, r.top() + 1.5);
|
|
Packit |
8e9c33 |
triangle.lineTo(r.right() + 2.5, r.center().y() + 1);
|
|
Packit |
8e9c33 |
triangle.lineTo(r.center().x() + 3.5, r.bottom() - 0.5);
|
|
Packit |
8e9c33 |
triangle.closeSubpath();
|
|
Packit |
8e9c33 |
circle = circle.united(triangle);
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QTransform rotate;
|
|
Packit |
8e9c33 |
rotate.translate(frameRect.center().x(), frameRect.center().y());
|
|
Packit |
8e9c33 |
rotate.rotate(angle);
|
|
Packit |
8e9c33 |
rotate.translate(-frameRect.center().x(), -frameRect.center().y());
|
|
Packit |
8e9c33 |
painter->drawPolygon(circle.toFillPolygon(rotate));
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________________________
|
|
Packit |
8e9c33 |
void Helper::renderProgressBarGroove(QPainter* painter, const QRect& rect,
|
|
Packit |
8e9c33 |
const QColor& color , const QColor& outline) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// setup painter
|
|
Packit |
8e9c33 |
painter->setRenderHint( QPainter::Antialiasing, true );
|
|
Packit |
8e9c33 |
painter->setRenderHint( QPainter::SmoothPixmapTransform, true );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRectF baseRect( rect );
|
|
Packit |
8e9c33 |
qreal radius( 0.5 );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// content
|
|
Packit |
8e9c33 |
if( color.isValid() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
painter->setPen( outline );
|
|
Packit |
8e9c33 |
painter->setBrush( color );
|
|
Packit |
8e9c33 |
painter->drawRoundedRect( baseRect.translated(0.5, 0.5), radius, radius );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________________________
|
|
Packit |
8e9c33 |
void Helper::renderProgressBarBusyContents(
|
|
Packit |
8e9c33 |
QPainter* painter, const QRect& rect,
|
|
Packit |
8e9c33 |
const QColor& color,
|
|
Packit |
8e9c33 |
const QColor& outline,
|
|
Packit |
8e9c33 |
bool horizontal,
|
|
Packit |
8e9c33 |
bool reverse,
|
|
Packit |
8e9c33 |
int progress
|
|
Packit |
8e9c33 |
) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
Q_UNUSED(reverse);
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// setup painter
|
|
Packit |
8e9c33 |
painter->setRenderHint( QPainter::Antialiasing, true );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRectF baseRect( rect );
|
|
Packit |
8e9c33 |
qreal radius( 0.25*Metrics::ProgressBar_Thickness );
|
|
Packit |
8e9c33 |
QRectF contentRect;
|
|
Packit |
8e9c33 |
if (horizontal) {
|
|
Packit |
8e9c33 |
contentRect = QRect(baseRect.left(), baseRect.top(), Metrics::ProgressBar_BusyIndicatorSize, baseRect.height());
|
|
Packit |
8e9c33 |
contentRect.translate(fabs(progress - 50) / 50.0 * (baseRect.width() - contentRect.width()), 0);
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
else {
|
|
Packit |
8e9c33 |
contentRect = QRect(baseRect.left(), baseRect.top(), baseRect.width(), Metrics::ProgressBar_BusyIndicatorSize);
|
|
Packit |
8e9c33 |
contentRect.translate(0, fabs(progress - 50) / 50.0 * (baseRect.height() - contentRect.height()));
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->setBrush(color);
|
|
Packit |
8e9c33 |
painter->setPen(outline);
|
|
Packit |
8e9c33 |
painter->drawRoundedRect(contentRect.translated(0.5, 0.5), radius, radius);
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________________________
|
|
Packit |
8e9c33 |
void Helper::renderScrollBarHandle(
|
|
Packit |
8e9c33 |
QPainter* painter, const QRect& rect,
|
|
Packit |
8e9c33 |
const QColor& color ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// setup painter
|
|
Packit |
8e9c33 |
painter->setRenderHint( QPainter::Antialiasing, true );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRectF baseRect( rect );
|
|
Packit |
8e9c33 |
qreal metric( rect.width() < rect.height() ? rect.width() : rect.height());
|
|
Packit |
8e9c33 |
qreal radius( 0.5*metric );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// content
|
|
Packit |
8e9c33 |
if( color.isValid() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
painter->setPen( Qt::NoPen );
|
|
Packit |
8e9c33 |
painter->setBrush( color );
|
|
Packit |
8e9c33 |
painter->drawRoundedRect( baseRect, radius, radius );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________________________
|
|
Packit |
8e9c33 |
void Helper::renderTabBarTab( QPainter* painter, const QRect& rect, const QColor& background, const QColor& color, const QColor& outline, Corners corners, bool renderFrame ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// setup painter
|
|
Packit |
8e9c33 |
painter->setRenderHint( QPainter::Antialiasing, false );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRectF frameRect( rect );
|
|
Packit |
8e9c33 |
qreal adjustment;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// pen
|
|
Packit |
8e9c33 |
if( outline.isValid() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->setPen( outline );
|
|
Packit |
8e9c33 |
frameRect.adjust( 1.0, 1.0, -1.0, -1.0 );
|
|
Packit |
8e9c33 |
adjustment = 0;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->setBrush( background );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// render
|
|
Packit |
8e9c33 |
painter->drawRect( frameRect );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else if (!renderFrame) {
|
|
Packit |
8e9c33 |
adjustment = 9;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->setPen( QPen( color, 6 ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
switch (corners) {
|
|
Packit |
8e9c33 |
case CornerTopLeft|CornerTopRight:
|
|
Packit |
8e9c33 |
painter->drawLine(frameRect.left() + adjustment, frameRect.bottom(), frameRect.right() - adjustment, frameRect.bottom());
|
|
Packit |
8e9c33 |
break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case CornerBottomLeft|CornerBottomRight:
|
|
Packit |
8e9c33 |
painter->drawLine(frameRect.left() + adjustment, frameRect.top(), frameRect.right() - adjustment, frameRect.top());
|
|
Packit |
8e9c33 |
break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case CornerTopLeft|CornerBottomLeft:
|
|
Packit |
8e9c33 |
painter->drawLine(frameRect.right(), frameRect.top() + adjustment, frameRect.right(), frameRect.bottom() - adjustment);
|
|
Packit |
8e9c33 |
break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case CornerTopRight|CornerBottomRight:
|
|
Packit |
8e9c33 |
painter->drawLine(frameRect.left(), frameRect.top() + adjustment, frameRect.left(), frameRect.bottom() - adjustment);
|
|
Packit |
8e9c33 |
break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________________________
|
|
Packit |
8e9c33 |
// TODO blurry edges
|
|
Packit |
8e9c33 |
void Helper::renderArrow( QPainter* painter, const QRect& rect, const QColor& color, ArrowOrientation orientation ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// define polygon
|
|
Packit |
8e9c33 |
QPolygonF arrow;
|
|
Packit |
8e9c33 |
switch( orientation )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
case ArrowUp: arrow << QPointF( -4, 2 ) << QPointF( 0, -2 ) << QPointF( 4, 2 ); break;
|
|
Packit |
8e9c33 |
case ArrowDown: arrow << QPointF( -4, -2 ) << QPointF( 0, 2 ) << QPointF( 4, -2 ); break;
|
|
Packit |
8e9c33 |
case ArrowLeft: arrow << QPointF( 2, -4 ) << QPointF( -2, 0 ) << QPointF( 2, 4 ); break;
|
|
Packit |
8e9c33 |
case ArrowRight: arrow << QPointF( -2, -4 ) << QPointF( 2, 0 ) << QPointF( -2, 4 ); break;
|
|
Packit |
8e9c33 |
default: break;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QPen pen(color, 1.2);
|
|
Packit |
8e9c33 |
pen.setCapStyle( Qt::FlatCap );
|
|
Packit |
8e9c33 |
pen.setJoinStyle( Qt::MiterJoin );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->save();
|
|
Packit |
8e9c33 |
painter->setRenderHints( QPainter::Antialiasing );
|
|
Packit |
8e9c33 |
painter->translate( QRectF( rect ).center() );
|
|
Packit |
8e9c33 |
painter->setBrush( color );
|
|
Packit |
8e9c33 |
painter->setPen( pen );
|
|
Packit |
8e9c33 |
painter->drawPolygon( arrow );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->restore();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
void Helper::renderSign(QPainter *painter, const QRect &rect, const QColor &color, bool orientation) const {
|
|
Packit |
8e9c33 |
QPen pen( color, 2 );
|
|
Packit |
8e9c33 |
pen.setCapStyle( Qt::FlatCap );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRect r = rect.adjusted(1, 2, 0, 0);
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->setPen(pen);
|
|
Packit |
8e9c33 |
painter->drawLine(r.center() - QPointF(5, 0), r.center() + QPointF(5, 0));
|
|
Packit |
8e9c33 |
if (orientation)
|
|
Packit |
8e9c33 |
painter->drawLine(r.center() - QPointF(0, 5), r.center() + QPointF(0, 5));
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________________________
|
|
Packit |
8e9c33 |
void Helper::renderDecorationButton( QPainter* painter, const QRect& rect, const QColor& color, ButtonType buttonType, bool inverted ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->save();
|
|
Packit |
8e9c33 |
painter->setViewport( rect );
|
|
Packit |
8e9c33 |
painter->setWindow( 0, 0, 18, 18 );
|
|
Packit |
8e9c33 |
painter->setRenderHints( QPainter::Antialiasing, false );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// initialize pen
|
|
Packit |
8e9c33 |
QPen pen;
|
|
Packit |
8e9c33 |
pen.setCapStyle( Qt::RoundCap );
|
|
Packit |
8e9c33 |
pen.setJoinStyle( Qt::MiterJoin );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->setBrush( Qt::NoBrush );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
pen.setColor( color );
|
|
Packit |
8e9c33 |
pen.setCapStyle( Qt::RoundCap );
|
|
Packit |
8e9c33 |
pen.setJoinStyle( Qt::MiterJoin );
|
|
Packit |
8e9c33 |
pen.setWidthF( 2.0*qMax(1.0, 18.0/rect.width() ) );
|
|
Packit |
8e9c33 |
painter->setPen( pen );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
switch( buttonType )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
case ButtonClose:
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
painter->setRenderHints( QPainter::Antialiasing, true );
|
|
Packit |
8e9c33 |
painter->drawLine( QPointF( 5, 5 ), QPointF( 13, 13 ) );
|
|
Packit |
8e9c33 |
painter->drawLine( 13, 5, 5, 13 );
|
|
Packit |
8e9c33 |
break;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case ButtonMaximize:
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
painter->drawPolyline( QPolygonF()
|
|
Packit |
8e9c33 |
<< QPointF( 4, 4 )
|
|
Packit |
8e9c33 |
<< QPointF( 4, 14 )
|
|
Packit |
8e9c33 |
<< QPointF( 14, 14 )
|
|
Packit |
8e9c33 |
<< QPointF( 14, 4 ) );
|
|
Packit |
8e9c33 |
break;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case ButtonMinimize:
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->drawPolyline( QPolygonF()
|
|
Packit |
8e9c33 |
<< QPointF( 4, 14 )
|
|
Packit |
8e9c33 |
<< QPointF( 14, 14 ) );
|
|
Packit |
8e9c33 |
break;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case ButtonRestore:
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
painter->setPen( pen );
|
|
Packit |
8e9c33 |
QPolygonF rect = QPolygonF() << QPointF( 0, 0 ) << QPointF( 8, 0 ) << QPointF( 8, 8 ) << QPointF( 0, 8 );
|
|
Packit |
8e9c33 |
painter->drawPolygon( rect.translated(7, 3) );
|
|
Packit |
8e9c33 |
painter->drawPolygon( rect.translated(3, 7) );
|
|
Packit |
8e9c33 |
break;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
default: break;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->restore();
|
|
Packit |
8e9c33 |
return;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________________________
|
|
Packit |
8e9c33 |
bool Helper::isX11( void )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
#if QT_VERSION >= 0x050000
|
|
Packit |
8e9c33 |
static const bool s_isX11 = qApp->platformName()==QLatin1String("xcb");
|
|
Packit |
8e9c33 |
return s_isX11;
|
|
Packit |
8e9c33 |
#else
|
|
Packit |
8e9c33 |
return false;
|
|
Packit |
8e9c33 |
#endif
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
bool Helper::isWayland( void )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
#if QT_VERSION >= 0x050000
|
|
Packit |
8e9c33 |
static const bool s_isWayland = qApp->platformName().startsWith(QLatin1String("wayland"));
|
|
Packit |
8e9c33 |
return s_isWayland;
|
|
Packit |
8e9c33 |
#else
|
|
Packit |
8e9c33 |
return false;
|
|
Packit |
8e9c33 |
#endif
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________________________
|
|
Packit |
8e9c33 |
QRectF Helper::shadowRect( const QRectF& rect ) const
|
|
Packit |
8e9c33 |
{ return rect; }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________________________
|
|
Packit |
8e9c33 |
QPainterPath Helper::roundedPath( const QRectF& rect, Corners corners, qreal radius ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QPainterPath path;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// simple cases
|
|
Packit |
8e9c33 |
if( corners == 0 )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
path.addRect( rect );
|
|
Packit |
8e9c33 |
return path;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( corners == AllCorners ) {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
path.addRoundedRect( rect, radius, radius );
|
|
Packit |
8e9c33 |
return path;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QSizeF cornerSize( 2*radius, 2*radius );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// rotate counterclockwise
|
|
Packit |
8e9c33 |
// top left corner
|
|
Packit |
8e9c33 |
if( corners & CornerTopLeft )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
path.moveTo( rect.topLeft() + QPointF( radius, 0 ) );
|
|
Packit |
8e9c33 |
path.arcTo( QRectF( rect.topLeft(), cornerSize ), 90, 90 );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else path.moveTo( rect.topLeft() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// bottom left corner
|
|
Packit |
8e9c33 |
if( corners & CornerBottomLeft )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
path.lineTo( rect.bottomLeft() - QPointF( 0, radius ) );
|
|
Packit |
8e9c33 |
path.arcTo( QRectF( rect.bottomLeft() - QPointF( 0, 2*radius ), cornerSize ), 180, 90 );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else path.lineTo( rect.bottomLeft() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// bottom right corner
|
|
Packit |
8e9c33 |
if( corners & CornerBottomRight )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
path.lineTo( rect.bottomRight() - QPointF( radius, 0 ) );
|
|
Packit |
8e9c33 |
path.arcTo( QRectF( rect.bottomRight() - QPointF( 2*radius, 2*radius ), cornerSize ), 270, 90 );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else path.lineTo( rect.bottomRight() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// top right corner
|
|
Packit |
8e9c33 |
if( corners & CornerTopRight )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
path.lineTo( rect.topRight() + QPointF( 0, radius ) );
|
|
Packit |
8e9c33 |
path.arcTo( QRectF( rect.topRight() - QPointF( 2*radius, 0 ), cornerSize ), 0, 90 );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else path.lineTo( rect.topRight() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
path.closeSubpath();
|
|
Packit |
8e9c33 |
return path;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//________________________________________________________________________________________________________
|
|
Packit |
8e9c33 |
bool Helper::compositingActive( void ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
#if ADWAITA_HAVE_X11
|
|
Packit |
8e9c33 |
if( isX11() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
// direct call to X
|
|
Packit |
8e9c33 |
xcb_get_selection_owner_cookie_t cookie( xcb_get_selection_owner( connection(), _compositingManagerAtom ) );
|
|
Packit |
8e9c33 |
ScopedPointer<xcb_get_selection_owner_reply_t> reply( xcb_get_selection_owner_reply( connection(), cookie, nullptr ) );
|
|
Packit |
8e9c33 |
return reply && reply->owner;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
#endif
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// use KWindowSystem
|
|
Packit |
8e9c33 |
//return KWindowSystem::compositingActive();
|
|
Packit |
8e9c33 |
return false;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________________
|
|
Packit |
8e9c33 |
bool Helper::hasAlphaChannel( const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{ return compositingActive() && widget && widget->testAttribute( Qt::WA_TranslucentBackground ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________________________________
|
|
Packit |
8e9c33 |
QPixmap Helper::highDpiPixmap( int width, int height ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
#if QT_VERSION >= 0x050300
|
|
Packit |
8e9c33 |
qreal dpiRatio( qApp->devicePixelRatio() );
|
|
Packit |
8e9c33 |
QPixmap pixmap( width*dpiRatio, height*dpiRatio );
|
|
Packit |
8e9c33 |
pixmap.setDevicePixelRatio( dpiRatio );
|
|
Packit |
8e9c33 |
return pixmap;
|
|
Packit |
8e9c33 |
#else
|
|
Packit |
8e9c33 |
return QPixmap( width, height );
|
|
Packit |
8e9c33 |
#endif
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________________________________
|
|
Packit |
8e9c33 |
qreal Helper::devicePixelRatio( const QPixmap& pixmap ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
#if QT_VERSION >= 0x050300
|
|
Packit |
8e9c33 |
return pixmap.devicePixelRatio();
|
|
Packit |
8e9c33 |
#else
|
|
Packit |
8e9c33 |
Q_UNUSED(pixmap);
|
|
Packit |
8e9c33 |
return 1;
|
|
Packit |
8e9c33 |
#endif
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
#if ADWAITA_HAVE_X11
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________________
|
|
Packit |
8e9c33 |
xcb_connection_t* Helper::connection( void )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
#if QT_VERSION >= 0x050000
|
|
Packit |
8e9c33 |
return QX11Info::connection();
|
|
Packit |
8e9c33 |
#else
|
|
Packit |
8e9c33 |
static xcb_connection_t* connection = nullptr;
|
|
Packit |
8e9c33 |
if( !connection )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
Display* display = QX11Info::display();
|
|
Packit |
8e9c33 |
if( display ) connection = XGetXCBConnection( display );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
return connection;
|
|
Packit |
8e9c33 |
#endif
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________________
|
|
Packit |
8e9c33 |
xcb_atom_t Helper::createAtom( const QString& name ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
if( isX11() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
xcb_connection_t* connection( Helper::connection() );
|
|
Packit |
8e9c33 |
xcb_intern_atom_cookie_t cookie( xcb_intern_atom( connection, false, name.size(), qPrintable( name ) ) );
|
|
Packit |
8e9c33 |
ScopedPointer<xcb_intern_atom_reply_t> reply( xcb_intern_atom_reply( connection, cookie, nullptr) );
|
|
Packit |
8e9c33 |
return reply ? reply->atom:0;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else return 0;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
#endif
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________________
|
|
Packit |
8e9c33 |
void Helper::init( void )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
#if ADWAITA_HAVE_X11
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( isX11() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
// create compositing screen
|
|
Packit |
8e9c33 |
QString atomName( QStringLiteral( "_NET_WM_CM_S%1" ).arg( QX11Info::appScreen() ) );
|
|
Packit |
8e9c33 |
_compositingManagerAtom = createAtom( atomName );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
#endif
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________________
|
|
Packit |
8e9c33 |
void Helper::setVariant(QWidget *widget, const QByteArray &variant)
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
if (isX11() && widget) { // && !widget->testAttribute(Qt::WA_)) {
|
|
Packit |
8e9c33 |
static const char *_GTK_THEME_VARIANT="_GTK_THEME_VARIANT";
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// Check if already set
|
|
Packit |
8e9c33 |
QVariant var=widget->property("_GTK_THEME_VARIANT");
|
|
Packit |
8e9c33 |
if (var.isValid() && var.toByteArray()==variant) {
|
|
Packit |
8e9c33 |
return;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// Typedef's from xcb/xcb.h - copied so that there is no
|
|
Packit |
8e9c33 |
// direct xcb dependency
|
|
Packit |
8e9c33 |
typedef quint32 XcbAtom;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
struct XcbInternAtomCookie {
|
|
Packit |
8e9c33 |
unsigned int sequence;
|
|
Packit |
8e9c33 |
};
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
struct XcbInternAtomReply {
|
|
Packit |
8e9c33 |
quint8 response_type;
|
|
Packit |
8e9c33 |
quint8 pad0;
|
|
Packit |
8e9c33 |
quint16 sequence;
|
|
Packit |
8e9c33 |
quint32 length;
|
|
Packit |
8e9c33 |
XcbAtom atom;
|
|
Packit |
8e9c33 |
};
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
typedef void * (*XcbConnectFn)(int, int);
|
|
Packit |
8e9c33 |
typedef XcbInternAtomCookie (*XcbInternAtomFn)(void *, int, int, const char *);
|
|
Packit |
8e9c33 |
typedef XcbInternAtomReply * (*XcbInternAtomReplyFn)(void *, XcbInternAtomCookie, int);
|
|
Packit |
8e9c33 |
typedef int (*XcbChangePropertyFn)(void *, int, int, XcbAtom, XcbAtom, int, int, const void *);
|
|
Packit |
8e9c33 |
typedef int (*XcbFlushFn)(void *);
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
static QLibrary *lib = 0;
|
|
Packit |
8e9c33 |
static XcbAtom variantAtom = 0;
|
|
Packit |
8e9c33 |
static XcbAtom utf8TypeAtom = 0;
|
|
Packit |
8e9c33 |
static void *xcbConn = 0;
|
|
Packit |
8e9c33 |
static XcbChangePropertyFn XcbChangePropertyFnPtr = 0;
|
|
Packit |
8e9c33 |
static XcbFlushFn XcbFlushFnPtr = 0;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if (!lib) {
|
|
Packit |
8e9c33 |
lib = new QLibrary("libxcb", qApp);
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if (lib->load()) {
|
|
Packit |
8e9c33 |
XcbConnectFn XcbConnectFnPtr=(XcbConnectFn)lib->resolve("xcb_connect");
|
|
Packit |
8e9c33 |
XcbInternAtomFn XcbInternAtomFnPtr=(XcbInternAtomFn)lib->resolve("xcb_intern_atom");
|
|
Packit |
8e9c33 |
XcbInternAtomReplyFn XcbInternAtomReplyFnPtr=(XcbInternAtomReplyFn)lib->resolve("xcb_intern_atom_reply");
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
XcbChangePropertyFnPtr=(XcbChangePropertyFn)lib->resolve("xcb_change_property");
|
|
Packit |
8e9c33 |
XcbFlushFnPtr=(XcbFlushFn)lib->resolve("xcb_flush");
|
|
Packit |
8e9c33 |
if (XcbConnectFnPtr && XcbInternAtomFnPtr && XcbInternAtomReplyFnPtr && XcbChangePropertyFnPtr && XcbFlushFnPtr) {
|
|
Packit |
8e9c33 |
xcbConn=(*XcbConnectFnPtr)(0, 0);
|
|
Packit |
8e9c33 |
if (xcbConn) {
|
|
Packit |
8e9c33 |
XcbInternAtomReply *typeReply = (*XcbInternAtomReplyFnPtr)(xcbConn, (*XcbInternAtomFnPtr)(xcbConn, 0, 11, "UTF8_STRING"), 0);
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if (typeReply) {
|
|
Packit |
8e9c33 |
XcbInternAtomReply *gtkVarReply = (*XcbInternAtomReplyFnPtr)(xcbConn,
|
|
Packit |
8e9c33 |
(*XcbInternAtomFnPtr)(xcbConn, 0, strlen(_GTK_THEME_VARIANT),
|
|
Packit |
8e9c33 |
_GTK_THEME_VARIANT), 0);
|
|
Packit |
8e9c33 |
if (gtkVarReply) {
|
|
Packit |
8e9c33 |
utf8TypeAtom = typeReply->atom;
|
|
Packit |
8e9c33 |
variantAtom = gtkVarReply->atom;
|
|
Packit |
8e9c33 |
free(gtkVarReply);
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
free(typeReply);
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if (0!=variantAtom) {
|
|
Packit |
8e9c33 |
(*XcbChangePropertyFnPtr)(xcbConn, 0, widget->effectiveWinId(), variantAtom, utf8TypeAtom, 8,
|
|
Packit |
8e9c33 |
variant.length(), (const void *)variant.constData());
|
|
Packit |
8e9c33 |
(*XcbFlushFnPtr)(xcbConn);
|
|
Packit |
8e9c33 |
widget->setProperty(_GTK_THEME_VARIANT, variant);
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|