JavaVM.st
changeset 373 fceafec7ae61
parent 368 e8c16a76826f
child 374 946599670402
--- a/JavaVM.st	Mon Oct 05 11:47:26 1998 +0000
+++ b/JavaVM.st	Mon Oct 05 14:31:54 1998 +0000
@@ -5006,7 +5006,8 @@
 _ImageRepresentation_setIntPixels:nativeContext
     |imgRep x y w h clrModel ints offs scanLineWidth
      img depth cmap rgbMap opaque transparentColorIndex
-     bytes srcIdx dstIdx val red green blue|
+     bytes srcIdx dstIdx val red green blue
+     redMask greenMask blueMask redShift greenShift blueShift|
 
     imgRep := nativeContext receiver.
     x := nativeContext argAt:1.
@@ -5017,8 +5018,10 @@
     ints := nativeContext argAt:6.
     offs := nativeContext argAt:7.  "/ offset ??
     scanLineWidth := nativeContext argAt:8.  "/ scanLineWidth ??
-self halt.
     opaque := false.
+offs ~~ 0 ifTrue:[
+ self halt
+].
 
     depth := clrModel instVarNamed:'pixel_bits'.
     clrModel class == (Java at:'java.awt.image.DirectColorModel') ifTrue:[
@@ -5039,17 +5042,24 @@
 
     img := imgRep instVarNamed:'pData'.
     (img isNil or:[img == 0]) ifTrue:[
+
         depth == 32 ifTrue:[
             "/ temporary kludge - ony use 24 bits/pixel
             bytes := ByteArray new:w*h*3.
             srcIdx := 1.
             dstIdx := 1.
+            redMask := clrModel instVarNamed:'red_mask'.
+            greenMask := clrModel instVarNamed:'green_mask'.
+            blueMask := clrModel instVarNamed:'blue_mask'.
+            redShift := (clrModel instVarNamed:'red_offset') negated.
+            greenShift := (clrModel instVarNamed:'green_offset') negated.
+            blueShift := (clrModel instVarNamed:'blue_offset') negated.
             1 to:h do:[:y |
                 1 to:w do:[:x |
                     val := ints at:srcIdx.
-                    red := (val bitShift:-16) bitAnd:16rFF.
-                    green := (val bitShift:-8) bitAnd:16rFF.
-                    blue := val bitAnd:16rFF.
+                    red := (val bitAnd:redMask) bitShift:redShift.
+                    green := (val bitAnd:greenMask) bitShift:greenShift.
+                    blue := (val bitAnd:blueMask) bitShift:blueShift.
                     bytes at:dstIdx put:red.
                     bytes at:dstIdx+1 put:green.
                     bytes at:dstIdx+2 put:blue.
@@ -5060,6 +5070,9 @@
             ].
             img := Depth24Image width:w height:h depth:24 fromArray:bytes.
         ] ifFalse:[
+scanLineWidth ~~ w ifTrue:[
+    self halt
+].
             img := Image width:w height:h depth:depth fromArray:ints.
         ].
         cmap notNil ifTrue:[
@@ -5084,7 +5097,7 @@
     ^ 1.
 
     "Created: / 1.2.1998 / 17:38:47 / cg"
-    "Modified: / 6.2.1998 / 02:37:35 / cg"
+    "Modified: / 5.10.1998 / 15:29:01 / cg"
 !
 
 _OffScreenImageSource_sendPixels:nativeContext
@@ -7835,6 +7848,6 @@
 !JavaVM class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaVM.st,v 1.37 1998/09/12 15:37:06 cg Exp $'
+    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaVM.st,v 1.38 1998/10/05 14:31:54 cg Exp $'
 ! !
 JavaVM initialize!