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-07-25 07:24:27 +02:00
|
|
|
#include "OtherSkin.h"
|
2017-07-26 17:54:25 +02:00
|
|
|
#include "SkinFactory.h"
|
2017-07-25 07:24:27 +02:00
|
|
|
|
2017-07-26 17:54:25 +02:00
|
|
|
#include "ButtonBar.h"
|
2018-08-03 08:15:28 +02:00
|
|
|
#include "SoundControl.h"
|
2017-07-25 07:24:27 +02:00
|
|
|
|
2018-04-05 11:23:38 +02:00
|
|
|
#include "Speedometer.h"
|
|
|
|
#include "SpeedometerSkinlet.h"
|
|
|
|
|
2017-07-26 17:54:25 +02:00
|
|
|
#include <QskBox.h>
|
2018-08-03 08:15:28 +02:00
|
|
|
#include <QskBoxBorderColors.h>
|
|
|
|
#include <QskBoxBorderMetrics.h>
|
|
|
|
#include <QskColorFilter.h>
|
2017-07-25 07:24:27 +02:00
|
|
|
#include <QskFunctions.h>
|
2018-08-03 08:15:28 +02:00
|
|
|
#include <QskMargins.h>
|
2017-07-25 07:24:27 +02:00
|
|
|
#include <QskPushButton.h>
|
2018-08-03 08:15:28 +02:00
|
|
|
#include <QskSeparator.h>
|
2017-07-25 07:24:27 +02:00
|
|
|
#include <QskSkinTransition.h>
|
|
|
|
#include <QskSlider.h>
|
|
|
|
#include <QskTextLabel.h>
|
|
|
|
|
|
|
|
#include <QDebug>
|
|
|
|
|
2017-10-17 17:34:00 +02:00
|
|
|
class Palette
|
|
|
|
{
|
2018-08-03 08:15:28 +02:00
|
|
|
public:
|
2017-07-25 07:24:27 +02:00
|
|
|
Palette()
|
|
|
|
{
|
|
|
|
// grey-blue-yellow:
|
|
|
|
color1.setNamedColor( "#363636" ); // Jet
|
|
|
|
color2.setNamedColor( "#242F40" ); // Yankees blue
|
|
|
|
color3.setNamedColor( "#CCA43B" ); // Satin sheet gold
|
|
|
|
color4.setNamedColor( "#E5E5E5" ); // Platinum
|
|
|
|
color5.setNamedColor( "#FFFFFF" ); // white
|
|
|
|
}
|
|
|
|
|
|
|
|
QColor color1;
|
|
|
|
QColor color2;
|
|
|
|
QColor color3;
|
|
|
|
QColor color4;
|
|
|
|
QColor color5;
|
|
|
|
};
|
|
|
|
|
2018-08-03 08:15:28 +02:00
|
|
|
namespace
|
|
|
|
{
|
2017-12-07 14:57:48 +01:00
|
|
|
static inline QFont qskFont( qreal pointSize )
|
2017-07-25 10:47:40 +02:00
|
|
|
{
|
|
|
|
QFont font( "Roboto" );
|
2017-12-07 14:57:48 +01:00
|
|
|
font.setPointSizeF( pointSize / qskDpiScaled( 1.0 ) );
|
2017-07-25 10:47:40 +02:00
|
|
|
return font;
|
|
|
|
}
|
2017-07-25 07:24:27 +02:00
|
|
|
}
|
|
|
|
|
2018-08-03 08:15:28 +02:00
|
|
|
OtherSkin::OtherSkin( const QString& name, QObject* parent )
|
|
|
|
: QskSkin( parent )
|
|
|
|
, m_name( name )
|
|
|
|
, m_palette( new Palette )
|
2017-07-25 07:24:27 +02:00
|
|
|
{
|
|
|
|
setObjectName( "OtherSkin" );
|
2018-04-05 11:23:38 +02:00
|
|
|
declareSkinlet< Speedometer, SpeedometerSkinlet >();
|
2017-07-25 07:24:27 +02:00
|
|
|
initHints();
|
2017-07-26 17:54:25 +02:00
|
|
|
initGraphicFilters();
|
|
|
|
}
|
|
|
|
|
|
|
|
OtherSkin::~OtherSkin()
|
|
|
|
{
|
|
|
|
delete m_palette;
|
2017-07-25 07:24:27 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void OtherSkin::initHints()
|
|
|
|
{
|
2017-07-26 17:54:25 +02:00
|
|
|
const int duration = 200; // for animators
|
|
|
|
|
2017-07-25 07:24:27 +02:00
|
|
|
setFont( QskSkin::DefaultFont, qskFont( 13 ) );
|
|
|
|
setFont( QskSkin::LargeFont, qskFont( 20 ) );
|
|
|
|
|
2017-07-26 17:54:25 +02:00
|
|
|
setColor( QskTextLabel::Text, m_palette->color3 );
|
2017-07-25 07:24:27 +02:00
|
|
|
|
2017-10-17 17:34:00 +02:00
|
|
|
// -- sound control
|
|
|
|
setGradient( SoundControl::CrossHair, QColor( "OliveDrab" ).lighter( 120 ) );
|
|
|
|
setGradient( SoundControl::Marker, QColor( "OliveDrab" ) );
|
|
|
|
|
2017-10-18 20:00:06 +02:00
|
|
|
setBoxBorderMetrics( SoundControl::Marker, 2 );
|
|
|
|
setBoxShape( SoundControl::Marker, 100, Qt::RelativeSize );
|
2017-07-25 07:24:27 +02:00
|
|
|
|
2017-07-26 17:54:25 +02:00
|
|
|
setSkinHint( ButtonBar::Indicator | QskAspect::GraphicRole, SkinFactory::Indicator );
|
|
|
|
setSkinHint( SoundControl::Vehicle | QskAspect::GraphicRole, SkinFactory::Vehicle );
|
|
|
|
setSkinHint( SoundControl::MarkerControl | QskAspect::GraphicRole, SkinFactory::Vehicle );
|
|
|
|
|
2017-10-18 20:00:06 +02:00
|
|
|
setBoxBorderMetrics( QskSeparator::Panel, 0 );
|
2017-10-17 17:34:00 +02:00
|
|
|
setGradient( QskSeparator::Panel, m_palette->color3 );
|
|
|
|
setMetric( QskSeparator::Panel | QskAspect::Size, 1 );
|
2017-07-26 17:54:25 +02:00
|
|
|
|
|
|
|
// -- push buttons
|
|
|
|
|
2017-08-23 14:53:29 +02:00
|
|
|
setMargins( QskPushButton::Panel | QskAspect::Padding, 8 );
|
2017-10-18 20:00:06 +02:00
|
|
|
setBoxBorderMetrics( QskPushButton::Panel, 0 );
|
|
|
|
setBoxShape( QskPushButton::Panel, 4 );
|
2017-10-17 17:34:00 +02:00
|
|
|
|
|
|
|
setGradient( QskPushButton::Panel, m_palette->color1 );
|
|
|
|
setGradient( QskPushButton::Panel | QskPushButton::Pressed, m_palette->color2 );
|
|
|
|
|
2017-07-25 07:24:27 +02:00
|
|
|
setColor( QskPushButton::Text, m_palette->color3 );
|
2017-07-26 17:54:25 +02:00
|
|
|
setAnimation( QskPushButton::Panel | QskAspect::Color, duration );
|
|
|
|
|
2017-10-17 17:34:00 +02:00
|
|
|
// -- overlay
|
|
|
|
|
2017-07-26 17:54:25 +02:00
|
|
|
QColor overlayColor( "#011627" );
|
|
|
|
overlayColor.setAlpha( 200 );
|
2017-10-17 17:34:00 +02:00
|
|
|
setGradient( SoundControl::Overlay, overlayColor );
|
|
|
|
|
|
|
|
// -- slider control buttons
|
2018-08-03 08:15:28 +02:00
|
|
|
setBoxBorderMetrics( SoundControl::SliderControl, 0 );
|
|
|
|
setBoxShape( SoundControl::SliderControl, 4 );
|
2017-10-17 17:34:00 +02:00
|
|
|
|
|
|
|
setGradient( SoundControl::SliderControl, m_palette->color1 );
|
|
|
|
setGradient( SoundControl::SliderControl | QskPushButton::Pressed, m_palette->color2 );
|
|
|
|
|
2017-07-26 17:54:25 +02:00
|
|
|
setAnimation( SoundControl::SliderControl | QskAspect::Color, duration );
|
2017-07-25 21:34:27 +02:00
|
|
|
|
2017-07-25 07:24:27 +02:00
|
|
|
setMetric( QskPushButton::Text | QskAspect::Size, 20 );
|
|
|
|
setSkinHint( QskPushButton::Text | QskAspect::FontRole, int( QskSkin::LargeFont ) );
|
|
|
|
setSkinHint( QskPushButton::Text | QskAspect::Alignment, Qt::AlignCenter );
|
|
|
|
|
2017-07-26 17:54:25 +02:00
|
|
|
// -- a more advanced setup of the hints for the slider
|
|
|
|
|
|
|
|
setMetric( QskSlider::Panel | QskAspect::Size, 30 );
|
2017-10-17 17:34:00 +02:00
|
|
|
setGradient( QskSlider::Panel, QskGradient() );
|
|
|
|
|
2017-07-26 17:54:25 +02:00
|
|
|
setMetric( QskSlider::Groove | QskAspect::Size, 5 );
|
2017-10-17 17:34:00 +02:00
|
|
|
setGradient( QskSlider::Groove, m_palette->color4.darker( 200 ) );
|
|
|
|
|
2017-07-26 17:54:25 +02:00
|
|
|
setMetric( QskSlider::Fill | QskAspect::Size, 5 );
|
2017-10-17 17:34:00 +02:00
|
|
|
setGradient( QskSlider::Fill, m_palette->color3.lighter( 150 ) );
|
|
|
|
|
2017-07-26 17:54:25 +02:00
|
|
|
setMetric( QskSlider::Handle | QskAspect::Size, 22 );
|
2017-10-18 20:00:06 +02:00
|
|
|
setBoxBorderMetrics( QskSlider::Handle, 0 );
|
|
|
|
setBoxShape( QskSlider::Handle, 6 );
|
2017-10-17 17:34:00 +02:00
|
|
|
setGradient( QskSlider::Handle, m_palette->color3 );
|
2018-05-09 08:31:43 +02:00
|
|
|
|
|
|
|
// -- speedometers
|
|
|
|
|
|
|
|
setBoxBorderMetrics( Speedometer::Panel, 5 );
|
2018-08-03 08:15:28 +02:00
|
|
|
setGradient( Speedometer::Panel,
|
|
|
|
QskGradient( QskGradient::Vertical, m_palette->color2, m_palette->color4 ) );
|
2018-05-09 08:31:43 +02:00
|
|
|
setBoxBorderColors( Speedometer::Panel, m_palette->color3 );
|
|
|
|
|
|
|
|
setBoxBorderMetrics( Speedometer::NeedleHead, 5 );
|
|
|
|
setMetric( Speedometer::NeedleHead | QskAspect::Size, 10 );
|
|
|
|
setGradient( Speedometer::NeedleHead, m_palette->color2 );
|
|
|
|
setBoxBorderColors( Speedometer::NeedleHead, m_palette->color4 );
|
|
|
|
|
|
|
|
setMetric( Speedometer::Needle | QskAspect::MinimumWidth, 4 );
|
|
|
|
setMetric( Speedometer::Needle | QskAspect::Margin, 15 );
|
|
|
|
setColor( Speedometer::Needle, m_palette->color4 );
|
|
|
|
|
|
|
|
// margins between numbers and ticks:
|
|
|
|
setMargins( Speedometer::Labels, QskMargins( 3, 3, 3, 3 ) );
|
|
|
|
setMetric( Speedometer::Labels | QskAspect::MinimumWidth, 3 );
|
|
|
|
setMetric( Speedometer::Labels | QskAspect::Size, 25 ); // ticks size
|
|
|
|
setColor( Speedometer::Labels, m_palette->color4 );
|
|
|
|
setFontRole( Speedometer::Labels, QskSkin::SmallFont );
|
2017-07-25 07:24:27 +02:00
|
|
|
}
|
|
|
|
|
2017-07-26 17:54:25 +02:00
|
|
|
void OtherSkin::initGraphicFilters()
|
2017-07-25 07:24:27 +02:00
|
|
|
{
|
2017-07-26 17:54:25 +02:00
|
|
|
{
|
|
|
|
// all SVGs on the header/footer are plain white
|
|
|
|
|
|
|
|
QskColorFilter filter;
|
|
|
|
filter.addColorSubstitution( Qt::white, m_palette->color3.rgb() );
|
|
|
|
|
|
|
|
setGraphicFilter( SkinFactory::Indicator, filter );
|
|
|
|
}
|
|
|
|
|
|
|
|
{
|
|
|
|
// we need to modify the SVG to have more colors for substutions !!
|
|
|
|
QskColorFilter filter;
|
|
|
|
filter.addColorSubstitution( Qt::white, m_palette->color3.rgb() );
|
|
|
|
|
|
|
|
setGraphicFilter( SkinFactory::Vehicle, filter );
|
|
|
|
}
|
2017-07-25 07:24:27 +02:00
|
|
|
}
|