This commit is contained in:
Laurent Le Goff 2011-03-30 17:07:52 +02:00
parent bb4ed43b8a
commit 9a1350aff2
4 changed files with 270 additions and 269 deletions

View file

@ -17,3 +17,6 @@ nuke:
cd draw2d && make nuke cd draw2d && make nuke
cd postscript && make nuke cd postscript && make nuke
cd wingui && make nuke cd wingui && make nuke
fmt:
gofmt -w draw2d postscript wingui cmd

View file

@ -71,7 +71,7 @@ func WndProc(hwnd, msg uint32, wparam, lparam int32) uintptr {
switch msg { switch msg {
case wingui.WM_CREATE: case wingui.WM_CREATE:
hdc := wingui.GetDC(hwnd); hdc := wingui.GetDC(hwnd)
wndBufferHeader = wingui.CreateCompatibleBitmap(hdc, 600, 800) wndBufferHeader = wingui.CreateCompatibleBitmap(hdc, 600, 800)
wingui.GetObject(wndBufferHeader, unsafe.Sizeof(wndBuffer), uintptr(unsafe.Pointer(&wndBuffer))) wingui.GetObject(wndBufferHeader, unsafe.Sizeof(wndBuffer), uintptr(unsafe.Pointer(&wndBuffer)))
hdcWndBuffer = wingui.CreateCompatibleDC(hdc) hdcWndBuffer = wingui.CreateCompatibleDC(hdc)
@ -81,7 +81,7 @@ func WndProc(hwnd, msg uint32, wparam, lparam int32) uintptr {
bmp_header.Size = uint32(unsafe.Sizeof(bmp_header)) bmp_header.Size = uint32(unsafe.Sizeof(bmp_header))
bmp_header.Width = 600 bmp_header.Width = 600
bmp_header.Height = 800 bmp_header.Height = 800
bmp_header.SizeImage = 0// the api says this must be 0 for BI_RGB images bmp_header.SizeImage = 0 // the api says this must be 0 for BI_RGB images
bmp_header.Compression = wingui.BI_RGB bmp_header.Compression = wingui.BI_RGB
bmp_header.BitCount = 32 bmp_header.BitCount = 32
bmp_header.Planes = 1 bmp_header.Planes = 1
@ -101,7 +101,7 @@ func WndProc(hwnd, msg uint32, wparam, lparam int32) uintptr {
hdcWndBuffer = wingui.CreateCompatibleDC(hdc) hdcWndBuffer = wingui.CreateCompatibleDC(hdc)
wingui.SelectObject(hdcWndBuffer, wndBufferHeader) wingui.SelectObject(hdcWndBuffer, wndBufferHeader)
pixel := (*[600*800]image.RGBAColor)(unsafe.Pointer(ppvBits)) pixel := (*[600 * 800]image.RGBAColor)(unsafe.Pointer(ppvBits))
pixelSlice := pixel[:] pixelSlice := pixel[:]
backBuffer = &image.RGBA{pixelSlice, 600, image.Rect(0, 0, 600, 800)} backBuffer = &image.RGBA{pixelSlice, 600, image.Rect(0, 0, 600, 800)}
fmt.Println("Create windows") fmt.Println("Create windows")
@ -123,7 +123,7 @@ func WndProc(hwnd, msg uint32, wparam, lparam int32) uintptr {
reader := strings.NewReader(postscriptContent) reader := strings.NewReader(postscriptContent)
interpreter.Execute(reader) interpreter.Execute(reader)
gc.Restore() gc.Restore()
wingui.BitBlt(hdc, 0, 0 , int(wndBuffer.Width), int(wndBuffer.Height), hdcWndBuffer, 0, 0, wingui.SRCCOPY); wingui.BitBlt(hdc, 0, 0, int(wndBuffer.Width), int(wndBuffer.Height), hdcWndBuffer, 0, 0, wingui.SRCCOPY)
wingui.EndPaint(hwnd, &ps) wingui.EndPaint(hwnd, &ps)
rc = wingui.DefWindowProc(hwnd, msg, wparam, lparam) rc = wingui.DefWindowProc(hwnd, msg, wparam, lparam)
case wingui.WM_CLOSE: case wingui.WM_CLOSE:

View file

@ -10,7 +10,7 @@ import (
"freetype-go.googlecode.com/hg/freetype/raster" "freetype-go.googlecode.com/hg/freetype/raster"
) )
type Painter interface{ type Painter interface {
raster.Painter raster.Painter
SetColor(color image.Color) SetColor(color image.Color)
} }

View file

@ -6,7 +6,6 @@ import (
) )
const ( const (
WM_PAINT = 15 WM_PAINT = 15
BI_RGB = 0 BI_RGB = 0
@ -17,14 +16,14 @@ const (
SRCCOPY = 0xCC0020 SRCCOPY = 0xCC0020
) )
type RECT struct{ type RECT struct {
Left int32 Left int32
Top int32 Top int32
Right int32 Right int32
Bottom int32 Bottom int32
} }
type PAINTSTRUCT struct{ type PAINTSTRUCT struct {
HDC uint32 HDC uint32
Erase int32 // bool Erase int32 // bool
RcPaint RECT RcPaint RECT
@ -33,17 +32,17 @@ type PAINTSTRUCT struct{
rgbReserved [32]byte rgbReserved [32]byte
} }
type BITMAP struct{ type BITMAP struct {
Type int32 Type int32
Width int32 Width int32
Height int32 Height int32
WidthBytes int32 WidthBytes int32
Planes uint16 Planes uint16
BitsPixel uint16 BitsPixel uint16
Bits * byte Bits *byte
} }
type BITMAPINFOHEADER struct{ type BITMAPINFOHEADER struct {
Size uint32 Size uint32
Width int32 Width int32
Height int32 Height int32
@ -57,12 +56,12 @@ type BITMAPINFOHEADER struct{
ClrImportant uint32 ClrImportant uint32
} }
type BITMAPINFO struct{ type BITMAPINFO struct {
Header BITMAPINFOHEADER Header BITMAPINFOHEADER
Colors [1]RGBQUAD Colors [1]RGBQUAD
} }
type RGBQUAD struct{ type RGBQUAD struct {
Blue byte Blue byte
Green byte Green byte
Red byte Red byte
@ -81,7 +80,6 @@ var (
procCreateCompatibleBitmap = getSysProcAddr(modgdi32, "CreateCompatibleBitmap") procCreateCompatibleBitmap = getSysProcAddr(modgdi32, "CreateCompatibleBitmap")
procCreateDIBSection = getSysProcAddr(modgdi32, "CreateDIBSection") procCreateDIBSection = getSysProcAddr(modgdi32, "CreateDIBSection")
procBitBlt = getSysProcAddr(modgdi32, "BitBlt") procBitBlt = getSysProcAddr(modgdi32, "BitBlt")
) )
func GetDC(hwnd uint32) (hdc uint32) { func GetDC(hwnd uint32) (hdc uint32) {
@ -102,7 +100,7 @@ func GetObject(hgdiobj uint32, cbBuffer int, object uintptr) (size uint32) {
return size return size
} }
func SelectObject(hdc uint32, hgdiobj uint32) (uint32) { func SelectObject(hdc uint32, hgdiobj uint32) uint32 {
r0, _, _ := syscall.Syscall(procSelectObject, 2, uintptr(hdc), uintptr(hgdiobj), 0) r0, _, _ := syscall.Syscall(procSelectObject, 2, uintptr(hdc), uintptr(hgdiobj), 0)
return uint32(r0) return uint32(r0)
} }
@ -118,17 +116,17 @@ func EndPaint(hwnd uint32, ps *PAINTSTRUCT) bool {
return true return true
} }
func CreateCompatibleBitmap(hdc uint32, width ,height int) ( hbitmap uint32) { func CreateCompatibleBitmap(hdc uint32, width, height int) (hbitmap uint32) {
r0, _, _ := syscall.Syscall(procCreateCompatibleBitmap, 3, uintptr(hdc), uintptr(width), uintptr(height)) r0, _, _ := syscall.Syscall(procCreateCompatibleBitmap, 3, uintptr(hdc), uintptr(width), uintptr(height))
return uint32(r0) return uint32(r0)
} }
func CreateDIBSection(hdc uint32, pbmi *BITMAPINFO , iUsage uint, ppvBits uintptr, hSection uint32, dwOffset uint32) ( hbitmap uint32) { func CreateDIBSection(hdc uint32, pbmi *BITMAPINFO, iUsage uint, ppvBits uintptr, hSection uint32, dwOffset uint32) (hbitmap uint32) {
r0, _, _ := syscall.Syscall6(procCreateDIBSection, 6, uintptr(hdc), uintptr(unsafe.Pointer(pbmi)), uintptr(iUsage), ppvBits, uintptr(hSection), uintptr(dwOffset)) r0, _, _ := syscall.Syscall6(procCreateDIBSection, 6, uintptr(hdc), uintptr(unsafe.Pointer(pbmi)), uintptr(iUsage), ppvBits, uintptr(hSection), uintptr(dwOffset))
return uint32(r0) return uint32(r0)
} }
func BitBlt(hdc uint32, nXDest, nYDest, nWidth, nHeight int, hdcSrc uint32, nXSrc, nYSrc int, dwRop uint32) ( bool) { func BitBlt(hdc uint32, nXDest, nYDest, nWidth, nHeight int, hdcSrc uint32, nXSrc, nYSrc int, dwRop uint32) bool {
r0, _, _ := syscall.Syscall9(procBitBlt, 9, uintptr(hdc), uintptr(nXDest), uintptr(nYDest), uintptr(nWidth), uintptr(nHeight), uintptr(hdcSrc), uintptr(nXSrc), uintptr(nYSrc), uintptr(dwRop)) r0, _, _ := syscall.Syscall9(procBitBlt, 9, uintptr(hdc), uintptr(nXDest), uintptr(nYDest), uintptr(nWidth), uintptr(nHeight), uintptr(hdcSrc), uintptr(nXSrc), uintptr(nYSrc), uintptr(dwRop))
return r0 != 0 return r0 != 0
} }