FFI: FFI-Examples-eem.3.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

FFI: FFI-Examples-eem.3.mcz

commits-2
Eliot Miranda uploaded a new version of FFI-Examples to project FFI:
http://source.squeak.org/FFI/FFI-Examples-eem.3.mcz

==================== Summary ====================

Name: FFI-Examples-eem.3
Author: eem
Time: 19 May 2020, 2:30:52.589295 pm
UUID: 67a7e7fb-bde2-4f8e-8153-f53aa90a2b36
Ancestors: FFI-Examples-eem.2

a reorganized Examples package after several Win32 classes have (correctly) been moved to FFI-Win32.

=============== Diff against FFI-Examples-eem.2 ===============

Item was changed:
  ExternalStructure subclass: #MacPixPatPtr
  instanceVariableNames: ''
  classVariableNames: ''
  poolDictionaries: ''
  category: 'FFI-Examples-MacOS'!
+
+ !MacPixPatPtr commentStamp: 'spd 5/16/2010 22:32' prior: 0!
+ See class comment for MacRect.!

Item was changed:
  ExternalStructure subclass: #MacPoint
  instanceVariableNames: ''
  classVariableNames: ''
  poolDictionaries: ''
  category: 'FFI-Examples-MacOS'!
+
+ !MacPoint commentStamp: 'spd 5/16/2010 22:32' prior: 0!
+ See class comment for MacRect.!

Item was changed:
  ExternalStructure subclass: #MacRGBColor
  instanceVariableNames: ''
  classVariableNames: ''
  poolDictionaries: ''
  category: 'FFI-Examples-MacOS'!
+
+ !MacRGBColor commentStamp: 'spd 5/16/2010 22:31' prior: 0!
+ See class comment for MacRect.!

Item was changed:
  ExternalStructure subclass: #MacRect
  instanceVariableNames: ''
  classVariableNames: ''
  poolDictionaries: ''
  category: 'FFI-Examples-MacOS'!
+
+ !MacRect commentStamp: 'spd 5/16/2010 22:42' prior: 0!
+ I, with my friends (MacPixPatPtr, MacPoint and MacRGBColor), show how to make calls into a Mac OS framework.
+
+ The particular library I use in my examples, QuickDraw, is depreciated in OS X 10.4, but the examples still run as of OS X 10.6.2
+ See http://developer.apple.com/legacy/mac/library/documentation/Carbon/Reference/QuickDraw_Ref/Reference/reference.html for more information.
+
+ WARNING: for Snow Leopard, see warning in MacOSShell!

Item was removed:
- Win32HGDIObj subclass: #Win32HBrush
- instanceVariableNames: ''
- classVariableNames: ''
- poolDictionaries: ''
- category: 'FFI-Examples-Win32'!

Item was removed:
- ----- Method: Win32HBrush class>>apiCreateHatchBrush:with: (in category 'api calls') -----
- apiCreateHatchBrush: aStyle with: colorref
- "Creates a logical brush that has the specified hatch pattern and color"
- <apicall: Win32HBrush 'CreateHatchBrush' (long ulong) module: 'gdi32.dll'>
- ^ self externalCallFailed!

Item was removed:
- ----- Method: Win32HBrush class>>backwardDiagonalWithColor: (in category 'hatch brushes') -----
- backwardDiagonalWithColor: aColor
- "45-degree downward left-to-right hatch brush"
- ^ self createHatchBrush: 3 color: aColor!

Item was removed:
- ----- Method: Win32HBrush class>>createHatchBrush:color: (in category 'instance creation') -----
- createHatchBrush: aStyle color: aColor
- "Creates an instance of the receiver that has the specified hatch pattern and color"
- ^ self apiCreateHatchBrush: aStyle with: aColor asColorref!

Item was removed:
- ----- Method: Win32HBrush class>>createSolidBrush: (in category 'instance creation') -----
- createSolidBrush: aCOLORREF
- <apicall: Win32HBrush 'CreateSolidBrush' (ulong) module: 'gdi32.dll'>
- ^self externalCallFailed!

Item was removed:
- ----- Method: Win32HBrush class>>crossWithColor: (in category 'hatch brushes') -----
- crossWithColor: aColor
- "Horizontal and vertical crosshatch brush"
- ^ self createHatchBrush: 4 color: aColor!

