summaryrefslogtreecommitdiff
path: root/uisimulator/alpha.c
diff options
context:
space:
mode:
Diffstat (limited to 'uisimulator/alpha.c')
-rw-r--r--uisimulator/alpha.c137
1 files changed, 0 insertions, 137 deletions
diff --git a/uisimulator/alpha.c b/uisimulator/alpha.c
deleted file mode 100644
index 39abd33251..0000000000
--- a/uisimulator/alpha.c
+++ /dev/null
@@ -1,137 +0,0 @@
1/* xscreensaver, Copyright (c) 1992, 1995, 1996, 1997
2 * Jamie Zawinski <jwz@jwz.org>
3 *
4 * Permission to use, copy, modify, distribute, and sell this software and its
5 * documentation for any purpose is hereby granted without fee, provided that
6 * the above copyright notice appear in all copies and that both that
7 * copyright notice and this permission notice appear in supporting
8 * documentation. No representations are made about the suitability of this
9 * software for any purpose. It is provided "as is" without express or
10 * implied warranty.
11 */
12
13/* Beauty is only skin deep, unless you've got an alpha channel. */
14
15
16#include "utils.h"
17#include "alpha.h"
18#include "visual.h"
19#include "hsv.h"
20#include "yarandom.h"
21#include "resources.h"
22
23#include <X11/Xutil.h>
24
25#ifndef countof
26# define countof(x) (sizeof(*(x))/sizeof((x)))
27#endif
28
29
30/* I don't believe this fucking language doesn't have builtin exponentiation.
31 I further can't believe that the fucking ^ character means fucking XOR!! */
32static int
33i_exp (int i, int j)
34{
35 int k = 1;
36 while (j--) k *= i;
37 return k;
38}
39
40
41static void
42merge_colors (int argc, XColor **argv, XColor *into_color, int mask,
43 Bool additive_p)
44{
45 int j;
46 *into_color = *argv [0];
47 into_color->pixel |= mask;
48
49 for (j = 1; j < argc; j++)
50 {
51# define SHORT_INC(x,y) (x = ((((x)+(y)) > 0xFFFF) ? 0xFFFF : ((x)+(y))))
52# define SHORT_DEC(x,y) (x = ((((x)-(y)) < 0) ? 0 : ((x)-(y))))
53 if (additive_p)
54 {
55 SHORT_INC (into_color->red, argv[j]->red);
56 SHORT_INC (into_color->green, argv[j]->green);
57 SHORT_INC (into_color->blue, argv[j]->blue);
58 }
59 else
60 {
61 SHORT_DEC (into_color->red, argv[j]->red);
62 SHORT_DEC (into_color->green, argv[j]->green);
63 SHORT_DEC (into_color->blue, argv[j]->blue);
64 }
65# undef SHORT_INC
66# undef SHORT_DEC
67 }
68}
69
70static void
71permute_colors (XColor *pcolors, XColor *colors,
72 int count,
73 unsigned long *plane_masks,
74 Bool additive_p)
75{
76 int out = 0;
77 int max = i_exp (2, count);
78 if (count > 31) abort ();
79 for (out = 1; out < max; out++)
80 {
81 XColor *argv [32];
82 int this_mask = 0;
83 int argc = 0;
84 int bit;
85 for (bit = 0; bit < 32; bit++)
86 if (out & (1<<bit))
87 {
88 argv [argc++] = &pcolors [bit];
89 this_mask |= plane_masks [bit];
90 }
91 merge_colors (argc, argv, &colors [out-1], this_mask, additive_p);
92 }
93}
94
95
96static int
97allocate_color_planes (Display *dpy, Colormap cmap,
98 int nplanes, unsigned long *plane_masks,
99 unsigned long *base_pixel_ret)
100{
101 while (nplanes > 1 &&
102 !XAllocColorCells (dpy, cmap, False, plane_masks, nplanes,
103 base_pixel_ret, 1))
104 nplanes--;
105
106 return nplanes;
107}
108
109
110static void
111initialize_transparency_colormap (Display *dpy, Colormap cmap,
112 int nplanes,
113 unsigned long base_pixel,
114 unsigned long *plane_masks,
115 XColor *colors,
116 Bool additive_p)
117{
118 int i;
119 int total_colors = i_exp (2, nplanes);
120 XColor *all_colors = (XColor *) calloc (total_colors, sizeof (XColor));
121
122 for (i = 0; i < nplanes; i++)
123 colors[i].pixel = base_pixel | plane_masks [i];
124 permute_colors (colors, all_colors, nplanes, plane_masks, additive_p);
125
126 /* clone the default background of the window into our "base" pixel */
127 all_colors [total_colors - 1].pixel =
128 get_pixel_resource ("background", "Background", dpy, cmap);
129 XQueryColor (dpy, cmap, &all_colors [total_colors - 1]);
130 all_colors [total_colors - 1].pixel = base_pixel;
131
132 for (i = 0; i < total_colors; i++)
133 all_colors[i].flags = DoRed|DoGreen|DoBlue;
134 XStoreColors (dpy, cmap, all_colors, total_colors);
135 XFree ((XPointer) all_colors);
136}
137