Cleanup code from last commit
This commit is contained in:
parent
1dcf9c676d
commit
4656f7fc94
5 changed files with 122 additions and 124 deletions
|
@ -348,7 +348,7 @@ Imlib_Image scale_icon(Imlib_Image original, int icon_size)
|
|||
adjust_asb(data,
|
||||
icon_size,
|
||||
icon_size,
|
||||
launcher_alpha,
|
||||
launcher_alpha / 100.0,
|
||||
launcher_saturation / 100.0,
|
||||
launcher_brightness / 100.0);
|
||||
imlib_image_put_back_data(data);
|
||||
|
|
|
@ -1338,7 +1338,7 @@ void systray_render_icon_composited(void *t)
|
|||
adjust_asb(data,
|
||||
traywin->width,
|
||||
traywin->height,
|
||||
systray.alpha,
|
||||
systray.alpha / 100.0,
|
||||
systray.saturation / 100.0,
|
||||
systray.brightness / 100.0);
|
||||
imlib_image_put_back_data(data);
|
||||
|
|
|
@ -315,7 +315,7 @@ void task_update_icon(Task *task)
|
|||
adjust_asb(data32,
|
||||
task->icon_width,
|
||||
task->icon_height,
|
||||
panel->g_task.alpha[k],
|
||||
panel->g_task.alpha[k] / 100.0,
|
||||
panel->g_task.saturation[k] / 100.0,
|
||||
panel->g_task.brightness[k] / 100.0);
|
||||
imlib_image_put_back_data(data32);
|
||||
|
|
|
@ -238,128 +238,110 @@ void extract_values(const char *value, char **value1, char **value2, char **valu
|
|||
}
|
||||
}
|
||||
|
||||
void adjust_asb(DATA32 *data, int w, int h, int alpha, float satur, float bright)
|
||||
void adjust_asb(DATA32 *data, int w, int h, float alpha_adjust, float satur_adjust, float bright_adjust)
|
||||
{
|
||||
unsigned int x, y;
|
||||
unsigned int argb;
|
||||
int a, r, g, b;
|
||||
unsigned long id;
|
||||
int cmax, cmin;
|
||||
float h2, f, p, q, t;
|
||||
float hue, saturation, brightness;
|
||||
float redc, greenc, bluec;
|
||||
for (int id = 0; id < w * h; id++) {
|
||||
unsigned int argb = data[id];
|
||||
int a = (argb >> 24) & 0xff;
|
||||
// transparent => nothing to do.
|
||||
if (a == 0)
|
||||
continue;
|
||||
int r = (argb >> 16) & 0xff;
|
||||
int g = (argb >> 8) & 0xff;
|
||||
int b = (argb) & 0xff;
|
||||
|
||||
for (y = 0; y < h; y++) {
|
||||
for (id = y * w, x = 0; x < w; x++, id++) {
|
||||
argb = data[id];
|
||||
a = (argb >> 24) & 0xff;
|
||||
// transparent => nothing to do.
|
||||
if (a == 0)
|
||||
continue;
|
||||
r = (argb >> 16) & 0xff;
|
||||
g = (argb >> 8) & 0xff;
|
||||
b = (argb)&0xff;
|
||||
|
||||
// convert RGB to HSB
|
||||
cmax = (r > g) ? r : g;
|
||||
if (b > cmax)
|
||||
cmax = b;
|
||||
cmin = (r < g) ? r : g;
|
||||
if (b < cmin)
|
||||
cmin = b;
|
||||
brightness = ((float)cmax) / 255.0f;
|
||||
if (cmax != 0)
|
||||
saturation = ((float)(cmax - cmin)) / ((float)cmax);
|
||||
// Convert RGB to HSV
|
||||
int cmax = MAX3(r, g, b);
|
||||
int cmin = MIN3(r, g, b);
|
||||
int delta = cmax - cmin;
|
||||
float brightness = cmax / 255.0f;
|
||||
float saturation;
|
||||
if (cmax != 0)
|
||||
saturation = delta / (float)cmax;
|
||||
else
|
||||
saturation = 0;
|
||||
float hue;
|
||||
if (saturation == 0) {
|
||||
hue = 0;
|
||||
} else {
|
||||
float redc = (cmax - r) / (float)delta;
|
||||
float greenc = (cmax - g) / (float)delta;
|
||||
float bluec = (cmax - b) / (float)delta;
|
||||
if (r == cmax)
|
||||
hue = bluec - greenc;
|
||||
else if (g == cmax)
|
||||
hue = 2.0f + redc - bluec;
|
||||
else
|
||||
saturation = 0;
|
||||
if (saturation == 0)
|
||||
hue = 0;
|
||||
else {
|
||||
redc = ((float)(cmax - r)) / ((float)(cmax - cmin));
|
||||
greenc = ((float)(cmax - g)) / ((float)(cmax - cmin));
|
||||
bluec = ((float)(cmax - b)) / ((float)(cmax - cmin));
|
||||
if (r == cmax)
|
||||
hue = bluec - greenc;
|
||||
else if (g == cmax)
|
||||
hue = 2.0f + redc - bluec;
|
||||
else
|
||||
hue = 4.0f + greenc - redc;
|
||||
hue = hue / 6.0f;
|
||||
if (hue < 0)
|
||||
hue = hue + 1.0f;
|
||||
}
|
||||
|
||||
// adjust
|
||||
saturation += satur;
|
||||
if (saturation < 0.0)
|
||||
saturation = 0.0;
|
||||
if (saturation > 1.0)
|
||||
saturation = 1.0;
|
||||
//brightness += bright;
|
||||
if (brightness < 0.0)
|
||||
brightness = 0.0;
|
||||
if (brightness > 1.0)
|
||||
brightness = 1.0;
|
||||
if (alpha != 100)
|
||||
a = (a * alpha) / 100;
|
||||
|
||||
// convert HSB to RGB
|
||||
if (saturation == 0) {
|
||||
r = g = b = (int)(brightness * 255.0f + 0.5f);
|
||||
} else {
|
||||
h2 = (hue - (int)hue) * 6.0f;
|
||||
f = h2 - (int)(h2);
|
||||
p = brightness * (1.0f - saturation);
|
||||
q = brightness * (1.0f - saturation * f);
|
||||
t = brightness * (1.0f - (saturation * (1.0f - f)));
|
||||
switch ((int)h2) {
|
||||
case 0:
|
||||
r = (int)(brightness * 255.0f + 0.5f);
|
||||
g = (int)(t * 255.0f + 0.5f);
|
||||
b = (int)(p * 255.0f + 0.5f);
|
||||
break;
|
||||
case 1:
|
||||
r = (int)(q * 255.0f + 0.5f);
|
||||
g = (int)(brightness * 255.0f + 0.5f);
|
||||
b = (int)(p * 255.0f + 0.5f);
|
||||
break;
|
||||
case 2:
|
||||
r = (int)(p * 255.0f + 0.5f);
|
||||
g = (int)(brightness * 255.0f + 0.5f);
|
||||
b = (int)(t * 255.0f + 0.5f);
|
||||
break;
|
||||
case 3:
|
||||
r = (int)(p * 255.0f + 0.5f);
|
||||
g = (int)(q * 255.0f + 0.5f);
|
||||
b = (int)(brightness * 255.0f + 0.5f);
|
||||
break;
|
||||
case 4:
|
||||
r = (int)(t * 255.0f + 0.5f);
|
||||
g = (int)(p * 255.0f + 0.5f);
|
||||
b = (int)(brightness * 255.0f + 0.5f);
|
||||
break;
|
||||
case 5:
|
||||
r = (int)(brightness * 255.0f + 0.5f);
|
||||
g = (int)(p * 255.0f + 0.5f);
|
||||
b = (int)(q * 255.0f + 0.5f);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
r += bright * 255;
|
||||
g += bright * 255;
|
||||
b += bright * 255;
|
||||
|
||||
r = MAX(0, MIN(255, r));
|
||||
g = MAX(0, MIN(255, g));
|
||||
b = MAX(0, MIN(255, b));
|
||||
|
||||
argb = a;
|
||||
argb = (argb << 8) + r;
|
||||
argb = (argb << 8) + g;
|
||||
argb = (argb << 8) + b;
|
||||
data[id] = argb;
|
||||
hue = 4.0f + greenc - redc;
|
||||
hue = hue / 6.0f;
|
||||
if (hue < 0)
|
||||
hue = hue + 1.0f;
|
||||
}
|
||||
|
||||
// Adjust H, S
|
||||
saturation += satur_adjust;
|
||||
saturation = CLAMP(saturation, 0.0, 1.0);
|
||||
|
||||
a *= alpha_adjust;
|
||||
a = CLAMP(a, 0, 255);
|
||||
|
||||
// Convert HSV to RGB
|
||||
if (saturation == 0) {
|
||||
r = g = b = (int)(brightness * 255.0f + 0.5f);
|
||||
} else {
|
||||
float h2 = (hue - (int)hue) * 6.0f;
|
||||
float f = h2 - (int)(h2);
|
||||
float p = brightness * (1.0f - saturation);
|
||||
float q = brightness * (1.0f - saturation * f);
|
||||
float t = brightness * (1.0f - (saturation * (1.0f - f)));
|
||||
|
||||
switch ((int)h2) {
|
||||
case 0:
|
||||
r = (int)(brightness * 255.0f + 0.5f);
|
||||
g = (int)(t * 255.0f + 0.5f);
|
||||
b = (int)(p * 255.0f + 0.5f);
|
||||
break;
|
||||
case 1:
|
||||
r = (int)(q * 255.0f + 0.5f);
|
||||
g = (int)(brightness * 255.0f + 0.5f);
|
||||
b = (int)(p * 255.0f + 0.5f);
|
||||
break;
|
||||
case 2:
|
||||
r = (int)(p * 255.0f + 0.5f);
|
||||
g = (int)(brightness * 255.0f + 0.5f);
|
||||
b = (int)(t * 255.0f + 0.5f);
|
||||
break;
|
||||
case 3:
|
||||
r = (int)(p * 255.0f + 0.5f);
|
||||
g = (int)(q * 255.0f + 0.5f);
|
||||
b = (int)(brightness * 255.0f + 0.5f);
|
||||
break;
|
||||
case 4:
|
||||
r = (int)(t * 255.0f + 0.5f);
|
||||
g = (int)(p * 255.0f + 0.5f);
|
||||
b = (int)(brightness * 255.0f + 0.5f);
|
||||
break;
|
||||
case 5:
|
||||
r = (int)(brightness * 255.0f + 0.5f);
|
||||
g = (int)(p * 255.0f + 0.5f);
|
||||
b = (int)(q * 255.0f + 0.5f);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
r += bright_adjust * 255;
|
||||
g += bright_adjust * 255;
|
||||
b += bright_adjust * 255;
|
||||
|
||||
r = CLAMP(r, 0, 255);
|
||||
g = CLAMP(g, 0, 255);
|
||||
b = CLAMP(b, 0, 255);
|
||||
|
||||
argb = a;
|
||||
argb = (argb << 8) + r;
|
||||
argb = (argb << 8) + g;
|
||||
argb = (argb << 8) + b;
|
||||
data[id] = argb;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -511,7 +493,7 @@ Imlib_Image adjust_icon(Imlib_Image original, int alpha, int saturation, int bri
|
|||
adjust_asb(data,
|
||||
imlib_image_get_width(),
|
||||
imlib_image_get_height(),
|
||||
alpha,
|
||||
alpha / 100.0,
|
||||
saturation / 100.0,
|
||||
brightness / 100.0);
|
||||
imlib_image_put_back_data(data);
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
|
||||
#define WM_CLASS_TINT "panel"
|
||||
|
||||
#include <glib.h>
|
||||
#include <Imlib2.h>
|
||||
#include <pango/pangocairo.h>
|
||||
#include "area.h"
|
||||
|
@ -18,6 +19,9 @@
|
|||
#define BLUE "\033[1;34m"
|
||||
#define RESET "\033[0m"
|
||||
|
||||
#define MAX3(a, b, c) MAX(MAX(a, b), c)
|
||||
#define MIN3(a, b, c) MIN(MIN(a, b), c)
|
||||
|
||||
// mouse actions
|
||||
typedef enum MouseAction {
|
||||
NONE = 0,
|
||||
|
@ -67,8 +71,20 @@ void get_color(char *hex, double *rgb);
|
|||
Imlib_Image load_image(const char *path, int cached);
|
||||
|
||||
// Adjusts the alpha/saturation/brightness on an ARGB image.
|
||||
// Parameters: alpha from 0 to 100, satur from 0 to 1, bright from 0 to 1.
|
||||
void adjust_asb(DATA32 *data, int w, int h, int alpha, float satur, float bright);
|
||||
// Parameters:
|
||||
// * alpha_adjust: multiplicative:
|
||||
// * 0 = full transparency
|
||||
// * 1 = no adjustment
|
||||
// * 2 = twice the current opacity
|
||||
// * satur_adjust: additive:
|
||||
// * -1 = full grayscale
|
||||
// * 0 = no adjustment
|
||||
// * 1 = full color
|
||||
// * bright_adjust: additive:
|
||||
// * -1 = black
|
||||
// * 0 = no adjustment
|
||||
// * 1 = white
|
||||
void adjust_asb(DATA32 *data, int w, int h, float alpha_adjust, float satur_adjust, float bright_adjust);
|
||||
Imlib_Image adjust_icon(Imlib_Image original, int alpha, int saturation, int brightness);
|
||||
|
||||
void create_heuristic_mask(DATA32 *data, int w, int h);
|
||||
|
|
Loading…
Reference in a new issue