.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Depth16Image.st Mon Oct 23 18:00:19 1995 +0100
@@ -0,0 +1,123 @@
+"
+ COPYRIGHT (c) 1995 by Claus Gittinger
+ All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice. This software may not
+ be provided or otherwise made available to, or used by, any
+ other person. No title to or ownership of the software is
+ hereby transferred.
+"
+
+Image subclass:#Depth16Image
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:'Graphics-Images'
+!
+
+Depth16Image comment:'
+COPYRIGHT (c) 1995 by Claus Gittinger
+ All Rights Reserved
+
+$Header: /cvs/stx/stx/libview/Depth16Image.st,v 1.1 1995-10-23 16:58:37 cg Exp $
+'!
+
+!Depth16Image class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1995 by Claus Gittinger
+ All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice. This software may not
+ be provided or otherwise made available to, or used by, any
+ other person. No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+version
+"
+$Header: /cvs/stx/stx/libview/Depth16Image.st,v 1.1 1995-10-23 16:58:37 cg Exp $
+"
+!
+
+documentation
+"
+ this class represents 16 bit images.
+ Only the minimum protocol is implemented here; much more is
+ needed for higher performance operations on depth16 images.
+ (however, 16bit images are seldom used, so falling back into the
+ slow general methods from Image should not hurt too much ..)
+"
+! !
+
+!Depth16Image class methodsFor:'queries'!
+
+imageDepth
+ ^ 16
+! !
+
+!Depth16Image methodsFor:'queries'!
+
+bitsPerPixel
+ "return the number of bits per pixel"
+
+ ^ 16
+!
+
+bitsPerRow
+ "return the number of bits in one scanline of the image"
+
+ ^ width * 16
+!
+
+bitsPerSample
+ "return the number of bits per sample.
+ The return value is an array of bits-per-plane."
+
+ ^ #(16)
+!
+
+bytesPerRow
+ "return the number of bytes in one scanline of the image"
+
+ ^ width * 2.
+!
+
+samplesPerPixel
+ "return the number of samples per pixel in the image."
+
+ ^ 1
+! !
+
+!Depth16Image methodsFor:'accessing'!
+
+valueAtX:x y:y
+ "retrieve a pixel at x/y; return a pixelValue.
+ Pixels start at x=0 , y=0 for upper left pixel, end at
+ x = width-1, y=height-1 for lower right pixel"
+
+ |lineIndex "{ Class: SmallInteger }"|
+
+ lineIndex := (width * 2 * y) + 1.
+
+ "left pixel in high bits"
+ ^ bytes wordAt:(lineIndex + (x * 2)) MSB:true.
+!
+
+atX:x y:y putValue:aPixelValue
+ "set the pixel at x/y to aPixelValue.
+ Pixels start at x=0 , y=0 for upper left pixel, end at
+ x = width-1, y=height-1 for lower right pixel"
+
+ |lineIndex "{ Class: SmallInteger }"|
+
+ lineIndex := (width * 2 * y) + 1.
+
+ bytes wordAt:(lineIndex + (x * 2)) put:aPixelValue MSB:true
+! !
--- a/Depth1Image.st Thu Sep 21 13:40:25 1995 +0200
+++ b/Depth1Image.st Mon Oct 23 18:00:19 1995 +0100
@@ -21,7 +21,7 @@
COPYRIGHT (c) 1993 by Claus Gittinger
All Rights Reserved
-$Header: /cvs/stx/stx/libview/Depth1Image.st,v 1.12 1995-03-18 05:10:16 claus Exp $
+$Header: /cvs/stx/stx/libview/Depth1Image.st,v 1.13 1995-10-23 16:58:41 cg Exp $
'!
!Depth1Image class methodsFor:'documentation'!
@@ -42,7 +42,7 @@
version
"
-$Header: /cvs/stx/stx/libview/Depth1Image.st,v 1.12 1995-03-18 05:10:16 claus Exp $
+$Header: /cvs/stx/stx/libview/Depth1Image.st,v 1.13 1995-10-23 16:58:41 cg Exp $
"
!
@@ -452,6 +452,14 @@
f := Form width:width height:height fromArray:bytes.
f colorMap:colorMap.
^ f
+!
+
+paletteImageAsTrueColorFormOn:aDevice
+ "since all devices must support monochrome images, and
+ a 2-entry colormap is implemented by ST/X's drawForm methods,
+ we can do this on all color devices as a palette image."
+
+ ^ self paletteImageAsPseudoFormOn:aDevice
! !
!Depth1Image methodsFor:'magnification'!
--- a/DevDraw.st Thu Sep 21 13:40:25 1995 +0200
+++ b/DevDraw.st Mon Oct 23 18:00:19 1995 +0100
@@ -23,7 +23,7 @@
COPYRIGHT (c) 1992 by Claus Gittinger
All Rights Reserved
-$Header: /cvs/stx/stx/libview/Attic/DevDraw.st,v 1.27 1995-09-07 12:29:07 claus Exp $
+$Header: /cvs/stx/stx/libview/Attic/DevDraw.st,v 1.28 1995-10-23 16:58:49 cg Exp $
'!
!DeviceDrawable class methodsFor:'documentation'!
@@ -44,7 +44,7 @@
version
"
-$Header: /cvs/stx/stx/libview/Attic/DevDraw.st,v 1.27 1995-09-07 12:29:07 claus Exp $
+$Header: /cvs/stx/stx/libview/Attic/DevDraw.st,v 1.28 1995-10-23 16:58:49 cg Exp $
"
!
@@ -1967,6 +1967,25 @@
height:h
with:gcId
]
+!
+
+copyBitsFrom:aByteArray bitsPerPixel:bpp depth:depth width:srcW height:srcH x:srcX y:srcY toX:dstX y:dstY
+ "copy bits from a smalltalk byteArray.
+ The bits found there are supposed to be in the devices native format (i.e.
+ translated to allocated color indices on pseudoColor devices and padded as required.
+ The byteOrder is MSB and will be converted as appropriate by the underlying devices
+ method to whatever the device needs."
+
+ device
+ drawBits:aByteArray bitsPerPixel:bpp depth:depth
+ width:srcW height:srcH
+ x:srcX y:srcY
+ into:drawableId
+ x:dstX y:dstY
+ width:(self width) height:(self height)
+ with:gcId.
+
+ "Created: 21.10.1995 / 00:04:22 / cg"
! !
!DeviceDrawable methodsFor:'filling'!
--- a/DevWorkst.st Thu Sep 21 13:40:25 1995 +0200
+++ b/DevWorkst.st Mon Oct 23 18:00:19 1995 +0100
@@ -14,6 +14,9 @@
instanceVariableNames:'displayId
visualType monitorType
depth ncells bitsPerRGB
+ bitsRed bitsGreen bitsBlue
+ redMask greenMask blueMask
+ redShift greenShift blueShift
hasColors hasGreyscales
width height widthMM heightMM resolutionHor resolutionVer
idToViewMapping knownViews knownIds knownBitmaps knownBitmapIds
@@ -36,7 +39,7 @@
COPYRIGHT (c) 1993 by Claus Gittinger
All Rights Reserved
-$Header: /cvs/stx/stx/libview/Attic/DevWorkst.st,v 1.45 1995-09-19 14:58:06 claus Exp $
+$Header: /cvs/stx/stx/libview/Attic/DevWorkst.st,v 1.46 1995-10-23 16:58:55 cg Exp $
'!
!DeviceWorkstation class methodsFor:'documentation'!
@@ -57,7 +60,7 @@
version
"
-$Header: /cvs/stx/stx/libview/Attic/DevWorkst.st,v 1.45 1995-09-19 14:58:06 claus Exp $
+$Header: /cvs/stx/stx/libview/Attic/DevWorkst.st,v 1.46 1995-10-23 16:58:55 cg Exp $
"
!
@@ -74,14 +77,24 @@
visualType <Symbol> one of #StaticGray, #PseudoColor, ... #TrueColor
monitorType <Symbol> one of #monochrome, #color, #unknown
- depth <Integer> bits per color
- ncells <Integer> number of colors (i.e. colormap size; not always == 2^depth)
- bitsPerRGB <Integer> number of valid bits per rgb component
+ depth <SmallInteger> bits per color
+ ncells <SmallInteger> number of colors (i.e. colormap size; not always == 2^depth)
+ bitsPerRGB <SmallInteger> number of valid bits per rgb component
(actual number taken in A/D converter; not all devices report the true value)
+ bitsRed <SmallInteger> number of red bits (only valid for TrueColor displays)
+ bitsGreen <SmallInteger> number of green bits (only valid for TrueColor displays)
+ bitsBlue <SmallInteger> number of blue bits (only valid for TrueColor displays)
+ redMask <SmallInteger> shifted red mask (only useful for TrueColor displays)
+ greenMask <SmallInteger> shifted green mask (only useful for TrueColor displays)
+ blueMask <SmallInteger> shifted blue mask (only useful for TrueColor displays)
+ shiftRed <SmallInteger> number of bits to shift red bits (only valid for TrueColor displays)
+ shiftGreen <SmallInteger> number of bits to shift green bits (only valid for TrueColor displays)
+ shiftBlue <SmallInteger> number of bits to shift blue bits (only valid for TrueColor displays)
+
hasColors <Boolean> true, if display supports colors
hasGreyscales <Boolean> true, if display supports grey-scales (i.e is not b/w display)
- width <Integer> number of horizontal pixels
- height <Integer> number of vertical pixels
+ width <SmallInteger> number of horizontal pixels
+ height <SmallInteger> number of vertical pixels
heightMM <Number> screen height in millimeter
widthMM <Number> screen width in millimeter
resolutionHor <Number> pixels per horizontal millimeter
@@ -964,17 +977,116 @@
!
bitsPerRGB
- "return the number of valid bits per rgb component.
+ "return the number of valid bits per rgb component;
Currently, assume that r/g/b all have the same precision,
which is a stupid assumption (there may be some, where less
resolution is available in the blue component).
- Therefore, this may be changed to return a 3-element vector."
+ Therefore, this may be changed to return a 3-element vector.
+ In the meantime, use bitsRed/bitsGreen/bitsBlue to get this information."
^ bitsPerRGB
"
Display bitsPerRGB
"
+
+ "Modified: 21.10.1995 / 00:46:27 / cg"
+!
+
+bitsRed
+ "return the number of valid bits in the red component."
+
+ bitsRed isNil ifTrue:[
+ "/ not a truecolor display
+ ^ bitsPerRGB
+ ].
+ ^ bitsRed
+
+ "
+ Display bitsRed
+ "
+
+ "Created: 21.10.1995 / 00:44:55 / cg"
+!
+
+bitsGreen
+ "return the number of valid bits in the red component."
+
+ bitsGreen isNil ifTrue:[
+ "/ not a truecolor display
+ ^ bitsPerRGB
+ ].
+ ^ bitsGreen
+
+ "
+ Display bitsGreen
+ "
+
+ "Created: 21.10.1995 / 00:45:11 / cg"
+!
+
+bitsBlue
+ "return the number of valid bits in the red component."
+
+ bitsBlue isNil ifTrue:[
+ "/ not a truecolor display
+ ^ bitsPerRGB
+ ].
+ ^ bitsBlue
+
+ "
+ Display bitsBlue
+ "
+
+ "Created: 21.10.1995 / 00:45:27 / cg"
+!
+
+shiftBlue
+ "return the count by which the blue bits are to be shifted
+ when forming a color index.
+ This only makes sense with trueColor displays; therefore,
+ nil is returned on all others."
+
+ ^ blueShift
+
+ "
+ Display shiftBlue
+ "
+
+ "Created: 21.10.1995 / 00:45:27 / cg"
+ "Modified: 21.10.1995 / 00:47:58 / cg"
+!
+
+shiftRed
+ "return the count by which the red bits are to be shifted
+ when forming a color index.
+ This only makes sense with trueColor displays; therefore,
+ nil is returned on all others."
+
+ ^ redShift
+
+ "
+ Display shiftRed
+ "
+
+ "Created: 21.10.1995 / 00:45:27 / cg"
+ "Modified: 21.10.1995 / 00:48:10 / cg"
+!
+
+shiftGreen
+ "return the count by which the red bits are to be shifted
+ when forming a color index.
+ This only makes sense with trueColor displays; therefore,
+ nil is returned on all others."
+
+ ^ greenShift
+
+ "
+ Display shiftGreen
+ "
+
+ "Created: 21.10.1995 / 00:45:27 / cg"
+ "Modified: 21.10.1995 / 00:48:28 / cg"
!
visualType:aSymbol
@@ -1152,6 +1264,33 @@
"
!
+hasExtension:extensionString
+ "query for an X extension. The method here is provide for XWorkstation
+ protocol compatibility only."
+
+ ^ false
+
+ "
+ Display hasExtension:'XVideo'
+ Display hasExtension:'Input'
+ Display hasExtension:'GLX'
+ Display hasExtension:'X3D-PEX'
+ Display hasExtension:'XInputExtension'
+ Display hasExtension:'SHAPE'
+ Display hasExtension:'MIT-SHM'
+ Display hasExtension:'SGIFullScreenStereo'
+ "
+!
+
+supportedImageFormats
+ "return an array with supported image formats; each array entry
+ is another array, consisting of depth and bitsPerPixel values.
+ Here, we return a single format only; every graphics device must
+ support b&w single bit images."
+
+ ^ #( 1 1) "/ depth=1 bitsPerPixel=1
+!
+
isSlow
"return true, if this is a relatively slow device -
used to turn off things like popup-shadows"
--- a/DeviceWorkstation.st Thu Sep 21 13:40:25 1995 +0200
+++ b/DeviceWorkstation.st Mon Oct 23 18:00:19 1995 +0100
@@ -14,6 +14,9 @@
instanceVariableNames:'displayId
visualType monitorType
depth ncells bitsPerRGB
+ bitsRed bitsGreen bitsBlue
+ redMask greenMask blueMask
+ redShift greenShift blueShift
hasColors hasGreyscales
width height widthMM heightMM resolutionHor resolutionVer
idToViewMapping knownViews knownIds knownBitmaps knownBitmapIds
@@ -36,7 +39,7 @@
COPYRIGHT (c) 1993 by Claus Gittinger
All Rights Reserved
-$Header: /cvs/stx/stx/libview/DeviceWorkstation.st,v 1.45 1995-09-19 14:58:06 claus Exp $
+$Header: /cvs/stx/stx/libview/DeviceWorkstation.st,v 1.46 1995-10-23 16:58:55 cg Exp $
'!
!DeviceWorkstation class methodsFor:'documentation'!
@@ -57,7 +60,7 @@
version
"
-$Header: /cvs/stx/stx/libview/DeviceWorkstation.st,v 1.45 1995-09-19 14:58:06 claus Exp $
+$Header: /cvs/stx/stx/libview/DeviceWorkstation.st,v 1.46 1995-10-23 16:58:55 cg Exp $
"
!
@@ -74,14 +77,24 @@
visualType <Symbol> one of #StaticGray, #PseudoColor, ... #TrueColor
monitorType <Symbol> one of #monochrome, #color, #unknown
- depth <Integer> bits per color
- ncells <Integer> number of colors (i.e. colormap size; not always == 2^depth)
- bitsPerRGB <Integer> number of valid bits per rgb component
+ depth <SmallInteger> bits per color
+ ncells <SmallInteger> number of colors (i.e. colormap size; not always == 2^depth)
+ bitsPerRGB <SmallInteger> number of valid bits per rgb component
(actual number taken in A/D converter; not all devices report the true value)
+ bitsRed <SmallInteger> number of red bits (only valid for TrueColor displays)
+ bitsGreen <SmallInteger> number of green bits (only valid for TrueColor displays)
+ bitsBlue <SmallInteger> number of blue bits (only valid for TrueColor displays)
+ redMask <SmallInteger> shifted red mask (only useful for TrueColor displays)
+ greenMask <SmallInteger> shifted green mask (only useful for TrueColor displays)
+ blueMask <SmallInteger> shifted blue mask (only useful for TrueColor displays)
+ shiftRed <SmallInteger> number of bits to shift red bits (only valid for TrueColor displays)
+ shiftGreen <SmallInteger> number of bits to shift green bits (only valid for TrueColor displays)
+ shiftBlue <SmallInteger> number of bits to shift blue bits (only valid for TrueColor displays)
+
hasColors <Boolean> true, if display supports colors
hasGreyscales <Boolean> true, if display supports grey-scales (i.e is not b/w display)
- width <Integer> number of horizontal pixels
- height <Integer> number of vertical pixels
+ width <SmallInteger> number of horizontal pixels
+ height <SmallInteger> number of vertical pixels
heightMM <Number> screen height in millimeter
widthMM <Number> screen width in millimeter
resolutionHor <Number> pixels per horizontal millimeter
@@ -964,17 +977,116 @@
!
bitsPerRGB
- "return the number of valid bits per rgb component.
+ "return the number of valid bits per rgb component;
Currently, assume that r/g/b all have the same precision,
which is a stupid assumption (there may be some, where less
resolution is available in the blue component).
- Therefore, this may be changed to return a 3-element vector."
+ Therefore, this may be changed to return a 3-element vector.
+ In the meantime, use bitsRed/bitsGreen/bitsBlue to get this information."
^ bitsPerRGB
"
Display bitsPerRGB
"
+
+ "Modified: 21.10.1995 / 00:46:27 / cg"
+!
+
+bitsRed
+ "return the number of valid bits in the red component."
+
+ bitsRed isNil ifTrue:[
+ "/ not a truecolor display
+ ^ bitsPerRGB
+ ].
+ ^ bitsRed
+
+ "
+ Display bitsRed
+ "
+
+ "Created: 21.10.1995 / 00:44:55 / cg"
+!
+
+bitsGreen
+ "return the number of valid bits in the red component."
+
+ bitsGreen isNil ifTrue:[
+ "/ not a truecolor display
+ ^ bitsPerRGB
+ ].
+ ^ bitsGreen
+
+ "
+ Display bitsGreen
+ "
+
+ "Created: 21.10.1995 / 00:45:11 / cg"
+!
+
+bitsBlue
+ "return the number of valid bits in the red component."
+
+ bitsBlue isNil ifTrue:[
+ "/ not a truecolor display
+ ^ bitsPerRGB
+ ].
+ ^ bitsBlue
+
+ "
+ Display bitsBlue
+ "
+
+ "Created: 21.10.1995 / 00:45:27 / cg"
+!
+
+shiftBlue
+ "return the count by which the blue bits are to be shifted
+ when forming a color index.
+ This only makes sense with trueColor displays; therefore,
+ nil is returned on all others."
+
+ ^ blueShift
+
+ "
+ Display shiftBlue
+ "
+
+ "Created: 21.10.1995 / 00:45:27 / cg"
+ "Modified: 21.10.1995 / 00:47:58 / cg"
+!
+
+shiftRed
+ "return the count by which the red bits are to be shifted
+ when forming a color index.
+ This only makes sense with trueColor displays; therefore,
+ nil is returned on all others."
+
+ ^ redShift
+
+ "
+ Display shiftRed
+ "
+
+ "Created: 21.10.1995 / 00:45:27 / cg"
+ "Modified: 21.10.1995 / 00:48:10 / cg"
+!
+
+shiftGreen
+ "return the count by which the red bits are to be shifted
+ when forming a color index.
+ This only makes sense with trueColor displays; therefore,
+ nil is returned on all others."
+
+ ^ greenShift
+
+ "
+ Display shiftGreen
+ "
+
+ "Created: 21.10.1995 / 00:45:27 / cg"
+ "Modified: 21.10.1995 / 00:48:28 / cg"
!
visualType:aSymbol
@@ -1152,6 +1264,33 @@
"
!
+hasExtension:extensionString
+ "query for an X extension. The method here is provide for XWorkstation
+ protocol compatibility only."
+
+ ^ false
+
+ "
+ Display hasExtension:'XVideo'
+ Display hasExtension:'Input'
+ Display hasExtension:'GLX'
+ Display hasExtension:'X3D-PEX'
+ Display hasExtension:'XInputExtension'
+ Display hasExtension:'SHAPE'
+ Display hasExtension:'MIT-SHM'
+ Display hasExtension:'SGIFullScreenStereo'
+ "
+!
+
+supportedImageFormats
+ "return an array with supported image formats; each array entry
+ is another array, consisting of depth and bitsPerPixel values.
+ Here, we return a single format only; every graphics device must
+ support b&w single bit images."
+
+ ^ #( 1 1) "/ depth=1 bitsPerPixel=1
+!
+
isSlow
"return true, if this is a relatively slow device -
used to turn off things like popup-shadows"
--- a/Image.st Thu Sep 21 13:40:25 1995 +0200
+++ b/Image.st Mon Oct 23 18:00:19 1995 +0100
@@ -29,7 +29,7 @@
COPYRIGHT (c) 1991 by Claus Gittinger
All Rights Reserved
-$Header: /cvs/stx/stx/libview/Image.st,v 1.41 1995-09-21 11:39:49 claus Exp $
+$Header: /cvs/stx/stx/libview/Image.st,v 1.42 1995-10-23 16:59:09 cg Exp $
'!
!Image class methodsFor:'documentation'!
@@ -50,7 +50,7 @@
version
"
-$Header: /cvs/stx/stx/libview/Image.st,v 1.41 1995-09-21 11:39:49 claus Exp $
+$Header: /cvs/stx/stx/libview/Image.st,v 1.42 1995-10-23 16:59:09 cg Exp $
"
!
@@ -161,6 +161,7 @@
depth == 2 ifTrue:[^ Depth2Image].
depth == 4 ifTrue:[^ Depth4Image].
depth == 8 ifTrue:[^ Depth8Image].
+ depth == 16 ifTrue:[^ Depth16Image].
depth == 24 ifTrue:[^ Depth24Image].
^ self
! !
@@ -1771,7 +1772,7 @@
^ self rgbImageAsGreyFormOn:aDevice
].
(visual == #TrueColor) ifTrue:[
- ^ self rgbImageAsTrueFormOn:aDevice
+ ^ self rgbImageAsTrueColorFormOn:aDevice
].
^ self rgbImageAsPseudoFormOn:aDevice
!
@@ -1857,6 +1858,263 @@
"return a pseudocolor form from the rgb-picture"
^ self subclassResponsibility
+!
+
+rgbImageAsTrueColorFormOn:aDevice
+ "return a truecolor form from the rgb-picture."
+
+ |bestFormat usedDeviceDepth usedDeviceBitsPerPixel depth
+ myDepth form imageBits destIndex srcIndex
+ rightShiftR rightShiftG rightShiftB shiftRed shiftGreen shiftBlue ok|
+
+ bestFormat := self bestSupportedImageFormatFor:aDevice.
+ usedDeviceDepth := bestFormat at:1.
+ usedDeviceBitsPerPixel := bestFormat at:2.
+
+ rightShiftR := (8 - aDevice bitsRed).
+ rightShiftG := (8 - aDevice bitsGreen).
+ rightShiftB := (8 - aDevice bitsBlue).
+
+ shiftRed := aDevice shiftRed.
+ shiftGreen := aDevice shiftGreen.
+ shiftBlue := aDevice shiftBlue.
+
+ myDepth := self bitsPerPixel.
+ myDepth == usedDeviceBitsPerPixel ifTrue:[
+ "/
+ "/ first, the trivial case, where the depths match
+ "/
+ imageBits := bytes.
+ ] ifFalse:[
+ "/
+ "/ for now, only a few formats are supported
+ "/
+ ((myDepth == 24) and:[usedDeviceBitsPerPixel == 16]) ifTrue:[
+ imageBits := ByteArray uninitializedNew:(width * height * 2).
+
+ "/ now, walk over the image and compose 16bit values from the r/g/b triples
+
+ ok := false.
+%{
+#ifdef NOTDEF
+ if (__isSmallInteger(_INST(height))
+ && __isSmallInteger(_INST(width))
+ && __isSmallInteger(rightShiftR)
+ && __isSmallInteger(rightShiftG)
+ && __isSmallInteger(rightShiftB)
+ && __isSmallInteger(shiftRed)
+ && __isSmallInteger(shiftGreen)
+ && __isSmallInteger(shiftBlue)
+ && __isByteArray(_INST(bytes))
+ && __isByteArray(imageBits)) {
+ int rShRed = __intVal(rightShiftR),
+ rShGreen = __intVal(rightShiftG),
+ rShBlue = __intVal(rightShiftB),
+ lShRed = __intVal(shiftRed),
+ lShGreen = __intVal(shiftGreen),
+ lShBlue = __intVal(shiftBlue);
+ int x, y;
+
+ unsigned char *srcPtr = _ByteArrayInstPtr(_INST(bytes))->ba_element;
+ char *dstPtr = _ByteArrayInstPtr(imageBits)->ba_element;
+
+ for (y=__intVal(_INST(height)); y > 0; y--) {
+ for (x=__intVal(_INST(width)); x > 0; x--) {
+ unsigned r, g, b, v;
+
+ r = srcPtr[0] >> rShRed;
+ g = srcPtr[1] >> rShGreen;
+ b = srcPtr[2] >> rShBlue;
+ v = r << lShRed;
+ v |= (g << lShGreen);
+ v |= (b << lShBlue);
+#ifdef MSBFIRST
+ ((short *)dstPtr)[0] = v;
+#else
+ dstPtr[0] = (v>>8) & 0xFF;
+ dstPtr[1] = (v) & 0xFF;
+#endif
+ dstPtr += 2;
+ srcPtr += 3;
+ }
+ }
+ ok = true;
+ }
+#endif
+%}.
+ ok ifFalse:[
+ "/ this fallback is only executed if type is not
+ "/ what the primitive expects; for example, if the bytes-instvar
+ "/ is not a ByteArray
+
+ rightShiftR := rightShiftR negated.
+ rightShiftG := rightShiftG negated.
+ rightShiftB := rightShiftB negated.
+
+ destIndex := 1.
+ srcIndex := 1.
+
+ 0 to:height-1 do:[:y |
+ 0 to:width-1 do:[:x |
+ |r g b v|
+
+ r := bytes at:srcIndex.
+ g := bytes at:(srcIndex + 1).
+ b := bytes at:(srcIndex + 2).
+
+ r := r bitShift:rightShiftR.
+ g := g bitShift:rightShiftG.
+ b := b bitShift:rightShiftB.
+
+ v := r bitShift:shiftRed.
+ v := v bitOr:(g bitShift:shiftGreen).
+ v := v bitOr:(b bitShift:shiftBlue).
+
+ imageBits wordAt:destIndex put:v MSB:true.
+ destIndex := destIndex + 2.
+ srcIndex := srcIndex + 3.
+ ]
+ ]
+ ]
+ ] ifFalse:[
+ ((myDepth == 24) and:[usedDeviceBitsPerPixel == 32]) ifTrue:[
+ imageBits := ByteArray uninitializedNew:(width * height * 4).
+
+ "/ now, walk over the image and compose 32bit values from the r/g/b triples
+
+ ok := false.
+%{
+#ifdef NOTDEF
+ if (__isSmallInteger(_INST(height))
+ && __isSmallInteger(_INST(width))
+ && __isSmallInteger(rightShiftR)
+ && __isSmallInteger(rightShiftG)
+ && __isSmallInteger(rightShiftB)
+ && __isSmallInteger(shiftRed)
+ && __isSmallInteger(shiftGreen)
+ && __isSmallInteger(shiftBlue)
+ && __isByteArray(_INST(bytes))
+ && __isByteArray(imageBits)) {
+ int rShRed = __intVal(rightShiftR),
+ rShGreen = __intVal(rightShiftG),
+ rShBlue = __intVal(rightShiftB),
+ lShRed = __intVal(shiftRed),
+ lShGreen = __intVal(shiftGreen),
+ lShBlue = __intVal(shiftBlue);
+ int x, y;
+
+ unsigned char *srcPtr = _ByteArrayInstPtr(_INST(bytes))->ba_element;
+ char *dstPtr = _ByteArrayInstPtr(imageBits)->ba_element;
+
+ if ((rShRed == 0)
+ && (rShGreen == 0)
+ && (rShBlue == 0)) {
+ for (y=__intVal(_INST(height)); y > 0; y--) {
+ for (x=__intVal(_INST(width)); x > 0; x--) {
+ unsigned v;
+
+ v = srcPtr[0] << lShRed;
+ v |= (srcPtr[1] << lShGreen);
+ v |= (srcPtr[2] << lShBlue);
+#ifdef MSBFIRST
+ ((int *)dstPtr)[0] = v;
+#else
+ dstPtr[0] = (v>>24) & 0xFF;
+ dstPtr[1] = (v>>16) & 0xFF;
+ dstPtr[2] = (v>>8) & 0xFF;
+ dstPtr[3] = (v) & 0xFF;
+#endif
+ dstPtr += 4;
+ srcPtr += 3;
+ }
+ }
+ } else {
+ for (y=__intVal(_INST(height)); y > 0; y--) {
+ for (x=__intVal(_INST(width)); x > 0; x--) {
+ unsigned r, g, b, v;
+
+ r = srcPtr[0] >> rShRed;
+ g = srcPtr[1] >> rShGreen;
+ b = srcPtr[2] >> rShBlue;
+ v = r << lShRed;
+ v |= (g << lShGreen);
+ v |= (b << lShBlue);
+#ifdef MSBFIRST
+ ((int *)dstPtr)[0] = v;
+#else
+ dstPtr[0] = (v>>24) & 0xFF;
+ dstPtr[1] = (v>>16) & 0xFF;
+ dstPtr[2] = (v>>8) & 0xFF;
+ dstPtr[3] = (v) & 0xFF;
+#endif
+ dstPtr += 4;
+ srcPtr += 3;
+ }
+ }
+ }
+ ok = true;
+ }
+#endif
+%}.
+ ok ifFalse:[
+ "/ this fallback is only executed if type is not
+ "/ what the primitive expects; for example, if the bytes-instvar
+ "/ is not a ByteArray
+
+ rightShiftR := rightShiftR negated.
+ rightShiftG := rightShiftG negated.
+ rightShiftB := rightShiftB negated.
+
+ destIndex := 1.
+ srcIndex := 1.
+
+ 0 to:height-1 do:[:y |
+ 0 to:width-1 do:[:x |
+ |r g b v|
+
+ r := bytes at:srcIndex.
+ g := bytes at:(srcIndex + 1).
+ b := bytes at:(srcIndex + 2).
+
+ r := r bitShift:rightShiftR.
+ g := g bitShift:rightShiftG.
+ b := b bitShift:rightShiftB.
+
+ v := r bitShift:shiftRed.
+ v := v bitOr:(g bitShift:shiftGreen).
+ v := v bitOr:(b bitShift:shiftBlue).
+
+ imageBits doubleWordAt:destIndex put:v MSB:true.
+ destIndex := destIndex + 4.
+ srcIndex := srcIndex + 3.
+ ]
+ ]
+ ]
+ ].
+ ]
+ ].
+
+ imageBits isNil ifTrue:[
+ 'IMAGE: unimplemented trueColor depth in rgbImageAsTrueColorFormOn:' errorPrintNL.
+ ^ self rgbImageAsMonoFormOn:aDevice
+ ].
+
+ form := Form width:width height:height depth:usedDeviceDepth on:aDevice.
+ form isNil ifTrue:[
+ 'IMAGE: display bitmap creation failed' errorPrintNL.
+ ^ nil
+ ].
+ form initGC.
+
+ form
+ copyBitsFrom:imageBits bitsPerPixel:usedDeviceBitsPerPixel depth:usedDeviceDepth
+ width:width height:height
+ x:0 y:0 toX:0 y:0.
+
+ ^ form
+
+ "Created: 21.10.1995 / 02:15:18 / cg"
+ "Modified: 21.10.1995 / 19:30:11 / cg"
! !
!Image methodsFor:'converting palette images'!
@@ -1864,7 +2122,9 @@
paletteImageAsFormOn:aDevice
"return a device-form for the palette-image receiver"
- (aDevice visualType == #StaticGray) ifTrue:[
+ |type|
+
+ ((type := aDevice visualType) == #StaticGray) ifTrue:[
(aDevice depth == 8) ifTrue:[
^ self paletteImageAsGreyFormOn:aDevice
].
@@ -1879,7 +2139,14 @@
^ self paletteImageAsMonoFormOn:aDevice
].
- ^ self paletteImageAsPseudoFormOn:aDevice
+ (type == #TrueColor) ifTrue:[
+ ^ self paletteImageAsTrueColorFormOn:aDevice
+ ].
+ (type == #PseudoColor) ifTrue:[
+ ^ self paletteImageAsPseudoFormOn:aDevice
+ ].
+ "/ dump fallback: every device should implement b&w images ...
+ ^ self paletteImageAsMonoFormOn:aDevice
!
paletteImageAsMonoFormOn:aDevice
@@ -1930,6 +2197,203 @@
"return a dithered grey-deviceForm from the palette image."
^ self subclassResponsibility
+!
+
+paletteImageAsTrueColorFormOn:aDevice
+ "return a true-color device-form for the palette-image receiver."
+
+ |depth myDepth nColors colorValues
+ scaleRed scaleGreen scaleBlue redShift greenShift blueShift
+ form imageBits bestFormat usedDeviceDepth usedDeviceBitsPerPixel destIndex ok|
+
+ "/ this is a slow fallback method; this ought to be
+ "/ redefined in DepthxImage for more performance.
+
+ depth := aDevice depth.
+ myDepth := self bitsPerPixel.
+ myDepth > 12 ifTrue:[
+ 'IMAGE: depth > 12 not supported' errorPrintNL.
+ ^ nil
+ ].
+
+ "/ gather r/g/b values for all colors in the map ...
+
+ nColors := colorMap size.
+
+ "/ precompute scales to map from 0..100 into devices range
+ "/ (this may be different for the individual components)
+
+ scaleRed := ((1 bitShift:aDevice bitsRed) - 1) / 100.
+ scaleGreen := ((1 bitShift:aDevice bitsGreen) - 1) / 100.
+ scaleBlue := ((1 bitShift:aDevice bitsBlue) - 1) / 100.
+ redShift := aDevice shiftRed.
+ greenShift := aDevice shiftGreen.
+ blueShift := aDevice shiftBlue.
+
+ colorValues := Array uninitializedNew:nColors.
+
+ 1 to:nColors do:[:index |
+ |clr rv gv bv v|
+
+ clr := colorMap at:index.
+ clr notNil ifTrue:[
+ rv := (clr red * scaleRed) rounded.
+ gv := (clr green * scaleGreen) rounded.
+ bv := (clr blue * scaleBlue) rounded.
+
+ v := rv bitShift:redShift.
+ v := v bitOr:(gv bitShift:greenShift).
+ v := v bitOr:(bv bitShift:blueShift).
+ colorValues at:index put:v.
+"/ clr print. ' ' print.
+"/ rv print. ' ' print. gv print. ' ' print. bv print. ' ' print.
+"/ ' -> ' print. v printNL.
+
+ ]
+ ].
+
+ bestFormat := self bestSupportedImageFormatFor:aDevice.
+ usedDeviceDepth := bestFormat at:1.
+ usedDeviceBitsPerPixel := bestFormat at:2.
+
+ "/ for now, only support some depths
+
+ usedDeviceBitsPerPixel == 16 ifTrue:[
+ imageBits := ByteArray uninitializedNew:(width * height * 2).
+
+ "/ now, walk over the image and replace
+ "/ colorMap indices by color values in the bits array
+
+ ok := false.
+%{
+#ifdef NOTDEF
+ if (__isSmallInteger(_INST(height))
+ && __isSmallInteger(_INST(width))
+ && __isArray(colorValues)
+ && __isByteArray(_INST(bytes))
+ && (myDepth == __MKSMALLINT(8))
+ && __isByteArray(imageBits)) {
+ int x, y;
+
+ unsigned char *srcPtr = _ByteArrayInstPtr(_INST(bytes))->ba_element;
+ char *dstPtr = _ByteArrayInstPtr(imageBits)->ba_element;
+ OBJ *ap = __ArrayInstPtr(colorValues)->a_element;
+
+ for (y=__intVal(_INST(height)); y > 0; y--) {
+ for (x=__intVal(_INST(width)); x > 0; x--) {
+ unsigned idx, v;
+ OBJ clr;
+
+ idx = *srcPtr++;
+ clr = ap[idx];
+ v = __intVal(clr);
+#ifdef MSBFIRST
+ ((short *)dstPtr)[0] = v;
+#else
+ dstPtr[0] = (v>>8) & 0xFF;
+ dstPtr[1] = (v) & 0xFF;
+#endif
+ dstPtr += 2;
+ }
+ }
+ ok = true;
+ }
+#endif
+%}.
+ ok ifFalse:[
+ "/ this fallback is only executed if type is not
+ "/ what the primitive expects; for example, if the bytes-instvar
+ "/ is not a ByteArray
+ destIndex := 1.
+ 0 to:height-1 do:[:y |
+ 0 to:width-1 do:[:x |
+ |colorIndex|
+
+ colorIndex := self valueAtX:x y:y.
+ imageBits wordAt:destIndex put:(colorValues at:colorIndex + 1) MSB:true.
+ destIndex := destIndex + 2.
+ ]
+ ]
+ ]
+ ] ifFalse:[
+ usedDeviceBitsPerPixel == 32 ifTrue:[
+ imageBits := ByteArray uninitializedNew:(width * height * 4).
+
+ "/ now, walk over the image and replace
+ "/ colorMap indices by color values in the bits array
+
+ ok := false.
+%{
+#ifdef NOTDEF
+ if (__isSmallInteger(_INST(height))
+ && __isSmallInteger(_INST(width))
+ && __isArray(colorValues)
+ && __isByteArray(_INST(bytes))
+ && (myDepth == __MKSMALLINT(8))
+ && __isByteArray(imageBits)) {
+ int x, y;
+
+ unsigned char *srcPtr = _ByteArrayInstPtr(_INST(bytes))->ba_element;
+ char *dstPtr = _ByteArrayInstPtr(imageBits)->ba_element;
+ OBJ *ap = __ArrayInstPtr(colorValues)->a_element;
+
+ for (y=__intVal(_INST(height)); y > 0; y--) {
+ for (x=__intVal(_INST(width)); x > 0; x--) {
+ unsigned idx, v;
+ OBJ clr;
+
+ idx = *srcPtr++;
+ clr = ap[idx];
+ v = __intVal(clr);
+#ifdef MSBFIRST
+ ((short *)dstPtr)[0] = v;
+#else
+ dstPtr[0] = (v>>24) & 0xFF;
+ dstPtr[1] = (v>>16) & 0xFF;
+ dstPtr[2] = (v>>8) & 0xFF;
+ dstPtr[3] = (v) & 0xFF;
+#endif
+ dstPtr += 4;
+ }
+ }
+ ok = true;
+ }
+#endif
+%}.
+ ok ifFalse:[
+ destIndex := 1.
+ 0 to:height-1 do:[:y |
+ 0 to:width-1 do:[:x |
+ |colorIndex|
+
+ colorIndex := self valueAtX:x y:y.
+ imageBits doubleWordAt:destIndex put:(colorValues at:colorIndex + 1) MSB:true.
+ destIndex := destIndex + 4.
+ ]
+ ]
+ ]
+ ]
+ ].
+
+ imageBits isNil ifTrue:[
+ 'IMAGE: unimplemented trueColor depth in paletteImageAsTrueColorFormOn:' errorPrintNL.
+ ^ self paletteImageAsMonoFormOn:aDevice
+ ].
+
+ form :=
+ form := Form width:width height:height depth:usedDeviceDepth on:aDevice.
+ form isNil ifTrue:[^ nil].
+ form initGC.
+
+ form
+ copyBitsFrom:imageBits bitsPerPixel:usedDeviceBitsPerPixel depth:usedDeviceDepth
+ width:width height:height
+ x:0 y:0 toX:0 y:0.
+
+ ^ form
+
+ "Created: 20.10.1995 / 22:05:10 / cg"
+ "Modified: 21.10.1995 / 19:30:26 / cg"
! !
!Image methodsFor:'converting greyscale images'!
@@ -2001,6 +2465,10 @@
^ self greyImageAsPseudoFormOn:aDevice
].
+ (aDevice visualType == #TrueColor) ifTrue:[
+ ^ self greyImageAsTrueColorFormOn:aDevice
+ ].
+
self error:'cannot convert this format'.
^ nil
!
@@ -2213,6 +2681,118 @@
x:0 y:0
into:(f id) x:0 y:0 width:width height:height with:(f gcId).
^ f
+!
+
+greyImageAsTrueColorFormOn:aDevice
+ "return a true-color device-form for the grey-image receiver.
+ TODO: the pixel loops ought to be implemented as inline primitive code ..."
+
+ |depth myDepth nColors colorValues
+ scaleDown scaleRed scaleGreen scaleBlue redShift blueShift greenShift
+ form imageBitsdestIndex
+ bestFormat usedDeviceDepth usedDeviceBitsPerPixel imageBits destIndex|
+
+ "/ this is a slow fallback method; this ought to be
+ "/ redefined in DepthxImage for more performance.
+
+ depth := aDevice depth.
+ myDepth := self depth.
+ myDepth > 12 ifTrue:[
+ self error:'unsupported trueColor depth in greyImageAsTrueColorFormOn:'.
+ ^ nil
+ ].
+
+ "/ compute scale to map from my pixels into devices range
+
+ scaleDown := 1 bitShift:myDepth.
+ scaleRed := (1 bitShift:aDevice bitsRed).
+ scaleGreen := (1 bitShift:aDevice bitsGreen).
+ scaleBlue := (1 bitShift:aDevice bitsBlue).
+ redShift := aDevice shiftRed.
+ greenShift := aDevice shiftGreen.
+ blueShift := aDevice shiftBlue.
+
+ nColors := (1 bitShift:myDepth).
+ colorValues := Array new:nColors.
+ 1 to:nColors do:[:i |
+ |v gv bv rv nv|
+
+ "/ scale down to 0..1
+ v := (i-1) / scaleDown.
+ rv := (v * scaleRed) rounded.
+ gv := (v * scaleGreen) rounded.
+ bv := (v * scaleBlue) rounded.
+ nv := rv bitShift:redShift.
+ nv := nv bitOr:(gv bitShift:greenShift).
+ nv := nv bitOr:(bv bitShift:blueShift).
+ colorValues at:i put:nv
+ ].
+ photometric == #whiteIs0 ifTrue:[
+ "/ reverse the order; 0 is brightest
+ colorValues reverse
+ ].
+
+ bestFormat := self bestSupportedImageFormatFor:aDevice.
+ usedDeviceDepth := bestFormat at:1.
+ usedDeviceBitsPerPixel := bestFormat at:2.
+
+ "/ for now, only support some depths
+
+ usedDeviceBitsPerPixel == 16 ifTrue:[
+ imageBits := ByteArray uninitializedNew:(width * height * 2).
+
+ "/ now, walk over the image and replace
+ "/ colorMap indices by color values in the bits array
+
+ destIndex := 1.
+ 0 to:height-1 do:[:y |
+ 0 to:width-1 do:[:x |
+ |greyValue|
+
+ greyValue := self valueAtX:x y:y.
+ imageBits wordAt:destIndex put:(colorValues at:greyValue + 1) MSB:true.
+ destIndex := destIndex + 2.
+ ]
+ ]
+ ] ifFalse:[
+ usedDeviceBitsPerPixel == 32 ifTrue:[
+ imageBits := ByteArray uninitializedNew:(width * height * 4).
+
+ "/ now, walk over the image and replace
+ "/ colorMap indices by color values in the bits array
+
+ destIndex := 1.
+ 0 to:height-1 do:[:y |
+ 0 to:width-1 do:[:x |
+ |greyValue|
+
+ greyValue := self valueAtX:x y:y.
+ imageBits doubleWordAt:destIndex put:(colorValues at:greyValue + 1) MSB:true.
+ destIndex := destIndex + 4.
+ ]
+ ]
+ ]
+ ].
+
+ imageBits isNil ifTrue:[
+ 'IMAGE: unimplemented trueColor depth on greyImageAsTrueColorFormOn:' errorPrintNL.
+ ^ self paletteImageAsMonoFormOn:aDevice
+ ].
+
+ form :=
+ form := Form width:width height:height depth:usedDeviceDepth on:aDevice.
+ form isNil ifTrue:[^ nil].
+ form initGC.
+
+ form
+ copyBitsFrom:imageBits bitsPerPixel:usedDeviceBitsPerPixel depth:usedDeviceDepth
+ width:width height:height
+ x:0 y:0 toX:0 y:0.
+
+ ^ form
+
+ "Created: 20.10.1995 / 22:05:10 / cg"
+ "Modified: 21.10.1995 / 19:30:37 / cg"
! !
!Image methodsFor:'image manipulations'!
@@ -2700,6 +3280,59 @@
can only magnify 1,2,4,8 and 24 bit-per-pixel images. But this is done fast."
^ self subclassResponsibility
+!
+
+bestSupportedImageFormatFor:aDevice
+ "scan through the image formats as supported by aDevice,
+ and return the best to use when the receiver is to be represented
+ on it. The best format is the one with the same number or more bits per
+ pixel. Here, the smallest format found is taken."
+
+ |bestDeviceDepth bestDeviceBitsPerPixel myDepth maxDepth maxBitsPerPixel|
+
+ myDepth := self bitsPerPixel.
+ maxBitsPerPixel := 0.
+
+ aDevice supportedImageFormats do:[:entry |
+ |deviceImageDepth deviceImageBitsPerPixel|
+
+ deviceImageDepth := entry at:1.
+ deviceImageBitsPerPixel := entry at:2.
+ deviceImageBitsPerPixel > maxBitsPerPixel ifTrue:[
+ maxBitsPerPixel := deviceImageBitsPerPixel.
+ maxDepth := deviceImageDepth.
+ ].
+ deviceImageDepth >= myDepth ifTrue:[
+ deviceImageDepth == myDepth ifTrue:[
+ "/ take the better one ...
+ (bestDeviceDepth isNil
+ or:[(bestDeviceBitsPerPixel ~~ bestDeviceDepth)
+ and:[deviceImageDepth == deviceImageBitsPerPixel]]) ifTrue:[
+ bestDeviceDepth := deviceImageDepth.
+ bestDeviceBitsPerPixel := deviceImageBitsPerPixel.
+ ]
+ ] ifFalse:[
+ "/ take the next-larger depth
+ (bestDeviceDepth isNil
+ or:[deviceImageBitsPerPixel < bestDeviceBitsPerPixel]) ifTrue:[
+ bestDeviceDepth := deviceImageDepth.
+ bestDeviceBitsPerPixel := deviceImageBitsPerPixel.
+ ]
+ ]
+ ].
+ ].
+ bestDeviceDepth isNil ifTrue:[
+ maxBitsPerPixel == 0 ifTrue:[
+ bestDeviceDepth := bestDeviceBitsPerPixel := aDevice depth.
+ ] ifFalse:[
+ bestDeviceDepth := maxDepth.
+ bestDeviceBitsPerPixel := maxBitsPerPixel
+ ]
+ ].
+ ^ Array with:bestDeviceDepth with:bestDeviceBitsPerPixel
+
+ "Created: 21.10.1995 / 02:17:48 / cg"
+ "Modified: 21.10.1995 / 03:52:45 / cg"
! !
!Image methodsFor: 'binary storage'!
--- a/Make.proto Thu Sep 21 13:40:25 1995 +0200
+++ b/Make.proto Mon Oct 23 18:00:19 1995 +0100
@@ -1,4 +1,4 @@
-# $Header: /cvs/stx/stx/libview/Make.proto,v 1.42 1995-09-12 10:47:30 claus Exp $
+# $Header: /cvs/stx/stx/libview/Make.proto,v 1.43 1995-10-23 16:59:57 cg Exp $
#
# -------------- no need to change anything below ----------
@@ -15,7 +15,7 @@
RCSSOURCES=*.st Make.proto styles/*.style resources/*.rs
-all:: abbrev.stc objs $(NOTINLIBOBJS) classList.stc $(OBJTARGET) $(LIBVIEW_MORE) GENLIBLIST
+all:: abbrev.stc objs $(NOTINLIBOBJS) classList.stc $(OBJTARGET) $(LIBVIEW_EXTRA_TARGETS) GENLIBLIST
#
# although all files are compiled here,
@@ -83,10 +83,11 @@
WGroup.$(O) \
KeybdFwd.$(O) \
KeybdMap.$(O) \
- ImageRdr.$(O) \
+ ImageRdr.$(O) \
RsrcPack.$(O) \
ViewStyle.$(O) \
- $(MOREOBJS)
+ $(MOREOBJS) \
+ Depth16Image.$(O)
smalllib:
@-rm classList.stc
@@ -153,6 +154,10 @@
SimpleView.$(O):
$(MAKE) $(BIG_STFILE_RULE) BIG_FILE=SimpleView CC=$(CC)
+#
+# on my 320H, do not compile DeviceWorkstation with -O2;
+# compiler is running out of space ...
+#
AIX:
$(MAKE) DevWorkst.o
$(MAKE) OPT=-O2
@@ -191,6 +196,7 @@
Depth2Image.o: Depth2Image.st $(STCHDR) ../include/Image.H ../include/Object.H
Depth4Image.o: Depth4Image.st $(STCHDR) ../include/Image.H ../include/Object.H
Depth8Image.o: Depth8Image.st $(STCHDR) ../include/Image.H ../include/Object.H
+Depth16Image.o: Depth16Image.st $(STCHDR) ../include/Image.H ../include/Object.H
DevDraw.o: DevDraw.st $(STCHDR) ../include/DMedium.H ../include/GC.H ../include/Object.H
DevFormH.o: DevFormH.st $(STCHDR) ../include/DevHandle.H ../include/Object.H
DevHandle.o: DevHandle.st $(STCHDR) ../include/Object.H
--- a/NXWorkst.st Thu Sep 21 13:40:25 1995 +0200
+++ b/NXWorkst.st Mon Oct 23 18:00:19 1995 +0100
@@ -30,16 +30,24 @@
All non-monochrome stuff is untested (I only have a monochroome station)
-$Header: /cvs/stx/stx/libview/Attic/NXWorkst.st,v 1.11 1995-07-23 02:27:49 claus Exp $
+$Header: /cvs/stx/stx/libview/Attic/NXWorkst.st,v 1.12 1995-10-23 16:59:17 cg Exp $
written spring 92 by claus
'!
+!NeXTWorkstation primitiveDefinitions!
+
%{
#include <stdio.h>
#include <dpsclient/wraps.h>
#include <dpsclient/psops.h>
+%}
+! !
+
+!NeXTWorkstation primitiveFunctions!
+
+%{
/*
* cannot include objc stuff - too many name conflicts
*/
@@ -62,6 +70,7 @@
}
%}
+! !
!NeXTWorkstation class methodsFor:'initialization'!
--- a/NeXTWorkstation.st Thu Sep 21 13:40:25 1995 +0200
+++ b/NeXTWorkstation.st Mon Oct 23 18:00:19 1995 +0100
@@ -30,16 +30,24 @@
All non-monochrome stuff is untested (I only have a monochroome station)
-$Header: /cvs/stx/stx/libview/NeXTWorkstation.st,v 1.11 1995-07-23 02:27:49 claus Exp $
+$Header: /cvs/stx/stx/libview/NeXTWorkstation.st,v 1.12 1995-10-23 16:59:17 cg Exp $
written spring 92 by claus
'!
+!NeXTWorkstation primitiveDefinitions!
+
%{
#include <stdio.h>
#include <dpsclient/wraps.h>
#include <dpsclient/psops.h>
+%}
+! !
+
+!NeXTWorkstation primitiveFunctions!
+
+%{
/*
* cannot include objc stuff - too many name conflicts
*/
@@ -62,6 +70,7 @@
}
%}
+! !
!NeXTWorkstation class methodsFor:'initialization'!
--- a/SimpleView.st Thu Sep 21 13:40:25 1995 +0200
+++ b/SimpleView.st Mon Oct 23 18:00:19 1995 +0100
@@ -44,7 +44,7 @@
COPYRIGHT (c) 1989 by Claus Gittinger
All Rights Reserved
-$Header: /cvs/stx/stx/libview/SimpleView.st,v 1.22 1995-09-21 11:40:25 claus Exp $
+$Header: /cvs/stx/stx/libview/SimpleView.st,v 1.23 1995-10-23 16:59:24 cg Exp $
'!
!SimpleView class methodsFor:'documentation'!
@@ -65,7 +65,7 @@
version
"
-$Header: /cvs/stx/stx/libview/SimpleView.st,v 1.22 1995-09-21 11:40:25 claus Exp $
+$Header: /cvs/stx/stx/libview/SimpleView.st,v 1.23 1995-10-23 16:59:24 cg Exp $
"
!
@@ -1172,6 +1172,47 @@
]
!
+beInvisible
+ self hidden:true.
+ realized ifTrue:[
+ self unrealize
+ ]
+
+ "Created: 22.9.1995 / 15:29:01 / claus"
+!
+
+beVisible
+ self hidden:false.
+ realized ifFalse:[
+ self realize
+ ]
+
+ "
+ |top topFrame check list|
+
+ top := StandardSystemView new.
+ top extent:150@400.
+ topFrame := VerticalPanelView origin:0.0@0.0 corner:1.0@0.4 in:top.
+ topFrame horizontalLayout:#leftSpace.
+
+ topFrame add:(check := CheckBox label:'hidden').
+ check pressAction:[list beInvisible].
+ check releaseAction:[list beVisible].
+
+ list := ScrollableView for:SelectionInListView.
+ list origin:0.0@0.4 corner:1.0@1.0.
+ list list:#('foo' 'bar' 'baz').
+ top add:list.
+
+ check turnOn.
+ list beInvisible.
+
+ top open
+ "
+
+ "Created: 22.9.1995 / 15:50:33 / claus"
+!
+
hidden:aBoolean
"if the argument is true, the receiver view will not
be realized automatically when superview is realized"
@@ -1372,6 +1413,14 @@
"set the window group."
windowGroup := aGroup
+!
+
+aspect:aspectSymbol
+ "ST-80 style updating: If a views aspectSymbol is nonNil,
+ it will respond to changes of this aspect from the model.
+ Alias for aspectMessage: for ST-80 compatibility."
+
+ self aspectMessage:aspectSymbol
! !
!SimpleView methodsFor:'event handling'!
@@ -1489,6 +1538,16 @@
]
!
+subViewChangedSize
+ "some subview has changed its size; we are not interrested
+ in that here, but some geometry managers redefine this, to reorganize
+ components if that happens."
+
+ ^ self
+
+ "Created: 22.9.1995 / 14:44:59 / claus"
+!
+
configureX:x y:y width:newWidth height:newHeight
"my size has changed by window manager action"
@@ -1728,6 +1787,9 @@
]
].
self changed:#sizeOfView with:how.
+ superView notNil ifTrue:[
+ superView subViewChangedSize
+ ]
!
reparented
--- a/StandardSystemView.st Thu Sep 21 13:40:25 1995 +0200
+++ b/StandardSystemView.st Mon Oct 23 18:00:19 1995 +0100
@@ -23,7 +23,7 @@
COPYRIGHT (c) 1989 by Claus Gittinger
All Rights Reserved
-$Header: /cvs/stx/stx/libview/StandardSystemView.st,v 1.33 1995-09-10 19:35:53 claus Exp $
+$Header: /cvs/stx/stx/libview/StandardSystemView.st,v 1.34 1995-10-23 16:59:29 cg Exp $
'!
!StandardSystemView class methodsFor:'documentation'!
@@ -44,7 +44,7 @@
version
"
-$Header: /cvs/stx/stx/libview/StandardSystemView.st,v 1.33 1995-09-10 19:35:53 claus Exp $
+$Header: /cvs/stx/stx/libview/StandardSystemView.st,v 1.34 1995-10-23 16:59:29 cg Exp $
"
!
@@ -464,6 +464,20 @@
deviceIcon := deviceIcon on:device
].
^ deviceIcon
+!
+
+setWindowGroupFromApplication
+ |win|
+
+ windowGroup isNil ifTrue:[
+ application notNil ifTrue:[
+ (win := application window) notNil ifTrue:[
+ windowGroup := win windowGroup.
+ ]
+ ]
+ ].
+
+ "Created: 22.9.1995 / 17:40:36 / claus"
! !
!StandardSystemView methodsFor:'realization'!
@@ -844,6 +858,20 @@
This is new protocol for ST-80 compatibility and not yet fully supported"
application := anApplicationModel
+!
+
+bePartner
+ self setWindowGroupFromApplication.
+ super bePartner.
+
+ "Created: 22.9.1995 / 17:40:15 / claus"
+!
+
+beSlave
+ self setWindowGroupFromApplication.
+ super beSlave.
+
+ "Created: 22.9.1995 / 17:40:15 / claus"
! !
!StandardSystemView methodsFor:'event handling'!
--- a/StdSysV.st Thu Sep 21 13:40:25 1995 +0200
+++ b/StdSysV.st Mon Oct 23 18:00:19 1995 +0100
@@ -23,7 +23,7 @@
COPYRIGHT (c) 1989 by Claus Gittinger
All Rights Reserved
-$Header: /cvs/stx/stx/libview/Attic/StdSysV.st,v 1.33 1995-09-10 19:35:53 claus Exp $
+$Header: /cvs/stx/stx/libview/Attic/StdSysV.st,v 1.34 1995-10-23 16:59:29 cg Exp $
'!
!StandardSystemView class methodsFor:'documentation'!
@@ -44,7 +44,7 @@
version
"
-$Header: /cvs/stx/stx/libview/Attic/StdSysV.st,v 1.33 1995-09-10 19:35:53 claus Exp $
+$Header: /cvs/stx/stx/libview/Attic/StdSysV.st,v 1.34 1995-10-23 16:59:29 cg Exp $
"
!
@@ -464,6 +464,20 @@
deviceIcon := deviceIcon on:device
].
^ deviceIcon
+!
+
+setWindowGroupFromApplication
+ |win|
+
+ windowGroup isNil ifTrue:[
+ application notNil ifTrue:[
+ (win := application window) notNil ifTrue:[
+ windowGroup := win windowGroup.
+ ]
+ ]
+ ].
+
+ "Created: 22.9.1995 / 17:40:36 / claus"
! !
!StandardSystemView methodsFor:'realization'!
@@ -844,6 +858,20 @@
This is new protocol for ST-80 compatibility and not yet fully supported"
application := anApplicationModel
+!
+
+bePartner
+ self setWindowGroupFromApplication.
+ super bePartner.
+
+ "Created: 22.9.1995 / 17:40:15 / claus"
+!
+
+beSlave
+ self setWindowGroupFromApplication.
+ super beSlave.
+
+ "Created: 22.9.1995 / 17:40:15 / claus"
! !
!StandardSystemView methodsFor:'event handling'!
--- a/View.st Thu Sep 21 13:40:25 1995 +0200
+++ b/View.st Mon Oct 23 18:00:19 1995 +0100
@@ -23,7 +23,7 @@
COPYRIGHT (c) 1995 by Claus Gittinger
All Rights Reserved
-$Header: /cvs/stx/stx/libview/View.st,v 1.45 1995-08-24 03:05:35 claus Exp $
+$Header: /cvs/stx/stx/libview/View.st,v 1.46 1995-10-23 16:59:31 cg Exp $
'!
!View class methodsFor:'documentation'!
@@ -44,7 +44,7 @@
version
"
-$Header: /cvs/stx/stx/libview/View.st,v 1.45 1995-08-24 03:05:35 claus Exp $
+$Header: /cvs/stx/stx/libview/View.st,v 1.46 1995-10-23 16:59:31 cg Exp $
"
!
@@ -325,14 +325,6 @@
self changeMessage:changeSymbol
!
-aspect:aspectSymbol
- "ST-80 style updating: If a views aspectSymbol is nonNil,
- it will respond to changes of this aspect from the model.
- Alias for aspectMessage: for ST-80 compatibility."
-
- self aspectMessage:aspectSymbol
-!
-
aspect
"Return the aspect used with changes from/to the model"
--- a/XWorkstat.st Thu Sep 21 13:40:25 1995 +0200
+++ b/XWorkstat.st Mon Oct 23 18:00:19 1995 +0100
@@ -16,7 +16,7 @@
hasDPSExtension hasMbufExtension hasXVideoExtension
hasSaveUnder hasPEXExtension hasImageExtension
hasInputExtension ignoreBackingStore
- blackpixel whitepixel redMask greenMask blueMask
+ blackpixel whitepixel
protocolsAtom deleteWindowAtom saveYourselfAtom
quitAppAtom
primaryAtom secondaryAtom cutBuffer0Atom
@@ -36,7 +36,7 @@
COPYRIGHT (c) 1989 by Claus Gittinger
All Rights Reserved
-$Header: /cvs/stx/stx/libview/Attic/XWorkstat.st,v 1.61 1995-09-19 14:59:18 claus Exp $
+$Header: /cvs/stx/stx/libview/Attic/XWorkstat.st,v 1.62 1995-10-23 16:59:47 cg Exp $
'!
!XWorkstation class methodsFor:'documentation'!
@@ -57,7 +57,7 @@
version
"
-$Header: /cvs/stx/stx/libview/Attic/XWorkstat.st,v 1.61 1995-09-19 14:59:18 claus Exp $
+$Header: /cvs/stx/stx/libview/Attic/XWorkstat.st,v 1.62 1995-10-23 16:59:47 cg Exp $
"
!
@@ -524,6 +524,7 @@
int faxEventBase, faxErrorBase;
char *type, *nm;
int dummy;
+ int mask, shift, nBits;
if (ISCONNECTED) {
BEGIN_INTERRUPTSBLOCKED
@@ -664,6 +665,52 @@
_INST(redMask) = _MKSMALLINT(visual->red_mask);
_INST(greenMask) = _MKSMALLINT(visual->green_mask);
_INST(blueMask) = _MKSMALLINT(visual->blue_mask);
+ switch (visual->class) {
+ case TrueColor:
+ /* extract number of bits and shift counts */
+ mask = visual->red_mask;
+ shift = 0;
+ while (mask && ((mask & 1) == 0)) {
+ mask >>= 1;
+ shift++;
+ }
+ _INST(redShift) = __MKSMALLINT(shift);
+ nBits = 0;
+ while (mask) {
+ mask >>= 1;
+ nBits++;
+ }
+ _INST(bitsRed) = __MKSMALLINT(nBits);
+
+ mask = visual->green_mask;
+ shift = 0;
+ while (mask && ((mask & 1) == 0)) {
+ mask >>= 1;
+ shift++;
+ }
+ _INST(greenShift) = __MKSMALLINT(shift);
+ nBits = 0;
+ while (mask) {
+ mask >>= 1;
+ nBits++;
+ }
+ _INST(bitsGreen) = __MKSMALLINT(nBits);
+
+ mask = visual->blue_mask;
+ shift = 0;
+ while (mask && ((mask & 1) == 0)) {
+ mask >>= 1;
+ shift++;
+ }
+ _INST(blueShift) = __MKSMALLINT(shift);
+ nBits = 0;
+ while (mask) {
+ mask >>= 1;
+ nBits++;
+ }
+ _INST(bitsBlue) = __MKSMALLINT(nBits);
+ break;
+ }
#ifndef XA_PRIMARY
_INST(primaryAtom) = MKOBJ( XInternAtom(dpy, "PRIMARY", True) );
@@ -3089,21 +3136,20 @@
any font to be aquired (even those not conforming to
standard naming conventions, such as cursor, fixed or k14)"
-%{ /* NOCONTEXT */
+%{ /* UNLIMITEDSTACK */
+ /* UNLIMITEDSTACK STACK:100000 xxNOCONTEXT */
XFontStruct *newFont;
if (ISCONNECTED) {
if (__isString(aFontName) || __isSymbol(aFontName)) {
BEGIN_INTERRUPTSBLOCKED
- newFont = XLoadQueryFont(myDpy, (char *)_stringVal(aFontName));
+ newFont = XLoadQueryFont(myDpy, (char *)__stringVal(aFontName));
END_INTERRUPTSBLOCKED
RETURN ( newFont ? MKOBJ(newFont) : nil );
}
}
-%}
-.
- self primitiveFailed.
+%}.
^ nil
!
@@ -3807,6 +3853,12 @@
unsigned long color;
int screen = _intVal(_INST(screen));
+#ifdef LATER
+ if (_INST(visualType) == @symbol(TrueColor)) {
+ /* no need to do anything on TrueColor displays ... */
+ RETURN (self);
+ }
+#endif
if (__isSmallInteger(colorIndex) && ISCONNECTED) {
color = (long) _intVal(colorIndex);
BEGIN_INTERRUPTSBLOCKED
@@ -5342,7 +5394,7 @@
%{
GC gc = _GCVal(aGCId);
Window win = _WindowVal(aDrawableId);
- extern OBJ Point;
+ extern OBJ Point, __AT_();
OBJ point, x, y;
int i, num;
XPoint *points;
@@ -5361,7 +5413,7 @@
points = qPoints;
for (i=0; i<num; i++) {
- point = _AT_(aPolygon COMMA_CON, _MKSMALLINT(i+1));
+ point = __AT_(aPolygon COMMA_CON, _MKSMALLINT(i+1));
if (! __isPoint(point)) goto fail;
x = _point_X(point);
y = _point_Y(point);
@@ -5601,7 +5653,7 @@
GC gc = _GCVal(aGCId);
Window win = _WindowVal(aDrawableId);
OBJ point, x, y;
- extern OBJ Point;
+ extern OBJ Point, __AT_();
int i, num;
XPoint *points;
XPoint qPoints[100];
@@ -5621,7 +5673,7 @@
} else
points = qPoints;
for (i=0; i<num; i++) {
- point = _AT_(aPolygon COMMA_CON, _MKSMALLINT(i+1));
+ point = __AT_(aPolygon COMMA_CON, _MKSMALLINT(i+1));
if (! __isPoint(point)) goto fail;
x = _point_X(point);
y = _point_Y(point);
@@ -5766,6 +5818,9 @@
case 24:
image.bytes_per_line = _intVal(imageWidth)*3;
break;
+ case 32:
+ image.bytes_per_line = _intVal(imageWidth)*4;
+ break;
default:
#ifdef ARGDEBUG
printf("bits_per_pixel=%d\n",image.bits_per_pixel);
@@ -5781,19 +5836,19 @@
RETURN ( true );
}
#ifdef ARGDEBUG
- if (! __isSmallInteger(aGCId)) printf("GC\n");
- if (! __isSmallInteger(aDrawableId)) printf("aDrawableId\n");
- if (! __isSmallInteger(srcx)) printf("srcx\n");
- if (! __isSmallInteger(srcy)) printf("srcy\n");
- if (! __isSmallInteger(dstx)) printf("dstx\n");
- if (! __isSmallInteger(dsty)) printf("dsty\n");
- if (! __isSmallInteger(w)) printf("w\n");
- if (! __isSmallInteger(h)) printf("h\n");
- if (! __isSmallInteger(imageWidth)) printf("imageWidth\n");
- if (! __isSmallInteger(imageHeight)) printf("imageHeight\n");
- if (! __isSmallInteger(imageDepth)) printf("imageDepth\n");
- if (! __isSmallInteger(bitsPerPixel)) printf("bitsPerPixel\n");
- if (! __isByteArray(imageBits)) printf("imageBits\n");
+ if (!! __isSmallInteger(aGCId)) printf("GC\n");
+ if (!! __isSmallInteger(aDrawableId)) printf("aDrawableId\n");
+ if (!! __isSmallInteger(srcx)) printf("srcx\n");
+ if (!! __isSmallInteger(srcy)) printf("srcy\n");
+ if (!! __isSmallInteger(dstx)) printf("dstx\n");
+ if (!! __isSmallInteger(dsty)) printf("dsty\n");
+ if (!! __isSmallInteger(w)) printf("w\n");
+ if (!! __isSmallInteger(h)) printf("h\n");
+ if (!! __isSmallInteger(imageWidth)) printf("imageWidth\n");
+ if (!! __isSmallInteger(imageHeight)) printf("imageHeight\n");
+ if (!! __isSmallInteger(imageDepth)) printf("imageDepth\n");
+ if (!! __isSmallInteger(bitsPerPixel)) printf("bitsPerPixel\n");
+ if (!! __isByteArray(imageBits)) printf("imageBits\n");
#endif
fail: ;
@@ -6033,6 +6088,7 @@
static unsigned multiClickTime = 0;
unsigned nextMultiClickTime;
OBJ upDown;
+ extern OBJ __AT_();
struct inlineCache *ipS;
static struct inlineCache vid = _ILC1;
@@ -6238,7 +6294,7 @@
butt = _MKSMALLINT(2);
else
#endif
- butt = _AT_(_INST(buttonTranslation), butt);
+ butt = __AT_(_INST(buttonTranslation), butt);
(*(*ipS).ilc_func)(self,
@@ -6653,4 +6709,3 @@
^ self eventsPending:(self eventMaskFor:anEventSymbol) for:aWindowIdOrNil
! !
-
--- a/XWorkstation.st Thu Sep 21 13:40:25 1995 +0200
+++ b/XWorkstation.st Mon Oct 23 18:00:19 1995 +0100
@@ -16,7 +16,7 @@
hasDPSExtension hasMbufExtension hasXVideoExtension
hasSaveUnder hasPEXExtension hasImageExtension
hasInputExtension ignoreBackingStore
- blackpixel whitepixel redMask greenMask blueMask
+ blackpixel whitepixel
protocolsAtom deleteWindowAtom saveYourselfAtom
quitAppAtom
primaryAtom secondaryAtom cutBuffer0Atom
@@ -36,7 +36,7 @@
COPYRIGHT (c) 1989 by Claus Gittinger
All Rights Reserved
-$Header: /cvs/stx/stx/libview/XWorkstation.st,v 1.61 1995-09-19 14:59:18 claus Exp $
+$Header: /cvs/stx/stx/libview/XWorkstation.st,v 1.62 1995-10-23 16:59:47 cg Exp $
'!
!XWorkstation class methodsFor:'documentation'!
@@ -57,7 +57,7 @@
version
"
-$Header: /cvs/stx/stx/libview/XWorkstation.st,v 1.61 1995-09-19 14:59:18 claus Exp $
+$Header: /cvs/stx/stx/libview/XWorkstation.st,v 1.62 1995-10-23 16:59:47 cg Exp $
"
!
@@ -524,6 +524,7 @@
int faxEventBase, faxErrorBase;
char *type, *nm;
int dummy;
+ int mask, shift, nBits;
if (ISCONNECTED) {
BEGIN_INTERRUPTSBLOCKED
@@ -664,6 +665,52 @@
_INST(redMask) = _MKSMALLINT(visual->red_mask);
_INST(greenMask) = _MKSMALLINT(visual->green_mask);
_INST(blueMask) = _MKSMALLINT(visual->blue_mask);
+ switch (visual->class) {
+ case TrueColor:
+ /* extract number of bits and shift counts */
+ mask = visual->red_mask;
+ shift = 0;
+ while (mask && ((mask & 1) == 0)) {
+ mask >>= 1;
+ shift++;
+ }
+ _INST(redShift) = __MKSMALLINT(shift);
+ nBits = 0;
+ while (mask) {
+ mask >>= 1;
+ nBits++;
+ }
+ _INST(bitsRed) = __MKSMALLINT(nBits);
+
+ mask = visual->green_mask;
+ shift = 0;
+ while (mask && ((mask & 1) == 0)) {
+ mask >>= 1;
+ shift++;
+ }
+ _INST(greenShift) = __MKSMALLINT(shift);
+ nBits = 0;
+ while (mask) {
+ mask >>= 1;
+ nBits++;
+ }
+ _INST(bitsGreen) = __MKSMALLINT(nBits);
+
+ mask = visual->blue_mask;
+ shift = 0;
+ while (mask && ((mask & 1) == 0)) {
+ mask >>= 1;
+ shift++;
+ }
+ _INST(blueShift) = __MKSMALLINT(shift);
+ nBits = 0;
+ while (mask) {
+ mask >>= 1;
+ nBits++;
+ }
+ _INST(bitsBlue) = __MKSMALLINT(nBits);
+ break;
+ }
#ifndef XA_PRIMARY
_INST(primaryAtom) = MKOBJ( XInternAtom(dpy, "PRIMARY", True) );
@@ -3089,21 +3136,20 @@
any font to be aquired (even those not conforming to
standard naming conventions, such as cursor, fixed or k14)"
-%{ /* NOCONTEXT */
+%{ /* UNLIMITEDSTACK */
+ /* UNLIMITEDSTACK STACK:100000 xxNOCONTEXT */
XFontStruct *newFont;
if (ISCONNECTED) {
if (__isString(aFontName) || __isSymbol(aFontName)) {
BEGIN_INTERRUPTSBLOCKED
- newFont = XLoadQueryFont(myDpy, (char *)_stringVal(aFontName));
+ newFont = XLoadQueryFont(myDpy, (char *)__stringVal(aFontName));
END_INTERRUPTSBLOCKED
RETURN ( newFont ? MKOBJ(newFont) : nil );
}
}
-%}
-.
- self primitiveFailed.
+%}.
^ nil
!
@@ -3807,6 +3853,12 @@
unsigned long color;
int screen = _intVal(_INST(screen));
+#ifdef LATER
+ if (_INST(visualType) == @symbol(TrueColor)) {
+ /* no need to do anything on TrueColor displays ... */
+ RETURN (self);
+ }
+#endif
if (__isSmallInteger(colorIndex) && ISCONNECTED) {
color = (long) _intVal(colorIndex);
BEGIN_INTERRUPTSBLOCKED
@@ -5342,7 +5394,7 @@
%{
GC gc = _GCVal(aGCId);
Window win = _WindowVal(aDrawableId);
- extern OBJ Point;
+ extern OBJ Point, __AT_();
OBJ point, x, y;
int i, num;
XPoint *points;
@@ -5361,7 +5413,7 @@
points = qPoints;
for (i=0; i<num; i++) {
- point = _AT_(aPolygon COMMA_CON, _MKSMALLINT(i+1));
+ point = __AT_(aPolygon COMMA_CON, _MKSMALLINT(i+1));
if (! __isPoint(point)) goto fail;
x = _point_X(point);
y = _point_Y(point);
@@ -5601,7 +5653,7 @@
GC gc = _GCVal(aGCId);
Window win = _WindowVal(aDrawableId);
OBJ point, x, y;
- extern OBJ Point;
+ extern OBJ Point, __AT_();
int i, num;
XPoint *points;
XPoint qPoints[100];
@@ -5621,7 +5673,7 @@
} else
points = qPoints;
for (i=0; i<num; i++) {
- point = _AT_(aPolygon COMMA_CON, _MKSMALLINT(i+1));
+ point = __AT_(aPolygon COMMA_CON, _MKSMALLINT(i+1));
if (! __isPoint(point)) goto fail;
x = _point_X(point);
y = _point_Y(point);
@@ -5766,6 +5818,9 @@
case 24:
image.bytes_per_line = _intVal(imageWidth)*3;
break;
+ case 32:
+ image.bytes_per_line = _intVal(imageWidth)*4;
+ break;
default:
#ifdef ARGDEBUG
printf("bits_per_pixel=%d\n",image.bits_per_pixel);
@@ -5781,19 +5836,19 @@
RETURN ( true );
}
#ifdef ARGDEBUG
- if (! __isSmallInteger(aGCId)) printf("GC\n");
- if (! __isSmallInteger(aDrawableId)) printf("aDrawableId\n");
- if (! __isSmallInteger(srcx)) printf("srcx\n");
- if (! __isSmallInteger(srcy)) printf("srcy\n");
- if (! __isSmallInteger(dstx)) printf("dstx\n");
- if (! __isSmallInteger(dsty)) printf("dsty\n");
- if (! __isSmallInteger(w)) printf("w\n");
- if (! __isSmallInteger(h)) printf("h\n");
- if (! __isSmallInteger(imageWidth)) printf("imageWidth\n");
- if (! __isSmallInteger(imageHeight)) printf("imageHeight\n");
- if (! __isSmallInteger(imageDepth)) printf("imageDepth\n");
- if (! __isSmallInteger(bitsPerPixel)) printf("bitsPerPixel\n");
- if (! __isByteArray(imageBits)) printf("imageBits\n");
+ if (!! __isSmallInteger(aGCId)) printf("GC\n");
+ if (!! __isSmallInteger(aDrawableId)) printf("aDrawableId\n");
+ if (!! __isSmallInteger(srcx)) printf("srcx\n");
+ if (!! __isSmallInteger(srcy)) printf("srcy\n");
+ if (!! __isSmallInteger(dstx)) printf("dstx\n");
+ if (!! __isSmallInteger(dsty)) printf("dsty\n");
+ if (!! __isSmallInteger(w)) printf("w\n");
+ if (!! __isSmallInteger(h)) printf("h\n");
+ if (!! __isSmallInteger(imageWidth)) printf("imageWidth\n");
+ if (!! __isSmallInteger(imageHeight)) printf("imageHeight\n");
+ if (!! __isSmallInteger(imageDepth)) printf("imageDepth\n");
+ if (!! __isSmallInteger(bitsPerPixel)) printf("bitsPerPixel\n");
+ if (!! __isByteArray(imageBits)) printf("imageBits\n");
#endif
fail: ;
@@ -6033,6 +6088,7 @@
static unsigned multiClickTime = 0;
unsigned nextMultiClickTime;
OBJ upDown;
+ extern OBJ __AT_();
struct inlineCache *ipS;
static struct inlineCache vid = _ILC1;
@@ -6238,7 +6294,7 @@
butt = _MKSMALLINT(2);
else
#endif
- butt = _AT_(_INST(buttonTranslation), butt);
+ butt = __AT_(_INST(buttonTranslation), butt);
(*(*ipS).ilc_func)(self,
@@ -6653,4 +6709,3 @@
^ self eventsPending:(self eventMaskFor:anEventSymbol) for:aWindowIdOrNil
! !
-
--- a/resources/AppModel.rs Thu Sep 21 13:40:25 1995 +0200
+++ b/resources/AppModel.rs Mon Oct 23 18:00:19 1995 +0100
@@ -6,7 +6,7 @@
; for convenience and to avoid having them dublicated
; in every subclass.
;
-; $Header: /cvs/stx/stx/libview/resources/Attic/AppModel.rs,v 1.2 1995-08-27 00:33:33 claus Exp $
+; $Header: /cvs/stx/stx/libview/resources/Attic/AppModel.rs,v 1.3 1995-10-23 17:00:19 cg Exp $
;
; this file may contain 8bit national characters;
; DONT EDIT this file with an old vi !
@@ -27,16 +27,27 @@
yes 'oui'
no 'non'
ok 'd''accord'
-abort 'canceler'
-cancel 'canceler'
+abort 'annuler'
+cancel 'annuler'
continue 'continuer'
#endif
#if (Language == #spanish)
+abort 'cancelar'
+cancel 'cancelar'
#endif
#if (Language == #italian)
yes 'si'
no 'non'
+abort 'annulla'
+cancel 'annulla'
#endif
+
+#if (Language == #swedish)
+abort 'avbryt'
+cancel 'avbryt'
+#endif
+
+
--- a/styles/generic.style Thu Sep 21 13:40:25 1995 +0200
+++ b/styles/generic.style Mon Oct 23 18:00:19 1995 +0100
@@ -26,7 +26,7 @@
; all of them for new styles.
;
;
-; $Header: /cvs/stx/stx/libview/styles/generic.style,v 1.7 1995-08-27 00:32:55 claus Exp $
+; $Header: /cvs/stx/stx/libview/styles/generic.style,v 1.8 1995-10-23 17:00:01 cg Exp $
;
; agenda:
@@ -190,6 +190,11 @@
pullDownMenuRaiseTop true
;
+; popupList
+;
+popUpListPopPosition nil "or #shifted, or #below"
+
+;
; label defaults
; (these are inherited by Button, Toggles etc. if not redefined)
@@ -407,4 +412,3 @@
htmlVisitedAnchorForegroundColor Color red:30 green:0 blue:80
htmlExampleAnchorForegroundColor Color red:40 green:0 blue:0
htmlAnchorUnderlines false
-
--- a/styles/next.style Thu Sep 21 13:40:25 1995 +0200
+++ b/styles/next.style Mon Oct 23 18:00:19 1995 +0100
@@ -3,7 +3,7 @@
; NeXT look-alike - almost like motif or iris,
; but with smoother edges and frames around scrollbars and selections
;
-; $Header: /cvs/stx/stx/libview/styles/next.style,v 1.3 1995-06-06 04:11:39 claus Exp $
+; $Header: /cvs/stx/stx/libview/styles/next.style,v 1.4 1995-10-23 17:00:12 cg Exp $
comment 'NeXT look alike'
@@ -63,4 +63,6 @@
buttonActiveForegroundColor Color white
#endif
+popUpListPopPosition #shifted
+
selectionFont Font family:'helvetica' face:'medium' style:'roman' size:12