mirror of
https://review.haiku-os.org/haiku
synced 2025-01-19 13:01:29 +01:00
4dbd474753
Allow to easily access the alert icons and anything that's added to app_server resources. Fixes #10887. Convert BAlert, Debugger AlertWithCheckbox and Keymap ModifierKeysWindow to make use of it, removing the duplicate code to locate app_server resources. The resources are initialized only once (per application), so there is no need to reload them for every access to the icons. In the ticket there is discussion about putting this in BControlLook, but I think this should in fact be moved fully into app_server with special drawing commands for well-known icons. That would avoid loading and rendering the icon on the application side to then send it to app_server (especially in remote_app_server case)? In any case, this simple API can serve as a base for applications to use, and we can change how it is implemented later on. Change-Id: Id370526ae5cf165cfb8bc277bc8a7f46c26f542d Reviewed-on: https://review.haiku-os.org/c/haiku/+/6463 Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org> Reviewed-by: waddlesplash <waddlesplash@gmail.com> Reviewed-by: Adrien Destugues <pulkomandy@pulkomandy.tk>
188 lines
5.8 KiB
Plaintext
188 lines
5.8 KiB
Plaintext
/*
|
|
* Copyright 2011-2023 Haiku, Inc. All rights reserved.
|
|
* Distributed under the terms of the MIT License.
|
|
*
|
|
* Authors:
|
|
* Adrien Destugues, pulkomandy@pulkomandy.tk
|
|
*
|
|
* Corresponds to:
|
|
* headers/os/interface/IconUtils.h hrev57019
|
|
* src/kits/interface/IconUtils.cpp hrev57019
|
|
*/
|
|
|
|
|
|
/*!
|
|
\file IconUtils.h
|
|
\ingroup interface
|
|
\ingroup libbe
|
|
\brief Vector icon handling utility class
|
|
*/
|
|
|
|
|
|
/*!
|
|
\class BIconUtils
|
|
\ingroup interface
|
|
\ingroup libbe
|
|
\brief The BIconUtils class provide utility methods for managing and
|
|
drawing vector icons.
|
|
|
|
Haiku icons are stored in the HVIF (Haiku Vector Icon Format). This format
|
|
was designed specifically for this purpose, and allows the icon data to be
|
|
small enough to fit in file's inodes. This way, the icon can be displayed
|
|
like any other file attribute, without extra disk access.
|
|
|
|
This class provide only static methods to allow access to the icon data and
|
|
rendering to BBitmaps for later use in an application. It also supports
|
|
older icons in bitmap format. These may still be useful at very small
|
|
sizes. Note you can't create an instance of BIconUtils, just call the
|
|
static methods.
|
|
|
|
\since Haiku R1
|
|
*/
|
|
|
|
|
|
/*!
|
|
\fn static status_t BIconUtils::GetIcon(BNode* node,
|
|
const char* vectorIconAttrName, const char* smallIconAttrName,
|
|
const char* largeIconAttrName, icon_size size, BBitmap* result)
|
|
\brief Utility function to import an icon from a node.
|
|
|
|
Utility function to import an icon from the node that
|
|
has either of the provided attribute names. Which icon type
|
|
is preferred (vector, small or large B_CMAP8 icon) depends
|
|
on the colorspace of the provided bitmap.
|
|
|
|
\note If the colorspace is B_CMAP8, B_CMAP8 icons are preferred. In that
|
|
case, the bitmap size must also match the provided icon_size "size"!
|
|
|
|
\since Haiku R1
|
|
*/
|
|
|
|
|
|
/*!
|
|
\fn static status_t BIconUtils::GetVectorIcon(BNode* node,
|
|
const char* attrName, BBitmap* result)
|
|
\brief Utility function to import a vector icon in "flat icon" format.
|
|
|
|
Utility function to import a vector icon in "flat icon"
|
|
format from a BNode attribute into the preallocated BBitmap \a result.
|
|
The colorspace of result needs to be B_RGBA32 or at
|
|
least B_RGB32 (though that makes less sense). The icon
|
|
will be scaled from its "native" size of 64x64 to the
|
|
size of the bitmap.
|
|
|
|
\note The scale is derived from the bitmap width, the bitmap should have
|
|
square dimension, or the icon will be cut off at the bottom (or have
|
|
room left).
|
|
|
|
\since Haiku R1
|
|
*/
|
|
|
|
|
|
/*!
|
|
\fn static status_t BIconUtils::GetVectorIcon(const uint8* buffer,
|
|
size_t size, BBitmap* result)
|
|
\brief Utility function to import a vector icon in "flat icon" format.
|
|
|
|
Utility function to import a vector icon in "flat icon"
|
|
format from the given \a buffer into the preallocated BBitmap \a result.
|
|
The colorspace of result needs to be B_RGBA32 or at
|
|
least B_RGB32 (though that makes less sense). The icon
|
|
will be scaled from its "native" size of 64x64 to the
|
|
size of the bitmap.
|
|
|
|
\note The scale is derived from the bitmap width, the bitmap should have
|
|
square dimension, or the icon will be cut off at the bottom (or have
|
|
room left).
|
|
|
|
\since Haiku R1
|
|
*/
|
|
|
|
|
|
/*!
|
|
\fn static status_t BIconUtils::GetCMAP8Icon(BNode* node,
|
|
const char* smallIconAttrName, const char* largeIconAttrName,
|
|
icon_size size, BBitmap* icon)
|
|
\brief Utility function to import an "old" BeOS icon in B_CMAP8 colorspace.
|
|
|
|
Utility function to import an "old" BeOS icon in B_CMAP8 colorspace from
|
|
either the small icon attribute or the large icon attribute as given in
|
|
\a smallIconAttrName and \a largeIconAttrName. Which icon is loaded depends
|
|
on the given \a size.
|
|
|
|
\since Haiku R1
|
|
*/
|
|
|
|
|
|
/*
|
|
\fn static status_t BIconUtils::GetSystemIcon(const char* iconName, BBitmap* result)
|
|
\brief Load an icon from the set of system icons.
|
|
|
|
To provide some uniformity between different applications, a base set of icons is provided
|
|
with Haiku. Whenever possible, these should be used instead of application specific icons,
|
|
to ensure consistency and ease of discovering application functions.
|
|
|
|
The available icons follow the FreeDesktop icon-naming-spec convention. At this time the
|
|
following icons are available:
|
|
|
|
- Flag icons for 245 countries
|
|
- dialog-error, dialog-information, and dialog-warning
|
|
- As an extension not available in FreeDesktop specifications, dialog-idea is also available
|
|
and corresponds to the icon used in BAlert of type B_IDEA_ALERT.
|
|
|
|
The icon is automatically scaled to fit the \a result bitmap, which must be allocated and
|
|
valid before calling this function.
|
|
|
|
\return B_OK if the icon could be loaded into the \a result BBitmap. B_ENTRY_NOT_FOUND if the
|
|
requested icon is not currently available.
|
|
|
|
\since Haiku R1
|
|
*/
|
|
|
|
|
|
/*!
|
|
\fn static status_t BIconUtils::ConvertFromCMAP8(BBitmap* source,
|
|
BBitmap* result)
|
|
\brief Converts an old-style icon to another colorspace.
|
|
|
|
Utility function to convert from old icon colorspace into colorspace of
|
|
BBitmap \a result
|
|
|
|
\note result should be in B_RGBA32 colorspace, and source in B_CMAP8.
|
|
|
|
\since Haiku R1
|
|
*/
|
|
|
|
|
|
/*!
|
|
\fn static status_t BIconUtils::ConvertToCMAP8(BBitmap* source,
|
|
BBitmap* result)
|
|
\brief Converts a true-color icon to CMAP8 colorspace.
|
|
|
|
Utility function to convert data from source into \a result colorspace.
|
|
Call this to convert a picture to a format suitable for storage as an
|
|
old-style icon.
|
|
|
|
\note result should be in B_CMAP8 colorspace, and source in B_RGBA32.
|
|
|
|
\since Haiku R1
|
|
*/
|
|
|
|
|
|
/*!
|
|
\fn static status_t BIconUtils::ConvertFromCMAP8(const uint8* data,
|
|
uint32 width, uint32 height, uint32 bytesPerRow, BBitmap* result);
|
|
\brief Convert raw data in B_CMAP8 colorspace to a B_RGBA32 BBitmap.
|
|
|
|
\since Haiku R1
|
|
*/
|
|
|
|
|
|
/*!
|
|
\fn static status_t BIconUtils::ConvertToCMAP8(const uint8* data,
|
|
uint32 width, uint32 height, uint32 bytesPerRow, BBitmap* result);
|
|
\brief Convert B_RGBA32 raw data into a B_CMAP8 BBitmap.
|
|
|
|
\since Haiku R1
|
|
*/
|