//
// ScreenResources.hh for pekwm
// Copyright (C) 2004 Claes Nasten <pekdon{@}pekdon{.}net>
//
// This program is licensed under the GNU GPL.
// See the LICENSE file for more information.
//

#include "../config.h"

#include "PWinObj.hh"
#include "ScreenResources.hh"
#include "PScreen.hh"
#include "Config.hh"
#include "PixmapHandler.hh"

extern "C" {
#include <X11/cursorfont.h>
}

#ifdef DEBUG
#include <iostream>
using std::cerr;
using std::endl;
#endif // DEBUG

using std::map;

ScreenResources *ScreenResources::_instance = NULL;

//! @brief ScreenResources constructor
ScreenResources::ScreenResources(void) :
_pixmap_handler(NULL)
{
	if (_instance != NULL) {
#ifdef DEBUG
		cerr << __FILE__ << "@" << __LINE__ << ": "
				 << "ScreenResources(" << this << ")::ScreenResources()" << endl
				 << " *** _instance allready set: " << _instance << endl;
#endif // DEBUG
	}
	_instance = this;

	Display *dpy = PScreen::instance()->getDpy();

	// create resize cursors
	_cursor_map[CURSOR_TOP_LEFT] = XCreateFontCursor(dpy, XC_top_left_corner);
	_cursor_map[CURSOR_TOP] = XCreateFontCursor(dpy, XC_top_side);
	_cursor_map[CURSOR_TOP_RIGHT] = XCreateFontCursor(dpy, XC_top_right_corner);
	_cursor_map[CURSOR_LEFT] = XCreateFontCursor(dpy, XC_left_side);
	_cursor_map[CURSOR_RIGHT] = XCreateFontCursor(dpy, XC_right_side);
	_cursor_map[CURSOR_BOTTOM_LEFT] =
		XCreateFontCursor(dpy, XC_bottom_left_corner);
	_cursor_map[CURSOR_BOTTOM] = XCreateFontCursor(dpy, XC_bottom_side);
	_cursor_map[CURSOR_BOTTOM_RIGHT] =
		XCreateFontCursor(dpy, XC_bottom_right_corner);
	// create other cursors
	_cursor_map[CURSOR_ARROW] = XCreateFontCursor(dpy, XC_left_ptr);
	_cursor_map[CURSOR_MOVE] =  XCreateFontCursor(dpy, XC_fleur);
	_cursor_map[CURSOR_RESIZE] = XCreateFontCursor(dpy, XC_plus);

	_pixmap_handler =
		new PixmapHandler(Config::instance()->getScreenPixmapCacheSize(), 10);
}

//! @brief ScreenResources destructor
ScreenResources::~ScreenResources(void)
{
	map<CursorType, Cursor>::iterator c_it(_cursor_map.begin());
	for (; c_it != _cursor_map.end(); ++c_it) {
		XFreeCursor(PScreen::instance()->getDpy(), c_it->second);
	}

	if (_pixmap_handler != NULL) {
		delete _pixmap_handler;
	}

	_instance = NULL;
}


syntax highlighted by Code2HTML, v. 0.9.1