widgets: add IconImage widget

Docs currently cannot be generated due to lack of qml parsing support
in typegen.
This commit is contained in:
outfoxxed 2024-09-14 03:10:44 -07:00
parent accdc59a1c
commit abe0327e67
Signed by: outfoxxed
GPG key ID: 4C88A185FB89301E
3 changed files with 81 additions and 0 deletions

View file

@ -4,6 +4,7 @@ install(TARGETS quickshell RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
add_subdirectory(core)
add_subdirectory(io)
add_subdirectory(widgets)
if (CRASH_REPORTER)
add_subdirectory(crash)

View file

@ -0,0 +1,13 @@
qt_add_library(quickshell-widgets STATIC)
qt_add_qml_module(quickshell-widgets
URI Quickshell.Widgets
VERSION 0.1
QML_FILES
IconImage.qml
)
qs_pch(quickshell-widgets)
qs_pch(quickshell-widgetsplugin)
target_link_libraries(quickshell PRIVATE quickshell-widgetsplugin)

67
src/widgets/IconImage.qml Normal file
View file

@ -0,0 +1,67 @@
import QtQuick
///! Image component for displaying widget/icon style images.
/// This is a specialization of @@QtQuick.Image configured for icon-style images,
/// designed to make it easier to use correctly. If you need more control, use
/// @@QtQuick.Image directly.
///
/// The image's aspect raito is assumed to be 1:1. If it is not 1:1, padding
/// will be added to make it 1:1. This is currently applied before the actual
/// aspect ratio of the image is taken into account, and may change in a future
/// release.
///
/// You should use it for:
/// - Icons for custom buttons
/// - Status indicator icons
/// - System tray icons
/// - Things similar to the above.
///
/// Do not use it for:
/// - Big images
/// - Images that change size frequently
/// - Anything that doesn't feel like an icon.
///
/// > [!INFO] More information about many of these properties can be found in
/// > the documentation for @@QtQuick.Image.
Item {
id: root
/// URL of the image. Defaults to an empty string.
/// See @@QtQuick.Image.source.
property alias source: image.source
/// If the image should be loaded asynchronously. Defaults to false.
/// See @@QtQuick.Image.asynchronous.
property alias asynchronous: image.asynchronous
/// The load status of the image. See @@QtQuick.Image.status.
property alias status: image.status
/// If the image should be mipmap filtered. Defaults to false.
/// See @@QtQuick.Image.mipmap.
///
/// Try enabling this if your image is significantly scaled down
/// and looks bad because of it.
property alias mipmap: image.mipmap
/// The @@QtQuick.Image backing this object.
///
/// This is useful if you need to access more functionality than
/// exposed by IconImage.
property alias backer: image
/// The suggested size of the image. This is used as a defualt
/// for @@QtQuick.Item.implicitWidth and @@QtQuick.Item.implicitHeight.
property real implicitSize: 0
/// The actual size the image will be displayed at.
readonly property real actualSize: Math.min(root.width, root.height)
implicitWidth: root.implicitSize
implicitHeight: root.implicitSize
Image {
id: image
anchors.fill: parent
fillMode: Image.PreserveAspectFit
sourceSize.width: root.actualSize
sourceSize.height: root.actualSize
}
}