00001
00059 #include <stdint.h>
00060 #include <stdlib.h>
00061 #include <assert.h>
00062 #include <membag.h>
00063 #include <string.h>
00064 #include "gfx/wtk.h"
00065
00090 uint8_t wtk_rescale_value(uint8_t value, uint8_t from_scale, uint8_t to_scale)
00091 {
00092 uint16_t new_value;
00093
00094 assert(to_scale > 0);
00095 assert(from_scale > 0);
00096 assert(value <= from_scale);
00097
00098 new_value = value;
00099 new_value *= to_scale;
00100 new_value /= from_scale;
00101
00102 return new_value;
00103 }
00104
00114 void wtk_copy_string(char *dest, char const *source)
00115 {
00116 assert(dest);
00117 assert(source);
00118
00119
00120 while (*source != '\0') {
00121 *dest = *source;
00122 ++dest;
00123 ++source;
00124 }
00125
00126
00127 *dest = *source;
00128 }
00129
00140 void wtk_shade_pixel(gfx_color_t *pixel, uint8_t alpha)
00141 {
00142 uint16_t green;
00143 uint16_t blue;
00144 uint16_t red;
00145
00146
00147 gfx_color_t oldcol = *pixel;
00148 gfx_color_t newcol = 0x0000;
00149
00150
00151 red = oldcol & 0x00f8;
00152 red = (red * alpha) + red;
00153 red >>= 8;
00154 red &= 0x00f8;
00155 newcol |= red;
00156
00157
00158 green = ((oldcol << 3) | (oldcol >> 13)) & 0x003f;
00159 green = (green * alpha) + green;
00160 green >>= 8;
00161 green = (green << 13) | (green >> 3);
00162 newcol |= green;
00163
00164
00165 blue = (oldcol >> 8) & 0x001f;
00166 blue = (blue * alpha) + blue;
00167 blue &= 0xff00;
00168 newcol |= blue;
00169
00170
00171 *pixel = newcol;
00172 }
00173