• Skip to content
  • Skip to link menu
  • KDE API Reference
  • kdelibs-4.14.38 API Reference
  • KDE Home
  • Contact Us
 

Plasma

  • plasma
  • widgets
svgwidget.cpp
Go to the documentation of this file.
1/*
2 * Copyright 2008 by Davide Bettio <davide.bettio@kdemail.net>
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU Library General Public License as
6 * published by the Free Software Foundation; either version 2, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details
13 *
14 * You should have received a copy of the GNU Library General Public
15 * License along with this program; if not, write to the
16 * Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18 */
19
20#include "svgwidget.h"
21
22#include <QtGui/QPainter>
23#include <QtGui/QGraphicsSceneMouseEvent>
24
25#include "kdebug.h"
26#include "svg.h"
27
28namespace Plasma
29{
30
31class SvgWidgetPrivate
32{
33public:
34 SvgWidgetPrivate(SvgWidget *widget, Svg *s, const QString &element)
35 : q(widget), svg(s), elementID(element)
36 {
37 }
38
39 void svgChanged()
40 {
41 q->update();
42 }
43
44 SvgWidget *q;
45 Svg *svg;
46 QString elementID;
47};
48
49SvgWidget::SvgWidget(QGraphicsItem *parent, Qt::WindowFlags wFlags)
50 : QGraphicsWidget(parent, wFlags),
51 d(new SvgWidgetPrivate(this, 0, QString()))
52{
53}
54
55SvgWidget::SvgWidget(Svg *svg, const QString &elementID, QGraphicsItem *parent, Qt::WindowFlags wFlags)
56 : QGraphicsWidget(parent, wFlags),
57 d(new SvgWidgetPrivate(this, svg, elementID))
58{
59}
60
61SvgWidget::~SvgWidget()
62{
63 delete d;
64}
65
66void SvgWidget::mousePressEvent(QGraphicsSceneMouseEvent *event)
67{
68 // we check for receivers so that SvgWidgets that aren't being used for events remain "click
69 // transparent"
70 if (receivers(SIGNAL(clicked(Qt::MouseButton)))) {
71 event->accept();
72 } else {
73 QGraphicsWidget::mousePressEvent(event);
74 }
75}
76
77void SvgWidget::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
78{
79 if (boundingRect().contains(event->pos())) {
80 emit clicked(event->button());
81 }
82}
83
84void SvgWidget::setSvg(Svg *svg)
85{
86 if (d->svg) {
87 disconnect(d->svg);
88 }
89
90 d->svg = svg;
91
92 if (svg) {
93 connect(svg, SIGNAL(repaintNeeded()), this, SLOT(svgChanged()));
94 }
95 update();
96}
97
98Svg *SvgWidget::svg() const
99{
100 return d->svg;
101}
102
103void SvgWidget::setElementID(const QString &elementID)
104{
105 if (d->svg) {
106 d->svg->setContainsMultipleImages(!elementID.isNull());
107 }
108 d->elementID = elementID;
109 update();
110}
111
112QString SvgWidget::elementID() const
113{
114 return d->elementID;
115}
116
117void SvgWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
118{
119 Q_UNUSED(option);
120 Q_UNUSED(widget);
121
122 if (d->svg){
123 d->svg->paint(painter, boundingRect(), d->elementID);
124 }
125}
126
127QSizeF SvgWidget::sizeHint(Qt::SizeHint which, const QSizeF & constraint) const
128{
129 if (d->svg && which == Qt::PreferredSize) {
130 if (d->elementID.isNull()) {
131 return d->svg->size();
132 } else {
133 return d->svg->elementSize(d->elementID);
134 }
135 } else {
136 return QGraphicsWidget::sizeHint(which, constraint);
137 }
138}
139
140} // Plasma namespace
141
142#include "svgwidget.moc"
Plasma::SvgWidget::elementID
QString elementID
Definition: svgwidget.h:44
Plasma::SvgWidget::svg
Plasma::Svg * svg
Definition: svgwidget.h:43
Plasma::SvgWidget::clicked
void clicked(Qt::MouseButton)
Plasma::Svg
A theme aware image-centric SVG class.
Definition: svg.h:57
QGraphicsWidget
QStyleOptionGraphicsItem
QWidget
Plasma
Namespace for everything in libplasma.
Definition: abstractdialogmanager.cpp:25
svg.h
svgwidget.h
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Mon Feb 20 2023 00:00:00 by doxygen 1.9.6 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

Plasma

Skip menu "Plasma"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdelibs-4.14.38 API Reference

Skip menu "kdelibs-4.14.38 API Reference"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDEWebKit
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • kio
  • KIOSlave
  • KJS
  •   KJS-API
  •   WTF
  • kjsembed
  • KNewStuff
  • KParts
  • KPty
  • Kross
  • KUnitConversion
  • KUtils
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver
Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal