76 lines
2.1 KiB
C++
76 lines
2.1 KiB
C++
/******************************************************************************
|
|
* QSkinny - Copyright (C) 2016 Uwe Rathmann
|
|
* This file may be used under the terms of the QSkinny License, Version 1.0
|
|
*****************************************************************************/
|
|
|
|
#include "QskGraphicNode.h"
|
|
#include "QskGraphic.h"
|
|
#include "QskColorFilter.h"
|
|
#include "QskPainterCommand.h"
|
|
|
|
namespace
|
|
{
|
|
class GraphicData
|
|
{
|
|
public:
|
|
const QskGraphic& graphic;
|
|
const QskColorFilter& colorFilter;
|
|
};
|
|
}
|
|
|
|
QskGraphicNode::QskGraphicNode()
|
|
{
|
|
}
|
|
|
|
QskGraphicNode::~QskGraphicNode()
|
|
{
|
|
}
|
|
|
|
void QskGraphicNode::setGraphic( QQuickWindow* window, const QskGraphic& graphic,
|
|
const QskColorFilter& colorFilter, const QRectF& rect )
|
|
{
|
|
QSizeF size;
|
|
|
|
if ( graphic.commandTypes() == QskGraphic::RasterData )
|
|
{
|
|
/*
|
|
simple raster data - usually a QImage/QPixmap only.
|
|
There is no benefit in rescaling it into the target rectangle
|
|
by the CPU and creating a new texture.
|
|
*/
|
|
size = graphic.defaultSize();
|
|
}
|
|
|
|
const GraphicData graphicData { graphic, colorFilter };
|
|
update( window, rect, size, &graphicData );
|
|
}
|
|
|
|
void QskGraphicNode::paint( QPainter* painter, const QSize& size, const void* nodeData )
|
|
{
|
|
const auto graphicData = reinterpret_cast< const GraphicData* >( nodeData );
|
|
|
|
const auto& graphic = graphicData->graphic;
|
|
const auto& colorFilter = graphicData->colorFilter;
|
|
|
|
const QRectF rect( 0, 0, size.width(), size.height() );
|
|
graphic.render( painter, rect, colorFilter, Qt::IgnoreAspectRatio );
|
|
}
|
|
|
|
QskHashValue QskGraphicNode::hash( const void* nodeData ) const
|
|
{
|
|
const auto graphicData = reinterpret_cast< const GraphicData* >( nodeData );
|
|
|
|
const auto& graphic = graphicData->graphic;
|
|
|
|
QskHashValue hash = 12000;
|
|
|
|
const auto& substitutions = graphicData->colorFilter.substitutions();
|
|
if ( substitutions.size() > 0 )
|
|
{
|
|
hash = qHashBits( substitutions.constData(),
|
|
substitutions.size() * sizeof( substitutions[ 0 ] ), hash );
|
|
}
|
|
|
|
return graphic.hash( hash );
|
|
}
|