9f5078060d
there is some unfortunate code duplication in AppFileInfo, because it cannot use BMimeType/BNode alone to retrieve icons, now it works closer to the code in BIconUtils, this fixes R5 icons not displaying for other icon sizes * implemented a bilinear scaling function, I don't know if it is very fast, but I hope it is reasonable. Now that I see the results though, I wonder if R5 icons should be scaled with nearest neighbor instead... * corrected a small bug in the icon format stuff... 7 bit coords are -32-+95, not 96 * improved comment for BIconUtils function git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19302 a95241bf-73f2-0310-859d-f6bbb57e9c96
85 lines
2.8 KiB
C++
85 lines
2.8 KiB
C++
/*
|
|
* Copyright 2006, Haiku. All rights reserved.
|
|
* Distributed under the terms of the MIT License.
|
|
*
|
|
*/
|
|
|
|
#ifndef ICON_UTILS_H
|
|
#define ICON_UTILS_H
|
|
|
|
#include <Mime.h>
|
|
|
|
class BBitmap;
|
|
class BNode;
|
|
|
|
// This class is a little different from many other classes.
|
|
// You don't create an instance of it; you just call its various
|
|
// static member functions for utility-like operations.
|
|
class BIconUtils {
|
|
BIconUtils();
|
|
~BIconUtils();
|
|
BIconUtils(const BIconUtils&);
|
|
BIconUtils& operator=(const BIconUtils&);
|
|
|
|
public:
|
|
|
|
// 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. 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"!
|
|
static status_t GetIcon(BNode* node,
|
|
const char* vectorIconAttrName,
|
|
const char* smallIconAttrName,
|
|
const char* largeIconAttrName,
|
|
icon_size size,
|
|
BBitmap* result);
|
|
|
|
// Utility functions to import a vector icon in "flat icon"
|
|
// format from a BNode attribute or from a flat buffer in
|
|
// memory into the preallocated BBitmap "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 it's "native" size of 64x64 to the
|
|
// size of the bitmap, 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).
|
|
static status_t GetVectorIcon(BNode* node,
|
|
const char* attrName,
|
|
BBitmap* result);
|
|
|
|
static status_t GetVectorIcon(const uint8* buffer,
|
|
size_t size,
|
|
BBitmap* result);
|
|
|
|
// 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 "smallIconAttrName" and
|
|
// "largeIconAttrName". Which icon is loaded depends on
|
|
// the given "size".
|
|
static status_t GetCMAP8Icon(BNode* node,
|
|
const char* smallIconAttrName,
|
|
const char* largeIconAttrName,
|
|
icon_size size,
|
|
BBitmap* icon);
|
|
|
|
// Utility functions to convert from old icon colorspace
|
|
// into colorspace of BBitmap "result" (should be B_RGBA32
|
|
// to make any sense).
|
|
static status_t ConvertFromCMAP8(BBitmap* source,
|
|
BBitmap* result);
|
|
|
|
static status_t ConvertFromCMAP8(const uint8* data,
|
|
uint32 width, uint32 height,
|
|
uint32 bytesPerRow,
|
|
BBitmap* result);
|
|
|
|
static status_t ConvertToCMAP8(const uint8* data,
|
|
uint32 width, uint32 height,
|
|
uint32 bytesPerRow,
|
|
BBitmap* result);
|
|
};
|
|
|
|
#endif // ICON_UTILS_H
|