qskinny/examples/iotdashboard/LightDisplay.cpp

107 lines
2.4 KiB
C++
Raw Normal View History

/******************************************************************************
* Copyright (C) 2021 Edelhirsch Software GmbH
* This file may be used under the terms of the 3-clause BSD License
*****************************************************************************/
#include "LightDisplay.h"
#include "Skin.h"
2021-11-06 13:25:04 +00:00
#include <QskEvent.h>
2021-11-05 16:13:12 +00:00
QSK_SUBCONTROL( LightDisplay, Panel )
QSK_SUBCONTROL( LightDisplay, Groove )
2021-11-06 10:11:44 +00:00
QSK_SUBCONTROL( LightDisplay, ColdAndWarmArc )
QSK_SUBCONTROL( LightDisplay, ValueText )
QSK_SUBCONTROL( LightDisplay, LeftLabel )
QSK_SUBCONTROL( LightDisplay, RightLabel )
2021-11-06 12:44:51 +00:00
QSK_SUBCONTROL( LightDisplay, Knob )
2021-11-06 13:25:04 +00:00
QSK_STATE( LightDisplay, Pressed, ( QskAspect::FirstUserState << 1 ) )
LightDisplay::LightDisplay( QQuickItem* parent )
2021-11-06 09:39:25 +00:00
: QskBoundedValueInput( parent )
{
setAlignmentHint( LeftLabel, Qt::AlignRight );
2021-11-06 09:39:25 +00:00
setAlignmentHint( ValueText, Qt::AlignCenter | Qt::AlignHCenter );
setBoundaries( 0, 100 );
2021-11-05 16:13:12 +00:00
// ### move to Skin:
setShadow( { 0, 20 } );
setShadowColor( 0xe5e5e5 );
}
2021-11-06 13:25:04 +00:00
bool LightDisplay::isPressed() const
{
return hasSkinState( Pressed );
}
2021-11-05 16:13:12 +00:00
void LightDisplay::setShadow( const QskShadowMetrics& shadow )
{
m_shadow = shadow;
update();
}
const QskShadowMetrics& LightDisplay::shadow() const
{
return m_shadow;
}
void LightDisplay::setGradient( const QskGradient& gradient )
{
m_gradient = gradient;
update();
}
const QskGradient& LightDisplay::gradient() const
{
return m_gradient;
}
void LightDisplay::setShadowColor( const QColor& color )
{
m_shadowColor = color;
update();
}
QColor LightDisplay::shadowColor() const
{
return m_shadowColor;
}
2021-11-06 13:25:04 +00:00
void LightDisplay::mousePressEvent( QMouseEvent* event )
{
QRectF handleRect = subControlRect( LightDisplay::Knob );
if ( handleRect.contains( event->pos() ) )
{
setSkinStateFlag( Pressed );
}
else
{
QskBoundedValueInput::mousePressEvent( event );
}
}
void LightDisplay::mouseMoveEvent( QMouseEvent* event )
{
if ( !isPressed() )
return;
// ### check if arc contains the position
const auto mousePos = qskMousePosition( event );
const auto rect = subControlRect( ColdAndWarmArc );
const qreal ratioX = ( mousePos.x() - rect.x() ) / rect.width();
setValueAsRatio( ratioX );
}
void LightDisplay::mouseReleaseEvent( QMouseEvent* /*event*/ )
{
setSkinStateFlag( Pressed, false );
}
#include "moc_LightDisplay.cpp"