Item was removed:
- ----- Method: Win32HBrush class>>diagonalCrossWithColor: (in category 'hatch brushes') -----
- diagonalCrossWithColor: aColor
- "45-degree crosshatch brush"
- ^ self createHatchBrush: 5 color: aColor!

Item was removed:
- ----- Method: Win32HBrush class>>forwardDiagonalWithColor: (in category 'hatch brushes') -----
- forwardDiagonalWithColor: aColor
- "45-degree upward left-to-right hatch brush"
- ^ self createHatchBrush: 2 color: aColor!

Item was removed:
- ----- Method: Win32HBrush class>>horizontalWithColor: (in category 'hatch brushes') -----
- horizontalWithColor: aColor
- "Horizontal hatch brush"
- ^ self createHatchBrush: 0 color: aColor!

Item was removed:
- ----- Method: Win32HBrush class>>verticalWithColor: (in category 'hatch brushes') -----
- verticalWithColor: aColor
- "Horizontal hatch brush"
- ^ self createHatchBrush: 1 color: aColor !

Item was removed:
- Win32Handle subclass: #Win32HDC
- instanceVariableNames: ''
- classVariableNames: ''
- poolDictionaries: ''
- category: 'FFI-Examples-Win32'!

Item was removed:
- ----- Method: Win32HDC>>apiDeleteDC: (in category 'api calls') -----
- apiDeleteDC: aHDC
- <apicall: bool 'DeleteDC' (Win32HDC) module:'gdi32.dll'>
- ^self externalCallFailed!

Item was removed:
- ----- Method: Win32HDC>>apiDrawFocusRect:with: (in category 'api calls') -----
- apiDrawFocusRect: aHDC with: lpRect
- "Draws a rectangle in the style used to indicate that the rectangle has
- the focus."
- <apicall: bool 'DrawFocusRect' (Win32HDC Win32Rectangle*) module: 'user32.dll'>
- ^ self externalCallFailed!

Item was removed:
- ----- Method: Win32HDC>>apiDrawFrameControl:with:with:with: (in category 'api calls') -----
- apiDrawFrameControl: aHDC with: lpRect with: type with: state
- "Draws a frame control of the specified type and style"
- <apicall: bool 'DrawFrameControl' (Win32HDC Win32Rectangle* ulong ulong) module: 'user32.dll'>
- ^ self externalCallFailed!

Item was removed:
- ----- Method: Win32HDC>>apiEllipse:with:with:with:with: (in category 'api calls') -----
- apiEllipse: aHDC with: left with: top with: right with: bottom
- <apicall: bool 'Ellipse' (Win32HDC long long long long) module: 'gdi32.dll'>
- ^self externalCallFailed!

Item was removed:
- ----- Method: Win32HDC>>apiExtFloodFill:with:with:with:with: (in category 'api calls') -----
- apiExtFloodFill: aHDC with: x with: y with: colorref with: fillType
- "fills an area of the display surface with the current brush"
- <apicall: bool 'ExtFloodFill' (Win32HDC long long ulong ulong) module: 'gdi32.dll'>
- ^ self externalCallFailed!

Item was removed:
- ----- Method: Win32HDC>>apiFillRect:with:with: (in category 'api calls') -----
- apiFillRect: aHDC with: lpRect with: brush
- "Fills a rectangle by using the specified brush. This function includes  
- the left and top borders, but excludes the right and bottom borders of  
- the rectangle.  
- "
- <apicall: char 'FillRect' (Win32HDC Win32Rectangle* Win32HBrush) module: 'user32.dll'>
- ^ self externalCallFailed!

Item was removed:
- ----- Method: Win32HDC>>apiFrameRect:with:with: (in category 'api calls') -----
- apiFrameRect: aHDC with: lpRect with: brush
- "Draws a border around the specified rectangle by using the specified brush. The width and height of the border are always one logical unit."
- <apicall: char 'FrameRect' (Win32HDC Win32Rectangle* Win32HBrush) module: 'user32.dll'>
- ^ self externalCallFailed!

Item was removed:
- ----- Method: Win32HDC>>apiLineTo:with:with: (in category 'api calls') -----
- apiLineTo: aHDC with: x with: y
- <apicall: bool 'LineTo' (Win32HDC long long) module:'gdi32.dll'>
- ^self externalCallFailed!

Item was removed:
- ----- Method: Win32HDC>>apiMoveToEx:with:with:with: (in category 'api calls') -----
- apiMoveToEx: aHDC with: x with: y with: pt
- <apicall: bool 'MoveToEx' (Win32HDC long long Win32Point*) module: 'gdi32.dll'>
- ^self externalCallFailed!

