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>
Makes the code a bit simpler & lighter and fixes the sometimes missing
bottom line in calendar.
The grid is now equally padded from both sides (including the month
name), so basically it's now always aligned to the center and this also
fixes the cases where there was a bigger padding on one side than on the
other.
The grid is now also anchored to the bottom so that the bottom margin
can stay moreless consistent with the side margins in different sizes.
Change-Id: I2f2173d11e473d6e93db2bdca002269e4239f516
REVIEW: 124072
CHANGELOG: Improve hidpi support in the Calendar grid component
Sometimes the first day in the grid can be Sunday, but the week number
must always be counted from Monday in that week
BUG: 349044
Change-Id: I903650fcaadb4fd78764ad6a8bb1e219261c791b
FIXED-IN: 5.11
There can be a situation when changing resolution/scaling or some other screen
property that driver/XRandR decides to turn the screen off temporarily, during
which there are no screens and QGuiApplication::primaryScreen returns a null
pointer.
Approved-by: David Edmundson
Since the password echo is a circle woithout vertical or horizontal lines, it won't be
more blurred with different rendring types.
Using Qt rendering, the dots will look more aligned and equally spaced.
Change-Id: I8052f176930d1e2dc144f0b65daf539764cf08b1
REVIEW:123799
Now it will show first character only if the ListView has FirstCharacter
set
Change-Id: I6d2451d95e36a9a07eed4168402ac5748e87dcb3
Reviewed-by: Marco Martin
To improve accessibility and consistency with widget applications scroll bars no longer
automatically hide after a timeout, which was the case when a touch screen was present,
which is nice for tablets but bad for desktops.
CHANGELOG: Scroll bars no longer automatically hide when a touch screen is present
REVIEW: 123645
BUG: 347254
When the tooltip is empty (no text, no subtext, and no mainItem) it will not be shown.
However, when it becomes empty while it is already shown, it stays there as a small
rectangle. This hides the tooltip immediately (so KWin's fadeout animation still has
the proper content rather than the empty tooltip) when the TooltipArea that opened
the tooltip has been destroyed or its content becomes empty.
CHANGELOG: Fixed stray tooltips when temporary owner of tooltip disappeared or became empty
REVIEW: 122939
When Component.onCompleted is emitted, all the static children have been created,
thus we can call the layout function right away.
CHANGELOG: Fix TabBar not properly laid out initially, which could be observed in eg. Kickoff
REVIEW: 123106
Not a real issue as initialize() is always called before they're used
but it's cleaner and fixes a coverity warning.
Change-Id: Ib1168be7f9d72c7d5765850a7f35d524ea279a75
This improves animation smoothness, eg. when switching between heavy system tray plasmoids.
CHANGELOG: PageStack transitions now use Animators for smoother animations
REVIEW: 123102
This reduces stuttering when switching between lazyloaded pages
CHANGELOG: TabGroup transitions now use Animators for smoother animations
REVIEW: 123103
Since attached properties cannot ever change during the lifetime of the object,
a colorscope needs to be created for each obect that asks for the
attached property. now each instance if (internal) has m_inherit
(only those created as an attached property), will search for the property
of the proper ancestor. Not super efficient, but the proeprties should be
actually asked for rarely enough.
doesn't look much nice, but seems to work pretty reliably and the only way to.
Change-Id: I735da5551dbb8c2641be88d245f998d00ed977ac
REVIEW:122988
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
The active property is usualy set in response to a hover event.
Loading the new pixmap right away, starting the fade animation immediately, provides
a more responsive user experience.
REVIEW: 122857
Currently units is based on font metrics except icon size and some SVG
parts which use DPI directly.
Instead of taking the physical DPI we take the logical DPI which is used
for working out font point -> pixel sizes.
We can rely on this being correct as otherwise every other app would
appear broken.
REVIEW: 122799
BUG: 338308
Change-Id: I22f668ccea7d6d15ff475e1368c82964bdde1e60
This patch ports the default tooltip away from custom spacing,
positioning and Row/Column to QtQuick.Layouts. It makes the sizing more
predictable, and the code more modern and readable. Tooltips feel to
behave a bit smoother with this patch.
In the process, this...
- fixes spacing when no icon or image is set
- limits the maximum height of the subtext to 8 lines (this prevents the
klipper tooltip for example from growing super-high)
- Makes the icon on the LHS proportional to the text
- Limits the width a bit more to prevent super-wide tooltips
- makes it use units.gridUnit throughout
Changelog: Improve tooltip layout
REVIEW:122717
This reverts commit fa2109ccb6.
Turns out the plan to raise the version with every framework
release is not as simple as raising the version numbers as
this breaks pretty much everything.
Filtering only by regexps is not enough because as soon as filtering by
special characters is needed, they can get interpreted as regexp special
characters and stuff will break.
Change-Id: Ic5cd0309e1e77d790faeecedbe87fdaaeceffc33
REVIEW: 122695
This patch cuts down animation time quite considerably. We've discussed
this during the sprint. The default long animation is now 120ms instead
of 250. We have played around with different values, and this seemed to
hit sweet spot between the interface feeling really snappy, but the
animations still visible, so no sudden transitions in the UI.
We should consider doing something similar for kwin animations.
Reviewed-by: Kai Uwe & Marco
CCMAIL:plasma-devel@kde.org
CCMAIL:kwin@kde.org
This makes them significantly less annoying by having them close more reliably when
leaving the ToolTipArea and more importantly fixes the tooltip interrupting the
applet resize operation.
REVIEW: 122624
It causes binding loops causing all sorts of weird behavior, like the buttons
in Klipper not always having a background.
Changelog: Fix rendering glitches with ToolButtons that don't have a label
REVIEW: 122609
BUG: 339303
BUG: 340588
- Use QQmlParserStatus to provide event compression for setupDate() method
- Re-introduce interval alignment
- Cache sources and emit change signal only when it has actually changed
Changelog: DataSource can now align polling to full minutes
REVIEW: 122470
I was getting the m_pixmapIcon cleared some times, instead of the
m_iconPixmap. This made it forget about my image.
m_iconPixmap should be renamed to something else.
Reviewed and done in collaboration with David Edmindson
A new tooltip would only be shown if it had content to show.
However in the old code if the tooltip was already visible we would keep
the tooltip alive and sync with empty contents regardless of whether we
had anything to show.
This seems to clear up the system tray where we have nested tooltip
areas for the tray applet and the icon itself and things would flicker
Change-Id: I7d9ded9edb70672c572e008c8d6f1ffe2d76b773
Changelog: Avoid showing an empty tooltip
if a tooltip has only text, expecially only title or only subtitle, make
it as small as possible
BUG:343390
Change-Id: I5eff081613c9c64c78b8c5741bac67409a112c98
in some cases richtext in the tooltip is not desired, like
in the case of klipper. export a property to set
the text format
Change-Id: Ib4e8e913e060b868188b4f0b46db2162f33d8bb1
make sure the animation is disabled when the tooltip appears
for the first time.
since the correct implicitsizes can be calculated only when the
tooltip window is visible, we need to show the tooltip window
then calculate the final size and position, and last move it
*without animations*
Change-Id: I2d0f653e860104f17a62203565d5002a16d0dfae
reviewed-by: David Edmundson <kde@davidedmundson.co.uk>
BUG:341933
This makes the IconItem load the icon immediately after component creation and not
wait 150ms there for no reason which prevents eg. flickering in the OSD when it shows up.
REVIEW: 121219
Making transition between two different size doesn't make much sense,
since repainting is usually happens at that time and it could take some
time to finish. And the animation need to be stopped if m_animValue is set
manually.
Change-Id: I240c19f46d4d13eb0e54b4e7b3fa3b6c31cfc6d8
REVIEW: 121411
Unit now takes all fonts from the default system font, which we monitor
for with an eventFilter on the application object.
Change-Id: Ib17c01e2811c0c672be18a930d625d84ecd154a4
Given comboboxes use the same background as buttons they should use the
same text colour too.
This prevents a situation in Breeze where a ComboBox could get white
text on a white background when using a colourscope with complementary
colours.
Change-Id: I21502186178a32ce480cd3e838335451bf644c3e
KConfig->reparseConfiguration is expensive. It throws away our cached
values.
The Units constructor was calling this every single time. Units is
created a _lot_; once per applet and once per FrameSVGItem.
This meant we were reloading the same config ~100 times on startup for
no reason.
Perf showed this as being ~5% of the total startup time.
- 7.47% 0.00% plasmashell libKF5ConfigCore.so.5.5.0
[.] KConfig::reparseConfiguration()
- KConfig::reparseConfiguration()
+ 66.51% Units::settingsFileChanged(QString const&)
+ 25.95% KConfig::KConfig(QString const&,
QFlags<KConfig::OpenFlag>, QStandardPaths::StandardLocation)
+ 3.93% KDesktopFile::KDesktopFile(QString const&)
+ 3.61% Units::settingsFileChanged(QString const&)
Change-Id: Ia70b7001ba473c8063e6c999b8e4233ea5b206f5
If an invalid icon size is passed to roundToIconSize we should return an
invalid icon size.
This can cause IconItem to load a small pixmap which will never be
shown.
Change-Id: Ia678f2e879b83317e2971069acf8f00d9ce2e052
* Adapt the existing controls to be generic enough to work on stock QtQuickControls
* Add missing styles needed for the set to be complete (and applications actually work)
The full list of controls styles is now:
ApplicationWindowStyle
BusyIndicatorStyle
ButtonStyle
CalendarStyle
CheckBoxStyle
ComboBoxStyle
MenuBarStyle
MenuStyle
ProgressBarStyle
RadioButtonStyle
ScrollViewStyle
SliderStyle
SpinBoxStyle
StatusBarStyle
SwitchStyle
TabViewStyle
TableViewStyle
TextAreaStyle
TextFieldStyle
ToolBarStyle
ToolButtonStyle
GroupBoxStyle
Change-Id: Ic5d33bc20c7456d1478c07aca33bda63378d5c05
DialogStatus, as in other Dialog variants, can only be accessed through
the PlasmaComponents namespace.
Fixes 3 ReferenceErrors in SelectionDialog and makes it actually work.
It is possible to put a PlasmaCore.ColorScope element, to automatically
change the colors:
if for instance the complementary scope will be set, all labels
descendent of such element would flip their color
Change-Id: I2214aca522eb094cf067d8726c5bf2a7ecbf36b3
Test is enhanced to also cover vertical bars. The ProgressBar does not yet use
the vertical assets since Qt just conveniently rotates the bar for us and
apparently just overriding the entire "panel" component is evil
REVIEW: 121085
Adding up margins along the horizontal or vertical axis is often
done to calculate sizing or spacing. This tends to result in scary-
long and bug-prone expression being bound to props, since nobody
seems to like to blowing them up into a code block with a separate
variable assignment. This aims to increase the readability of com-
plex expressions by summing axis margins into a single operand.
Change-Id: I39a37dde80b9314da0c69f3b33d26d26a9ff54d1
consider the case of fallback as well when we are searching for a texture
reviewed by: Eike Hein <hein@kde.org>
Change-Id: I1faa119f9b3486d21ebd07a294b5063a896d7af1
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
The code in Button is
panel.implicitWidth: max(label+borders, backgroundImplicitSize)
by setting the background implicitSize to be max(size, labels+borders)
we just duplicate the functionality.
This worked, but icon only buttons became smaller because we weren't
setting the implicitHeight of the label properly.
(two wrongs were making a right)
We need to move the RowLayout inside an Item as we are modiyfing the
preferredHeight of RowLayout, but this doesn't sync back to updating the
implicitHeight which Button.qml uses.
This fixes all binding loops and the rather broken icon only flat
button.
Change-Id: Id2f9c2ab37b2280ee69dc1473f388fe686e3327e
return a size rounded tothe nearest inferior standard icon size.
sizes larger than iconSizes.huge, it will be returned unmodified
Reviewed by: Kai Uwe Broulik <kde@privat.broulik.de>
Change-Id: I85c575ea1cc7965ae9bede9e5a8b7b4cb342580e
revert part of
306e353fe6
if a framesvgitem has an implicitsize explicitly set, it shouldn't be overwritten
Change-Id: I931ca8acafdc2f6908945d03fca97487ced22988
Setting the implcit width to be the same as the current height is very
easy to end up looping.
actual height of the background is set by the base style, which is based
on the implicit sizes anyway.
BUG: 338750
Change-Id: Ic7606588cec09c6ff16515c208efe576466d31d6
QQuickLoader is a focus scope so that it can automatically forward the
focus to it's item. Conditional loader should do the same and forward
the focus to its internal loader.
On some themes Plasma::SVG gives empty pixmaps. Loading a null QImage to
an atlas texture causes a crash in old versions of Qt.
Guard against it.
BUG: 88039
Reviewed-by: Martin Klapetek
These classes are exposed only as QML so we should only show members the
user can actually use.
The invokable is moved to the top for easier reading
REVIEW: 119745
Apparently in nvidia we get corruptions when a texture created for a window
is used in another one.
With this patch we tell the texture has changed when we move it from a
window to another, so it's re-created and we keep textures for all windows
separately. This way we ensure they don't mix.
REVIEW: 119465
We previously only supported compose-over-border when the centre was not
set to tile.
It's possible to use compose over border with tile.. even if it doesn't
make much sense.
Given that creating an opacityMask loads most of the image anyway, we
can make use of the FrameSVG painter path and avoid any additional code
complexity here.
REVIEW: 119406
Revert the changes in contentsRect, it was clearly not the best place to
put the code that contains the code that computes the content size.
Instead move the code in FrameSvgItem, duplicates data and code but works.
Use FrameSVG as 9 tiles instead of uploading a big texture of the finished frame each time.
This also saves the cache being populated with full created frames in different sizes; which end up taking up space in the disk and shared memory cache as well as the GPU memory.
A code path falls back to the original uploading the entire texture if obscure settings are used, i.e overlay.
Benchmarks:
apitrace when resizing a frame goes from an average of 7.6ms per frame of CPU time just for the swizzling and uploading to 1.4ms
GPU time also drops from 40us to 10us
Themes will need to remove stretch-borders (when we gain nothing from stretching; i.e Breeze) to get the most out of it.
REVIEW: 119330
It's unreasonable to use private API, so make everything public API so that
every user of FrameSvg have as much features exposed as possible.
Reviewed by David Edmundson
Fallback to the old code if there's something not (yet?) handled by the
new implementation. This way we get to optimize for the the common use-case
without breaking former, complex, code-paths.
Reviewed by David Edmundson
This patch simplifies the grid a bit more by using Canvas instead of
Rectangles, so actually lowering the number of Items needed to create
the grid from 16 to just 1.
It works pretty neatly with no junctions problem at all.
REVIEW: 119283
Currently the grid itself is composed of 88 rectangles that draw all the
lines in a way that two big rect draws the whole two topmost horizontal
and leftmost vertical border lines and then each day rectangle is
drawing small bottom and right rect.
This patch reduces it to 13 rects only where one rect draws the whole
frame around the grid and then 1px wide/high rects draw the inner lines.
Results in much cleaner & simple code.
Plus there's a small refactor on the id names so it makes more sense.
This does not require any additional changes in the applets.
REVIEW: 119232
Qt Quick accessibility already picks up the text automatically. Instead
set the name (which is a descriptive element) to the placeholder text
which is more descriptive of the element. Otherwise Orca will read the
text twice.
the color properties are remotely useful only when used from QML
and risk to explode in number in the future,
it's not a good thing for a public c++ api.
Also, they will become kinda deprecated as in largely replaced by
the ColorRole api. Too late to remove those properties completely,
but still last days to move them at least out of c++ api.
(and in qml they could be removed in the future in a 2.1 version
of the import while still being present in 2.0 if needed)
This moves the color properties is a theme subclass available only from QML
REVIEW:118972
Included is a plasma theme to make it look the same.
A known regression is that SectionScroller is temporarily removed
but that is currently not used in plasma-desktop
and this fixes a lot more problems than it causes.
REVIEW: 114283
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
}
}