62 Commits

Author SHA1 Message Date
Kai Uwe Broulik
938cef210c Get rid of deprecated QWeakPointer usage
Replace by QPointer

Differential Revision: https://phabricator.kde.org/D14819
2018-08-17 15:44:08 +02:00
Laurent Montel
e690c4726e Warning-- 2018-04-13 13:58:44 +02:00
Randy Kron
5eece6769f Fix one source of log spam referenced in Bug 388389 (Empty filename passed to function)
Summary:
I found two places in plasma-framework svg.cpp (Plasma::Svg) that were triggering this message.

path variable was not being checked for empty before passing to QFile::exists().

This seems to be one source of the issue reported in [[ https://bugs.kde.org/show_bug.cgi?id=388389 | Bug 388389 ]]

Test Plan: Found that kicker was triggering this message and also plasmashell tooltips.

Reviewers: #frameworks, davidedmundson

Reviewed By: davidedmundson

Subscribers: ngraham, alexeymin, aacid, #frameworks

Tags: #frameworks

Differential Revision: https://phabricator.kde.org/D9928
2018-01-20 22:26:16 +00:00
Eike Hein
2956419c7e Revert "Don't tear down renderer and other busy work when Svg::setImagePath is invoked with the same arg"
This reverts commit 4ce50cc61f677a26ec12b9fe728ca233e1782e21.

This caused a regression with toggling compositing, causing SVG reloads
with the same path to switch to opague elements. As this revision was
meant as a performance optimization, it can be reverted with no other
consequence for now.
2017-12-16 20:16:38 +09:00
Eike Hein
f75816a33a Initialize scale factor to the last scale factor set on any instance
Summary:
Plasma::Svg initializes SvgPrivate::scaleFactor to 1.0. On systems with
a higher value for Units:devicePixelRatio, that means Svg::setScaleFactor
gets called with a different value right after instanciation and a fair
amount of work is done twice.

This patch introduces a static SvgPrivate::s_lastScaleFactor,
initialized to 1.0 but updated in Svg::setScaleFactor.
SvgPrivate::scaleFactor is then initialized to the static every time
its instanciated. That means after the first time Svg::setScaleFactor
is called with e.g. 2.0, subsequent Svg instances get initialized
with 2.0.

This ends up shaving a decent amount of time off of startup on scaled
systems.

Reviewers: #plasma, davidedmundson, broulik

Subscribers: plasma-devel, #frameworks

Tags: #plasma, #frameworks

Differential Revision: https://phabricator.kde.org/D9119
2017-12-04 04:56:19 +09:00
Eike Hein
73b6d92258 Revert "Initialize scale factor to the last scale factor set on any instance"
This reverts commit 15f470fafce35d9d3be555564e704c11078419b9.
2017-12-04 03:00:53 +09:00
Eike Hein
15f470fafc Initialize scale factor to the last scale factor set on any instance
Summary:
Plasma::Svg initializes SvgPrivate::scaleFactor to 1.0. On systems with
a higher value for Units:devicePixelRatio, that means Svg::setScaleFactor
gets called with a different value right after instanciation and a fair
amount of work is done twice.

This patch introduces a static SvgPrivate::s_lastScaleFactor,
initialized to 1.0 but updated in Svg::setScaleFactor.
SvgPrivate::scaleFactor is then initialized to the static every time
its instanciated. That means after the first time Svg::setScaleFactor
is called with e.g. 2.0, subsequent Svg instances get initialized
with 2.0.

This ends up shaving a decent amount of time off of startup on scaled
systems.

Reviewers: #plasma, davidedmundson, broulik

Subscribers: plasma-devel, #frameworks

Tags: #plasma, #frameworks

Differential Revision: https://phabricator.kde.org/D9119
2017-12-04 00:03:46 +09:00
Eike Hein
4ce50cc61f Don't tear down renderer and other busy work when Svg::setImagePath is invoked with the same arg
Summary:
During my plasmashell startup this saves time for 17 calls. Opening
something like Simple Menu saves another ~dozen.

It's worth investigating why Svg::setImagePath gets called repeatedly
with the same args to begin with, but this is worth doing anyway.

Reviewers: #plasma, davidedmundson, mart

Subscribers: plasma-devel, #frameworks

Tags: #plasma, #frameworks

Differential Revision: https://phabricator.kde.org/D9115
2017-12-03 06:45:47 +09:00
Aleix Pol
b8b8a69fd1 Remove implicit string casting
Summary: Follow the KF5 guidelines

Test Plan: Plasma shell starts

Reviewers: #plasma, #frameworks, sebas

Reviewed By: #plasma, sebas

Subscribers: plasma-devel

Tags: #plasma, #frameworks

Differential Revision: https://phabricator.kde.org/D9108
2017-12-02 15:44:14 +01:00
Fabian Vogt
883a0488f1 Avoid some unnecessary theme content lookups
Summary:
imagePath can be an absolute path into an iconTheme
-> Do not try to find it in the Plasma theme

imagePath can be empty
-> Do not try to look it up at all

Reviewers: #plasma, mart

Reviewed By: #plasma, mart

Subscribers: #frameworks

Tags: #frameworks

Differential Revision: https://phabricator.kde.org/D7250
2017-08-11 14:35:52 +02:00
Aleix Pol
3b303d7363 Small improvements in IconItem
Summary:
Don't construct a QUrl for every source strings. Check it's a file url
first (which is the only kind of url we support at the moment)
When extracting the path, use toLocalFile, so it works on platforms where
path!=toLocalPath (e.g. windows)
Don't split a string and get a chunk, but just extract the chunk we need
with section. Reduces allocations that are automatically discarded.
Narrow iconPath scope

Test Plan: Tests still pass, plasmashell still works

Reviewers: #frameworks, #plasma, mart

Reviewed By: #plasma, mart

Subscribers: plasma-devel

Tags: #plasma, #frameworks

Differential Revision: https://phabricator.kde.org/D6014
2017-05-29 19:10:37 +02:00
Marco Martin
2b3e8dfe86 move setImagePath logic into updateFrameData()
Summary:
make sure the framedata creation/destruction is
completely in updateFrameData, makes easier to track
and possible to use the repaintsblocked logic.
now only one framedata instance should be created at startup.

CCBUG:376754

Test Plan:
* autotests pass, plasma runs ok, crash on 376754 not reproducible anymore
* possible to have a plasmashell session start without the creation of a single svg renderer (startups after the first when the cache is generated)
* on qml profiler, framesvgitem creation is ~12 msecs the first one created, ~2-300 musecs the subsequent ones, seems to be a bit better than before the whole refactor started
* tried against the latest patches that remove the binding loops, still correct rendering and no binding loop
* tried with both empty and existing cache in place

Reviewers: #plasma, davidedmundson

Reviewed By: #plasma, davidedmundson

Subscribers: davidedmundson, plasma-devel, #frameworks

Tags: #frameworks, #plasma

Differential Revision: https://phabricator.kde.org/D4707
2017-02-28 13:35:09 +01:00
Marco Martin
4de0dd2e90 rename state property in status
emergency change: in Qml the name "state" for a property
is reserved for the internal state machine, so any object that
exposes a "state" property on its own would automatically
break the state machine
2016-06-01 14:47:56 +02:00
Marco Martin
f3c05034d9 Selected state for Plasma::Svg and IconItem
Like KIconloader, support a Selected state, in IconItem,
as in all generic svgs/framesvg
it replaces the text color with HighlightedText and the
background color with HighlightColor

Change-Id: Id97a527405d2c3feed75a172f05547defdbf440c
REVIEW:127975
2016-05-31 11:10:47 +02:00
Marco Martin
f98cae5dd0 Use SAX for Plasma::Svg stylesheet replacement
following KIconLoader, use QXmlStreamReader/Writer
here too to replace the svg stylesheet to color
the svg with system colors.
it should be hopefully slightly more efficient

REVIEW:127937
2016-05-17 14:45:54 +02:00
Marco Martin
944c7e60dc cache svg icons from icon theme
cache as well svg icons from the icon theme
(invalidating as well when the icon theme is updated)

REVIEW:127260
2016-04-04 17:47:30 +02:00
David Edmundson
ca98250d0c add missing const on private member
REVIEW: 127549
2016-04-03 23:01:23 +01:00
Kai Uwe Broulik
bd354ecf70 [Svg] Don't reparse configuration in response to Theme::applicationPaletteChanged
Plasma::Theme emits the applicationPaletteChanged signal after it has fetched the
colors from KColorScheme and scheduled the caches to be nuked. There's no need to do
the same exact thing from every single Svg out there.

This speeds up Plasma picking up color scheme changes significantly and is now
on a par with other opened applications.

REVIEW: 127426
2016-03-20 11:30:58 +01:00
Aleix Pol
9f62532674 Fix most of Clazy warnings in plasma-framework
REVIEW: 126672
2016-02-29 00:13:41 +01:00
Martin Klapetek
76186339f6 [libplasma] Add categorized debug output 2015-12-15 16:56:40 -05:00
Nick Shaforostoff
c7c2980f14 qstring optimizations
REVIEW: 126148
2015-11-27 20:03:48 +00:00
Marco Martin
1a804c33e2 use qGuiApp instead of qApp 2015-11-20 14:37:17 +01:00
Marco Martin
a9d3d9a81a make event filters static to decrease installed filters on qApp
since seems there are so many event filters installed
on the QApplication installed that may give performanc
 issues, try to use separate, singleton watchers for them
to decrease the amount of eventfilters called

REVIEW:126113
2015-11-20 14:26:16 +01:00
Marco Martin
c1065ccf39 Theme breeze icons when loaded trough IconItem
This makes IconItem try to load global icons from the theme
with Plasma::Svg as well, making it assign the colors from
the stylesheet if the breeze monochrome icons are treated,
that should be scriptable, from some attempts i did the
script seems to convert them correctly, without any
change in rendering.

This will automatically color monochrome breeze icons only
in plasmashell, and more specifically only those that use
IconItem, not QIconItem (iconitem should probably have an
animation-less mode to be able to be used in taskmanager
and stuff)
perhaps in the future we'll be able somehow to hook all
this stuff in QIconEngine to be able to use it in QWidget
applications, but since QIcon does have any idea where it is,
is not usable yet for things like the fullscreen fixed-dark
gwenview view.

Change-Id: I28e5fedabafbe8ed82a9df7614f8e2af18c6a24d
REVIEW:125657
2015-10-20 11:49:20 +02:00
Marco Martin
fef51e71d6 cache naturalsize separately by scalefactor
solves some highdpi issues
saves and reads natural sizes separed by scalefactor
so they don't get mixed up when the scaefactor changes
resulting in wrongly sized items

reviewed-by:David Edmundson <david@davidedmundson.co.uk>
2015-06-24 10:38:53 -07:00
Marco Martin
34935428e8 correctly scale up svgs
scale the natural size as well as sizes
this makes hugh dpi ratios to be more uniformly scaled
2015-06-11 18:01:53 -07:00
Marco Martin
a5737b553e fix margin sizing after the imagepath changes
Change-Id: If47f4d538caf93a35b4ef008cbc5339a9ef265a0
2015-04-08 13:44:55 +02:00
Marco Martin
285224a2ea don't risk to mix up frames with different pixelratio
BUG:345155
Change-Id: I0b2384831d755e02b944a49259ffeacd0d2fb71e
2015-03-25 17:06:47 +01:00
Marco Martin
148e0022f6 Make Svg,FrameSvg work qith QT_DEVICE_PIXELRATIO
when QT_DEVICE_PIXELRATIO is something different from 1,
the pixmaps generated by Svg will be scaled up to give a proper texture.

This is complementary but not replacing our current approach:
the pixelratio that can be accessed by units is now in relation to the qt pixel ratio,
spacings are also adjusted accordingly (therefore, spaces and sizes won't
need an integer value like pixelratio)

svg introduces also a scaleFactor property (that is pretty much like its old pixelRatio)
basically, scalefactor, will scale both the textures and all the reported sizes,
(old method) pixelratio just scales textures without altering measures
(like qt pixelratio likes)

Change-Id: I304aa0d80abf76abafac239be185dd3b2ab741b7
REVIEW:122673
2015-03-10 18:02:15 +01:00
David Edmundson
084be8e534 Port to kpackage::package
Change-Id: Id52b8d6bf76ab964c02cec9f0bba1dcdf3950d76
2015-02-12 13:05:12 +01:00
Marco Martin
534733558c restore hint-apply-color-scheme support
make hint-apply-color-scheme work (kiconeffect based coloring),
and make sure the kcolorschemes are reloaded when app palette changes
and the theme follows system colors

BUG:343389
Change-Id: I0a7a7eb0f89ed0948e618f1d608521f235aa1959
2015-01-29 13:17:39 +01:00
Marco Martin
bdda85a40d restore hint-apply-color-scheme support
make hint-apply-color-scheme work (kiconeffect based coloring),
and make sure the kcolorschemes are reloaded when app palette changes
and the theme follows system colors

BUG:343389
Change-Id: I0a7a7eb0f89ed0948e618f1d608521f235aa1959
2015-01-28 17:54:26 +01:00
Marco Martin
7d00d30f44 reset the internal size copy when the theme changes
Change-Id: I1800076e98bc543ffdea3f4c92d5a08f934f7573
2015-01-13 10:50:20 +01:00
Marco Martin
66a1a497ef add a property to tell if fallback happened
add a property in Svg (and framesvgitem) to tell if the current theme
has this image, or if some fallback did happen
useful for items that are better not displayed than showing the potentially different
default theme

Change-Id: Ib914c0e196c5c941d35d9a600cc7d38818fc754f
2014-10-10 17:36:44 +02:00
Marco Martin
8eb1bc10f5 Introduce the ColorScope class
it's an import in core, and advertises itself as an "attached property"
with this we can:
say that all its chidren are of a certain context, like "button" or
"complementary"

then anywhere there will be available an attached property, as ColorScope,
so like:

PlasmaCore.ColorScope {
 group: PlasmaCore.Theme.Complementary

 PlasmaComponents.Label {
   text: "foo"
   color: ColorScope.textColor
 }
}
2014-06-19 17:40:14 +02:00
Marco Martin
b755bd1e32 ColorGroup is part of Theme 2014-06-18 19:22:02 +02:00
Marco Martin
fa95680a51 use color groups instead
the Text and Background colors can become buttonText or ButtonBackground
based on the svg property ColorGroup
2014-06-09 19:35:58 +02:00
Marco Martin
cac2704d50 prototype of more flexyble svg stylesheets
experiment in dynamic repacement of Text and Background
colors, in order to be able to generate icons of different colors
based on where they are (for instance if the normal background
is dark and the button background is light

at the moment supported an option to invert colors, one
to use the "highlight" color (if we want colored icons
on mouse over)
2014-06-09 17:35:46 +02:00
Marco Martin
0b10a16113 try harder to avoid creating svg renderers
now is actually possible to obtain a startup with zero svg renderers
    * svg::isValid will create a renderer only if really nevessary
    * the rects cache is ensured to be written on disk
    * fixed the check on the theme metadata age
    * rect cache is shared between all applications
2014-05-26 20:14:57 +02:00
Marco Martin
819b42932d accept file:// urls as absolute paths 2014-05-26 13:55:10 +02:00
Marco Martin
f7e25fe696 don't link to xml and iconthemes 2014-05-19 19:09:09 +02:00
Marco Martin
d0816f1448 crash-- 2014-05-19 15:35:04 +02:00
Kevin Ottens
72ba7b4146 Apply the astyle-kdelibs script 2014-04-26 01:48:37 +02:00
David Edmundson
66bac622b4 Merge branch 'davidedmundson/svgrendering'
Conflicts:
	src/declarativeimports/core/svgitem.cpp
	src/declarativeimports/core/svgitem.h

REVIEW: 115923
2014-02-28 16:22:49 +01:00
David Edmundson
8bdbc034d4 Add SVG::image(QSize size,QString elementId)
This allows SVGItem to fetch elements at various sizes without resizing
the SVG.
2014-02-28 15:24:08 +01:00
Marco Martin
53b2aba558 explain why we only consider integers right now 2014-02-25 19:39:12 +01:00
Marco Martin
a04a87bcec use units to understand the devicePixelRatio 2014-02-24 16:55:19 +01:00
Marco Martin
372912d53e fix elementSize() 2014-02-21 19:52:25 +01:00
Marco Martin
17332257d7 experimental devicePixelRatio in Plasma::Svg
Conflicts:
	src/declarativeimports/core/framesvgitem.cpp
2014-02-21 19:24:14 +01:00
David Edmundson
d7b8ba265b Cleanup whitespace 2014-02-21 15:15:21 +01:00