Item was removed:
- ----- Method: Win32HDC>>apiRectangle:with:with:with:with: (in category 'api calls') -----
- apiRectangle: aHDC with: left with: top with: right with: bottom
- <apicall: bool 'Rectangle' (Win32HDC long long long long) module: 'gdi32.dll'>
- ^self externalCallFailed!

Item was removed:
- ----- Method: Win32HDC>>apiRoundRect:with:with:with:with:with:with: (in category 'api calls') -----
- apiRoundRect: aHDC with: left with: top with: right with: bottom with: width with: height
- "Draws a rectangle with rounded corners. The rectangle is outlined by  
- using the current pen and filled by using the current brush"
- <apicall: bool 'RoundRect' (Win32HDC long long long long long long) module: 'gdi32.dll'>
- ^ self externalCallFailed!

Item was removed:
- ----- Method: Win32HDC>>apiSelectObject:with: (in category 'api calls') -----
- apiSelectObject: aHDC with: aHGDIOBJ
- <apicall: Win32HGDIObj 'SelectObject' (Win32HDC Win32HGDIObj) module: 'gdi32.dll'>
- ^self externalCallFailed!

Item was removed:
- ----- Method: Win32HDC>>delete (in category 'initialize-release') -----
- delete
- handle == nil
- ifFalse:[self apiDeleteDC: self].
- handle := nil.!

Item was removed:
- ----- Method: Win32HDC>>drawFocusRectangle: (in category 'drawing') -----
- drawFocusRectangle: aRect  
- "draws a rectangle in the style used to indicate that the rectangle has the focus"
-  
- self
- apiDrawFocusRect: self
- with: (Win32Rectangle fromRectangle: aRect)
-
- !

Item was removed:
- ----- Method: Win32HDC>>drawFrameControl:type:style: (in category 'drawing') -----
- drawFrameControl: aRect type: aType style: aStyle
- "Draws a frame control of the specified type and style (integer values)"
- self apiDrawFrameControl: self with: (Win32Rectangle fromRectangle: aRect) with: aType with: aStyle!

Item was removed:
- ----- Method: Win32HDC>>ellipse: (in category 'drawing') -----
- ellipse: aRect
- ^self apiEllipse: self with: aRect left with: aRect top with: aRect right with: aRect bottom!

Item was removed:
- ----- Method: Win32HDC>>fillRectangle:color: (in category 'drawing') -----
- fillRectangle: aRect color: aColor
- "fills an area of the display with the given color"
- | brush |
-
- brush := Win32HBrush createSolidBrush: aColor asColorref.
- self
- apiFillRect: self
- with: (Win32Rectangle fromRectangle: aRect)
- with: brush.
- brush delete!

Item was removed:
- ----- Method: Win32HDC>>floodFillAt:boundaryColor:fillColor: (in category 'drawing') -----
- floodFillAt: aPoint boundaryColor: aColor fillColor: anotherColor
- "fills an area of the display with the given color"
- | newBrush oldBrush |
- newBrush := Win32HBrush createSolidBrush: anotherColor asColorref.
- oldBrush := self selectObject: newBrush.
- (self
- apiExtFloodFill: self
- with: aPoint x
- with: aPoint y
- with: aColor asColorref
- with: 0) inspect.
- self selectObject: oldBrush.
- newBrush delete!

Item was removed:
- ----- Method: Win32HDC>>frameRectangle:brush: (in category 'drawing') -----
- frameRectangle: aRect brush: aBrush
- "Draws a border around the specified rectangle by using the specified brush. The width and height of the border are always one logical unit."
-  
- self
- apiFrameRect: self
- with: (Win32Rectangle fromRectangle: aRect)
- with: aBrush.
-  !

Item was removed:
- ----- Method: Win32HDC>>lineTo: (in category 'drawing') -----
- lineTo: aPoint
- ^self apiLineTo: self with: aPoint x with: aPoint y!

Item was removed:
- ----- Method: Win32HDC>>moveTo: (in category 'drawing') -----
- moveTo: aPoint
- ^self apiMoveToEx: self with: aPoint x with: aPoint y with: nil!

Item was removed:
- ----- Method: Win32HDC>>rectangle: (in category 'drawing') -----
- rectangle: aRect
- ^self apiRectangle: self with: aRect left with: aRect top with: aRect right with: aRect bottom!

Item was removed:
- ----- Method: Win32HDC>>roundRectangle:width:height: (in category 'drawing') -----
- roundRectangle: aRect width: width height: height
- ^ self
- apiRoundRect: self
- with: aRect left
- with: aRect top
- with: aRect right
- with: aRect bottom
- with: width
- with: height!

Item was removed:
- ----- Method: Win32HDC>>selectObject: (in category 'drawing') -----
- selectObject: aHGDIOBJ
- ^self apiSelectObject: self with: aHGDIOBJ!

Item was removed:
- Win32Handle subclass: #Win32HGDIObj
- instanceVariableNames: ''
- classVariableNames: ''
- poolDictionaries: ''
- category: 'FFI-Examples-Win32'!

Item was removed:
- ----- Method: Win32HGDIObj>>apiDeleteObject: (in category 'api calls') -----
- apiDeleteObject: aHGDIOBJ
- <apicall: bool 'DeleteObject' (Win32HGDIObj) module: 'gdi32.dll'>
- ^self externalCallFailed!

Item was removed:
- ----- Method: Win32HGDIObj>>delete (in category 'initialize-release') -----
- delete
- self apiDeleteObject: self!

Item was removed:
- ExternalStructure subclass: #Win32Handle
- instanceVariableNames: ''
- classVariableNames: ''
- poolDictionaries: ''
- category: 'FFI-Examples-Win32'!

Item was removed:
- ----- Method: Win32Handle class>>fields (in category 'accessing') -----
- fields
- "Win32Handle defineFields"
- "The following really means
- typedef void* Win32Handle;
- "
- ^#(nil 'ulong') "an opaque 32bit handle"!

Item was removed:
- ExternalStructure subclass: #Win32Point
- instanceVariableNames: ''
- classVariableNames: ''
- poolDictionaries: ''
- category: 'FFI-Examples-Win32'!

Item was removed:
- ----- Method: Win32Point class>>apiGetCursorPos: (in category 'api calls') -----
- apiGetCursorPos: pt
- <apicall: bool 'GetCursorPos' (Win32Point*) module: 'user32.dll'>
- ^self externalCallFailed!

Item was removed:
- ----- Method: Win32Point class>>fields (in category 'accessing') -----
- fields
- "POINT defineFields"
- ^#(
- (x 'long')
- (y 'long')
- )!

Item was removed:
- ----- Method: Win32Point class>>getCursorPos (in category 'instance creation') -----
- getCursorPos
- | pt |
- pt := self new.
- self apiGetCursorPos: pt.
- ^pt!

Item was removed:
- ----- Method: Win32Point>>asPoint (in category 'converting') -----
- asPoint
- ^self x @ self y!

Item was removed:
- ----- Method: Win32Point>>x (in category 'accessing') -----
- x
- "This method was automatically generated"
- ^handle signedLongAt: 1!

Item was removed:
- ----- Method: Win32Point>>x: (in category 'accessing') -----
- x: anObject
- "This method was automatically generated"
- handle signedLongAt: 1 put: anObject!

Item was removed:
- ----- Method: Win32Point>>y (in category 'accessing') -----
- y
- "This method was automatically generated"
- ^handle signedLongAt: 5!

Item was removed:
- ----- Method: Win32Point>>y: (in category 'accessing') -----
- y: anObject
- "This method was automatically generated"
- handle signedLongAt: 5 put: anObject!

Item was removed:
- ExternalStructure subclass: #Win32Rectangle
- instanceVariableNames: ''
- classVariableNames: ''
- poolDictionaries: ''
- category: 'FFI-Examples-Win32'!

Item was removed:
- ----- Method: Win32Rectangle class>>fields (in category 'accessing') -----
- fields
- "Win32Rectangle defineFields"
- ^ #(#(#left 'long') #(#top 'long') #(#right 'long') #(#bottom 'long') )!

Item was removed:
- ----- Method: Win32Rectangle class>>fromRectangle: (in category 'instance creation') -----
- fromRectangle: rc
- "returns an instance of the receiver from the given smalltalk rectangle"
- ^ self new left: rc left top: rc top right: rc right bottom: rc bottom  !

Item was removed:
- ----- Method: Win32Rectangle>>bottom (in category 'accessing') -----
- bottom
- "This method was automatically generated"
- ^handle signedLongAt: 13!

Item was removed:
- ----- Method: Win32Rectangle>>bottom: (in category 'accessing') -----
- bottom: anObject
- "This method was automatically generated"
- handle signedLongAt: 13 put: anObject!

