1 #include "waveformrenderbackground.h"
2 #include "waveformwidgetrenderer.h"
3
4 #include "widget/wskincolor.h"
5 #include "widget/wwidget.h"
6 #include "widget/wimagestore.h"
7
WaveformRenderBackground(WaveformWidgetRenderer * waveformWidgetRenderer)8 WaveformRenderBackground::WaveformRenderBackground(
9 WaveformWidgetRenderer* waveformWidgetRenderer)
10 : WaveformRendererAbstract(waveformWidgetRenderer),
11 m_backgroundColor(0, 0, 0) {
12 }
13
~WaveformRenderBackground()14 WaveformRenderBackground::~WaveformRenderBackground() {
15 }
16
setup(const QDomNode & node,const SkinContext & context)17 void WaveformRenderBackground::setup(const QDomNode& node,
18 const SkinContext& context) {
19 m_backgroundColor = m_waveformRenderer->getWaveformSignalColors()->getBgColor();
20 QString backgroundPixmapPath = context.selectString(node, "BgPixmap");
21 if (!backgroundPixmapPath.isEmpty()) {
22 m_backgroundPixmapPath = context.makeSkinPath(backgroundPixmapPath);
23 }
24 setDirty(true);
25 }
26
draw(QPainter * painter,QPaintEvent *)27 void WaveformRenderBackground::draw(QPainter* painter,
28 QPaintEvent* /*event*/) {
29 if (isDirty()) {
30 generateImage();
31 }
32
33 // If there is no background image, just fill the painter with the
34 // background color.
35 if (m_backgroundImage.isNull()) {
36 painter->fillRect(0, 0, m_waveformRenderer->getWidth(),
37 m_waveformRenderer->getHeight(), m_backgroundColor);
38 return;
39 }
40
41 // since we use opaque widget we need to draw the background !
42 painter->drawImage(QPoint(0, 0), m_backgroundImage);
43
44 // This produces a white back ground with Linux QT 4.6 QGlWidget and
45 // Intel i915 driver and has peroformance issues on other setups. See lp:981210
46 //painter->drawPixmap(QPoint(0, 0), m_backgroundPixmap);
47 }
48
generateImage()49 void WaveformRenderBackground::generateImage() {
50 m_backgroundImage = QImage();
51 if (!m_backgroundPixmapPath.isEmpty()) {
52 QImage backgroundImage = *WImageStore::getImage(
53 m_backgroundPixmapPath,
54 scaleFactor());
55
56 if (!backgroundImage.isNull()) {
57 if (backgroundImage.width() == m_waveformRenderer->getWidth() &&
58 backgroundImage.height() == m_waveformRenderer->getHeight()) {
59 m_backgroundImage = backgroundImage.convertToFormat(QImage::Format_RGB32);
60 } else {
61 m_backgroundImage = QImage(m_waveformRenderer->getWidth(),
62 m_waveformRenderer->getHeight(),
63 QImage::Format_RGB32);
64 QPainter painter(&m_backgroundImage);
65 painter.setRenderHint(QPainter::SmoothPixmapTransform);
66 painter.drawImage(m_backgroundImage.rect(),
67 backgroundImage, backgroundImage.rect());
68 }
69 }
70 }
71 setDirty(false);
72 }
73