Wiki source for displayioShowDisplay


Show raw source

======**sqInt display_ioShowDisplay(sqInt dispBitsIndex, sqInt width, sqInt height, sqInt depth, sqInt affectedL, sqInt affectedR, sqInt affectedT, sqInt affectedB)**======

**Parms**:
dispBitsIndex pointer to the squeak Form
width in pixels of form
height in pixels of form
depth depth of form
affectedL left position, 0 or greater
affectedR right poistion, 0 or greater
affectedT top position, 0 or greater
affectedB bottom position, 0 or greater

**return**: NONE, fake return of zero
**From**: Interpreter
**Why**:
Write the bits from this Form represented by the affected rectangle to the display hardware.
Areithfa Ffenestri Multiple Host Windows for Squeak VMs then deligate to the routine that handles screen (1)

**Responsibility**:
ensure the parms are sane,
ensure the window is visible if needbe
ensure the squeak color map is used to draw the color data to the target device.
ensure the given height/width matchs expections for the window.
special case if the squeak VM is running as a browser plugin
deal with the case of being headless.
deal with the case of being full screen.
deal with Endian issues.

**MacIntosh**
//os-9/OSXCarbon//

checks for headless and if the browser is active and we have a drawing context
loads the colorspace indicated by the system's profile
open the main window if it is not already open.
For bits 1,2,4,8,16 we use QuickDraw to build a 32bit Form. This is done because quartz does not deal with 1,2,4,8 conversion
and earlier versions of 10.3.x had problems with 16bit Forms.
If squeak is running as a subtask as a browser plugin, we see if a wait is pending, if so we wait, for awhile. At timeout or if
we can write, we write the data to the shared memory space. This prevents the squeak vm from overrunning the browser, and prevents
"tearing" of the the screen on dual processor machines.
If squeak is not running as a browser plugin, we draw to the Display Context and every N milliseconds do a CGContextFlush()

BUG If Squeak dies before the first screen draw is done, a window is not opened. The fact a window is not opened means
Squeak cannot accept key strokes. The clue is the VM hangs at open time with no window being opened. This behavior
is a fallout of work done in early 2000 to start squeak up without the window until the first draw happens, versus
showing a white window for 10 of seconds on an macintosh SE/30

BUGS does not check depth for sanity


//Cocoa://
See iPhone

**iPhone**
There are two choices.
(a) We use a tiled layer of CALayers that point to GCImage's. When the view is resized or created that triggers building a set of 4x4 tiles. The bottom, and right most tiles may not be the same size as the other tiles due to size/4 math. When the displayioShowDisplay happens we mark tiles that intersect with the drawing rectangle target as dirty. No actual drawing takes place.

**Unix**
Somewhat simular to the sprit of the macintosh implementation but uses hand craft C code to perform the different depth conversion from the Form to the Display device. It's unclear if color mapping is respected.

**Windows**
various methods used to paint the bits

**BUGS**
The window can change shape before squeak notices it and it may draw with a form bigger, or smaller than the current screen.
Squeak does not draw just to a Display Object, this might be a copy from a display surface to the screen, so dispBitsIndex may
not point to the same object on the next call.

The original intent of preserving the Squeak Color space may have been lost, likely this needs to be cross checked.

Valid XHTML :: Valid CSS: :: Powered by WikkaWiki