diff options
Diffstat (limited to 'apps/plugins/lib/playergfx.c')
-rw-r--r-- | apps/plugins/lib/playergfx.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/apps/plugins/lib/playergfx.c b/apps/plugins/lib/playergfx.c index d7e1ce26e8..b6e7ccfc64 100644 --- a/apps/plugins/lib/playergfx.c +++ b/apps/plugins/lib/playergfx.c | |||
@@ -152,7 +152,10 @@ static void fgblock(unsigned char *address, unsigned mask, unsigned bits) | |||
152 | 152 | ||
153 | static void solidblock(unsigned char *address, unsigned mask, unsigned bits) | 153 | static void solidblock(unsigned char *address, unsigned mask, unsigned bits) |
154 | { | 154 | { |
155 | *address = (*address & ~mask) | (bits & mask); | 155 | unsigned data = *(char *)address; |
156 | |||
157 | bits ^= data; | ||
158 | *address = data ^ (bits & mask); | ||
156 | } | 159 | } |
157 | 160 | ||
158 | static void flipinvblock(unsigned char *address, unsigned mask, unsigned bits) | 161 | static void flipinvblock(unsigned char *address, unsigned mask, unsigned bits) |
@@ -172,7 +175,10 @@ static void fginvblock(unsigned char *address, unsigned mask, unsigned bits) | |||
172 | 175 | ||
173 | static void solidinvblock(unsigned char *address, unsigned mask, unsigned bits) | 176 | static void solidinvblock(unsigned char *address, unsigned mask, unsigned bits) |
174 | { | 177 | { |
175 | *address = (*address & ~mask) | (~bits & mask); | 178 | unsigned data = *(char *)address; |
179 | |||
180 | bits = ~bits ^ data; | ||
181 | *address = data ^ (bits & mask); | ||
176 | } | 182 | } |
177 | 183 | ||
178 | lcd_blockfunc_type* pgfx_blockfuncs[8] = { | 184 | lcd_blockfunc_type* pgfx_blockfuncs[8] = { |