Item was removed:
- ----- Method: Win32Rectangle>>left (in category 'accessing') -----
- left
- "This method was automatically generated"
- ^handle signedLongAt: 1!

Item was removed:
- ----- Method: Win32Rectangle>>left: (in category 'accessing') -----
- left: anObject
- "This method was automatically generated"
- handle signedLongAt: 1 put: anObject!

Item was removed:
- ----- Method: Win32Rectangle>>left:top:right:bottom: (in category 'accessing') -----
- left: left top: top right: right bottom: bottom
- "sets the coordinates of the receiver"
-
- self left: left.
- self top: top.
- self right: right.
- self bottom: bottom !

Item was removed:
- ----- Method: Win32Rectangle>>right (in category 'accessing') -----
- right
- "This method was automatically generated"
- ^handle signedLongAt: 9!

Item was removed:
- ----- Method: Win32Rectangle>>right: (in category 'accessing') -----
- right: anObject
- "This method was automatically generated"
- handle signedLongAt: 9 put: anObject!

Item was removed:
- ----- Method: Win32Rectangle>>top (in category 'accessing') -----
- top
- "This method was automatically generated"
- ^handle signedLongAt: 5!

Item was removed:
- ----- Method: Win32Rectangle>>top: (in category 'accessing') -----
- top: anObject
- "This method was automatically generated"
- handle signedLongAt: 5 put: anObject!

Item was removed:
- ExternalObject subclass: #Win32Shell
- instanceVariableNames: ''
- classVariableNames: ''
- poolDictionaries: ''
- category: 'FFI-Examples-Win32'!
-
- !Win32Shell commentStamp: '<historical>' prior: 0!
- This class wrappes the Windows 32 shell.
-
- Try
- Win32Shell new shellOpen: 'c:\image.bmp' to open a document
- Win32Shell new shellOpen: 'c:\myprogram.exe' to start an executable
- Win32Shell new shellExplore: 'c:\' to explore a directory
- Win32Shell new shellFind: 'c:\' to initiate a search
-
- Note that this class is platform specific.
-  
-  !

Item was removed:
- ----- Method: Win32Shell>>shellExecute:lpOperation:lpFile:lpParameters:lpDirectory:nShowCmd: (in category 'api calls') -----
- shellExecute: hwnd lpOperation: opString lpFile: fileString lpParameters: parmString lpDirectory: dirString nShowCmd: anInteger
- "Opens or prints the specified file, which can be an executable or document file.
- HINSTANCE ShellExecute(
-   HWND hwnd, // handle to parent window
- LPCTSTR lpOperation, // pointer to string that specifies operation to perform
- LPCTSTR lpFile, // pointer to filename or folder name string
- LPCTSTR lpParameters, // pointer to string that specifies executable-file parameters
- LPCTSTR lpDirectory, // pointer to string that specifies default directory
- INT nShowCmd // whether file is shown when opened
- );"
- <apicall: long 'ShellExecuteA' (long char* char* char* char* ulong) module:'shell32.dll'>!

Item was removed:
- ----- Method: Win32Shell>>shellExplore: (in category 'operations') -----
- shellExplore: aPathString
- "Explores the folder specified by aPathString"
-
- (self shellExecute: nil
- lpOperation: 'explore'
- lpFile: aPathString
- lpParameters: nil
- lpDirectory: nil
- nShowCmd: 1) <= 32 ifTrue: [self error: 'system error']!

Item was removed:
- ----- Method: Win32Shell>>shellFind: (in category 'operations') -----
- shellFind: aPathString
- "Initiates a search starting from the specified directory."
-
- (self shellExecute: nil
- lpOperation: 'find'
- lpFile: nil
- lpParameters: nil
- lpDirectory: aPathString
- nShowCmd: 1) <= 32 ifTrue: [self error: 'system error']!

Item was removed:
- ----- Method: Win32Shell>>shellOpen: (in category 'operations') -----
- shellOpen: aFileString
- "Opens the file specified by aFileString. The file can be an executable file, a document file,
- or a folder."
-
- (self shellExecute: nil
- lpOperation: 'open'
- lpFile: aFileString
- lpParameters: nil
- lpDirectory: nil
- nShowCmd: 1) <= 32 ifTrue: [self error: 'system error']!

