2019-06-20 12:02:28 +02:00
|
|
|
/******************************************************************************
|
|
|
|
* QSkinny - Copyright (C) 2016 Uwe Rathmann
|
|
|
|
* This file may be used under the terms of the 3-clause BSD License
|
|
|
|
*****************************************************************************/
|
|
|
|
|
2017-10-17 17:29:02 +02:00
|
|
|
#include "Box.h"
|
|
|
|
|
|
|
|
#include <QskBoxBorderColors.h>
|
2018-08-03 08:15:28 +02:00
|
|
|
#include <QskBoxBorderMetrics.h>
|
|
|
|
#include <QskBoxShapeMetrics.h>
|
2017-10-17 17:29:02 +02:00
|
|
|
|
2018-08-03 08:15:28 +02:00
|
|
|
Box::Box( QQuickItem* parentItem )
|
|
|
|
: QskBox( parentItem )
|
2017-10-17 17:29:02 +02:00
|
|
|
{
|
|
|
|
setSizePolicy( QskSizePolicy::Ignored, QskSizePolicy::Ignored );
|
|
|
|
|
|
|
|
// decoupling the hints from the skin
|
|
|
|
setBoxShapeHint( QskBox::Panel, QskBoxShapeMetrics() );
|
2017-10-18 20:00:06 +02:00
|
|
|
setBoxBorderMetricsHint( QskBox::Panel, QskBoxBorderMetrics() );
|
|
|
|
setBoxBorderColorsHint( QskBox::Panel, QskBoxBorderColors() );
|
2017-10-17 17:29:02 +02:00
|
|
|
setGradientHint( QskBox::Panel, QskGradient() );
|
|
|
|
}
|
|
|
|
|
|
|
|
void Box::setBackground( FillType type, Palette::Color color, bool inverted )
|
|
|
|
{
|
|
|
|
if ( type == Unfilled )
|
|
|
|
{
|
|
|
|
setGradient( QskGradient() );
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
const auto pal = Palette::palette( color );
|
|
|
|
|
|
|
|
const QColor light = pal.color( Palette::W300 );
|
|
|
|
const QColor mid = pal.color( Palette::W600 );
|
|
|
|
|
2018-08-03 08:15:28 +02:00
|
|
|
switch ( type )
|
2017-10-17 17:29:02 +02:00
|
|
|
{
|
|
|
|
case Unfilled:
|
|
|
|
setGradient( QskGradient() );
|
|
|
|
break;
|
|
|
|
|
|
|
|
case Solid:
|
|
|
|
setGradient( mid );
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
{
|
|
|
|
const auto orientation =
|
|
|
|
static_cast< QskGradient::Orientation >( type - 2 );
|
|
|
|
|
|
|
|
if ( inverted )
|
|
|
|
setGradient( orientation, mid, light );
|
|
|
|
else
|
|
|
|
setGradient( orientation, light, mid );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Box::setBorder( BorderType type, Palette::Color color )
|
|
|
|
{
|
|
|
|
const auto pal = Palette::palette( color );
|
|
|
|
|
|
|
|
setBorderWidth( 5 );
|
|
|
|
|
|
|
|
QColor dark = pal.color( Palette::W700 );
|
|
|
|
QColor mid = pal.color( Palette::W500 );
|
|
|
|
QColor light = pal.color( Palette::W300 );
|
|
|
|
#if 0
|
|
|
|
dark.setAlpha( 100 );
|
|
|
|
mid.setAlpha( 100 );
|
|
|
|
light.setAlpha( 100 );
|
|
|
|
#endif
|
|
|
|
|
2018-08-03 08:15:28 +02:00
|
|
|
switch ( type )
|
2017-10-17 17:29:02 +02:00
|
|
|
{
|
|
|
|
case NoBorder:
|
|
|
|
setBorderWidth( 0 );
|
|
|
|
break;
|
|
|
|
|
|
|
|
case Flat:
|
|
|
|
setBorderColor( mid );
|
|
|
|
break;
|
|
|
|
|
|
|
|
case Raised1:
|
|
|
|
setBorderColors( light, light, dark, dark );
|
|
|
|
break;
|
|
|
|
|
|
|
|
case Sunken1:
|
|
|
|
setBorderColors( dark, dark, light, light );
|
|
|
|
break;
|
|
|
|
|
|
|
|
case Raised2:
|
|
|
|
setBorderColors( mid, light, mid, dark );
|
|
|
|
break;
|
|
|
|
|
|
|
|
case Sunken2:
|
|
|
|
setBorderColors( mid, dark, mid, light );
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Box::setShape( const QskBoxShapeMetrics& shape )
|
|
|
|
{
|
|
|
|
setBoxShapeHint( QskBox::Panel, shape );
|
|
|
|
}
|
|
|
|
|
|
|
|
void Box::setShape( qreal radius, Qt::SizeMode sizeMode )
|
|
|
|
{
|
2018-08-03 08:15:28 +02:00
|
|
|
setBoxShapeHint( QskBox::Panel, QskBoxShapeMetrics( radius, sizeMode ) );
|
2017-10-17 17:29:02 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void Box::setShape( qreal radiusX, qreal radiusY, Qt::SizeMode sizeMode )
|
|
|
|
{
|
|
|
|
setBoxShapeHint( QskBox::Panel,
|
|
|
|
QskBoxShapeMetrics( radiusX, radiusY, sizeMode ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
void Box::setBorderColors( const QColor& left, const QColor& top,
|
|
|
|
const QColor& right, const QColor& bottom )
|
|
|
|
{
|
|
|
|
QskBoxBorderColors colors( left, top, right, bottom );
|
2017-10-18 20:00:06 +02:00
|
|
|
setBoxBorderColorsHint( QskBox::Panel, colors );
|
2017-10-17 17:29:02 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void Box::setBorderColor( const QColor& color )
|
|
|
|
{
|
2017-10-18 20:00:06 +02:00
|
|
|
setBoxBorderColorsHint( QskBox::Panel, color );
|
2017-10-17 17:29:02 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void Box::setBorderWidth( qreal left, qreal top, qreal right, qreal bottom )
|
|
|
|
{
|
2017-10-18 20:00:06 +02:00
|
|
|
setBoxBorderMetricsHint( QskBox::Panel,
|
2017-10-17 17:29:02 +02:00
|
|
|
QskMargins( left, top, right, bottom ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
void Box::setBorderWidth( int width )
|
|
|
|
{
|
2017-10-18 20:00:06 +02:00
|
|
|
setBoxBorderMetricsHint( QskBox::Panel, QskMargins( width ) );
|
2017-10-17 17:29:02 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void Box::setGradient( QRgb rgb )
|
|
|
|
{
|
|
|
|
setGradient( QskGradient( QColor::fromRgba( rgb ) ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
void Box::setGradient( Qt::GlobalColor color )
|
|
|
|
{
|
|
|
|
setGradient( QskGradient( color ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
void Box::setGradient( const QColor& color )
|
|
|
|
{
|
|
|
|
setGradient( QskGradient( color ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
void Box::setGradient( QskGradient::Orientation orientation,
|
|
|
|
const QColor& color1, const QColor& color2 )
|
|
|
|
{
|
|
|
|
setGradient( QskGradient( orientation, color1, color2 ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
void Box::setGradient( QskGradient::Orientation orientation,
|
|
|
|
const QColor& color1, const QColor& color2, const QColor& color3 )
|
|
|
|
{
|
|
|
|
QVector< QskGradientStop > stops;
|
|
|
|
stops += QskGradientStop( 0.0, color1 );
|
|
|
|
stops += QskGradientStop( 0.5, color2 );
|
|
|
|
stops += QskGradientStop( 1.0, color3 );
|
|
|
|
|
|
|
|
setGradient( QskGradient( orientation, stops ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
void Box::setGradient( const QskGradient& gradient )
|
|
|
|
{
|
|
|
|
setGradientHint( QskBox::Panel, gradient );
|
|
|
|
}
|
|
|
|
|
|
|
|
void Box::setGradient(
|
|
|
|
const QskGradient::Orientation orientation, Palette::Color color )
|
|
|
|
{
|
|
|
|
const auto pal = Palette::palette( color );
|
|
|
|
|
|
|
|
QVector< QskGradientStop > stops;
|
|
|
|
|
2018-08-03 08:15:28 +02:00
|
|
|
stops += QskGradientStop( 0.0, pal.color( static_cast< Palette::Weight >( 0 ) ) );
|
2017-10-17 17:29:02 +02:00
|
|
|
|
|
|
|
const int count = Palette::NumWeights - 1;
|
|
|
|
for ( int i = 1; i < count; i++ )
|
|
|
|
{
|
|
|
|
const qreal pos = qreal( i ) / count;
|
|
|
|
const auto weight = static_cast< Palette::Weight >( i );
|
|
|
|
|
|
|
|
stops += QskGradientStop( pos, stops.last().color() );
|
|
|
|
stops += QskGradientStop( pos, pal.color( weight ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
stops += QskGradientStop( 1.0,
|
2019-01-07 09:13:53 +01:00
|
|
|
pal.color( static_cast< Palette::Weight >( Palette::NumWeights - 1 ) ) );
|
2017-10-17 17:29:02 +02:00
|
|
|
|
|
|
|
setGradient( QskGradient( orientation, stops ) );
|
|
|
|
}
|