/*
 *  Window Maker window manager
 *
 *  Copyright (c) 1997-2003 Alfredo K. Kojima
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License along
 *  with this program; if not, see <https://www.gnu.org/licenses/>.
 */


#ifndef WMICON_H_
#define WMICON_H_

#include "wcore.h"
#include "window.h"

#define TILE_NORMAL	0
#define TILE_CLIP	1
#define TILE_DRAWER	2

/* This is the border, in pixel, drawn around a Mini-Preview */
#define MINIPREVIEW_BORDER 1

typedef struct WIcon {
	WCoreWindow 	*core;
	WWindow 	*owner;		/* owner window */
	char 		*icon_name;	/* the icon name hint */

	Window 		icon_win;	/* client suplied icon window */

	char		*file;		/* the file with the icon image */
	RImage 		*file_image;	/* the image from the file */

	unsigned int 	tile_type:4;
	unsigned int 	show_title:1;
	unsigned int 	selected:1;
	unsigned int	step:3;		/* selection cycle step */
	unsigned int	shadowed:1;	/* If the icon is to be blured */
	unsigned int 	mapped:1;
	unsigned int	highlighted:1;

	Pixmap 		pixmap;
	Pixmap		mini_preview;

	WMHandlerID	handlerID;	/* timer handler ID for cycling select
					 * color */
} WIcon;

WIcon *icon_create_for_dock(WScreen *scr, const char *command, const char *wm_instance, const char *wm_class, int tile);
WIcon *icon_create_for_wwindow(WWindow *wwin);

void set_icon_image_from_database(WIcon *icon, const char *wm_instance, const char *wm_class, const char *command);
void wIconDestroy(WIcon *icon);
void wIconPaint(WIcon *icon);
void wIconUpdate(WIcon *icon);
void wIconSelect(WIcon *icon);
void wIconChangeTitle(WIcon *icon, WWindow *wwin);
void update_icon_pixmap(WIcon *icon);

int wIconChangeImageFile(WIcon *icon, const char *file);

RImage *wIconValidateIconSize(RImage *icon, int max_size);
RImage *get_rimage_icon_from_wm_hints(WIcon *icon);

char *wIconStore(WIcon *icon);
char *get_name_for_instance_class(const char *wm_instance, const char *wm_class);

void wIconSetHighlited(WIcon *icon, Bool flag);
void set_icon_image_from_image(WIcon *icon, RImage *image);
void set_icon_minipreview(WIcon *icon, RImage *image);

void remove_cache_icon(char *filename);
#endif /* WMICON_H_ */
