Initial community commit
This commit is contained in:
parent
537bcbc862
commit
fc06254474
16440 changed files with 4239995 additions and 2 deletions
261
Src/Plugins/Library/ml_devices/widgetStyle.cpp
Normal file
261
Src/Plugins/Library/ml_devices/widgetStyle.cpp
Normal file
|
@ -0,0 +1,261 @@
|
|||
#include "main.h"
|
||||
#include "./widgetStyle.h"
|
||||
|
||||
static void
|
||||
WidgetStyle_DeleteGdiObject(UINT flags, UINT flagsMask, HGDIOBJ object)
|
||||
{
|
||||
if (NULL != object && 0 != (flagsMask & flags))
|
||||
DeleteObject(object);
|
||||
}
|
||||
|
||||
|
||||
static BOOL
|
||||
WidgetStyle_SetBrushInt(HBRUSH *brush, WidgetStyleFlags *flags, WidgetStyleFlags flagsMask,
|
||||
HBRUSH sourceBrush, WidgetStyleAssignFlags assignFlags)
|
||||
{
|
||||
LOGBRUSH lb;
|
||||
|
||||
WidgetStyle_DeleteGdiObject(*flags, flagsMask, *brush);
|
||||
|
||||
if (0 == (WIDGETSTYLE_COPY_OBJECT & assignFlags))
|
||||
{
|
||||
if (0 == (WIDGETSTYLE_OWN_OBJECT & assignFlags))
|
||||
*flags &= ~flagsMask;
|
||||
else
|
||||
*flags |= flagsMask;
|
||||
|
||||
*brush = sourceBrush;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
*brush = (sizeof(lb) == GetObjectW(sourceBrush, sizeof(lb), &lb)) ?
|
||||
CreateBrushIndirect(&lb) : NULL;
|
||||
|
||||
if (NULL == *brush)
|
||||
{
|
||||
*flags &= ~flagsMask;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
*flags |= flagsMask;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static BOOL
|
||||
WidgetStyle_SetFontInt(HFONT *font, WidgetStyleFlags *flags, WidgetStyleFlags flagsMask,
|
||||
HFONT sourceFont, WidgetStyleAssignFlags assignFlags)
|
||||
{
|
||||
LOGFONTW lf = {0};
|
||||
WidgetStyle_DeleteGdiObject(*flags, flagsMask, *font);
|
||||
|
||||
if (0 == (WIDGETSTYLE_COPY_OBJECT & assignFlags))
|
||||
{
|
||||
if (0 == (WIDGETSTYLE_OWN_OBJECT & assignFlags))
|
||||
*flags &= ~flagsMask;
|
||||
else
|
||||
*flags |= flagsMask;
|
||||
|
||||
*font = sourceFont;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
*font = (sizeof(lf) == GetObjectW(sourceFont, sizeof(lf), &lf)) ? CreateFontIndirectW(&lf) : NULL;
|
||||
|
||||
if (NULL == *font)
|
||||
{
|
||||
*flags &= ~flagsMask;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
*flags |= flagsMask;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
WidgetStyle_Free(WidgetStyle *self)
|
||||
{
|
||||
if (NULL == self)
|
||||
return;
|
||||
|
||||
WidgetStyle_DeleteGdiObject(self->flags, WIDGETSTYLE_OWN_TEXT_FONT, self->textFont);
|
||||
WidgetStyle_DeleteGdiObject(self->flags, WIDGETSTYLE_OWN_TITLE_FONT, self->titleFont);
|
||||
WidgetStyle_DeleteGdiObject(self->flags, WIDGETSTYLE_OWN_CATEGORY_FONT, self->categoryFont);
|
||||
WidgetStyle_DeleteGdiObject(self->flags, WIDGETSTYLE_OWN_BACK_BRUSH, self->backBrush);
|
||||
WidgetStyle_DeleteGdiObject(self->flags, WIDGETSTYLE_OWN_CATEGORY_BRUSH, self->categoryBrush);
|
||||
}
|
||||
|
||||
BOOL
|
||||
WidgetStyle_SetBackBrush(WidgetStyle *self, HBRUSH brush, WidgetStyleAssignFlags flags)
|
||||
{
|
||||
return WidgetStyle_SetBrushInt(&self->backBrush, &self->flags,
|
||||
WIDGETSTYLE_OWN_BACK_BRUSH, brush, flags);
|
||||
}
|
||||
|
||||
BOOL
|
||||
WidgetStyle_SetCategoryBrush(WidgetStyle *self, HBRUSH brush, WidgetStyleAssignFlags flags)
|
||||
{
|
||||
return WidgetStyle_SetBrushInt(&self->categoryBrush, &self->flags,
|
||||
WIDGETSTYLE_OWN_CATEGORY_BRUSH, brush, flags);
|
||||
}
|
||||
|
||||
BOOL
|
||||
WidgetStyle_SetTextFont(WidgetStyle *self, HFONT font, WidgetStyleAssignFlags flags)
|
||||
{
|
||||
return WidgetStyle_SetFontInt(&self->textFont, &self->flags,
|
||||
WIDGETSTYLE_OWN_TEXT_FONT, font, flags);
|
||||
|
||||
}
|
||||
|
||||
BOOL
|
||||
WidgetStyle_SetTitleFont(WidgetStyle *self, HFONT font, WidgetStyleAssignFlags flags)
|
||||
{
|
||||
return WidgetStyle_SetFontInt(&self->titleFont, &self->flags,
|
||||
WIDGETSTYLE_OWN_TITLE_FONT, font, flags);
|
||||
|
||||
}
|
||||
|
||||
BOOL
|
||||
WidgetStyle_SetCategoryFont(WidgetStyle *self, HFONT font, WidgetStyleAssignFlags flags)
|
||||
{
|
||||
return WidgetStyle_SetFontInt(&self->categoryFont, &self->flags,
|
||||
WIDGETSTYLE_OWN_CATEGORY_FONT, font, flags);
|
||||
|
||||
}
|
||||
|
||||
static COLORREF
|
||||
WidgetStyle_GetCategoryLineColor(COLORREF categoryBackColor)
|
||||
{
|
||||
COLORREF categoryLineColor;
|
||||
size_t index;
|
||||
|
||||
const int categoryLineColors[] =
|
||||
{
|
||||
WADLG_LISTHEADER_FRAME_MIDDLECOLOR,
|
||||
WADLG_LISTHEADER_FRAME_BOTTOMCOLOR,
|
||||
WADLG_LISTHEADER_FRAME_TOPCOLOR,
|
||||
WADLG_HILITE,
|
||||
};
|
||||
|
||||
for (index = 0; index < ARRAYSIZE(categoryLineColors); index++)
|
||||
{
|
||||
categoryLineColor = Graphics_GetSkinColor(categoryLineColors[index]);
|
||||
int distance = Graphics_GetColorDistance(categoryLineColor, categoryBackColor);
|
||||
if (distance < 0) distance = -distance;
|
||||
if (distance >= 40) break;
|
||||
}
|
||||
|
||||
return categoryLineColor;
|
||||
}
|
||||
|
||||
static COLORREF
|
||||
WidgetStyle_GetBorderColor(COLORREF backColor, COLORREF textColor)
|
||||
{
|
||||
COLORREF borderColor;
|
||||
|
||||
for(int step = 0;; step++)
|
||||
{
|
||||
switch(step)
|
||||
{
|
||||
case 0:
|
||||
borderColor = Graphics_GetSkinColor(WADLG_HILITE);
|
||||
break;
|
||||
case 1:
|
||||
borderColor = Graphics_BlendColors(Graphics_GetSkinColor(WADLG_SELBAR_FGCOLOR), Graphics_GetSkinColor(WADLG_SELBAR_BGCOLOR), 17);
|
||||
borderColor = Graphics_BlendColors(borderColor, backColor, 229);
|
||||
break;
|
||||
default:
|
||||
return textColor;
|
||||
}
|
||||
|
||||
int distance = Graphics_GetColorDistance(borderColor, backColor);
|
||||
if (distance < 0) distance = -distance;
|
||||
if (distance >= 40)
|
||||
break;
|
||||
}
|
||||
|
||||
return borderColor;
|
||||
}
|
||||
|
||||
BOOL
|
||||
WidgetStyle_UpdateDefaultColors(WidgetStyle *style)
|
||||
{
|
||||
#define WIDGETSTYLE_SET_COLOR(_colorName, _color)\
|
||||
{COLORREF _colorCopy = (_color);\
|
||||
if (WIDGETSTYLE_##_colorName##_COLOR(style) != _colorCopy)\
|
||||
{WIDGETSTYLE_SET_##_colorName##_COLOR(style, _colorCopy);\
|
||||
styleChanged = TRUE;}}
|
||||
|
||||
#define WIDGETSTYLE_SET_COLOR_BLEND(_colorName, _colorTop, _colorBottom, _alpha)\
|
||||
WIDGETSTYLE_SET_COLOR(_colorName, Graphics_BlendColors((_colorTop), (_colorBottom), (_alpha)))
|
||||
|
||||
|
||||
COLORREF widgetBackColor, widgetTextColor, categoryBackColor, categoryTextColor;
|
||||
BOOL styleChanged;
|
||||
HBRUSH brush;
|
||||
|
||||
if (NULL == style)
|
||||
return FALSE;
|
||||
|
||||
styleChanged = FALSE;
|
||||
|
||||
widgetBackColor = Graphics_GetSkinColor(WADLG_ITEMBG);
|
||||
widgetTextColor = Graphics_GetSkinColor(WADLG_ITEMFG);
|
||||
categoryBackColor = Graphics_GetSkinColor(WADLG_LISTHEADER_BGCOLOR);
|
||||
categoryTextColor = Graphics_GetSkinColor(WADLG_LISTHEADER_FONTCOLOR);
|
||||
|
||||
if (WIDGETSTYLE_BACK_COLOR(style) != widgetBackColor ||
|
||||
NULL == WIDGETSTYLE_BACK_BRUSH(style))
|
||||
{
|
||||
brush = CreateSolidBrush(widgetBackColor);
|
||||
WIDGETSTYLE_SET_BACK_BRUSH(style, brush, WIDGETSTYLE_OWN_OBJECT);
|
||||
styleChanged = TRUE;
|
||||
}
|
||||
|
||||
if (WIDGETSTYLE_CATEGORY_BACK_COLOR(style) != categoryBackColor ||
|
||||
NULL == WIDGETSTYLE_CATEGORY_BRUSH(style))
|
||||
{
|
||||
brush = CreateSolidBrush(categoryBackColor);
|
||||
WIDGETSTYLE_SET_CATEGORY_BRUSH(style, brush, WIDGETSTYLE_OWN_OBJECT);
|
||||
styleChanged = TRUE;
|
||||
}
|
||||
|
||||
WIDGETSTYLE_SET_COLOR(BACK, widgetBackColor);
|
||||
WIDGETSTYLE_SET_COLOR(TEXT, widgetTextColor);
|
||||
WIDGETSTYLE_SET_COLOR_BLEND(TITLE, widgetTextColor, widgetBackColor, 210);
|
||||
WIDGETSTYLE_SET_COLOR(BORDER, WidgetStyle_GetBorderColor(widgetBackColor, widgetTextColor));
|
||||
WIDGETSTYLE_SET_COLOR(IMAGE_BACK, widgetBackColor);
|
||||
WIDGETSTYLE_SET_COLOR(IMAGE_FRONT, widgetTextColor);
|
||||
WIDGETSTYLE_SET_COLOR(SELECT_BACK, Graphics_GetSkinColor(WADLG_SELBAR_BGCOLOR));
|
||||
WIDGETSTYLE_SET_COLOR(SELECT_FRONT, Graphics_GetSkinColor(WADLG_SELBAR_FGCOLOR));
|
||||
WIDGETSTYLE_SET_COLOR_BLEND(INACTIVE_SELECT_BACK, WIDGETSTYLE_SELECT_BACK_COLOR(style), widgetBackColor, 192);
|
||||
WIDGETSTYLE_SET_COLOR_BLEND(INACTIVE_SELECT_FRONT, WIDGETSTYLE_SELECT_FRONT_COLOR(style), widgetBackColor, 192);
|
||||
WIDGETSTYLE_SET_COLOR(CATEGORY_BACK, categoryBackColor);
|
||||
WIDGETSTYLE_SET_COLOR(CATEGORY_TEXT, categoryTextColor);
|
||||
WIDGETSTYLE_SET_COLOR(CATEGORY_LINE, WidgetStyle_GetCategoryLineColor(categoryBackColor));
|
||||
WIDGETSTYLE_SET_COLOR_BLEND(CATEGORY_EMPTY_TEXT, widgetTextColor, widgetBackColor, 210);
|
||||
WIDGETSTYLE_SET_COLOR_BLEND(TEXT_EDITOR_BORDER, widgetTextColor, widgetBackColor, 140);
|
||||
|
||||
return styleChanged;
|
||||
}
|
||||
|
||||
BOOL
|
||||
WidgetStyle_UpdateDefaultFonts(WidgetStyle *style, HFONT baseFont, long unitWidth, long unitHeight)
|
||||
{
|
||||
HFONT tempFont;
|
||||
|
||||
if (NULL == style)
|
||||
return FALSE;
|
||||
|
||||
tempFont = Graphics_DuplicateFont(baseFont, 3, FALSE, TRUE);
|
||||
WIDGETSTYLE_SET_TITLE_FONT(style, tempFont, WIDGETSTYLE_OWN_OBJECT);
|
||||
|
||||
tempFont = Graphics_DuplicateFont(baseFont, 0, FALSE, TRUE);
|
||||
WIDGETSTYLE_SET_CATEGORY_FONT(style, tempFont, WIDGETSTYLE_OWN_OBJECT);
|
||||
|
||||
WIDGETSTYLE_SET_TEXT_FONT(style, baseFont, WIDGETSTYLE_LINK_OBJECT);
|
||||
|
||||
WIDGETSTYLE_SET_UNIT_SIZE(style, unitWidth, unitHeight);
|
||||
|
||||
return TRUE;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue