mirror of
https://github.com/golang/go
synced 2024-11-21 21:54:40 -07:00
exp/4s, exp/nacl/av: sync to recent exp/draw changes.
R=rsc CC=golang-dev https://golang.org/cl/2257042
This commit is contained in:
parent
0e73fffe36
commit
58795ea31a
@ -51,7 +51,7 @@ const (
|
||||
|
||||
var (
|
||||
N int
|
||||
display draw.Context
|
||||
display draw.Window
|
||||
screen draw.Image
|
||||
screenr image.Rectangle
|
||||
board [NY][NX]byte
|
||||
@ -69,12 +69,12 @@ var (
|
||||
DY int
|
||||
DMOUSE int
|
||||
lastmx int
|
||||
mouse draw.Mouse
|
||||
mouse draw.MouseEvent
|
||||
newscreen bool
|
||||
timerc <-chan int64
|
||||
suspc chan bool
|
||||
mousec chan draw.Mouse
|
||||
resizec <-chan bool
|
||||
mousec chan draw.MouseEvent
|
||||
resizec chan bool
|
||||
kbdc chan int
|
||||
suspended bool
|
||||
tsleep int
|
||||
@ -160,7 +160,7 @@ var txpix = [NCOL]image.ColorImage{
|
||||
func movemouse() int {
|
||||
//mouse.image.Point = image.Pt(rboard.Min.X + rboard.Dx()/2, rboard.Min.Y + rboard.Dy()/2);
|
||||
//moveto(mousectl, mouse.Xy);
|
||||
return mouse.X
|
||||
return mouse.Loc.X
|
||||
}
|
||||
|
||||
func warp(p image.Point, x int) int {
|
||||
@ -408,7 +408,7 @@ func pause(t int) {
|
||||
suspend(true)
|
||||
} else if suspended && !s {
|
||||
suspend(false)
|
||||
lastmx = warp(mouse.Point, lastmx)
|
||||
lastmx = warp(mouse.Loc, lastmx)
|
||||
}
|
||||
case <-timerc:
|
||||
if suspended {
|
||||
@ -534,17 +534,17 @@ func drop(f bool) bool {
|
||||
setpiece(nil)
|
||||
pause(1500)
|
||||
choosepiece()
|
||||
lastmx = warp(mouse.Point, lastmx)
|
||||
lastmx = warp(mouse.Loc, lastmx)
|
||||
return false
|
||||
}
|
||||
|
||||
func play() {
|
||||
var om draw.Mouse
|
||||
var om draw.MouseEvent
|
||||
dt = 64
|
||||
lastmx = -1
|
||||
lastmx = movemouse()
|
||||
choosepiece()
|
||||
lastmx = warp(mouse.Point, lastmx)
|
||||
lastmx = warp(mouse.Loc, lastmx)
|
||||
for {
|
||||
select {
|
||||
case mouse = <-mousec:
|
||||
@ -553,15 +553,15 @@ func play() {
|
||||
break
|
||||
}
|
||||
if lastmx < 0 {
|
||||
lastmx = mouse.X
|
||||
lastmx = mouse.Loc.X
|
||||
}
|
||||
if mouse.X > lastmx+DMOUSE {
|
||||
if mouse.Loc.X > lastmx+DMOUSE {
|
||||
mright()
|
||||
lastmx = mouse.X
|
||||
lastmx = mouse.Loc.X
|
||||
}
|
||||
if mouse.X < lastmx-DMOUSE {
|
||||
if mouse.Loc.X < lastmx-DMOUSE {
|
||||
mleft()
|
||||
lastmx = mouse.X
|
||||
lastmx = mouse.Loc.X
|
||||
}
|
||||
if mouse.Buttons&^om.Buttons&1 == 1 {
|
||||
rleft()
|
||||
@ -581,7 +581,7 @@ func play() {
|
||||
suspend(true)
|
||||
} else if suspended && !s {
|
||||
suspend(false)
|
||||
lastmx = warp(mouse.Point, lastmx)
|
||||
lastmx = warp(mouse.Loc, lastmx)
|
||||
}
|
||||
|
||||
case <-resizec:
|
||||
@ -637,15 +637,12 @@ func play() {
|
||||
}
|
||||
|
||||
func suspproc() {
|
||||
mc := display.MouseChan()
|
||||
kc := display.KeyboardChan()
|
||||
|
||||
s := false
|
||||
for {
|
||||
select {
|
||||
case mouse = <-mc:
|
||||
case mouse = <-mousec:
|
||||
mousec <- mouse
|
||||
case r := <-kc:
|
||||
case r := <-kbdc:
|
||||
switch r {
|
||||
case 'q', 'Q', 0x04, 0x7F:
|
||||
os.Exit(0)
|
||||
@ -716,12 +713,21 @@ func redraw(new bool) {
|
||||
display.FlushImage()
|
||||
}
|
||||
|
||||
func quitter(c <-chan bool) {
|
||||
<-c
|
||||
func demuxEvents(w draw.Window) {
|
||||
for event := range w.EventChan() {
|
||||
switch e := event.(type) {
|
||||
case draw.MouseEvent:
|
||||
mousec <- e
|
||||
case draw.ConfigEvent:
|
||||
resizec <- true
|
||||
case draw.KeyEvent:
|
||||
kbdc <- e.Key
|
||||
}
|
||||
}
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
func Play(pp []Piece, ctxt draw.Context) {
|
||||
func Play(pp []Piece, ctxt draw.Window) {
|
||||
display = ctxt
|
||||
screen = ctxt.Screen()
|
||||
screenr = screen.Bounds()
|
||||
@ -733,10 +739,10 @@ func Play(pp []Piece, ctxt draw.Context) {
|
||||
tsleep = 50
|
||||
timerc = time.Tick(int64(tsleep/2) * 1e6)
|
||||
suspc = make(chan bool)
|
||||
mousec = make(chan draw.Mouse)
|
||||
resizec = ctxt.ResizeChan()
|
||||
mousec = make(chan draw.MouseEvent)
|
||||
resizec = make(chan bool)
|
||||
kbdc = make(chan int)
|
||||
go quitter(ctxt.QuitChan())
|
||||
go demuxEvents(ctxt)
|
||||
go suspproc()
|
||||
points = 0
|
||||
redraw(false)
|
||||
|
@ -43,26 +43,19 @@ const (
|
||||
type Window struct {
|
||||
Embedded bool // running as part of a web page?
|
||||
*Image // screen image
|
||||
|
||||
mousec chan draw.Mouse
|
||||
kbdc chan int
|
||||
quitc chan bool
|
||||
resizec chan bool
|
||||
eventc chan interface{}
|
||||
}
|
||||
|
||||
// *Window implements draw.Context
|
||||
var _ draw.Context = (*Window)(nil)
|
||||
// *Window implements draw.Window.
|
||||
var _ draw.Window = (*Window)(nil)
|
||||
|
||||
func (w *Window) KeyboardChan() <-chan int { return w.kbdc }
|
||||
func (w *Window) EventChan() <-chan interface{} { return w.eventc }
|
||||
|
||||
func (w *Window) MouseChan() <-chan draw.Mouse {
|
||||
return w.mousec
|
||||
func (w *Window) Close() os.Error {
|
||||
// TODO(nigeltao): implement.
|
||||
return nil
|
||||
}
|
||||
|
||||
func (w *Window) QuitChan() <-chan bool { return w.quitc }
|
||||
|
||||
func (w *Window) ResizeChan() <-chan bool { return w.resizec }
|
||||
|
||||
func (w *Window) Screen() draw.Image { return w.Image }
|
||||
|
||||
// Init initializes the Native Client subsystems specified by subsys.
|
||||
@ -98,10 +91,7 @@ func Init(subsys int, dx, dy int) (*Window, os.Error) {
|
||||
return nil, err
|
||||
}
|
||||
w.Image = newImage(dx, dy, bridge.pixel)
|
||||
w.resizec = make(chan bool, 64)
|
||||
w.kbdc = make(chan int, 64)
|
||||
w.mousec = make(chan draw.Mouse, 64)
|
||||
w.quitc = make(chan bool)
|
||||
w.eventc = make(chan interface{}, 64)
|
||||
}
|
||||
|
||||
if subsys&SubsystemAudio != 0 {
|
||||
|
@ -12,6 +12,7 @@ package av
|
||||
import (
|
||||
"encoding/binary"
|
||||
"exp/draw"
|
||||
"image"
|
||||
"log"
|
||||
"os"
|
||||
"time"
|
||||
@ -398,11 +399,11 @@ func (w *Window) readEvents() {
|
||||
mbe *mouseButtonEvent
|
||||
qe *quitEvent
|
||||
)
|
||||
var m draw.Mouse
|
||||
var m draw.MouseEvent
|
||||
for {
|
||||
if err := videoPollEvent(buf); err != nil {
|
||||
if !clean {
|
||||
clean = w.resizec <- false
|
||||
clean = w.eventc <- draw.ConfigEvent{image.Config{ColorModel, w.Image.Bounds().Dx(), w.Image.Bounds().Dy()}}
|
||||
}
|
||||
time.Sleep(10e6) // 10ms
|
||||
continue
|
||||
@ -440,33 +441,33 @@ func (w *Window) readEvents() {
|
||||
// log.Stdoutf("%#v\n", e);
|
||||
switch buf[0] {
|
||||
case eventExpose:
|
||||
w.resizec <- true
|
||||
w.eventc <- draw.ConfigEvent{image.Config{ColorModel, w.Image.Bounds().Dx(), w.Image.Bounds().Dy()}}
|
||||
case eventKeyDown:
|
||||
w.kbdc <- int(ke.Key)
|
||||
w.eventc <- draw.KeyEvent{int(ke.Key)}
|
||||
case eventKeyUp:
|
||||
w.kbdc <- -int(ke.Key)
|
||||
w.eventc <- draw.KeyEvent{-int(ke.Key)}
|
||||
case eventMouseMotion:
|
||||
m.X = int(mme.X)
|
||||
m.Y = int(mme.Y)
|
||||
m.Loc.X = int(mme.X)
|
||||
m.Loc.Y = int(mme.Y)
|
||||
m.Buttons = int(mme.Buttons)
|
||||
m.Nsec = time.Nanoseconds()
|
||||
_ = w.mousec <- m
|
||||
_ = w.eventc <- m
|
||||
case eventMouseButtonDown:
|
||||
m.X = int(mbe.X)
|
||||
m.Y = int(mbe.Y)
|
||||
m.Loc.X = int(mbe.X)
|
||||
m.Loc.Y = int(mbe.Y)
|
||||
// TODO(rsc): Remove uint cast once 8g bug is fixed.
|
||||
m.Buttons |= 1 << uint(mbe.Button-1)
|
||||
m.Nsec = time.Nanoseconds()
|
||||
_ = w.mousec <- m
|
||||
_ = w.eventc <- m
|
||||
case eventMouseButtonUp:
|
||||
m.X = int(mbe.X)
|
||||
m.Y = int(mbe.Y)
|
||||
m.Loc.X = int(mbe.X)
|
||||
m.Loc.Y = int(mbe.Y)
|
||||
// TODO(rsc): Remove uint cast once 8g bug is fixed.
|
||||
m.Buttons &^= 1 << uint(mbe.Button-1)
|
||||
m.Nsec = time.Nanoseconds()
|
||||
_ = w.mousec <- m
|
||||
_ = w.eventc <- m
|
||||
case eventQuit:
|
||||
w.quitc <- true
|
||||
close(w.eventc)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user