summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--appl/wm/view.b33
1 files changed, 31 insertions, 2 deletions
diff --git a/appl/wm/view.b b/appl/wm/view.b
index c96ef87d..8e847e55 100644
--- a/appl/wm/view.b
+++ b/appl/wm/view.b
@@ -178,13 +178,42 @@ readimages(file: string, errdiff: int) : (array of ref Image, array of ref Image
# if transparency is enabled, errdiff==1 is probably a mistake,
# but there's no easy solution.
- (ims[i], err2) = imageremap->remap(ai[i], display, errdiff);
+ (ims[i], err2) = remap(ai[i], display, errdiff);
if(ims[i] == nil)
return(nil, nil, err2);
}
return (ims, masks, nil);
}
+remap(raw: ref RImagefile->Rawimage, display: ref Draw->Display, errdiff: int): (ref Draw->Image, string)
+{
+ case raw.chandesc {
+ RImagefile->CRGB =>
+ r := chanstopix(raw.chans, raw.r.dx(), raw.r.dy());
+ im := display.newimage(raw.r, Draw->RGB24, 0, Draw->White);
+ im.writepixels(im.r, r);
+ return (im, "");
+ * =>
+ return imageremap->remap(raw, display, errdiff);
+ }
+}
+
+chanstopix(chans : array of array of byte, width, height: int): array of byte
+{
+ r := chans[0];
+ g := chans[1];
+ b := chans[2];
+
+ rgb := array [3*len r] of byte;
+ bix := 0;
+ for (i := 0; i < len r ; i++) {
+ rgb[bix++] = b[i];
+ rgb[bix++] = g[i];
+ rgb[bix++] = r[i];
+ }
+ return rgb;
+}
+
viewcfg := array[] of {
"panel .p",
"menu .m",
@@ -212,7 +241,7 @@ timer(dt: int, ticks, pidc: chan of int)
view(ctxt: ref Context, ims, masks: array of ref Image, file: string)
{
file = lastcomponent(file);
- (t, titlechan) := tkclient->toplevel(ctxt, "", "view: "+file, Tkclient->Hide);
+ (t, titlechan) := tkclient->toplevel(ctxt, "", "view: "+file, Tkclient->Appl);
cmd := chan of string;
tk->namechan(t, cmd, "cmd");