Feature: Issue #35, Add colored shadows
- Use getopt_long() instead of getopt() for argument parsing, making long options possible. - Add support of colored shadows with 3 commandline switches.
This commit is contained in:
parent
f5aed89a67
commit
deaaf5c5cf
|
@ -27,6 +27,7 @@ Window root;
|
||||||
Picture root_picture;
|
Picture root_picture;
|
||||||
Picture root_buffer;
|
Picture root_buffer;
|
||||||
Picture black_picture;
|
Picture black_picture;
|
||||||
|
Picture cshadow_picture;
|
||||||
Picture root_tile;
|
Picture root_tile;
|
||||||
XserverRegion all_damage;
|
XserverRegion all_damage;
|
||||||
Bool clip_changed;
|
Bool clip_changed;
|
||||||
|
@ -1102,7 +1103,7 @@ paint_all(Display *dpy, XserverRegion region) {
|
||||||
|
|
||||||
if (win_type_shadow[w->window_type]) {
|
if (win_type_shadow[w->window_type]) {
|
||||||
XRenderComposite(
|
XRenderComposite(
|
||||||
dpy, PictOpOver, black_picture, w->shadow,
|
dpy, PictOpOver, cshadow_picture, w->shadow,
|
||||||
root_buffer, 0, 0, 0, 0,
|
root_buffer, 0, 0, 0, 0,
|
||||||
w->a.x + w->shadow_dx, w->a.y + w->shadow_dy,
|
w->a.x + w->shadow_dx, w->a.y + w->shadow_dy,
|
||||||
w->shadow_width, w->shadow_height);
|
w->shadow_width, w->shadow_height);
|
||||||
|
@ -2448,7 +2449,14 @@ usage() {
|
||||||
"-b daemonize\n"
|
"-b daemonize\n"
|
||||||
" Daemonize process.\n"
|
" Daemonize process.\n"
|
||||||
"-S\n"
|
"-S\n"
|
||||||
" Enable synchronous operation (for debugging).\n");
|
" Enable synchronous operation (for debugging).\n"
|
||||||
|
"--shadow-red value\n"
|
||||||
|
" Red color value of shadow (0.0 - 1.0, defaults to 0).\n"
|
||||||
|
"--shadow-green value\n"
|
||||||
|
" Green color value of shadow (0.0 - 1.0, defaults to 0).\n"
|
||||||
|
"--shadow-blue value\n"
|
||||||
|
" Blue color value of shadow (0.0 - 1.0, defaults to 0).\n"
|
||||||
|
);
|
||||||
|
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
@ -2549,6 +2557,12 @@ get_atoms() {
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, char **argv) {
|
main(int argc, char **argv) {
|
||||||
|
const static struct option longopt[] = {
|
||||||
|
{ "shadow-red", required_argument, NULL, 0 },
|
||||||
|
{ "shadow-green", required_argument, NULL, 0 },
|
||||||
|
{ "shadow-blue", required_argument, NULL, 0 },
|
||||||
|
};
|
||||||
|
|
||||||
XEvent ev;
|
XEvent ev;
|
||||||
Window root_return, parent_return;
|
Window root_return, parent_return;
|
||||||
Window *children;
|
Window *children;
|
||||||
|
@ -2559,9 +2573,13 @@ main(int argc, char **argv) {
|
||||||
int composite_major, composite_minor;
|
int composite_major, composite_minor;
|
||||||
char *display = 0;
|
char *display = 0;
|
||||||
int o;
|
int o;
|
||||||
|
int longopt_idx;
|
||||||
Bool no_dock_shadow = False;
|
Bool no_dock_shadow = False;
|
||||||
Bool no_dnd_shadow = False;
|
Bool no_dnd_shadow = False;
|
||||||
Bool fork_after_register = False;
|
Bool fork_after_register = False;
|
||||||
|
double shadow_red = 0.0;
|
||||||
|
double shadow_green = 0.0;
|
||||||
|
double shadow_blue = 0.0;
|
||||||
|
|
||||||
for (i = 0; i < NUM_WINTYPES; ++i) {
|
for (i = 0; i < NUM_WINTYPES; ++i) {
|
||||||
win_type_fade[i] = False;
|
win_type_fade[i] = False;
|
||||||
|
@ -2569,8 +2587,25 @@ main(int argc, char **argv) {
|
||||||
win_type_opacity[i] = 1.0;
|
win_type_opacity[i] = 1.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
while ((o = getopt(argc, argv, "D:I:O:d:r:o:m:l:t:i:e:scnfFCaSzGb")) != -1) {
|
while ((o = getopt_long(argc, argv,
|
||||||
|
"D:I:O:d:r:o:m:l:t:i:e:scnfFCaSzGb",
|
||||||
|
longopt, &longopt_idx)) != -1) {
|
||||||
switch (o) {
|
switch (o) {
|
||||||
|
// Long options
|
||||||
|
case 0:
|
||||||
|
switch (longopt_idx) {
|
||||||
|
case 0:
|
||||||
|
shadow_red = normalize_d(atof(optarg));
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
shadow_green = normalize_d(atof(optarg));
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
shadow_blue = normalize_d(atof(optarg));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
// Short options
|
||||||
case 'd':
|
case 'd':
|
||||||
display = optarg;
|
display = optarg;
|
||||||
break;
|
break;
|
||||||
|
@ -2729,6 +2764,14 @@ main(int argc, char **argv) {
|
||||||
|
|
||||||
black_picture = solid_picture(dpy, True, 1, 0, 0, 0);
|
black_picture = solid_picture(dpy, True, 1, 0, 0, 0);
|
||||||
|
|
||||||
|
// Generates another Picture for shadows if the color is modified by
|
||||||
|
// user
|
||||||
|
if (!shadow_red && !shadow_green && !shadow_blue)
|
||||||
|
cshadow_picture = black_picture;
|
||||||
|
else
|
||||||
|
cshadow_picture = solid_picture(dpy, True, 1,
|
||||||
|
shadow_red, shadow_green, shadow_blue);
|
||||||
|
|
||||||
all_damage = None;
|
all_damage = None;
|
||||||
clip_changed = True;
|
clip_changed = True;
|
||||||
XGrabServer(dpy);
|
XGrabServer(dpy);
|
||||||
|
|
|
@ -131,6 +131,18 @@ extern int root_height, root_width;
|
||||||
* Functions
|
* Functions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// inline functions must be made static to compile correctly under clang:
|
||||||
|
// http://clang.llvm.org/compatibility.html#inline
|
||||||
|
|
||||||
|
static inline double normalize_d(double d) {
|
||||||
|
if (d > 1.0)
|
||||||
|
return 1.0;
|
||||||
|
if (d < 0.0)
|
||||||
|
return 0.0;
|
||||||
|
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
get_time_in_milliseconds();
|
get_time_in_milliseconds();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue