From 9a1350aff2a077cca59ffe75412760c55b55f59c Mon Sep 17 00:00:00 2001 From: Laurent Le Goff Date: Wed, 30 Mar 2011 17:07:52 +0200 Subject: [PATCH] fmt --- Makefile | 3 + cmd/testWalkDraw.go | 416 ++++++++++++++++++++++---------------------- draw2d/draw2d.go | 6 +- wingui/wingdi.go | 114 ++++++------ 4 files changed, 270 insertions(+), 269 deletions(-) diff --git a/Makefile b/Makefile index 3e08734..5fe1a00 100644 --- a/Makefile +++ b/Makefile @@ -17,3 +17,6 @@ nuke: cd draw2d && make nuke cd postscript && make nuke cd wingui && make nuke + +fmt: + gofmt -w draw2d postscript wingui cmd diff --git a/cmd/testWalkDraw.go b/cmd/testWalkDraw.go index d809d90..b012952 100644 --- a/cmd/testWalkDraw.go +++ b/cmd/testWalkDraw.go @@ -1,228 +1,228 @@ // Copyright 2011 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. - -package main - -import ( - "fmt" - "syscall" - "os" - "unsafe" - "image" - "io/ioutil" - "strings" - "draw2d.googlecode.com/hg/draw2d" - "draw2d.googlecode.com/hg/postscript" - "draw2d.googlecode.com/hg/wingui" -) - + +package main + +import ( + "fmt" + "syscall" + "os" + "unsafe" + "image" + "io/ioutil" + "strings" + "draw2d.googlecode.com/hg/draw2d" + "draw2d.googlecode.com/hg/postscript" + "draw2d.googlecode.com/hg/wingui" +) + // some help functions - -func abortf(format string, a ...interface{}) { - fmt.Fprintf(os.Stdout, format, a...) - os.Exit(1) -} - -func abortErrNo(funcname string, err int) { - abortf("%s failed: %d %s\n", funcname, err, syscall.Errstr(err)) -} - + +func abortf(format string, a ...interface{}) { + fmt.Fprintf(os.Stdout, format, a...) + os.Exit(1) +} + +func abortErrNo(funcname string, err int) { + abortf("%s failed: %d %s\n", funcname, err, syscall.Errstr(err)) +} + // global vars - - -func TestDrawCubicCurve(gc draw2d.GraphicContext) { + + +func TestDrawCubicCurve(gc draw2d.GraphicContext) { // draw a cubic curve - x, y := 25.6, 128.0 - x1, y1 := 102.4, 230.4 - x2, y2 := 153.6, 25.6 - x3, y3 := 230.4, 128.0 - - gc.SetFillColor(image.NRGBAColor{0xAA, 0xAA, 0xAA, 0xFF}) - gc.SetLineWidth(10) - gc.MoveTo(x, y) - gc.CubicCurveTo(x1, y1, x2, y2, x3, y3) - gc.Stroke() - - gc.SetStrokeColor(image.NRGBAColor{0xFF, 0x33, 0x33, 0x88}) - - gc.SetLineWidth(6) + x, y := 25.6, 128.0 + x1, y1 := 102.4, 230.4 + x2, y2 := 153.6, 25.6 + x3, y3 := 230.4, 128.0 + + gc.SetFillColor(image.NRGBAColor{0xAA, 0xAA, 0xAA, 0xFF}) + gc.SetLineWidth(10) + gc.MoveTo(x, y) + gc.CubicCurveTo(x1, y1, x2, y2, x3, y3) + gc.Stroke() + + gc.SetStrokeColor(image.NRGBAColor{0xFF, 0x33, 0x33, 0x88}) + + gc.SetLineWidth(6) // draw segment of curve - gc.MoveTo(x, y) - gc.LineTo(x1, y1) - gc.LineTo(x2, y2) - gc.LineTo(x3, y3) - gc.Stroke() -} - -var ( - mh uint32 - wndBufferHeader uint32 - wndBuffer wingui.BITMAP - hdcWndBuffer uint32 - ppvBits *image.RGBAColor - backBuffer *image.RGBA - postscriptContent string -) - + gc.MoveTo(x, y) + gc.LineTo(x1, y1) + gc.LineTo(x2, y2) + gc.LineTo(x3, y3) + gc.Stroke() +} + +var ( + mh uint32 + wndBufferHeader uint32 + wndBuffer wingui.BITMAP + hdcWndBuffer uint32 + ppvBits *image.RGBAColor + backBuffer *image.RGBA + postscriptContent string +) + // WinProc called by windows to notify us of all windows events we might be interested in. -func WndProc(hwnd, msg uint32, wparam, lparam int32) uintptr { - var rc int32 - - switch msg { - case wingui.WM_CREATE: - hdc := wingui.GetDC(hwnd); - wndBufferHeader = wingui.CreateCompatibleBitmap(hdc, 600, 800) - wingui.GetObject(wndBufferHeader, unsafe.Sizeof(wndBuffer), uintptr(unsafe.Pointer(&wndBuffer))) - hdcWndBuffer = wingui.CreateCompatibleDC(hdc) - wingui.SelectObject(hdcWndBuffer, wndBufferHeader) - - var bmp_header wingui.BITMAPINFOHEADER - bmp_header.Size = uint32(unsafe.Sizeof(bmp_header)) - bmp_header.Width = 600 - bmp_header.Height = 800 - bmp_header.SizeImage = 0// the api says this must be 0 for BI_RGB images - bmp_header.Compression = wingui.BI_RGB - bmp_header.BitCount = 32 - bmp_header.Planes = 1 - bmp_header.XPelsPerMeter = 0 - bmp_header.YPelsPerMeter = 0 - bmp_header.ClrUsed = 0 - bmp_header.ClrImportant = 0 +func WndProc(hwnd, msg uint32, wparam, lparam int32) uintptr { + var rc int32 + + switch msg { + case wingui.WM_CREATE: + hdc := wingui.GetDC(hwnd) + wndBufferHeader = wingui.CreateCompatibleBitmap(hdc, 600, 800) + wingui.GetObject(wndBufferHeader, unsafe.Sizeof(wndBuffer), uintptr(unsafe.Pointer(&wndBuffer))) + hdcWndBuffer = wingui.CreateCompatibleDC(hdc) + wingui.SelectObject(hdcWndBuffer, wndBufferHeader) + + var bmp_header wingui.BITMAPINFOHEADER + bmp_header.Size = uint32(unsafe.Sizeof(bmp_header)) + bmp_header.Width = 600 + bmp_header.Height = 800 + bmp_header.SizeImage = 0 // the api says this must be 0 for BI_RGB images + bmp_header.Compression = wingui.BI_RGB + bmp_header.BitCount = 32 + bmp_header.Planes = 1 + bmp_header.XPelsPerMeter = 0 + bmp_header.YPelsPerMeter = 0 + bmp_header.ClrUsed = 0 + bmp_header.ClrImportant = 0 //bitmap info - var bmpinfo wingui.BITMAPINFO - bmpinfo.Colors[0].Blue = 0 - bmpinfo.Colors[0].Green = 0 - bmpinfo.Colors[0].Red = 0 - bmpinfo.Colors[0].Reserved = 0 - bmpinfo.Header = bmp_header - wndBufferHeader = wingui.CreateDIBSection(hdc, &bmpinfo, wingui.DIB_RGB_COLORS, uintptr(unsafe.Pointer(&ppvBits)), 0, 0) - wingui.GetObject(wndBufferHeader, unsafe.Sizeof(wndBufferHeader), uintptr(unsafe.Pointer(&wndBuffer))) - hdcWndBuffer = wingui.CreateCompatibleDC(hdc) - wingui.SelectObject(hdcWndBuffer, wndBufferHeader) - - pixel := (*[600*800]image.RGBAColor)(unsafe.Pointer(ppvBits)) - pixelSlice := pixel[:] - backBuffer = &image.RGBA{pixelSlice, 600, image.Rect(0, 0, 600, 800)} - fmt.Println("Create windows") - rc = wingui.DefWindowProc(hwnd, msg, wparam, lparam) - case wingui.WM_COMMAND: - switch uint32(lparam) { - default: - rc = wingui.DefWindowProc(hwnd, msg, wparam, lparam) - } - case wingui.WM_PAINT: - var ps wingui.PAINTSTRUCT - hdc := wingui.BeginPaint(hwnd, &ps) - gc := draw2d.NewImageGraphicContext(backBuffer) - gc.SetFillColor(image.RGBAColor{0xFF, 0xFF, 0xFF, 0xFF}) - gc.Clear() - gc.Save() + var bmpinfo wingui.BITMAPINFO + bmpinfo.Colors[0].Blue = 0 + bmpinfo.Colors[0].Green = 0 + bmpinfo.Colors[0].Red = 0 + bmpinfo.Colors[0].Reserved = 0 + bmpinfo.Header = bmp_header + wndBufferHeader = wingui.CreateDIBSection(hdc, &bmpinfo, wingui.DIB_RGB_COLORS, uintptr(unsafe.Pointer(&ppvBits)), 0, 0) + wingui.GetObject(wndBufferHeader, unsafe.Sizeof(wndBufferHeader), uintptr(unsafe.Pointer(&wndBuffer))) + hdcWndBuffer = wingui.CreateCompatibleDC(hdc) + wingui.SelectObject(hdcWndBuffer, wndBufferHeader) + + pixel := (*[600 * 800]image.RGBAColor)(unsafe.Pointer(ppvBits)) + pixelSlice := pixel[:] + backBuffer = &image.RGBA{pixelSlice, 600, image.Rect(0, 0, 600, 800)} + fmt.Println("Create windows") + rc = wingui.DefWindowProc(hwnd, msg, wparam, lparam) + case wingui.WM_COMMAND: + switch uint32(lparam) { + default: + rc = wingui.DefWindowProc(hwnd, msg, wparam, lparam) + } + case wingui.WM_PAINT: + var ps wingui.PAINTSTRUCT + hdc := wingui.BeginPaint(hwnd, &ps) + gc := draw2d.NewImageGraphicContext(backBuffer) + gc.SetFillColor(image.RGBAColor{0xFF, 0xFF, 0xFF, 0xFF}) + gc.Clear() + gc.Save() //gc.Translate(0, -380) - interpreter := postscript.NewInterpreter(gc) - reader := strings.NewReader(postscriptContent) - interpreter.Execute(reader) - gc.Restore() - wingui.BitBlt(hdc, 0, 0 , int(wndBuffer.Width), int(wndBuffer.Height), hdcWndBuffer, 0, 0, wingui.SRCCOPY); - wingui.EndPaint(hwnd, &ps) - rc = wingui.DefWindowProc(hwnd, msg, wparam, lparam) - case wingui.WM_CLOSE: - wingui.DestroyWindow(hwnd) - case wingui.WM_DESTROY: - wingui.PostQuitMessage(0) - default: - rc = wingui.DefWindowProc(hwnd, msg, wparam, lparam) - } - return uintptr(rc) -} - -func rungui() int { - var e int - + interpreter := postscript.NewInterpreter(gc) + reader := strings.NewReader(postscriptContent) + interpreter.Execute(reader) + gc.Restore() + wingui.BitBlt(hdc, 0, 0, int(wndBuffer.Width), int(wndBuffer.Height), hdcWndBuffer, 0, 0, wingui.SRCCOPY) + wingui.EndPaint(hwnd, &ps) + rc = wingui.DefWindowProc(hwnd, msg, wparam, lparam) + case wingui.WM_CLOSE: + wingui.DestroyWindow(hwnd) + case wingui.WM_DESTROY: + wingui.PostQuitMessage(0) + default: + rc = wingui.DefWindowProc(hwnd, msg, wparam, lparam) + } + return uintptr(rc) +} + +func rungui() int { + var e int + // GetModuleHandle - mh, e = wingui.GetModuleHandle(nil) - if e != 0 { - abortErrNo("GetModuleHandle", e) - } - + mh, e = wingui.GetModuleHandle(nil) + if e != 0 { + abortErrNo("GetModuleHandle", e) + } + // Get icon we're going to use. - myicon, e := wingui.LoadIcon(0, wingui.IDI_APPLICATION) - if e != 0 { - abortErrNo("LoadIcon", e) - } - + myicon, e := wingui.LoadIcon(0, wingui.IDI_APPLICATION) + if e != 0 { + abortErrNo("LoadIcon", e) + } + // Get cursor we're going to use. - mycursor, e := wingui.LoadCursor(0, wingui.IDC_ARROW) - if e != 0 { - abortErrNo("LoadCursor", e) - } - + mycursor, e := wingui.LoadCursor(0, wingui.IDC_ARROW) + if e != 0 { + abortErrNo("LoadCursor", e) + } + // Create callback - wproc := syscall.NewCallback(WndProc) - + wproc := syscall.NewCallback(WndProc) + // RegisterClassEx - wcname := syscall.StringToUTF16Ptr("Test Draw2d") - var wc wingui.Wndclassex - wc.Size = uint32(unsafe.Sizeof(wc)) - wc.WndProc = wproc - wc.Instance = mh - wc.Icon = myicon - wc.Cursor = mycursor - wc.Background = wingui.COLOR_BTNFACE + 1 - wc.MenuName = nil - wc.ClassName = wcname - wc.IconSm = myicon - if _, e := wingui.RegisterClassEx(&wc); e != 0 { - abortErrNo("RegisterClassEx", e) - } - + wcname := syscall.StringToUTF16Ptr("Test Draw2d") + var wc wingui.Wndclassex + wc.Size = uint32(unsafe.Sizeof(wc)) + wc.WndProc = wproc + wc.Instance = mh + wc.Icon = myicon + wc.Cursor = mycursor + wc.Background = wingui.COLOR_BTNFACE + 1 + wc.MenuName = nil + wc.ClassName = wcname + wc.IconSm = myicon + if _, e := wingui.RegisterClassEx(&wc); e != 0 { + abortErrNo("RegisterClassEx", e) + } + // CreateWindowEx - wh, e := wingui.CreateWindowEx( - wingui.WS_EX_CLIENTEDGE, - wcname, - syscall.StringToUTF16Ptr("My window"), - wingui.WS_OVERLAPPEDWINDOW, - wingui.CW_USEDEFAULT, wingui.CW_USEDEFAULT, 600, 800, - 0, 0, mh, 0) - if e != 0 { - abortErrNo("CreateWindowEx", e) - } - fmt.Printf("main window handle is %x\n", wh) - + wh, e := wingui.CreateWindowEx( + wingui.WS_EX_CLIENTEDGE, + wcname, + syscall.StringToUTF16Ptr("My window"), + wingui.WS_OVERLAPPEDWINDOW, + wingui.CW_USEDEFAULT, wingui.CW_USEDEFAULT, 600, 800, + 0, 0, mh, 0) + if e != 0 { + abortErrNo("CreateWindowEx", e) + } + fmt.Printf("main window handle is %x\n", wh) + // ShowWindow - wingui.ShowWindow(wh, wingui.SW_SHOWDEFAULT) - + wingui.ShowWindow(wh, wingui.SW_SHOWDEFAULT) + // UpdateWindow - if e := wingui.UpdateWindow(wh); e != 0 { - abortErrNo("UpdateWindow", e) - } - + if e := wingui.UpdateWindow(wh); e != 0 { + abortErrNo("UpdateWindow", e) + } + // Process all windows messages until WM_QUIT. - var m wingui.Msg - for { - r, e := wingui.GetMessage(&m, 0, 0, 0) - if e != 0 { - abortErrNo("GetMessage", e) - } - if r == 0 { + var m wingui.Msg + for { + r, e := wingui.GetMessage(&m, 0, 0, 0) + if e != 0 { + abortErrNo("GetMessage", e) + } + if r == 0 { // WM_QUIT received -> get out - break - } - wingui.TranslateMessage(&m) - wingui.DispatchMessage(&m) - } - return int(m.Wparam) -} - -func main() { - src, err := os.Open("../resource/postscript/tiger.ps", 0, 0) - if err != nil { - fmt.Println("can't find postscript file.") - return - } - defer src.Close() - bytes, err := ioutil.ReadAll(src) - postscriptContent = string(bytes) - rc := rungui() - os.Exit(rc) -} + break + } + wingui.TranslateMessage(&m) + wingui.DispatchMessage(&m) + } + return int(m.Wparam) +} + +func main() { + src, err := os.Open("../resource/postscript/tiger.ps", 0, 0) + if err != nil { + fmt.Println("can't find postscript file.") + return + } + defer src.Close() + bytes, err := ioutil.ReadAll(src) + postscriptContent = string(bytes) + rc := rungui() + os.Exit(rc) +} diff --git a/draw2d/draw2d.go b/draw2d/draw2d.go index 83e1c72..79225cb 100644 --- a/draw2d/draw2d.go +++ b/draw2d/draw2d.go @@ -10,13 +10,13 @@ import ( "freetype-go.googlecode.com/hg/freetype/raster" ) -type Painter interface{ +type Painter interface { raster.Painter SetColor(color image.Color) } type ImageGraphicContext struct { - img draw.Image + img draw.Image painter Painter fillRasterizer *raster.Rasterizer strokeRasterizer *raster.Rasterizer @@ -56,7 +56,7 @@ func NewImageGraphicContext(img draw.Image) *ImageGraphicContext { default: panic("Image type not supported") } - + width, height := gc.img.Bounds().Dx(), gc.img.Bounds().Dy() gc.fillRasterizer = raster.NewRasterizer(width, height) gc.strokeRasterizer = raster.NewRasterizer(width, height) diff --git a/wingui/wingdi.go b/wingui/wingdi.go index be55d71..fe796f3 100644 --- a/wingui/wingdi.go +++ b/wingui/wingdi.go @@ -6,82 +6,80 @@ import ( ) const ( - WM_PAINT = 15 - + BI_RGB = 0 - + DIB_PAL_COLORS = 1 DIB_RGB_COLORS = 0 - + SRCCOPY = 0xCC0020 ) -type RECT struct{ - Left int32 - Top int32 - Right int32 - Bottom int32 +type RECT struct { + Left int32 + Top int32 + Right int32 + Bottom int32 } -type PAINTSTRUCT struct{ - HDC uint32 - Erase int32 // bool - RcPaint RECT - Restore int32 // bool - IncUpdate int32 // bool - rgbReserved [32]byte +type PAINTSTRUCT struct { + HDC uint32 + Erase int32 // bool + RcPaint RECT + Restore int32 // bool + IncUpdate int32 // bool + rgbReserved [32]byte } -type BITMAP struct{ - Type int32 - Width int32 - Height int32 - WidthBytes int32 - Planes uint16 - BitsPixel uint16 - Bits * byte +type BITMAP struct { + Type int32 + Width int32 + Height int32 + WidthBytes int32 + Planes uint16 + BitsPixel uint16 + Bits *byte } -type BITMAPINFOHEADER struct{ - Size uint32 - Width int32 - Height int32 - Planes uint16 - BitCount uint16 - Compression uint32 - SizeImage uint32 - XPelsPerMeter int32 - YPelsPerMeter int32 - ClrUsed uint32 - ClrImportant uint32 +type BITMAPINFOHEADER struct { + Size uint32 + Width int32 + Height int32 + Planes uint16 + BitCount uint16 + Compression uint32 + SizeImage uint32 + XPelsPerMeter int32 + YPelsPerMeter int32 + ClrUsed uint32 + ClrImportant uint32 } -type BITMAPINFO struct{ - Header BITMAPINFOHEADER - Colors [1]RGBQUAD +type BITMAPINFO struct { + Header BITMAPINFOHEADER + Colors [1]RGBQUAD } -type RGBQUAD struct{ - Blue byte - Green byte - Red byte - Reserved byte +type RGBQUAD struct { + Blue byte + Green byte + Red byte + Reserved byte } var ( modgdi32 = loadDll("gdi32.dll") - procGetDC = getSysProcAddr(moduser32, "GetDC") - procCreateCompatibleDC = getSysProcAddr(modgdi32, "CreateCompatibleDC") - procGetObject = getSysProcAddr(modgdi32, "GetObjectW") - procSelectObject = getSysProcAddr(modgdi32, "SelectObject") - procBeginPaint = getSysProcAddr(moduser32, "BeginPaint") - procEndPaint = getSysProcAddr(moduser32, "EndPaint") + procGetDC = getSysProcAddr(moduser32, "GetDC") + procCreateCompatibleDC = getSysProcAddr(modgdi32, "CreateCompatibleDC") + procGetObject = getSysProcAddr(modgdi32, "GetObjectW") + procSelectObject = getSysProcAddr(modgdi32, "SelectObject") + procBeginPaint = getSysProcAddr(moduser32, "BeginPaint") + procEndPaint = getSysProcAddr(moduser32, "EndPaint") procCreateCompatibleBitmap = getSysProcAddr(modgdi32, "CreateCompatibleBitmap") - procCreateDIBSection = getSysProcAddr(modgdi32, "CreateDIBSection") - procBitBlt = getSysProcAddr(modgdi32, "BitBlt") - + procCreateDIBSection = getSysProcAddr(modgdi32, "CreateDIBSection") + procBitBlt = getSysProcAddr(modgdi32, "BitBlt") ) func GetDC(hwnd uint32) (hdc uint32) { @@ -102,7 +100,7 @@ func GetObject(hgdiobj uint32, cbBuffer int, object uintptr) (size uint32) { 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) return uint32(r0) } @@ -118,17 +116,17 @@ func EndPaint(hwnd uint32, ps *PAINTSTRUCT) bool { 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)) 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)) 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)) return r0 != 0 -} \ No newline at end of file +}