1
/* Copyright (C) 2000 Damir Zucic */
3
/*=============================================================================
8
Weight two colors to prepare the third color.
11
(1) The first color identifier.
12
(2) The second color identifier.
13
(3) Scale factor (double).
14
(4) Pointer to GUIS structure.
20
The identifier of the prepared (new) color.
22
=============================================================================*/
27
#include <X11/Xutil.h>
29
#include <X11/Xatom.h>
34
/*======weight two colors:===================================================*/
36
unsigned long WeightColors_ (unsigned long color1ID, unsigned long color2ID,
37
double scale_factor, GUIS *guiSP)
39
unsigned long new_colorID;
40
unsigned long red_mask, green_mask, blue_mask;
41
unsigned long red1, red2, green1, green2, blue1, blue2;
42
double r1, r2, g1, g2, b1, b2;
44
unsigned long red, green, blue;
47
red_mask = guiSP->visual_infoS.red_mask;
48
green_mask = guiSP->visual_infoS.green_mask;
49
blue_mask = guiSP->visual_infoS.blue_mask;
51
/* Extract input color components: */
52
red1 = color1ID & red_mask;
53
red2 = color2ID & red_mask;
54
green1 = color1ID & green_mask;
55
green2 = color2ID & green_mask;
56
blue1 = color1ID & blue_mask;
57
blue2 = color2ID & blue_mask;
59
/* Convert to doubles: */
67
/* Calculate new color components: */
68
r = r1 + scale_factor * (r2 - r1);
69
g = g1 + scale_factor * (g2 - g1);
70
b = b1 + scale_factor * (b2 - b1);
71
red = ((unsigned long) r) & red_mask;
72
green = ((unsigned long) g) & green_mask;
73
blue = ((unsigned long) b) & blue_mask;
75
/* Combine new color components: */
76
new_colorID = red | green | blue;
78
/* Return the identifier of the prepared color: */
82
/*===========================================================================*/