Item was removed:
- Object subclass: #Win32Utils
- instanceVariableNames: ''
- classVariableNames: ''
- poolDictionaries: ''
- category: 'FFI-Examples-Win32'!
-
- !Win32Utils commentStamp: 'tbn 8/22/2005 23:50' prior: 0!
- This is an utility class with helpfull methods for Win32 users. Note that it uses FFI and is
- platform dependent.!

Item was removed:
- ----- Method: Win32Utils class>>apiGetEnvironmentVariable:with:with: (in category 'api calls') -----
- apiGetEnvironmentVariable: lpName with: lpBuffer with: nSize
-    <apicall: ulong 'GetEnvironmentVariableA' (char* byte* ulong) module: 'kernel32.dll'>
-    ^self externalCallFailed!

Item was removed:
- ----- Method: Win32Utils class>>getCommonEnvironmentVariables (in category 'examples') -----
- getCommonEnvironmentVariables
- "Returns a dictionary with common environment variables for Win32 systems"
-
- |map|
- map := Dictionary new.
- #('ALLUSERSPROFILE' 'APPDATA' 'COMPUTERNAME' 'COMSPEC' 'HOMEDRIVE' 'HOMEPATH' 'LOGONSERVER'
-        'SYSTEMDRIVE' 'OS' 'PATH' 'SYSTEMROOT' 'TEMP' 'TMP' 'USERDOMAIN' 'USERNAME' 'USERPROFILE' 'WINDIR')
- do: [:each | map at: each put: (self getEnvironmentVariable: each)].
- ^map
- !

Item was removed:
- ----- Method: Win32Utils class>>getEnvironmentVariable: (in category 'accessing') -----
- getEnvironmentVariable: aString
-    "Win32Utils getEnvironmentVariable: 'windir'"
-
-    | buffer size |
-    size := self apiGetEnvironmentVariable: aString with: nil with: 0.
-    buffer := String new: size.
-    self apiGetEnvironmentVariable: aString with: buffer with: size.
-    ^buffer allButLast!

Item was removed:
- Win32Handle subclass: #Win32Window
- instanceVariableNames: ''
- classVariableNames: ''
- poolDictionaries: ''
- category: 'FFI-Examples-Win32'!
-
- !Win32Window commentStamp: '<historical>' prior: 0!
- Here's a simple Win32 example:
- | hwnd dc dst |
- hwnd _ Win32Window getFocus. "fetch the window currently having the focus"
- dc _ hwnd getDC. "grab the dc or the window"
- dst _ 100.
- dc moveTo: 0@0.
- "draw a rect"
- dc lineTo: dst@0. dc lineTo: dst@dst. dc lineTo: 0@dst. dc lineTo: 0@0.
- "and a cross"
- dc lineTo: dst@dst. dc moveTo: dst@0. dc lineTo: 0@dst.
- hwnd releaseDC: dc.!

Item was removed:
- ----- Method: Win32Window class>>coloredEllipses (in category 'examples') -----
- coloredEllipses "Win32Window coloredEllipses"
- "Draw a bunch of ellipses"
- | rnd pt1 pt2 w h colors newBrush oldBrush |
- colors := Color colorNames collect:[:cName| (Color perform: cName)].
- "convert to COLORREF"
- colors := colors collect:[:c|
- (c red * 255) asInteger +
- ((c green * 255) asInteger << 8) +
- ((c blue * 255) asInteger << 16)].
- rnd := Random new.
- w := Display width.
- h := Display height.
- self getFocus getHDCDuring:[:hDC|
- [Sensor anyButtonPressed] whileFalse:[
- newBrush := Win32HBrush createSolidBrush: colors atRandom.
- oldBrush := hDC selectObject: newBrush.
- pt1 := (rnd next * w) asInteger @ (rnd next * h) asInteger.
- pt2 := (rnd next * w) asInteger @ (rnd next * h) asInteger.
- hDC ellipse: (Rectangle encompassing: (Array with: pt1 with: pt2)).
- hDC selectObject: oldBrush.
- newBrush delete.
- ].
- ].
- Display forceToScreen.!

