//
// PImageNative.hh for pekwm
// Copyright (C) 2005 Claes Nasten <pekdon{@}pekdon{.}net>
//
// This program is licensed under the GNU GPL.
// See the LICENSE file for more information.
//
#include "../config.h"
#ifndef _PIMAGE_NATIVE_HH_
#define _PIMAGE_NATIVE_HH_
#include "pekwm.hh"
#include "PImage.hh"
#include "PImageNativeLoader.hh"
#include <list>
//! @brief Image class with pekwm native backend.
class PImageNative : public PImage {
public:
PImageNative(Display *dpy);
virtual ~PImageNative(void);
//! @brief Add loader to loader list.
static void loaderAdd(PImageNativeLoader *loader) {
_loader_list.push_back(loader);
}
//! @brief Removes and frees all loaders.
static void loaderClear(void) {
while (_loader_list.size()) {
delete _loader_list.back();
_loader_list.pop_back();
}
}
virtual bool load(const std::string &file);
virtual void unload(void);
virtual void draw(Drawable dest, int x, int y,
uint width = 0, uint height = 0);
virtual Pixmap getPixmap(bool &need_free, uint width = 0, uint height = 0);
virtual Pixmap getMask(bool &need_free, uint width = 0, uint height = 0);
virtual void scale(uint width, uint height);
private:
Pixmap createPixmap(uchar *data, uint width, uint height);
Pixmap createMask(uchar *data, uint width, uint height);
XImage *createXImage(uchar *data, uint width, uint height);
uchar *getScaledData(uint width, uint height);
private:
uchar *_data; //!< Data describing image.
bool _has_alpha; //!< Wheter image has alpha channel.
static std::list<PImageNativeLoader*> _loader_list; //!< List of loaders.
};
#endif // _PIMAGE_NATIVE_HH_
syntax highlighted by Code2HTML, v. 0.9.1