コード例 #1
0
ファイル: imp.go プロジェクト: CaptainSoOmA/Uni
func Clr(x, y, w, h uint) {
	//
	C.XSetForeground(display, graphicsContext, cc(col.ScreenB))
	C.XFillRectangle(display, C.Drawable(window), graphicsContext, C.int(x), C.int(y), C.uint(w), C.uint(h))
	C.XFillRectangle(display, C.Drawable(pixmap), graphicsContext, C.int(x), C.int(y), C.uint(w), C.uint(h))
	C.XSetForeground(display, graphicsContext, cc(col.ScreenF))
	C.XFlush(display)
}
コード例 #2
0
ファイル: imp.go プロジェクト: CaptainSoOmA/Uni
func Invert(x, y, x1, y1 uint) {
	//
	if x > x1 || y > y1 {
	} // desaster
	C.XSetFunction(display, graphicsContext, C.GXinvert)
	if !xxb {
		C.XFillRectangle(display, C.Drawable(window), graphicsContext, C.int(x), C.int(y), C.uint(x1-x+1), C.uint(y1-y+1))
	}
	C.XFillRectangle(display, C.Drawable(pixmap), graphicsContext, C.int(x), C.int(y), C.uint(x1-x+1), C.uint(y1-y+1))
	C.XSetFunction(display, graphicsContext, C.GXcopy)
	C.XFlush(display)
}
コード例 #3
0
ファイル: imp.go プロジェクト: CaptainSoOmA/Uni
func Write(s string, x, y int, t bool) {
	//
	n := C.uint(len(s))
	if !t {
		C.XSetForeground(display, graphicsContext, C.ulong(col.CodeB))
		if !xxb {
			C.XFillRectangle(display, C.Drawable(window), graphicsContext, C.int(x), C.int(y), n*C.uint(ZB), C.uint(ZH))
		}
		C.XFillRectangle(display, C.Drawable(pixmap), graphicsContext, C.int(x), C.int(y), n*C.uint(ZB), C.uint(ZH))
		C.XSetForeground(display, graphicsContext, C.ulong(col.CodeF))
	}
	cs := C.CString(s)
	if !xxb {
		C.XDrawString(display, C.Drawable(window), graphicsContext, C.int(x), C.int(y)+ZA, cs, C.int(n))
	}
	C.XDrawString(display, C.Drawable(pixmap), graphicsContext, C.int(x), C.int(y)+ZA, cs, C.int(n))
	C.free(unsafe.Pointer(cs))
	C.XFlush(display)
}
コード例 #4
0
ファイル: imp.go プロジェクト: CaptainSoOmA/Uni
func Switch(x, y uint) {
	//
	if xx == maxX && yy == maxY {
		C.sw(display, window, window0, netwm_state, fullscreen, C.int(0))
	}
	xx, yy = C.uint(x), C.uint(y)
	if xx == maxX && yy == maxY {
		C.sw(display, window, window0, netwm_state, fullscreen, C.int(1))
	} else {
		C.XResizeWindow(display, window, xx, yy) // resizerequest.width, resizerequest.height
		C.XFlush(display)
	}
	C.XFreePixmap(display, pixmap)
	pixmap = C.XCreatePixmap(display, C.Drawable(window), xx, yy, bitdepth)
	C.XFreePixmap(display, pixmap1)
	pixmap1 = C.XCreatePixmap(display, C.Drawable(window), xx, yy, bitdepth)
	C.XSetForeground(display, graphicsContext, cc(col.ActualB))
	//
	C.XFillRectangle(display, C.Drawable(window), graphicsContext, 0, 0, xx, yy)
	C.XFillRectangle(display, C.Drawable(pixmap), graphicsContext, 0, 0, xx, yy)
	C.XFillRectangle(display, C.Drawable(pixmap1), graphicsContext, 0, 0, xx, yy)
	MouseDef(0, 0, int(xx-1), int(yy-1))
	//  var E *C.XEvent
	//  C.XNextEvent (display, E)
	//  et:= C.typ (&E) // et == *E.type
	//  switch et { case C.Expose, C.ConfigureNotify:
	//    for C.XCheckTypedEvent (display, C.int(et), E) == C.True { }
	//  case C.ReparentNotify:
	//    ;
	//  default:
	//    C.XPutBackEvent (display, E)
	//  }
	WarpMouse(int(xx)/2, int(yy)/2)
	//  C.XSync (display, C.False)
	//  if navi.initialized (naviFd) {
	//    go catchNavi ()
	//  }
}
コード例 #5
0
ファイル: imp.go プロジェクト: CaptainSoOmA/Uni
func Rectangle(x, y, w, h int, n, f bool) {
	//
	if f {
		if !n {
			C.XSetFunction(display, graphicsContext, C.GXinvert)
		} // C.GXcopyInverted ?
		if !xxb {
			C.XFillRectangle(display, C.Drawable(window), graphicsContext, C.int(x), C.int(y), C.uint(w), C.uint(h))
		}
		C.XFillRectangle(display, C.Drawable(pixmap), graphicsContext, C.int(x), C.int(y), C.uint(w), C.uint(h))
	} else {
		if !n {
			C.XSetFunction(display, graphicsContext, C.GXinvert)
		}
		if !xxb {
			C.XDrawRectangle(display, C.Drawable(window), graphicsContext, C.int(x), C.int(y), C.uint(w), C.uint(h))
		}
		C.XDrawRectangle(display, C.Drawable(pixmap), graphicsContext, C.int(x), C.int(y), C.uint(w), C.uint(h))
	}
	if !n {
		C.XSetFunction(display, graphicsContext, C.GXcopy)
	}
	C.XFlush(display)
}
コード例 #6
0
ファイル: imp.go プロジェクト: CaptainSoOmA/Uni
func Buf(on bool) {
	//
	if xxb == on {
		return
	}
	xxb = on
	if on {
		C.XSetForeground(display, graphicsContext, cc(col.ScreenB))
		C.XFillRectangle(display, C.Drawable(pixmap), graphicsContext, 0, 0, C.uint(xx), C.uint(yy))
		C.XSetForeground(display, graphicsContext, cc(col.ScreenF))
		C.XFlush(display)
	} else {
		pp2ff()
	}
}
コード例 #7
0
ファイル: imp.go プロジェクト: CaptainSoOmA/Uni
func Init(w, h uint, cF, cB col.Colour) (uint, uint, uint) {
	//
	initialized = false
	//
	maxX, maxY, bitdepth = Screen()
	bdp := uint(bitdepth)
	switch bdp {
	case 15, 16, 24, 32:
		col.SetColourDepth(bdp)
	default:
		panic("strange colourdepth") /* Terminate (); */ os.Exit(1)
	}
	colourdepth := (bdp + 1) / 8
	col.ScreenF, col.ScreenB = cF, cB
	xx, yy = C.uint(w), C.uint(h)
	window = C.XCreateSimpleWindow(display, C.Window(window0), 0, 0, xx, yy, C.uint(0), C.ulong(0), cc(col.ScreenB))
	//  var E C.XEvent
	//  C.XNextEvent (display, &E) // XCreate... did not produce an XEvent
	C.initialize(display, screen, window)
	t := C.CString(env.Par(0))
	defer C.free(unsafe.Pointer(t))
	C.XStoreName(display, window, t)
	C.XMapRaised(display, window)
	const inputmask = (C.KeyPressMask + // C.KeyReleaseMask +
		C.ButtonPressMask + C.ButtonReleaseMask + C.PointerMotionMask +
		C.ExposureMask + C.StructureNotifyMask)
	C.XSelectInput(display, window, inputmask)
	cursor := C.XCreateFontCursor(display, C.XC_gumby)
	C.XDefineCursor(display, window, cursor)
	graphicsContext = C.XDefaultGC(display, screen)
	//  C.XFlushGC (display graphicsContext)
	C.XSetGraphicsExposures(display, graphicsContext, C.False)
	SetFontsize(16)
	initialized = true
	Colours(cF, cB)
	C.XSetForeground(display, graphicsContext, cc(col.ScreenB))

	C.XFillRectangle(display, C.Drawable(window), graphicsContext, 0, 0, xx, yy)
	pixmap = C.XCreatePixmap(display, C.Drawable(window), xx, yy, bitdepth)
	pixmap1 = C.XCreatePixmap(display, C.Drawable(window), maxX, maxY, bitdepth)
	C.XFillRectangle(display, C.Drawable(pixmap), graphicsContext, 0, 0, xx, yy)
	C.XFillRectangle(display, C.Drawable(pixmap1), graphicsContext, 0, 0, xx, yy)
	C.XSetForeground(display, graphicsContext, cc(col.ScreenF))

	MouseDef(0, 0, int(xx-1), int(yy-1))
	var E C.XEvent
	C.XNextEvent(display, &E)
	var et C.int = C.typ(&E) // et == *E.type
	switch et {
	case C.Expose, C.ConfigureNotify: // zur Erstausgabe
		for C.XCheckTypedEvent(display, et, &E) == C.True {
		}
		//    pp2ff ()
	case KeyPress, KeyRelease, ButtonPress, ButtonRelease, MotionNotify:
		C.XPutBackEvent(display, &E)
	case C.ReparentNotify: // at Switch (?)
		// ignore
	default: // for test purposes
		//    println ("at initializing x:" + txt [et])
	}
	p := C.CString("WM_PROTOCOLS")
	defer C.free(unsafe.Pointer(p))
	wm_protocols := C.XInternAtom(display, p, C.False)
	C.XSetWMProtocols(display, window, &wm_protocols, 1)
	s := C.CString("_NET_WM_STATE")
	defer C.free(unsafe.Pointer(s))
	netwm_state = C.XInternAtom(display, s, C.False)
	f := C.CString("_NET_WM_STATE_FULLSCREEN")
	defer C.free(unsafe.Pointer(f))
	fullscreen = C.XInternAtom(display, f, C.False)
	m := C.CString("navi")
	defer C.free(unsafe.Pointer(m))
	naviAtom = C.XInternAtom(display, m, C.False)
	Eventpipe = make(chan Event)
	go sendEvents()
	//  C.XFlush (display)
	//  println ("init ok")
	return uint(maxX), uint(maxY), colourdepth
}