QSGTexture *oldTexture = m_texture;
if (m_surface->type() == WaylandSurface::Texture) {
+ QSGEngine::TextureOption opt = useTextureAlpha() ? QSGEngine::TextureHasAlphaChannel : QSGEngine::TextureOption(0);
+
m_texture = canvas()->sceneGraphEngine()->createTextureFromId(m_surface->texture(),
- m_surface->geometry().size());
+ m_surface->geometry().size(),
+ opt);
} else {
m_texture = canvas()->sceneGraphEngine()->createTextureFromImage(m_surface->image());
}
}
node->setTexture(m_texture);
-
node->setFiltering(smooth() ? QSGTexture::Linear : QSGTexture::Nearest);
return node;
}
+
+void WaylandSurfaceItem::setUseTextureAlpha(bool useTextureAlpha)
+{
+ m_useTextureAlpha = useTextureAlpha;
+ update();
+}
Q_INTERFACES(QSGTextureProvider)
Q_PROPERTY(WaylandSurface* surface READ surface WRITE setSurface)
Q_PROPERTY(bool paintEnabled READ paintEnabled WRITE setPaintEnabled)
+ Q_PROPERTY(bool useTextureAlpha READ useTextureAlpha WRITE setUseTextureAlpha)
public:
WaylandSurfaceItem(QSGItem *parent = 0);
const char *textureChangedSignal() const { return SIGNAL(textureChanged()); }
bool paintEnabled() const;
+ bool useTextureAlpha() const { return m_useTextureAlpha; }
protected:
void mousePressEvent(QGraphicsSceneMouseEvent *event);
public slots:
void takeFocus();
void setPaintEnabled(bool paintEnabled);
+ void setUseTextureAlpha(bool useTextureAlpha);
private slots:
void surfaceMapped(const QRect &rect);
WaylandSurface *m_surface;
QSGTexture *m_texture;
bool m_paintEnabled;
+ bool m_useTextureAlpha;
};
#endif