--- src/netsurf-3.0/gtk/bitmap.c.orig +++ src/netsurf-3.0/gtk/bitmap.c @@ -288,27 +288,27 @@ if (fmt == CAIRO_FORMAT_RGB24) { for (pixel_loop=0; pixel_loop < pixel_count; pixel_loop++) { - pixel = pixels[pixel_loop]; - pixels[pixel_loop] = (pixel & 0xff00ff00) | - ((pixel & 0xff) << 16) | - ((pixel & 0xff0000) >> 16); + pixel = ((uint8_t *)(pixels + pixel_loop))[0] << 16 | + ((uint8_t *)(pixels + pixel_loop))[1] << 8 | + ((uint8_t *)(pixels + pixel_loop))[2] | + ((uint8_t *)(pixels + pixel_loop))[3] << 24; + pixels[pixel_loop] = pixel; } } else { uint8_t t, r, g, b; for (pixel_loop=0; pixel_loop < pixel_count; pixel_loop++) { - pixel = pixels[pixel_loop]; - t = (pixel & 0xff000000) >> 24; + t = ((uint8_t *)(pixels + pixel_loop))[3]; if (t == 0) { pixels[pixel_loop] = 0; } else { - r = (pixel & 0xff0000) >> 16; - g = (pixel & 0xff00) >> 8; - b = pixel & 0xff; + r = ((uint8_t *)(pixels + pixel_loop))[0]; + g = ((uint8_t *)(pixels + pixel_loop))[1]; + b = ((uint8_t *)(pixels + pixel_loop))[2]; pixels[pixel_loop] = (t << 24) | - ((r * t) >> 8) | + ((r * t) >> 8) << 16 | ((g * t) >> 8) << 8 | - ((b * t) >> 8) << 16; + ((b * t) >> 8); } } --- src/netsurf-3.0/image/bmp.c.orig +++ src/netsurf-3.0/image/bmp.c @@ -171,7 +171,6 @@ /* exit as a success */ bmp->bitmap = bmp->bmp->bitmap; - bitmap_modified(bmp->bitmap); content_set_ready(c); content_set_done(c); @@ -190,6 +189,8 @@ if (bmp->bmp->decoded == false) if (bmp_decode(bmp->bmp) != BMP_OK) return false; + else + bitmap_modified(bmp->bitmap); bmp->bitmap = bmp->bmp->bitmap; --- src/netsurf-3.0/image/rsvg.c.orig +++ src/netsurf-3.0/image/rsvg.c @@ -135,19 +135,17 @@ static inline void rsvg_argb_to_abgr(uint8_t *pixels, int width, int height, size_t rowstride) { - uint8_t *p = pixels; + uint32_t *p = (uint32_t *)pixels; 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]; - - p[x+3] = p[x]; - - p[x] = r; + uint32_t c = *p; + ((uint8_t *)p)[0] = (c & 0xff0000) >> 16; + ((uint8_t *)p)[1] = (c & 0xff00) >> 8; + ((uint8_t *)p)[2] = (c & 0xff); + ((uint8_t *)p)[3] = (c & 0xff000000) >> 24; + p++; } - - p += rowstride; } }