mirror of
https://github.com/WinampDesktop/winamp.git
synced 2024-12-29 18:06:05 +00:00
146 lines
3.8 KiB
C
146 lines
3.8 KiB
C
|
#pragma once
|
||
|
#include <api/skin/colorthemes.h>
|
||
|
#include <api/service/svcs/svc_skinfilter.h>
|
||
|
#include <vector>
|
||
|
#include <api/skin/api_colorthemes.h>
|
||
|
|
||
|
class ColorThemeGroupI : public ColorThemeGroup
|
||
|
{
|
||
|
public:
|
||
|
ColorThemeGroupI(const wchar_t *pname, int pred, int pgreen, int pblue, int pgray, int pboost)
|
||
|
: name(0), red(pred), green(pgreen), blue(pblue), make_grayscale(pgray), boost_levels(pboost)
|
||
|
{
|
||
|
name = _wcsdup(pname);
|
||
|
}
|
||
|
~ColorThemeGroupI()
|
||
|
{
|
||
|
free(name);
|
||
|
}
|
||
|
ColorThemeGroupI(ColorThemeGroup ©_group)
|
||
|
{
|
||
|
name = _wcsdup(copy_group.getName());
|
||
|
red = copy_group.getRed();
|
||
|
green = copy_group.getGreen();
|
||
|
blue = copy_group.getBlue();
|
||
|
make_grayscale = copy_group.getGray();
|
||
|
boost_levels = copy_group.getBoost();
|
||
|
}
|
||
|
const wchar_t *getName() { return name; }
|
||
|
int getRed() { return red; }
|
||
|
int getGreen() { return green; }
|
||
|
int getBlue() { return blue; }
|
||
|
int getGray() { return make_grayscale; }
|
||
|
int getBoost() { return boost_levels; }
|
||
|
void setName(const wchar_t *pname) { free(name); name = _wcsdup(pname); }
|
||
|
void setRed(int r) { red = r; }
|
||
|
void setGreen(int g) { green = g; }
|
||
|
void setBlue(int b) { blue = b; }
|
||
|
void setGray(int g) { make_grayscale = g; }
|
||
|
void setBoost(int b) { boost_levels = b; }
|
||
|
|
||
|
protected:
|
||
|
RECVS_DISPATCH;
|
||
|
|
||
|
wchar_t *name;
|
||
|
int red;
|
||
|
int green;
|
||
|
int blue;
|
||
|
int make_grayscale;
|
||
|
int boost_levels;
|
||
|
};
|
||
|
|
||
|
static bool IsKeyword(const wchar_t *a, const wchar_t *b)
|
||
|
{
|
||
|
return (CompareStringW(MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT), NORM_IGNORECASE, a, -1, b, -1) == CSTR_EQUAL);
|
||
|
|
||
|
}
|
||
|
class GammaSet
|
||
|
{
|
||
|
public:
|
||
|
GammaSet( const wchar_t *pname ) : name( 0 ), generalgroup( L"General", 0, 0, 0, 0, 0 )
|
||
|
{
|
||
|
name = _wcsdup( pname );
|
||
|
}
|
||
|
|
||
|
~GammaSet()
|
||
|
{
|
||
|
//gammagroups.deleteAll();
|
||
|
for ( ColorThemeGroupI *obj : gammagroups )
|
||
|
delete obj;
|
||
|
|
||
|
gammagroups.clear();
|
||
|
|
||
|
free( name );
|
||
|
}
|
||
|
|
||
|
int haveGroup( const wchar_t *grp )
|
||
|
{
|
||
|
if ( !grp )
|
||
|
return 0;
|
||
|
|
||
|
for ( ColorThemeGroupI *obj : gammagroups )
|
||
|
{
|
||
|
if ( IsKeyword( grp, obj->getName() ) )
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
void SetName( const wchar_t *newname )
|
||
|
{
|
||
|
free( name );
|
||
|
name = _wcsdup( newname );
|
||
|
}
|
||
|
wchar_t *name;
|
||
|
std::vector<ColorThemeGroupI *> gammagroups;
|
||
|
ColorThemeGroupI generalgroup;
|
||
|
};
|
||
|
|
||
|
|
||
|
class GammaManagerAPI : public api_colorthemes
|
||
|
{
|
||
|
public:
|
||
|
static const char *getServiceName() { return "Color Themes API"; }
|
||
|
static const GUID getServiceGuid() { return ColorThemesAPIGUID; }
|
||
|
GammaManagerAPI();
|
||
|
|
||
|
void StartTransaction();
|
||
|
void EndTransaction();
|
||
|
|
||
|
/* Gamma Sets */
|
||
|
size_t getNumGammaSets();
|
||
|
const wchar_t *enumGammaSet(size_t n);
|
||
|
void deleteGammaSet(const wchar_t *set);
|
||
|
void deleteAllGammaSets();
|
||
|
void resetGammaSet(const wchar_t *set);
|
||
|
void renameGammaSet(const wchar_t *set, const wchar_t *newname);
|
||
|
size_t newGammaSet(const wchar_t *set); // returns index of your new gamma group
|
||
|
void updateGammaSet(const wchar_t *set);
|
||
|
|
||
|
|
||
|
/* Gamma Groups */
|
||
|
int getNumGammaGroups(const wchar_t *gammaset);
|
||
|
const wchar_t *enumGammaGroup(const wchar_t *gammaset, int n);
|
||
|
ColorThemeGroup *enumColorThemeGroup(int colorset, int colorgroup);
|
||
|
ColorThemeGroup *getColorThemeGroup(const wchar_t *colorset, const wchar_t *colorgroup);
|
||
|
int getGammaForGroup(const wchar_t *group, int *r, int *g, int *b, int *gray, int *boost);
|
||
|
void addGammaGroup(const wchar_t *set, ColorThemeGroup *group);
|
||
|
void addGammaGroup2(size_t gammaSetIndex, ColorThemeGroup *group);
|
||
|
|
||
|
/* Active Gamma Set */
|
||
|
const wchar_t *getGammaSet();
|
||
|
void setGammaSet(const wchar_t *set);
|
||
|
|
||
|
protected:
|
||
|
RECVS_DISPATCH;
|
||
|
|
||
|
private:
|
||
|
void setGammaSetInternal(GammaSet *set);
|
||
|
|
||
|
std::vector<GammaSet*> gammasets;
|
||
|
GammaSet *curSetSel; // current color theme
|
||
|
size_t inTransaction;
|
||
|
};
|
||
|
|