/*
* This file is a part of the Cairo-Dock project
*
* Copyright : (C) see the 'copyright' file.
* E-mail : see the 'copyright' file.
*
* 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 3
* 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 .
*/
#ifndef __CAIRO_DOCK_ICON_MANAGER__
#define __CAIRO_DOCK_ICON_MANAGER__
#include
#include "cairo-dock-struct.h"
#include "cairo-dock-manager.h"
#include "cairo-dock-surface-factory.h" // CairoDockLabelDescription
#include "cairo-dock-icon-factory.h" // CairoDockIconGroup
G_BEGIN_DECLS
/**
*@file cairo-dock-icon-manager.h This class manages the icons parameters and their associated ressources.
*
* Specialized Icons are handled by the corresponding manager.
*/
typedef struct _CairoIconsParam CairoIconsParam;
typedef struct _CairoIconsManager CairoIconsManager;
#ifndef _MANAGER_DEF_
extern CairoIconsParam myIconsParam;
extern CairoIconsManager myIconsMgr;
#endif
#define CAIRO_DOCK_DEFAULT_ICON_SIZE 128
// params
typedef enum {
CAIRO_DOCK_NORMAL_SEPARATOR,
CAIRO_DOCK_FLAT_SEPARATOR,
CAIRO_DOCK_PHYSICAL_SEPARATOR,
CAIRO_DOCK_NB_SEPARATOR_TYPES
} CairoDockSpeparatorType;
struct _CairoIconsParam {
// icons
CairoDockIconGroup tIconTypeOrder[CAIRO_DOCK_NB_GROUPS];
gdouble fReflectHeightRatio;
gdouble fAlbedo;
gdouble fAmplitude;
gint iSinusoidWidth;
gint iIconGap;
gint iStringLineWidth;
gdouble fStringColor[4];
gdouble fAlphaAtRest;
///gdouble fReflectSize;
gchar *cIconTheme;
gchar *cBackgroundImagePath;
gint iIconWidth; // default icon size
gint iIconHeight;
// separators
CairoDockSpeparatorType iSeparatorType;
gint iSeparatorWidth;
gint iSeparatorHeight;
gchar *cSeparatorImage;
gboolean bRevolveSeparator;
gboolean bConstantSeparatorSize;
gdouble fSeparatorColor[4];
// labels
CairoDockLabelDescription iconTextDescription;
CairoDockLabelDescription quickInfoTextDescription;
gboolean bLabelForPointedIconOnly;
gint iLabelSize; // taille des etiquettes des icones, en prenant en compte le contour et la marge.
gdouble fLabelAlphaThreshold;
gboolean bTextAlwaysHorizontal;
};
// manager
struct _CairoIconsManager {
GldiManager mgr;
void (*free_icon) (Icon *icon);
void (*foreach_icons) (CairoDockForeachIconFunc pFunction, gpointer pUserData);
void (*hide_show_launchers_on_other_desktops) (CairoDock *pDock);
void (*set_specified_desktop_for_icon) (Icon *pIcon, int iSpecificDesktop);
} ;
/// signals
typedef enum {
/// notification called when an icon's sub-dock is starting to (un)fold. data : {Icon}
NOTIFICATION_UNFOLD_SUBDOCK = NB_NOTIFICATIONS_OBJECT,
/// notification called when an icon is updated in the fast rendering loop.
NOTIFICATION_UPDATE_ICON,
/// notification called when an icon is updated in the slow rendering loop.
NOTIFICATION_UPDATE_ICON_SLOW,
/// notification called when the background of an icon is rendered.
NOTIFICATION_PRE_RENDER_ICON,
/// notification called when an icon is rendered.
NOTIFICATION_RENDER_ICON,
/// notification called when an icon is stopped, for instance before it is removed.
NOTIFICATION_STOP_ICON,
/// notification called when someone asks for an animation for a given icon.
NOTIFICATION_REQUEST_ICON_ANIMATION,
///
NB_NOTIFICATIONS_ICON
} CairoIconNotifications;
/** Execute an action on all icons.
*@param pFunction the action.
*@param pUserData data passed to the callback.
*/
void gldi_icons_foreach (CairoDockForeachIconFunc pFunction, gpointer pUserData);
void cairo_dock_hide_show_launchers_on_other_desktops (void);
void cairo_dock_set_specified_desktop_for_icon (Icon *pIcon, int iSpecificDesktop);
/** Search the icon size of a GtkIconSize.
* @param iIconSize a GtkIconSize
* @return the maximum between the width and the height of the icon size in pixel (or 128 if there is a problem)
*/
gint cairo_dock_search_icon_size (GtkIconSize iIconSize);
/** Search the path of an icon into the defined icons themes. It also handles the '~' caracter in paths.
* @param cFileName name of the icon file.
* @param iDesiredIconSize desired icon size if we use icons from user icons theme.
* @return the complete path of the icon, or NULL if not found.
*/
gchar *cairo_dock_search_icon_s_path (const gchar *cFileName, gint iDesiredIconSize);
void cairo_dock_add_path_to_icon_theme (const gchar *cPath);
void cairo_dock_remove_path_from_icon_theme (const gchar *cPath);
void gldi_register_icons_manager (void);
G_END_DECLS
#endif