about summary refs log tree commit diff stats
path: root/src/img
diff options
context:
space:
mode:
authorbptato <nincsnevem662@gmail.com>2024-06-20 21:28:23 +0200
committerbptato <nincsnevem662@gmail.com>2024-06-20 22:38:33 +0200
commit7f66b5ebc88936db974e3320d77c7ec9d4ab85e6 (patch)
tree669b2c307e2ea84476d6bbfd46ef127c0fc1c6f9 /src/img
parent2ab1e53b4bc15af3319994fdb25bb739b4b8e6db (diff)
downloadchawan-7f66b5ebc88936db974e3320d77c7ec9d4ab85e6.tar.gz
img: use stb_image, drop zlib as dependency
Now we have decoders for gif, jpeg, bmp. Also, the in-house PNG decoder
has been replaced in favor of the stbi implementation; this means we
no longer depend on zlib, since stbi comes with a built in inflate
implementation.
Diffstat (limited to 'src/img')
-rw-r--r--src/img/bitmap.nim22
-rw-r--r--src/img/painter.nim2
2 files changed, 15 insertions, 9 deletions
diff --git a/src/img/bitmap.nim b/src/img/bitmap.nim
index a186b47f..70244643 100644
--- a/src/img/bitmap.nim
+++ b/src/img/bitmap.nim
@@ -2,7 +2,7 @@ import types/color
 
 type
   Bitmap* = ref object of RootObj
-    px*: seq[ARGBColor]
+    px*: seq[RGBAColorBE]
     width*: uint64
     height*: uint64
 
@@ -14,19 +14,25 @@ type
 
 proc newBitmap*(width, height: uint64): ImageBitmap =
   return ImageBitmap(
-    px: newSeq[ARGBColor](width * height),
+    px: newSeq[RGBAColorBE](width * height),
     width: width,
     height: height
   )
 
-proc setpx*(bmp: Bitmap; x, y: uint64; color: ARGBColor) {.inline.} =
+proc setpx*(bmp: Bitmap; x, y: uint64; color: RGBAColorBE) {.inline.} =
   bmp.px[bmp.width * y + x] = color
 
-proc getpx*(bmp: Bitmap; x, y: uint64): ARGBColor {.inline.} =
+proc setpx*(bmp: Bitmap; x, y: uint64; color: ARGBColor) {.inline.} =
+  bmp.px[bmp.width * y + x] = rgba_be(color.r, color.g, color.b, color.a)
+
+proc getpx*(bmp: Bitmap; x, y: uint64): RGBAColorBE {.inline.} =
   return bmp.px[bmp.width * y + x]
 
-proc setpxb*(bmp: Bitmap; x, y: uint64; color: ARGBColor) {.inline.} =
-  if color.a == 255:
-    bmp.setpx(x, y, color)
+proc setpxb*(bmp: Bitmap; x, y: uint64; c: RGBAColorBE) {.inline.} =
+  if c.a == 255:
+    bmp.setpx(x, y, c)
   else:
-    bmp.setpx(x, y, bmp.getpx(x, y).blend(color))
+    bmp.setpx(x, y, bmp.getpx(x, y).blend(c))
+
+proc setpxb*(bmp: Bitmap; x, y: uint64; c: ARGBColor) {.inline.} =
+  bmp.setpxb(x, y, rgba_be(c.r, c.g, c.b, c.a))
diff --git a/src/img/painter.nim b/src/img/painter.nim
index d02f3602..4e8d1f72 100644
--- a/src/img/painter.nim
+++ b/src/img/painter.nim
@@ -151,7 +151,7 @@ proc getCharBmp(u: uint32): Bitmap =
   let gx = uint64(32 + 16 * (u mod 0x100))
   let gy = uint64(64 + 16 * (u div 0x100))
   var fullwidth = false
-  const white = rgba(255, 255, 255, 255)
+  const white = rgba_be(255, 255, 255, 255)
   block loop:
     # hack to recognize full width characters
     for y in 0 ..< 16u64: