remove deprecated files
This commit is contained in:
parent
146e6d6c8e
commit
26fd99f263
6 changed files with 0 additions and 890 deletions
|
@ -1,11 +0,0 @@
|
|||
include $(GOROOT)/src/Make.inc
|
||||
|
||||
TARG=draw2d.googlecode.com/hg/draw2d/curve
|
||||
GOFILES=\
|
||||
cubic_float64.go\
|
||||
quad_float64.go\
|
||||
cubic_float64_others.go\
|
||||
|
||||
|
||||
|
||||
include $(GOROOT)/src/Make.pkg
|
134
wingui/winapi.go
134
wingui/winapi.go
|
@ -1,134 +0,0 @@
|
|||
// 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.
|
||||
|
||||
// +build windows
|
||||
|
||||
package wingui
|
||||
|
||||
import (
|
||||
"syscall"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
type Wndclassex struct {
|
||||
Size uint32
|
||||
Style uint32
|
||||
WndProc uintptr
|
||||
ClsExtra int32
|
||||
WndExtra int32
|
||||
Instance syscall.Handle
|
||||
Icon syscall.Handle
|
||||
Cursor syscall.Handle
|
||||
Background syscall.Handle
|
||||
MenuName *uint16
|
||||
ClassName *uint16
|
||||
IconSm syscall.Handle
|
||||
}
|
||||
|
||||
type Point struct {
|
||||
X uintptr
|
||||
Y uintptr
|
||||
}
|
||||
|
||||
type Msg struct {
|
||||
Hwnd syscall.Handle
|
||||
Message uint32
|
||||
Wparam uintptr
|
||||
Lparam uintptr
|
||||
Time uint32
|
||||
Pt Point
|
||||
}
|
||||
|
||||
const (
|
||||
// Window styles
|
||||
WS_OVERLAPPED = 0
|
||||
WS_POPUP = 0x80000000
|
||||
WS_CHILD = 0x40000000
|
||||
WS_MINIMIZE = 0x20000000
|
||||
WS_VISIBLE = 0x10000000
|
||||
WS_DISABLED = 0x8000000
|
||||
WS_CLIPSIBLINGS = 0x4000000
|
||||
WS_CLIPCHILDREN = 0x2000000
|
||||
WS_MAXIMIZE = 0x1000000
|
||||
WS_CAPTION = WS_BORDER | WS_DLGFRAME
|
||||
WS_BORDER = 0x800000
|
||||
WS_DLGFRAME = 0x400000
|
||||
WS_VSCROLL = 0x200000
|
||||
WS_HSCROLL = 0x100000
|
||||
WS_SYSMENU = 0x80000
|
||||
WS_THICKFRAME = 0x40000
|
||||
WS_GROUP = 0x20000
|
||||
WS_TABSTOP = 0x10000
|
||||
WS_MINIMIZEBOX = 0x20000
|
||||
WS_MAXIMIZEBOX = 0x10000
|
||||
WS_TILED = WS_OVERLAPPED
|
||||
WS_ICONIC = WS_MINIMIZE
|
||||
WS_SIZEBOX = WS_THICKFRAME
|
||||
// Common Window Styles
|
||||
WS_OVERLAPPEDWINDOW = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX
|
||||
WS_TILEDWINDOW = WS_OVERLAPPEDWINDOW
|
||||
WS_POPUPWINDOW = WS_POPUP | WS_BORDER | WS_SYSMENU
|
||||
WS_CHILDWINDOW = WS_CHILD
|
||||
|
||||
WS_EX_CLIENTEDGE = 0x200
|
||||
|
||||
// Some windows messages
|
||||
WM_CREATE = 1
|
||||
WM_DESTROY = 2
|
||||
WM_CLOSE = 16
|
||||
WM_COMMAND = 273
|
||||
|
||||
// Some button control styles
|
||||
BS_DEFPUSHBUTTON = 1
|
||||
|
||||
// Some color constants
|
||||
COLOR_WINDOW = 5
|
||||
COLOR_BTNFACE = 15
|
||||
|
||||
// Default window position
|
||||
CW_USEDEFAULT = 0x80000000 - 0x100000000
|
||||
|
||||
// Show window default style
|
||||
SW_SHOWDEFAULT = 10
|
||||
)
|
||||
|
||||
var (
|
||||
// Some globally known cursors
|
||||
IDC_ARROW = MakeIntResource(32512)
|
||||
IDC_IBEAM = MakeIntResource(32513)
|
||||
IDC_WAIT = MakeIntResource(32514)
|
||||
IDC_CROSS = MakeIntResource(32515)
|
||||
|
||||
// Some globally known icons
|
||||
IDI_APPLICATION = MakeIntResource(32512)
|
||||
IDI_HAND = MakeIntResource(32513)
|
||||
IDI_QUESTION = MakeIntResource(32514)
|
||||
IDI_EXCLAMATION = MakeIntResource(32515)
|
||||
IDI_ASTERISK = MakeIntResource(32516)
|
||||
IDI_WINLOGO = MakeIntResource(32517)
|
||||
IDI_WARNING = IDI_EXCLAMATION
|
||||
IDI_ERROR = IDI_HAND
|
||||
IDI_INFORMATION = IDI_ASTERISK
|
||||
)
|
||||
|
||||
//sys GetModuleHandle(modname *uint16) (handle syscall.Handle, err error) = GetModuleHandleW
|
||||
//sys RegisterClassEx(wndclass *Wndclassex) (atom uint16, err error) = user32.RegisterClassExW
|
||||
//sys CreateWindowEx(exstyle uint32, classname *uint16, windowname *uint16, style uint32, x int32, y int32, width int32, height int32, wndparent syscall.Handle, menu syscall.Handle, instance syscall.Handle, param uintptr) (hwnd syscall.Handle, err error) = user32.CreateWindowExW
|
||||
//sys DefWindowProc(hwnd syscall.Handle, msg uint32, wparam uintptr, lparam uintptr) (lresult uintptr) = user32.DefWindowProcW
|
||||
//sys DestroyWindow(hwnd syscall.Handle) (err error) = user32.DestroyWindow
|
||||
//sys PostQuitMessage(exitcode int32) = user32.PostQuitMessage
|
||||
//sys ShowWindow(hwnd syscall.Handle, cmdshow int32) (wasvisible bool) = user32.ShowWindow
|
||||
//sys UpdateWindow(hwnd syscall.Handle) (err error) = user32.UpdateWindow
|
||||
//sys GetMessage(msg *Msg, hwnd syscall.Handle, MsgFilterMin uint32, MsgFilterMax uint32) (ret int32, err error) [failretval==-1] = user32.GetMessageW
|
||||
//sys TranslateMessage(msg *Msg) (done bool) = user32.TranslateMessage
|
||||
//sys DispatchMessage(msg *Msg) (ret int32) = user32.DispatchMessageW
|
||||
//sys LoadIcon(instance syscall.Handle, iconname *uint16) (icon syscall.Handle, err error) = user32.LoadIconW
|
||||
//sys LoadCursor(instance syscall.Handle, cursorname *uint16) (cursor syscall.Handle, err error) = user32.LoadCursorW
|
||||
//sys SetCursor(cursor syscall.Handle) (precursor syscall.Handle, err error) = user32.SetCursor
|
||||
//sys SendMessage(hwnd syscall.Handle, msg uint32, wparam uintptr, lparam uintptr) (lresult uintptr) = user32.SendMessageW
|
||||
//sys PostMessage(hwnd syscall.Handle, msg uint32, wparam uintptr, lparam uintptr) (err error) = user32.PostMessageW
|
||||
|
||||
func MakeIntResource(id uint16) *uint16 {
|
||||
return (*uint16)(unsafe.Pointer(uintptr(id)))
|
||||
}
|
149
wingui/wingdi.go
149
wingui/wingdi.go
|
@ -1,149 +0,0 @@
|
|||
// +build windows
|
||||
|
||||
package wingui
|
||||
|
||||
import (
|
||||
"syscall"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
const (
|
||||
WM_PAINT = 15
|
||||
|
||||
BI_RGB = 0
|
||||
BI_BITFIELDS = 3
|
||||
|
||||
DIB_PAL_COLORS = 1
|
||||
DIB_RGB_COLORS = 0
|
||||
|
||||
BLACKNESS = 0x42
|
||||
DSTINVERT = 0x550009
|
||||
MERGECOPY = 0xC000CA
|
||||
MERGEPAINT = 0xBB0226
|
||||
NOTSRCCOPY = 0x330008
|
||||
NOTSRCERASE = 0x1100A6
|
||||
PATCOPY = 0xF00021
|
||||
PATINVERT = 0x5A0049
|
||||
PATPAINT = 0xFB0A09
|
||||
SRCAND = 0x8800C6
|
||||
SRCCOPY = 0xCC0020
|
||||
SRCERASE = 0x440328
|
||||
SRCINVERT = 0x660046
|
||||
SRCPAINT = 0xEE0086
|
||||
WHITENESS = 0xFF0062
|
||||
)
|
||||
|
||||
type RECT struct {
|
||||
Left int32
|
||||
Top int32
|
||||
Right int32
|
||||
Bottom int32
|
||||
}
|
||||
|
||||
type PAINTSTRUCT struct {
|
||||
HDC syscall.Handle
|
||||
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 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 RGBQUAD struct {
|
||||
Blue byte
|
||||
Green byte
|
||||
Red byte
|
||||
Reserved byte
|
||||
}
|
||||
|
||||
var (
|
||||
modgdi32 = syscall.NewLazyDLL("gdi32.dll")
|
||||
|
||||
procGetDC = moduser32.NewProc("GetDC")
|
||||
procCreateCompatibleDC = modgdi32.NewProc("CreateCompatibleDC")
|
||||
procGetObject = modgdi32.NewProc("GetObjectW")
|
||||
procSelectObject = modgdi32.NewProc("SelectObject")
|
||||
procBeginPaint = moduser32.NewProc("BeginPaint")
|
||||
procEndPaint = moduser32.NewProc("EndPaint")
|
||||
procCreateCompatibleBitmap = modgdi32.NewProc("CreateCompatibleBitmap")
|
||||
procCreateDIBSection = modgdi32.NewProc("CreateDIBSection")
|
||||
procBitBlt = modgdi32.NewProc("BitBlt")
|
||||
)
|
||||
|
||||
func GetDC(hwnd syscall.Handle) (hdc syscall.Handle) {
|
||||
r0, _, _ := syscall.Syscall(procGetDC.Addr(), 1, uintptr(hwnd), 0, 0)
|
||||
hdc = syscall.Handle(r0)
|
||||
return hdc
|
||||
}
|
||||
|
||||
func CreateCompatibleDC(hwnd syscall.Handle) (hdc syscall.Handle) {
|
||||
r0, _, _ := syscall.Syscall(procCreateCompatibleDC.Addr(), 1, uintptr(hwnd), 0, 0)
|
||||
hdc = syscall.Handle(r0)
|
||||
return hdc
|
||||
}
|
||||
|
||||
func GetObject(hgdiobj syscall.Handle, cbBuffer uintptr, object uintptr) (size uint32) {
|
||||
r0, _, _ := syscall.Syscall(procGetObject.Addr(), 3, uintptr(hgdiobj), uintptr(cbBuffer), object)
|
||||
size = uint32(r0)
|
||||
return size
|
||||
}
|
||||
|
||||
func SelectObject(hdc syscall.Handle, hgdiobj syscall.Handle) syscall.Handle {
|
||||
r0, _, _ := syscall.Syscall(procSelectObject.Addr(), 2, uintptr(hdc), uintptr(hgdiobj), 0)
|
||||
return syscall.Handle(r0)
|
||||
}
|
||||
|
||||
func BeginPaint(hwnd syscall.Handle, ps *PAINTSTRUCT) (hdc syscall.Handle) {
|
||||
r0, _, _ := syscall.Syscall(procBeginPaint.Addr(), 2, uintptr(hwnd), uintptr(unsafe.Pointer(ps)), 0)
|
||||
hdc = syscall.Handle(r0)
|
||||
return
|
||||
}
|
||||
|
||||
func EndPaint(hwnd syscall.Handle, ps *PAINTSTRUCT) bool {
|
||||
syscall.Syscall(procEndPaint.Addr(), 2, uintptr(hwnd), uintptr(unsafe.Pointer(ps)), 0)
|
||||
return true
|
||||
}
|
||||
|
||||
func CreateCompatibleBitmap(hdc syscall.Handle, width, height uintptr) (hbitmap syscall.Handle) {
|
||||
r0, _, _ := syscall.Syscall(procCreateCompatibleBitmap.Addr(), 3, uintptr(hdc), uintptr(width), uintptr(height))
|
||||
return syscall.Handle(r0)
|
||||
}
|
||||
|
||||
func CreateDIBSection(hdc syscall.Handle, pbmi *BITMAPINFO, iUsage uint, ppvBits uintptr, hSection uint32, dwOffset uint32) (hbitmap syscall.Handle) {
|
||||
r0, _, _ := syscall.Syscall6(procCreateDIBSection.Addr(), 6, uintptr(hdc), uintptr(unsafe.Pointer(pbmi)), uintptr(iUsage), ppvBits, uintptr(hSection), uintptr(dwOffset))
|
||||
return syscall.Handle(r0)
|
||||
}
|
||||
|
||||
func BitBlt(hdc syscall.Handle, nXDest, nYDest, nWidth, nHeight int, hdcSrc syscall.Handle, nXSrc, nYSrc int, dwRop uint32) bool {
|
||||
r0, _, _ := syscall.Syscall9(procBitBlt.Addr(), 9, uintptr(hdc), uintptr(nXDest), uintptr(nYDest), uintptr(nWidth), uintptr(nHeight), uintptr(hdcSrc), uintptr(nXSrc), uintptr(nYSrc), uintptr(dwRop))
|
||||
return r0 != 0
|
||||
}
|
|
@ -1,154 +0,0 @@
|
|||
// +build ignore
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"syscall"
|
||||
"unsafe"
|
||||
|
||||
. "github.com/llgcode/draw2d/wingui"
|
||||
)
|
||||
|
||||
// some help functions
|
||||
|
||||
func abortf(format string, a ...interface{}) {
|
||||
fmt.Fprintf(os.Stdout, format, a...)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
func abortErrNo(funcname string, err error) {
|
||||
errno, _ := err.(syscall.Errno)
|
||||
abortf("%s failed: %d %s\n", funcname, uint32(errno), err)
|
||||
}
|
||||
|
||||
// global vars
|
||||
|
||||
var (
|
||||
mh syscall.Handle
|
||||
bh syscall.Handle
|
||||
)
|
||||
|
||||
// WinProc called by windows to notify us of all windows events we might be interested in.
|
||||
func WndProc(hwnd syscall.Handle, msg uint32, wparam, lparam uintptr) (rc uintptr) {
|
||||
_ = make([]int, 100000)
|
||||
switch msg {
|
||||
case WM_CREATE:
|
||||
var e error
|
||||
// CreateWindowEx
|
||||
bh, e = CreateWindowEx(
|
||||
0,
|
||||
syscall.StringToUTF16Ptr("button"),
|
||||
syscall.StringToUTF16Ptr("Quit"),
|
||||
WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,
|
||||
75, 70, 140, 25,
|
||||
hwnd, 1, mh, 0)
|
||||
if e != nil {
|
||||
abortErrNo("CreateWindowEx", e)
|
||||
}
|
||||
fmt.Printf("button handle is %x\n", bh)
|
||||
rc = DefWindowProc(hwnd, msg, wparam, lparam)
|
||||
case WM_COMMAND:
|
||||
switch syscall.Handle(lparam) {
|
||||
case bh:
|
||||
e := PostMessage(hwnd, WM_CLOSE, 0, 0)
|
||||
if e != nil {
|
||||
abortErrNo("PostMessage", e)
|
||||
}
|
||||
default:
|
||||
rc = DefWindowProc(hwnd, msg, wparam, lparam)
|
||||
}
|
||||
case WM_CLOSE:
|
||||
DestroyWindow(hwnd)
|
||||
case WM_DESTROY:
|
||||
PostQuitMessage(0)
|
||||
default:
|
||||
rc = DefWindowProc(hwnd, msg, wparam, lparam)
|
||||
}
|
||||
//fmt.Printf("WndProc(0x%08x, %d, 0x%08x, 0x%08x) (%d)\n", hwnd, msg, wparam, lparam, rc)
|
||||
return
|
||||
}
|
||||
|
||||
func rungui() int {
|
||||
var e error
|
||||
|
||||
// GetModuleHandle
|
||||
mh, e = GetModuleHandle(nil)
|
||||
if e != nil {
|
||||
abortErrNo("GetModuleHandle", e)
|
||||
}
|
||||
|
||||
// Get icon we're going to use.
|
||||
myicon, e := LoadIcon(0, IDI_APPLICATION)
|
||||
if e != nil {
|
||||
abortErrNo("LoadIcon", e)
|
||||
}
|
||||
|
||||
// Get cursor we're going to use.
|
||||
mycursor, e := LoadCursor(0, IDC_ARROW)
|
||||
if e != nil {
|
||||
abortErrNo("LoadCursor", e)
|
||||
}
|
||||
|
||||
// Create callback
|
||||
wproc := syscall.NewCallback(WndProc)
|
||||
|
||||
// RegisterClassEx
|
||||
wcname := syscall.StringToUTF16Ptr("myWindowClass")
|
||||
var wc Wndclassex
|
||||
wc.Size = uint32(unsafe.Sizeof(wc))
|
||||
wc.WndProc = wproc
|
||||
wc.Instance = mh
|
||||
wc.Icon = myicon
|
||||
wc.Cursor = mycursor
|
||||
wc.Background = COLOR_BTNFACE + 1
|
||||
wc.MenuName = nil
|
||||
wc.ClassName = wcname
|
||||
wc.IconSm = myicon
|
||||
if _, e := RegisterClassEx(&wc); e != nil {
|
||||
abortErrNo("RegisterClassEx", e)
|
||||
}
|
||||
|
||||
// CreateWindowEx
|
||||
wh, e := CreateWindowEx(
|
||||
WS_EX_CLIENTEDGE,
|
||||
wcname,
|
||||
syscall.StringToUTF16Ptr("My window"),
|
||||
WS_OVERLAPPEDWINDOW,
|
||||
CW_USEDEFAULT, CW_USEDEFAULT, 300, 200,
|
||||
0, 0, mh, 0)
|
||||
if e != nil {
|
||||
abortErrNo("CreateWindowEx", e)
|
||||
}
|
||||
fmt.Printf("main window handle is %x\n", wh)
|
||||
|
||||
// ShowWindow
|
||||
ShowWindow(wh, SW_SHOWDEFAULT)
|
||||
|
||||
// UpdateWindow
|
||||
if e := UpdateWindow(wh); e != nil {
|
||||
abortErrNo("UpdateWindow", e)
|
||||
}
|
||||
|
||||
// Process all windows messages until WM_QUIT.
|
||||
var m Msg
|
||||
for {
|
||||
r, e := GetMessage(&m, 0, 0, 0)
|
||||
if e != nil {
|
||||
abortErrNo("GetMessage", e)
|
||||
}
|
||||
if r == 0 {
|
||||
// WM_QUIT received -> get out
|
||||
break
|
||||
}
|
||||
TranslateMessage(&m)
|
||||
DispatchMessage(&m)
|
||||
}
|
||||
return int(m.Wparam)
|
||||
}
|
||||
|
||||
func main() {
|
||||
rc := rungui()
|
||||
os.Exit(rc)
|
||||
}
|
|
@ -1,250 +0,0 @@
|
|||
// 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.
|
||||
|
||||
// +build ignore
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"image"
|
||||
"image/color"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"strings"
|
||||
"syscall"
|
||||
"time"
|
||||
"unsafe"
|
||||
|
||||
"github.com/llgcode/draw2d"
|
||||
"github.com/llgcode/draw2d/wingui"
|
||||
"github.com/llgcode/ps"
|
||||
)
|
||||
|
||||
// some help functions
|
||||
|
||||
func abortf(format string, a ...interface{}) {
|
||||
fmt.Fprintf(os.Stdout, format, a...)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
func abortErrNo(funcname string, err error) {
|
||||
abortf("%s failed: %d %s\n", funcname, err, err)
|
||||
}
|
||||
|
||||
// global vars
|
||||
|
||||
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.SetStrokeColor(color.NRGBA{0, 0, 0, 0xFF})
|
||||
gc.SetLineWidth(10)
|
||||
gc.MoveTo(x, y)
|
||||
gc.CubicCurveTo(x1, y1, x2, y2, x3, y3)
|
||||
gc.Stroke()
|
||||
|
||||
gc.SetStrokeColor(color.NRGBA{0xFF, 0, 0, 0xFF})
|
||||
|
||||
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()
|
||||
}
|
||||
|
||||
func DrawTiger(gc draw2d.GraphicContext) {
|
||||
if postscriptContent == "" {
|
||||
src, err := os.OpenFile("../../../ps/samples/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)
|
||||
}
|
||||
interpreter := ps.NewInterpreter(gc)
|
||||
reader := strings.NewReader(postscriptContent)
|
||||
interpreter.Execute(reader)
|
||||
}
|
||||
|
||||
var (
|
||||
mh syscall.Handle
|
||||
hdcWndBuffer syscall.Handle
|
||||
wndBufferHeader syscall.Handle
|
||||
wndBuffer wingui.BITMAP
|
||||
ppvBits *uint8
|
||||
backBuffer *image.RGBA
|
||||
postscriptContent string
|
||||
)
|
||||
|
||||
// WinProc called by windows to notify us of all windows events we might be interested in.
|
||||
func WndProc(hwnd syscall.Handle, msg uint32, wparam, lparam uintptr) (rc uintptr) {
|
||||
_ = make([]int, 100000)
|
||||
switch msg {
|
||||
case wingui.WM_CREATE:
|
||||
hdc := wingui.GetDC(hwnd)
|
||||
hdcWndBuffer = wingui.CreateCompatibleDC(hdc)
|
||||
wndBufferHeader = wingui.CreateCompatibleBitmap(hdc, 600, 800)
|
||||
wingui.GetObject(wndBufferHeader, unsafe.Sizeof(wndBuffer), uintptr(unsafe.Pointer(&wndBuffer)))
|
||||
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 * 4]uint8)(unsafe.Pointer(ppvBits))
|
||||
pixelSlice := pixel[:]
|
||||
backBuffer = &image.RGBA{pixelSlice, 4 * 600, image.Rect(0, 0, 600, 800)}
|
||||
fmt.Println("Create windows")
|
||||
rc = wingui.DefWindowProc(hwnd, msg, wparam, lparam)
|
||||
case wingui.WM_COMMAND:
|
||||
switch syscall.Handle(lparam) {
|
||||
default:
|
||||
rc = wingui.DefWindowProc(hwnd, msg, wparam, lparam)
|
||||
}
|
||||
case wingui.WM_PAINT:
|
||||
var ps wingui.PAINTSTRUCT
|
||||
hdc := wingui.BeginPaint(hwnd, &ps)
|
||||
t := time.Now()
|
||||
gc := draw2d.NewGraphicContext(backBuffer)
|
||||
/*gc.SetFillColor(color.RGBA{0xFF, 0xFF, 0xFF, 0xFF})
|
||||
gc.Clear()*/
|
||||
for i := 0; i < len(backBuffer.Pix); i += 1 {
|
||||
backBuffer.Pix[i] = 0xff
|
||||
}
|
||||
gc.Save()
|
||||
//gc.Translate(0, -380)
|
||||
DrawTiger(gc)
|
||||
gc.Restore()
|
||||
// back buf in
|
||||
var tmp uint8
|
||||
for i := 0; i < len(backBuffer.Pix); i += 4 {
|
||||
tmp = backBuffer.Pix[i]
|
||||
backBuffer.Pix[i] = backBuffer.Pix[i+2]
|
||||
backBuffer.Pix[i+2] = tmp
|
||||
}
|
||||
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)
|
||||
dt := time.Now().Sub(t)
|
||||
fmt.Printf("Redraw in : %f ms\n", float64(dt)*1e-6)
|
||||
case wingui.WM_CLOSE:
|
||||
wingui.DestroyWindow(hwnd)
|
||||
case wingui.WM_DESTROY:
|
||||
wingui.PostQuitMessage(0)
|
||||
default:
|
||||
rc = wingui.DefWindowProc(hwnd, msg, wparam, lparam)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func rungui() int {
|
||||
var e error
|
||||
|
||||
// GetModuleHandle
|
||||
mh, e = wingui.GetModuleHandle(nil)
|
||||
if e != nil {
|
||||
abortErrNo("GetModuleHandle", e)
|
||||
}
|
||||
|
||||
// Get icon we're going to use.
|
||||
myicon, e := wingui.LoadIcon(0, wingui.IDI_APPLICATION)
|
||||
if e != nil {
|
||||
abortErrNo("LoadIcon", e)
|
||||
}
|
||||
|
||||
// Get cursor we're going to use.
|
||||
mycursor, e := wingui.LoadCursor(0, wingui.IDC_ARROW)
|
||||
if e != nil {
|
||||
abortErrNo("LoadCursor", e)
|
||||
}
|
||||
|
||||
// Create callback
|
||||
wproc := syscall.NewCallback(WndProc)
|
||||
|
||||
// RegisterClassEx
|
||||
wcname := syscall.StringToUTF16Ptr("myWindowClass")
|
||||
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 != nil {
|
||||
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 != nil {
|
||||
abortErrNo("CreateWindowEx", e)
|
||||
}
|
||||
fmt.Printf("main window handle is %x\n", wh)
|
||||
|
||||
// ShowWindow
|
||||
wingui.ShowWindow(wh, wingui.SW_SHOWDEFAULT)
|
||||
|
||||
// UpdateWindow
|
||||
if e := wingui.UpdateWindow(wh); e != nil {
|
||||
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 != nil {
|
||||
abortErrNo("GetMessage", e)
|
||||
}
|
||||
if r == 0 {
|
||||
// WM_QUIT received -> get out
|
||||
break
|
||||
}
|
||||
wingui.TranslateMessage(&m)
|
||||
wingui.DispatchMessage(&m)
|
||||
}
|
||||
return int(m.Wparam)
|
||||
}
|
||||
|
||||
func main() {
|
||||
rc := rungui()
|
||||
os.Exit(rc)
|
||||
}
|
|
@ -1,192 +0,0 @@
|
|||
// +build windows
|
||||
// mksyscall_windows.pl winapi.go
|
||||
// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
|
||||
|
||||
package wingui
|
||||
|
||||
import "unsafe"
|
||||
import "syscall"
|
||||
|
||||
var (
|
||||
modkernel32 = syscall.NewLazyDLL("kernel32.dll")
|
||||
moduser32 = syscall.NewLazyDLL("user32.dll")
|
||||
|
||||
procGetModuleHandleW = modkernel32.NewProc("GetModuleHandleW")
|
||||
procRegisterClassExW = moduser32.NewProc("RegisterClassExW")
|
||||
procCreateWindowExW = moduser32.NewProc("CreateWindowExW")
|
||||
procDefWindowProcW = moduser32.NewProc("DefWindowProcW")
|
||||
procDestroyWindow = moduser32.NewProc("DestroyWindow")
|
||||
procPostQuitMessage = moduser32.NewProc("PostQuitMessage")
|
||||
procShowWindow = moduser32.NewProc("ShowWindow")
|
||||
procUpdateWindow = moduser32.NewProc("UpdateWindow")
|
||||
procGetMessageW = moduser32.NewProc("GetMessageW")
|
||||
procTranslateMessage = moduser32.NewProc("TranslateMessage")
|
||||
procDispatchMessageW = moduser32.NewProc("DispatchMessageW")
|
||||
procLoadIconW = moduser32.NewProc("LoadIconW")
|
||||
procLoadCursorW = moduser32.NewProc("LoadCursorW")
|
||||
procSetCursor = moduser32.NewProc("SetCursor")
|
||||
procSendMessageW = moduser32.NewProc("SendMessageW")
|
||||
procPostMessageW = moduser32.NewProc("PostMessageW")
|
||||
)
|
||||
|
||||
func GetModuleHandle(modname *uint16) (handle syscall.Handle, err error) {
|
||||
r0, _, e1 := syscall.Syscall(procGetModuleHandleW.Addr(), 1, uintptr(unsafe.Pointer(modname)), 0, 0)
|
||||
handle = syscall.Handle(r0)
|
||||
if handle == 0 {
|
||||
if e1 != 0 {
|
||||
err = error(e1)
|
||||
} else {
|
||||
err = syscall.EINVAL
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func RegisterClassEx(wndclass *Wndclassex) (atom uint16, err error) {
|
||||
r0, _, e1 := syscall.Syscall(procRegisterClassExW.Addr(), 1, uintptr(unsafe.Pointer(wndclass)), 0, 0)
|
||||
atom = uint16(r0)
|
||||
if atom == 0 {
|
||||
if e1 != 0 {
|
||||
err = error(e1)
|
||||
} else {
|
||||
err = syscall.EINVAL
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func CreateWindowEx(exstyle uint32, classname *uint16, windowname *uint16, style uint32, x int32, y int32, width int32, height int32, wndparent syscall.Handle, menu syscall.Handle, instance syscall.Handle, param uintptr) (hwnd syscall.Handle, err error) {
|
||||
r0, _, e1 := syscall.Syscall12(procCreateWindowExW.Addr(), 12, uintptr(exstyle), uintptr(unsafe.Pointer(classname)), uintptr(unsafe.Pointer(windowname)), uintptr(style), uintptr(x), uintptr(y), uintptr(width), uintptr(height), uintptr(wndparent), uintptr(menu), uintptr(instance), uintptr(param))
|
||||
hwnd = syscall.Handle(r0)
|
||||
if hwnd == 0 {
|
||||
if e1 != 0 {
|
||||
err = error(e1)
|
||||
} else {
|
||||
err = syscall.EINVAL
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func DefWindowProc(hwnd syscall.Handle, msg uint32, wparam uintptr, lparam uintptr) (lresult uintptr) {
|
||||
r0, _, _ := syscall.Syscall6(procDefWindowProcW.Addr(), 4, uintptr(hwnd), uintptr(msg), uintptr(wparam), uintptr(lparam), 0, 0)
|
||||
lresult = uintptr(r0)
|
||||
return
|
||||
}
|
||||
|
||||
func DestroyWindow(hwnd syscall.Handle) (err error) {
|
||||
r1, _, e1 := syscall.Syscall(procDestroyWindow.Addr(), 1, uintptr(hwnd), 0, 0)
|
||||
if int(r1) == 0 {
|
||||
if e1 != 0 {
|
||||
err = error(e1)
|
||||
} else {
|
||||
err = syscall.EINVAL
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func PostQuitMessage(exitcode int32) {
|
||||
syscall.Syscall(procPostQuitMessage.Addr(), 1, uintptr(exitcode), 0, 0)
|
||||
return
|
||||
}
|
||||
|
||||
func ShowWindow(hwnd syscall.Handle, cmdshow int32) (wasvisible bool) {
|
||||
r0, _, _ := syscall.Syscall(procShowWindow.Addr(), 2, uintptr(hwnd), uintptr(cmdshow), 0)
|
||||
wasvisible = bool(r0 != 0)
|
||||
return
|
||||
}
|
||||
|
||||
func UpdateWindow(hwnd syscall.Handle) (err error) {
|
||||
r1, _, e1 := syscall.Syscall(procUpdateWindow.Addr(), 1, uintptr(hwnd), 0, 0)
|
||||
if int(r1) == 0 {
|
||||
if e1 != 0 {
|
||||
err = error(e1)
|
||||
} else {
|
||||
err = syscall.EINVAL
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func GetMessage(msg *Msg, hwnd syscall.Handle, MsgFilterMin uint32, MsgFilterMax uint32) (ret int32, err error) {
|
||||
r0, _, e1 := syscall.Syscall6(procGetMessageW.Addr(), 4, uintptr(unsafe.Pointer(msg)), uintptr(hwnd), uintptr(MsgFilterMin), uintptr(MsgFilterMax), 0, 0)
|
||||
ret = int32(r0)
|
||||
if ret == -1 {
|
||||
if e1 != 0 {
|
||||
err = error(e1)
|
||||
} else {
|
||||
err = syscall.EINVAL
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func TranslateMessage(msg *Msg) (done bool) {
|
||||
r0, _, _ := syscall.Syscall(procTranslateMessage.Addr(), 1, uintptr(unsafe.Pointer(msg)), 0, 0)
|
||||
done = bool(r0 != 0)
|
||||
return
|
||||
}
|
||||
|
||||
func DispatchMessage(msg *Msg) (ret int32) {
|
||||
r0, _, _ := syscall.Syscall(procDispatchMessageW.Addr(), 1, uintptr(unsafe.Pointer(msg)), 0, 0)
|
||||
ret = int32(r0)
|
||||
return
|
||||
}
|
||||
|
||||
func LoadIcon(instance syscall.Handle, iconname *uint16) (icon syscall.Handle, err error) {
|
||||
r0, _, e1 := syscall.Syscall(procLoadIconW.Addr(), 2, uintptr(instance), uintptr(unsafe.Pointer(iconname)), 0)
|
||||
icon = syscall.Handle(r0)
|
||||
if icon == 0 {
|
||||
if e1 != 0 {
|
||||
err = error(e1)
|
||||
} else {
|
||||
err = syscall.EINVAL
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func LoadCursor(instance syscall.Handle, cursorname *uint16) (cursor syscall.Handle, err error) {
|
||||
r0, _, e1 := syscall.Syscall(procLoadCursorW.Addr(), 2, uintptr(instance), uintptr(unsafe.Pointer(cursorname)), 0)
|
||||
cursor = syscall.Handle(r0)
|
||||
if cursor == 0 {
|
||||
if e1 != 0 {
|
||||
err = error(e1)
|
||||
} else {
|
||||
err = syscall.EINVAL
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func SetCursor(cursor syscall.Handle) (precursor syscall.Handle, err error) {
|
||||
r0, _, e1 := syscall.Syscall(procSetCursor.Addr(), 1, uintptr(cursor), 0, 0)
|
||||
precursor = syscall.Handle(r0)
|
||||
if precursor == 0 {
|
||||
if e1 != 0 {
|
||||
err = error(e1)
|
||||
} else {
|
||||
err = syscall.EINVAL
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func SendMessage(hwnd syscall.Handle, msg uint32, wparam uintptr, lparam uintptr) (lresult uintptr) {
|
||||
r0, _, _ := syscall.Syscall6(procSendMessageW.Addr(), 4, uintptr(hwnd), uintptr(msg), uintptr(wparam), uintptr(lparam), 0, 0)
|
||||
lresult = uintptr(r0)
|
||||
return
|
||||
}
|
||||
|
||||
func PostMessage(hwnd syscall.Handle, msg uint32, wparam uintptr, lparam uintptr) (err error) {
|
||||
r1, _, e1 := syscall.Syscall6(procPostMessageW.Addr(), 4, uintptr(hwnd), uintptr(msg), uintptr(wparam), uintptr(lparam), 0, 0)
|
||||
if int(r1) == 0 {
|
||||
if e1 != 0 {
|
||||
err = error(e1)
|
||||
} else {
|
||||
err = syscall.EINVAL
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
Loading…
Reference in a new issue