summaryrefslogtreecommitdiff
path: root/content/handlers/image
diff options
context:
space:
mode:
authorJohn-Mark Bell <jmb@netsurf-browser.org>2018-01-20 15:33:05 +0000
committerJohn-Mark Bell <jmb@netsurf-browser.org>2018-01-20 15:33:05 +0000
commit328a29d22f81b838a0a6b2f1d3d5fc4dbfe5e6e7 (patch)
tree3f7cd8ae27d6cae79b049085cdd24a236c2eb06a /content/handlers/image
parentf04cedef1c7742f38b0b561efcd77e0476fcbf60 (diff)
downloadnetsurf-328a29d22f81b838a0a6b2f1d3d5fc4dbfe5e6e7.tar.gz
netsurf-328a29d22f81b838a0a6b2f1d3d5fc4dbfe5e6e7.tar.bz2
RSVG: fix colour conversion
Diffstat (limited to 'content/handlers/image')
-rw-r--r--content/handlers/image/rsvg.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/content/handlers/image/rsvg.c b/content/handlers/image/rsvg.c
index ca2d81eeb..2ba1b49f5 100644
--- a/content/handlers/image/rsvg.c
+++ b/content/handlers/image/rsvg.c
@@ -39,6 +39,8 @@
#include <librsvg/rsvg-cairo.h>
#endif
+#include <nsutils/endian.h>
+
#include "utils/log.h"
#include "utils/utils.h"
#include "utils/messages.h"
@@ -139,15 +141,21 @@ static inline void rsvg_argb_to_abgr(uint8_t *pixels,
int width, int height, size_t rowstride)
{
uint8_t *p = pixels;
+ int boff = 0, roff = 2;
+
+ if (endian_host_is_le() == false) {
+ boff = 1;
+ roff = 3;
+ }
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
/* Swap R and B */
- const uint8_t r = p[x+3];
+ const uint8_t r = p[4*x+roff];
- p[x+3] = p[x];
+ p[4*x+roff] = p[4*x+boff];
- p[x] = r;
+ p[4*x+boff] = r;
}
p += rowstride;