plasma-framework/src/declarativeimports/kirigamiplasmadesktopstyle/Units.qml
Nate Graham 5447cef2d8 Port to singleton Units
The context property version is slower to access and won't be supported
in Qt6. Let's port away from it and use the singleton version instead.

Here was my full process for making this change:

1. Made the change with `find . -name '*.qml' | xargs perl -pi -e 's/units\./PlasmaCore\.Units\./g'`
2. Verified no more occurrences with `grep -r " units."`
3. Made sure this didn't change any comments in a silly way by inspecting the output of `git diff | grep "+   " | grep "//"`
4. Manually inspected the full git diff to make sure there were no other unintentional or silly changes (there were none)
5. verified that all changed files have the PlasmaCore import with the correct name with `for FILE in `git status | grep modified | cut -d ":" -f 3`; do grep -q "as PlasmaCore" $FILE || echo "$FILE needs the PlasmaCore import"; done` (one needed the import)
2021-03-07 13:34:47 +00:00

142 lines
6.1 KiB
QML

/*
SPDX-FileCopyrightText: 2015 Marco Martin <mart@kde.org>
SPDX-License-Identifier: LGPL-2.0-or-later
*/
import QtQuick 2.4
import QtQuick.Window 2.2
import org.kde.plasma.core 2.0 as PlasmaCore
import QtQuick.Controls 1.4 as QtQuickControls
import QtQuick.Controls.Private 1.0 as QtQuickControlsPrivate
pragma Singleton
/**
* A set of values to define semantically sizes and durations
* @inherit QtQuick.QtObject
*/
QtObject {
id: unitsRoot
/**
* The fundamental unit of space that should be used for sizes, expressed in pixels.
* Given the screen has an accurate DPI settings, it corresponds to a width of
* the capital letter M
*/
property int gridUnit: fontMetrics.height
/**
* PlasmaCore.Units.iconSizes provides access to platform-dependent icon sizing
*
* The icon sizes provided are normalized for different DPI, so icons
* will scale depending on the DPI.
*
* Icon sizes from KIconLoader, adjusted to devicePixelRatio:
* * small
* * smallMedium
* * medium
* * large
* * huge
* * enormous
*
* Not devicePixelRation-adjusted::
* * desktop
*/
property QtObject iconSizes: QtObject {
property int sizeForLabels: fontMetrics.roundedIconSize(fontMetrics.height)
property int small: Math.floor(fontMetrics.roundedIconSize(16 * devicePixelRatio) * (QtQuickControlsPrivate.Settings.isMobile ? 1.5 : 1))
property int smallMedium: Math.floor(fontMetrics.roundedIconSize(22 * devicePixelRatio) * (QtQuickControlsPrivate.Settings.isMobile ? 1.5 : 1))
property int medium: Math.floor(fontMetrics.roundedIconSize(32 * devicePixelRatio) * (QtQuickControlsPrivate.Settings.isMobile ? 1.5 : 1))
property int large: Math.floor(fontMetrics.roundedIconSize(48 * devicePixelRatio) * (QtQuickControlsPrivate.Settings.isMobile ? 1.5 : 1))
property int huge: Math.floor(fontMetrics.roundedIconSize(64 * devicePixelRatio) * (QtQuickControlsPrivate.Settings.isMobile ? 1.5 : 1))
property int enormous: Math.floor(128 * devicePixelRatio * (QtQuickControlsPrivate.Settings.isMobile ? 1.5 : 1))
}
/**
* PlasmaCore.Units.smallSpacing is the amount of spacing that should be used around smaller UI elements,
* for example as spacing in Columns. Internally, this size depends on the size of
* the default font as rendered on the screen, so it takes user-configured font size and DPI
* into account.
*/
property int smallSpacing: Math.floor(gridUnit/4)
/**
* PlasmaCore.Units.largeSpacing is the amount of spacing that should be used inside bigger UI elements,
* for example between an icon and the corresponding text. Internally, this size depends on
* the size of the default font as rendered on the screen, so it takes user-configured font
* size and DPI into account.
*/
property int largeSpacing: smallSpacing * 2
/**
* The ratio between physical and device-independent pixels. This value does not depend on the \
* size of the configured font. If you want to take font sizes into account when scaling elements,
* use theme.mSize(theme.defaultFont), PlasmaCore.Units.smallSpacing and PlasmaCore.Units.largeSpacing.
* The devicePixelRatio follows the definition of "device independent pixel" by Microsoft.
*/
property real devicePixelRatio: Math.max(1, ((fontMetrics.font.pixelSize*0.75) / fontMetrics.font.pointSize))
/**
* PlasmaCore.Units.longDuration should be used for longer, screen-covering animations, for opening and
* closing of dialogs and other "not too small" animations
*/
property int longDuration: PlasmaCore.Units.longDuration
/**
* PlasmaCore.Units.shortDuration should be used for short animations, such as accentuating a UI event,
* hover events, etc..
*/
property int shortDuration: PlasmaCore.Units.shortDuration
/**
* PlasmaCore.Units.veryLongDuration should be used for specialty animations that benefit
* from being even longer than longDuration.
*/
property int veryLongDuration: PlasmaCore.Units.veryLongDuration
/**
* PlasmaCore.Units.veryShortDuration should be used for elements that should have a hint of smoothness,
* but otherwise animate near instantly.
*/
property int veryShortDuration: PlasmaCore.Units.veryShortDuration
readonly property QtObject __styleItem: QtQuickControlsPrivate.StyleItem {elementType: "frame" }
/**
* How much the mouse scroll wheel scrolls, expressed in lines of text.
* Note: this is strictly for classical mouse wheels, touchpads 2 figer scrolling won't be affected
*/
readonly property int wheelScrollLines: __styleItem.styleHint("wheelScrollLines")
/**
* time in ms by which the display of tooltips will be delayed.
*
* @sa ToolTip.delay property
*/
property int toolTipDelay: 700
/**
* metrics used by the default font
*/
property variant fontMetrics: TextMetrics {
text: "M"
function roundedIconSize(size) {
if (size < 16) {
return size;
} else if (size < 22) {
return 16;
} else if (size < 32) {
return 22;
} else if (size < 48) {
return 32;
} else if (size < 64) {
return 48;
} else {
return size;
}
}
}
}