Implemented the integer entries.
This commit is contained in:
parent
d42864c696
commit
70635858bd
|
@ -27,6 +27,7 @@ struct colorDialog {
|
||||||
};
|
};
|
||||||
|
|
||||||
// both of these are from the wikipedia page on HSV
|
// both of these are from the wikipedia page on HSV
|
||||||
|
// TODO what to do about negative h?
|
||||||
static void rgb2HSV(double r, double g, double b, double *h, double *s, double *v)
|
static void rgb2HSV(double r, double g, double b, double *h, double *s, double *v)
|
||||||
{
|
{
|
||||||
double M, m;
|
double M, m;
|
||||||
|
@ -56,8 +57,7 @@ static void rgb2HSV(double r, double g, double b, double *h, double *s, double *
|
||||||
switch (whichmax) {
|
switch (whichmax) {
|
||||||
case 0:
|
case 0:
|
||||||
*h = ((g - b) / c);
|
*h = ((g - b) / c);
|
||||||
if (*h > 6)
|
*h = fmod(*h, 6);
|
||||||
*h -= 6;
|
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
*h = ((b - r) / c) + 2;
|
*h = ((b - r) / c) + 2;
|
||||||
|
@ -635,6 +635,70 @@ static void aDoubleChanged(struct colorDialog *c)
|
||||||
updateDialog(c, c->editADouble);
|
updateDialog(c, c->editADouble);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int editInt(HWND hwnd)
|
||||||
|
{
|
||||||
|
WCHAR *s;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
s = windowText(hwnd);
|
||||||
|
i = _wtoi(s);
|
||||||
|
uiFree(s);
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void rIntChanged(struct colorDialog *c)
|
||||||
|
{
|
||||||
|
double r, g, b;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
hsv2RGB(c->h, c->s, c->v, &r, &g, &b);
|
||||||
|
i = editInt(c->editRInt);
|
||||||
|
if (i < 0 || i > 255)
|
||||||
|
return;
|
||||||
|
r = ((double) i) / 255.0;
|
||||||
|
rgb2HSV(r, g, b, &(c->h), &(c->s), &(c->v));
|
||||||
|
updateDialog(c, c->editRInt);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void gIntChanged(struct colorDialog *c)
|
||||||
|
{
|
||||||
|
double r, g, b;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
hsv2RGB(c->h, c->s, c->v, &r, &g, &b);
|
||||||
|
i = editInt(c->editGInt);
|
||||||
|
if (i < 0 || i > 255)
|
||||||
|
return;
|
||||||
|
g = ((double) i) / 255.0;
|
||||||
|
rgb2HSV(r, g, b, &(c->h), &(c->s), &(c->v));
|
||||||
|
updateDialog(c, c->editGInt);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void bIntChanged(struct colorDialog *c)
|
||||||
|
{
|
||||||
|
double r, g, b;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
hsv2RGB(c->h, c->s, c->v, &r, &g, &b);
|
||||||
|
i = editInt(c->editBInt);
|
||||||
|
if (i < 0 || i > 255)
|
||||||
|
return;
|
||||||
|
b = ((double) i) / 255.0;
|
||||||
|
rgb2HSV(r, g, b, &(c->h), &(c->s), &(c->v));
|
||||||
|
updateDialog(c, c->editBInt);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void aIntChanged(struct colorDialog *c)
|
||||||
|
{
|
||||||
|
int a;
|
||||||
|
|
||||||
|
a = editInt(c->editAInt);
|
||||||
|
if (a < 0 || a > 255)
|
||||||
|
return;
|
||||||
|
c->a = ((double) a) / 255;
|
||||||
|
updateDialog(c, c->editAInt);
|
||||||
|
}
|
||||||
|
|
||||||
// TODO change fontdialog to use this
|
// TODO change fontdialog to use this
|
||||||
// note that if we make this const, we get lots of weird compiler errors
|
// note that if we make this const, we get lots of weird compiler errors
|
||||||
static std::map<int, void (*)(struct colorDialog *)> changed = {
|
static std::map<int, void (*)(struct colorDialog *)> changed = {
|
||||||
|
@ -645,6 +709,10 @@ static std::map<int, void (*)(struct colorDialog *)> changed = {
|
||||||
{ rcGDouble, gDoubleChanged },
|
{ rcGDouble, gDoubleChanged },
|
||||||
{ rcBDouble, bDoubleChanged },
|
{ rcBDouble, bDoubleChanged },
|
||||||
{ rcADouble, aDoubleChanged },
|
{ rcADouble, aDoubleChanged },
|
||||||
|
{ rcRInt, rIntChanged },
|
||||||
|
{ rcGInt, gIntChanged },
|
||||||
|
{ rcBInt, bIntChanged },
|
||||||
|
{ rcAInt, aIntChanged },
|
||||||
};
|
};
|
||||||
|
|
||||||
static INT_PTR CALLBACK colorDialogDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
static INT_PTR CALLBACK colorDialogDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
|
@ -678,6 +746,10 @@ static INT_PTR CALLBACK colorDialogDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam,
|
||||||
case rcGDouble:
|
case rcGDouble:
|
||||||
case rcBDouble:
|
case rcBDouble:
|
||||||
case rcADouble:
|
case rcADouble:
|
||||||
|
case rcRInt:
|
||||||
|
case rcGInt:
|
||||||
|
case rcBInt:
|
||||||
|
case rcAInt:
|
||||||
if (HIWORD(wParam) != EN_CHANGE)
|
if (HIWORD(wParam) != EN_CHANGE)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (c->updating) // prevent infinite recursion during an update
|
if (c->updating) // prevent infinite recursion during an update
|
||||||
|
|
Loading…
Reference in New Issue