Item was removed:
- ----- Method: Win32Window class>>coloredRectangles (in category 'examples') -----
- coloredRectangles "Win32Window coloredRectangles"
- "Draw a bunch of ellipses"
- | rnd pt1 pt2 w h colors newBrush oldBrush n nPixels time r |
- colors := Color colorNames collect:[:cName| (Color perform: cName)].
- "convert to COLORREF"
- colors := colors collect:[:c|
- (c red * 255) asInteger +
- ((c green * 255) asInteger << 8) +
- ((c blue * 255) asInteger << 16)].
- rnd := Random new.
- w := Display width.
- h := Display height.
- self getFocus getHDCDuring:[:hDC|
- n := 0.
- nPixels := 0.
- time := Time millisecondClockValue.
- [Sensor anyButtonPressed] whileFalse:[
- newBrush := Win32HBrush createSolidBrush: colors atRandom.
- oldBrush := hDC selectObject: newBrush.
- pt1 := (rnd next * w) asInteger @ (rnd next * h) asInteger.
- pt2 := (rnd next * w) asInteger @ (rnd next * h) asInteger.
- hDC rectangle: (r := Rectangle encompassing: (Array with: pt1 with: pt2)).
- hDC selectObject: oldBrush.
- newBrush delete.
- n := n + 1.
- nPixels := nPixels + ((r right - r left) * (r bottom - r top)).
- (n \\ 100) = 0 ifTrue:[
- 'Pixel fillRate: ', (nPixels * 1000 // (Time millisecondClockValue - time))
- asStringWithCommas displayAt: 0@0].
- ].
- ].
- Display forceToScreen.!

Item was removed:
- ----- Method: Win32Window class>>getDesktopWindow (in category 'accessing') -----
- getDesktopWindow
- "Return the HWND describing the desktop"
- <apicall: Win32Window 'GetDesktopWindow' (void) module: 'user32.dll'>
- ^self externalCallFailed!

Item was removed:
- ----- Method: Win32Window class>>getFocus (in category 'accessing') -----
- getFocus
- "Return the HWND currently having the input focus"
- <apicall: Win32Window 'GetFocus' (void) module: 'user32.dll'>
- ^self externalCallFailed!

Item was removed:
- ----- Method: Win32Window class>>win32Draw (in category 'examples') -----
- win32Draw "Win32Window win32Draw"
- "Draw a bunch of lines using the Windows API"
- | hWnd hDC pt |
- hWnd := Win32Window getFocus.
- hDC := hWnd getDC.
- hDC moveTo: (hWnd screenToClient: Win32Point getCursorPos).
- [Sensor anyButtonPressed] whileFalse:[
- pt := Win32Point getCursorPos.
- hWnd screenToClient: pt.
- hDC lineTo: pt.
- ].
- hWnd releaseDC: hDC.
- Display forceToScreen.!

Item was removed:
- ----- Method: Win32Window>>apiGetDC: (in category 'api calls') -----
- apiGetDC: aHWND
- <apicall: Win32HDC 'GetDC' (Win32Window) module: 'user32.dll'>
- ^self externalCallFailed!

Item was removed:
- ----- Method: Win32Window>>apiGetParent: (in category 'api calls') -----
- apiGetParent: aWindow
- <apicall: Win32Window 'GetParent' (Win32Window) module: 'user32.dll'>
- ^self externalCallFailed!

Item was removed:
- ----- Method: Win32Window>>apiMessageBox:text:title:flags: (in category 'api calls') -----
- apiMessageBox: aHWND text: aString title: aTitle flags: flags
- <apicall: long 'MessageBoxA' (Win32Window char* char* ulong) module:'user32.dll'>
- ^self externalCallFailed!

Item was removed:
- ----- Method: Win32Window>>apiReleaseDC:with: (in category 'api calls') -----
- apiReleaseDC: aHWND with: aHDC
- <apicall: long 'ReleaseDC' (Win32Window Win32HDC) module:'user32.dll'>
- ^self externalCallFailed!

Item was removed:
- ----- Method: Win32Window>>apiScreenToClient:with: (in category 'api calls') -----
- apiScreenToClient: aHWND with: aPOINT
- <apicall: bool 'ScreenToClient' (Win32Window Win32Point*) module: 'user32.dll'>
- ^self externalCallFailed!

Item was removed:
- ----- Method: Win32Window>>getDC (in category 'accessing') -----
- getDC
- "Return the DC associated with the window"
- ^self apiGetDC: self!

Item was removed:
- ----- Method: Win32Window>>getHDCDuring: (in category 'accessing') -----
- getHDCDuring: aBlock
- "Provide a Win32 HDC during the execution of aBlock"
- | hDC |
- hDC := self getDC.
- [aBlock value: hDC] ensure:[self releaseDC: hDC].!

Item was removed:
- ----- Method: Win32Window>>getParent (in category 'accessing') -----
- getParent
- | wnd |
- wnd := self apiGetParent: self.
- ^wnd handle = 0 ifTrue:[nil] ifFalse:[wnd]!

Item was removed:
- ----- Method: Win32Window>>messageBox: (in category 'accessing') -----
- messageBox: aString
- "Win32Window getFocus messageBox:'Hello World'"
- ^self messageBox: aString title:'Squeak'!

Item was removed:
- ----- Method: Win32Window>>messageBox:title: (in category 'accessing') -----
- messageBox: aString title: aTitle
- "Win32Window getFocus messageBox:'Hello World' title:'News from Squeak:'"
- ^self messageBox: aString title: aTitle flags: 0!

Item was removed:
- ----- Method: Win32Window>>messageBox:title:flags: (in category 'accessing') -----
- messageBox: aString title: aTitle flags: flags
- "Win32Window getFocus messageBox:'Are you ready???' title:'News from Squeak:' flags: 3"
- ^self apiMessageBox: self text: aString title: aTitle flags: flags!

Item was removed:
- ----- Method: Win32Window>>releaseDC: (in category 'accessing') -----
- releaseDC: aHDC
- "Release the given DC"
- self apiReleaseDC: self with: aHDC!

Item was removed:
- ----- Method: Win32Window>>screenToClient: (in category 'accessing') -----
- screenToClient: aPoint
- self apiScreenToClient: self with: aPoint.
- ^aPoint!

Item was added:
+ ----- Method: X11Display class>>new (in category 'instance creation') -----
+ new
+ ^ self on: nil!

Item was added:
+ ----- Method: X11Display class>>on: (in category 'instance creation') -----
+ on: aStringOrNil
+ ^ self XOpenDisplay: aStringOrNil!

Item was added:
+ ----- Method: X11Display>>None (in category 'xlib calls') -----
+ None
+ ^ 0!

Item was added:
+ ----- Method: X11Display>>XWarpPointer:sourceWindow:destWindow:sourceX:sourceY:sourceWidth:sourceHeight:destX:destY: (in category 'xlib calls') -----
+ XWarpPointer: display sourceWindow: srcWindowID destWindow: destWindowID sourceX: srcX sourceY: srcY sourceWidth: srcWidth sourceHeight: srcHeight destX: destX destY: destY
+ <cdecl: bool 'XWarpPointer' (X11Display* ulong ulong long long ulong ulong long long) module: 'X11'>
+ ^self externalCallFailed!

Item was added:
+ ----- Method: X11Display>>warpPointerBy: (in category 'accessing') -----
+ warpPointerBy: aPoint
+ "Moves the mouse pointer from its current location to its current location + aPoint. Generates a mouse move event if the squeak window is active"
+
+ ^ self XWarpPointer: self
+ sourceWindow: self None
+ destWindow: self None
+ sourceX: 0 sourceY: 0 sourceWidth: 0 sourceHeight: 0
+ destX: aPoint x destY: aPoint y!

Item was added:
+ ----- Method: X11Display>>warpPointerFrom:in:To:in: (in category 'accessing') -----
+ warpPointerFrom: aRectangle in: sourceWindow To: aPoint in: destWindow
+ "Moves the mouse pointer to aPoint relative to the top-left corner of a window"
+
+ ^ self XWarpPointer: self
+ sourceWindow: sourceWindow xid
+ destWindow: destWindow xid
+ sourceX: aRectangle left sourceY: aRectangle top
+ sourceWidth: aRectangle width sourceHeight: aRectangle height
+ destX: aPoint x destY: aPoint y!

Item was added:
+ ----- Method: X11Display>>warpPointerTo:in: (in category 'accessing') -----
+ warpPointerTo: aPoint in: aWindow
+ "Moves the mouse pointer to aPoint relative to the top-left corner of a window"
+
+ ^ self XWarpPointer: self
+ sourceWindow: self None
+ destWindow: aWindow xid
+ sourceX: 0 sourceY: 0 sourceWidth: 0 sourceHeight: 0
+ destX: aPoint x destY: aPoint y!

Item was added:
+ ----- Method: X11Drawable class>>none (in category 'instance creation') -----
+ none
+ "Universal null resource or null atom"
+ ^ self new!

Item was added:
+ ----- Method: X11Drawable>>xid: (in category 'accessing') -----
+ xid: anUnsignedInteger
+ xid := anUnsignedInteger!