#ifndef _NULLSOFT_WINAMP_ML_DEVICES_WIDGETSTYLE_HEADER #define _NULLSOFT_WINAMP_ML_DEVICES_WIDGETSTYLE_HEADER #if defined(_MSC_VER) && (_MSC_VER >= 1020) #pragma once #endif #include typedef struct WidgetStyle WidgetStyle; typedef enum WidgetStyleFlags WidgetStyleFlags; typedef enum WidgetStyleAssignFlags WidgetStyleAssignFlags; enum WidgetStyleFlags { WIDGETSTYLE_OWN_TEXT_FONT = (1 << 0), WIDGETSTYLE_OWN_TITLE_FONT = (1 << 1), WIDGETSTYLE_OWN_CATEGORY_FONT = (1 << 2), WIDGETSTYLE_OWN_BACK_BRUSH = (1 << 3), WIDGETSTYLE_OWN_CATEGORY_BRUSH = (1 << 4), }; DEFINE_ENUM_FLAG_OPERATORS(WidgetStyleFlags); enum WidgetStyleAssignFlags { WIDGETSTYLE_LINK_OBJECT = 0, WIDGETSTYLE_COPY_OBJECT = (1 << 0), WIDGETSTYLE_OWN_OBJECT = (1 << 1), }; DEFINE_ENUM_FLAG_OPERATORS(WidgetStyleAssignFlags); struct WidgetStyle { WidgetStyleFlags flags; HFONT textFont; HFONT titleFont; HFONT categoryFont; HBRUSH backBrush; HBRUSH categoryBrush; COLORREF titleColor; COLORREF textColor; COLORREF backColor; COLORREF borderColor; COLORREF imageBackColor; COLORREF imageFrontColor; COLORREF selectBackColor; COLORREF selectFrontColor; COLORREF inactiveSelectBackColor; COLORREF inactiveSelectFrontColor; COLORREF categoryTextColor; COLORREF categoryLineColor; COLORREF categoryBackColor; COLORREF categoryEmptyTextColor; COLORREF textEditorBorderColor; SIZE unitSize; }; #define DLU_TO_PX_VALIDATE_MIN(_value, _dlu, _min)\ {if (0 != (_dlu) && ((_value) < (_min))) (_value) = (_min);} #define WIDGETSTYLE_DLU_TO_HORZ_PX(_style, _dlu) MulDiv((_dlu), ((WidgetStyle*)(_style))->unitSize.cx, 4) #define WIDGETSTYLE_DLU_TO_VERT_PX(_style, _dlu) MulDiv((_dlu), ((WidgetStyle*)(_style))->unitSize.cy, 8) #define WIDGETSTYLE_DLU_TO_HORZ_PX_MIN(_value, _style, _dlu, _min)\ {_value = WIDGETSTYLE_DLU_TO_HORZ_PX(_style, _dlu); DLU_TO_PX_VALIDATE_MIN(_value, _dlu, _min);} #define WIDGETSTYLE_DLU_TO_VERT_PX_MIN(_value, _style, _dlu, _min)\ {_value = WIDGETSTYLE_DLU_TO_VERT_PX(_style, _dlu); DLU_TO_PX_VALIDATE_MIN(_value, _dlu, _min);} #define WIDGETSTYLE_TITLE_FONT(_style) (((WidgetStyle*)(_style))->titleFont) #define WIDGETSTYLE_TEXT_FONT(_style) (((WidgetStyle*)(_style))->textFont) #define WIDGETSTYLE_CATEGORY_FONT(_style) (((WidgetStyle*)(_style))->categoryFont) #define WIDGETSTYLE_BACK_BRUSH(_style) (((WidgetStyle*)(_style))->backBrush) #define WIDGETSTYLE_CATEGORY_BRUSH(_style) (((WidgetStyle*)(_style))->categoryBrush) #define WIDGETSTYLE_TITLE_COLOR(_style) (((WidgetStyle*)(_style))->titleColor) #define WIDGETSTYLE_TEXT_COLOR(_style) (((WidgetStyle*)(_style))->textColor) #define WIDGETSTYLE_BACK_COLOR(_style) (((WidgetStyle*)(_style))->backColor) #define WIDGETSTYLE_BORDER_COLOR(_style) (((WidgetStyle*)(_style))->borderColor) #define WIDGETSTYLE_IMAGE_BACK_COLOR(_style) (((WidgetStyle*)(_style))->imageBackColor) #define WIDGETSTYLE_IMAGE_FRONT_COLOR(_style) (((WidgetStyle*)(_style))->imageFrontColor) #define WIDGETSTYLE_SELECT_BACK_COLOR(_style) (((WidgetStyle*)(_style))->selectBackColor) #define WIDGETSTYLE_SELECT_FRONT_COLOR(_style) (((WidgetStyle*)(_style))->selectFrontColor) #define WIDGETSTYLE_INACTIVE_SELECT_BACK_COLOR(_style) (((WidgetStyle*)(_style))->inactiveSelectBackColor) #define WIDGETSTYLE_INACTIVE_SELECT_FRONT_COLOR(_style) (((WidgetStyle*)(_style))->inactiveSelectFrontColor) #define WIDGETSTYLE_CATEGORY_TEXT_COLOR(_style) (((WidgetStyle*)(_style))->categoryTextColor) #define WIDGETSTYLE_CATEGORY_BACK_COLOR(_style) (((WidgetStyle*)(_style))->categoryBackColor) #define WIDGETSTYLE_CATEGORY_LINE_COLOR(_style) (((WidgetStyle*)(_style))->categoryLineColor) #define WIDGETSTYLE_CATEGORY_EMPTY_TEXT_COLOR(_style) (((WidgetStyle*)(_style))->categoryEmptyTextColor) #define WIDGETSTYLE_TEXT_EDITOR_BORDER_COLOR(_style) (((WidgetStyle*)(_style))->textEditorBorderColor) #define WIDGETSTYLE_SET_UNIT_SIZE(_style, _width, _height)\ {(((WidgetStyle*)(_style))->unitSize).cx = _width;\ (((WidgetStyle*)(_style))->unitSize).cy = _height;} #define WIDGETSTYLE_SET_TITLE_FONT(_style, _font, _flags)\ WidgetStyle_SetTitleFont(((WidgetStyle*)(_style)), (_font), (_flags)) #define WIDGETSTYLE_SET_TEXT_FONT(_style, _font, _flags)\ WidgetStyle_SetTextFont(((WidgetStyle*)(_style)), (_font), (_flags)) #define WIDGETSTYLE_SET_CATEGORY_FONT(_style, _font, _flags)\ WidgetStyle_SetCategoryFont(((WidgetStyle*)(_style)), (_font), (_flags)) #define WIDGETSTYLE_SET_BACK_BRUSH(_style, _brush, _flags)\ WidgetStyle_SetBackBrush(((WidgetStyle*)(_style)), (_brush), (_flags)) #define WIDGETSTYLE_SET_CATEGORY_BRUSH(_style, _brush, _flags)\ WidgetStyle_SetCategoryBrush(((WidgetStyle*)(_style)), (_brush), (_flags)) #define WIDGETSTYLE_SET_TITLE_COLOR(_style, _color) (((WidgetStyle*)(_style))->titleColor = (_color)) #define WIDGETSTYLE_SET_TEXT_COLOR(_style, _color) (((WidgetStyle*)(_style))->textColor = (_color)) #define WIDGETSTYLE_SET_BACK_COLOR(_style, _color) (((WidgetStyle*)(_style))->backColor = (_color)) #define WIDGETSTYLE_SET_BORDER_COLOR(_style, _color) (((WidgetStyle*)(_style))->borderColor = (_color)) #define WIDGETSTYLE_SET_IMAGE_BACK_COLOR(_style, _color) (((WidgetStyle*)(_style))->imageBackColor = (_color)) #define WIDGETSTYLE_SET_IMAGE_FRONT_COLOR(_style, _color) (((WidgetStyle*)(_style))->imageFrontColor = (_color)) #define WIDGETSTYLE_SET_SELECT_BACK_COLOR(_style, _color) (((WidgetStyle*)(_style))->selectBackColor = (_color)) #define WIDGETSTYLE_SET_SELECT_FRONT_COLOR(_style, _color) (((WidgetStyle*)(_style))->selectFrontColor = (_color)) #define WIDGETSTYLE_SET_INACTIVE_SELECT_BACK_COLOR(_style, _color) (((WidgetStyle*)(_style))->inactiveSelectBackColor = (_color)) #define WIDGETSTYLE_SET_INACTIVE_SELECT_FRONT_COLOR(_style, _color) (((WidgetStyle*)(_style))->inactiveSelectFrontColor = (_color)) #define WIDGETSTYLE_SET_CATEGORY_TEXT_COLOR(_style, _color) (((WidgetStyle*)(_style))->categoryTextColor = (_color)) #define WIDGETSTYLE_SET_CATEGORY_BACK_COLOR(_style, _color) (((WidgetStyle*)(_style))->categoryBackColor = (_color)) #define WIDGETSTYLE_SET_CATEGORY_LINE_COLOR(_style, _color) (((WidgetStyle*)(_style))->categoryLineColor = (_color)) #define WIDGETSTYLE_SET_CATEGORY_EMPTY_TEXT_COLOR(_style, _color) (((WidgetStyle*)(_style))->categoryEmptyTextColor = (_color)) #define WIDGETSTYLE_SET_TEXT_EDITOR_BORDER_COLOR(_style, _color) (((WidgetStyle*)(_style))->textEditorBorderColor = (_color)) void WidgetStyle_Free(WidgetStyle *self); BOOL WidgetStyle_SetBackBrush(WidgetStyle *self, HBRUSH brush, WidgetStyleAssignFlags flags); BOOL WidgetStyle_SetCategoryBrush(WidgetStyle *self, HBRUSH brush, WidgetStyleAssignFlags flags); BOOL WidgetStyle_SetTextFont(WidgetStyle *self, HFONT font, WidgetStyleAssignFlags flags); BOOL WidgetStyle_SetTitleFont(WidgetStyle *self, HFONT font, WidgetStyleAssignFlags flags); BOOL WidgetStyle_SetCategoryFont(WidgetStyle *self, HFONT font, WidgetStyleAssignFlags flags); BOOL WidgetStyle_UpdateDefaultColors(WidgetStyle *style); BOOL WidgetStyle_UpdateDefaultFonts(WidgetStyle *style, HFONT baseFont, long unitWidth, long unitHeight); #endif //_NULLSOFT_WINAMP_ML_DEVICES_WIDGETSTYLE_HEADER