aboutsummaryrefslogtreecommitdiff
path: root/Src/Winamp/GammaManagerAPI.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Winamp/GammaManagerAPI.h')
-rw-r--r--Src/Winamp/GammaManagerAPI.h145
1 files changed, 145 insertions, 0 deletions
diff --git a/Src/Winamp/GammaManagerAPI.h b/Src/Winamp/GammaManagerAPI.h
new file mode 100644
index 00000000..b60b8d7a
--- /dev/null
+++ b/Src/Winamp/GammaManagerAPI.h
@@ -0,0 +1,145 @@
+#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 &copy_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;
+};
+