本文整理汇总了Golang中github.com/BurntSushi/xgbutil/xwindow.Create函数的典型用法代码示例。如果您正苦于以下问题:Golang Create函数的具体用法?Golang Create怎么用?Golang Create使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了Create函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: newCycleItem
// newCycleItem sets up the windows and images associated with a particular
// CycleChoice. This is the meat of (*Cycle).AddItem.
func newCycleItem(cycle *Cycle, choice CycleChoice) *CycleItem {
ci := &CycleItem{
cycle: cycle,
choice: choice,
}
t := ci.cycle.theme
ci.win = xwindow.Must(xwindow.Create(ci.cycle.X, ci.cycle.win.Id))
ci.active = xwindow.Must(xwindow.Create(ci.cycle.X, ci.win.Id))
ci.inactive = xwindow.Must(xwindow.Create(ci.cycle.X, ci.win.Id))
ci.text = xwindow.Must(xwindow.Create(ci.cycle.X, ci.cycle.win.Id))
ci.active.MoveResize(t.IconBorderSize, t.IconBorderSize,
t.IconSize, t.IconSize)
ci.inactive.MoveResize(t.IconBorderSize, t.IconBorderSize,
t.IconSize, t.IconSize)
ci.text.MoveResize(t.BorderSize+t.Padding, t.BorderSize+t.Padding,
1, 1)
// If the text overruns, make sure it's below the borders.
ci.text.StackSibling(ci.cycle.bRht.Id, xproto.StackModeBelow)
ci.UpdateImage()
ci.UpdateText()
ci.unhighlight()
return ci
}
开发者ID:cshapeshifter,项目名称:wingo,代码行数:31,代码来源:cycle_item.go
示例2: initPopup
func (ct *CommandTray) initPopup() {
var err error
ct.popup, err = xwindow.Create(ct.X, ct.X.RootWin())
utils.FailMeMaybe(err)
ct.pu_img.For(func(x, y int) xgraphics.BGRA {
if y%ct.Height == ct.Height-1 || x == 0 || x == ct.Width-1 {
return xgraphics.BGRA{128, 128, 128, 255}
}
return xgraphics.BGRA{64, 64, 64, 255}
})
utils.FailMeMaybe(ewmh.WmDesktopSet(ct.X, ct.popup.Id, 0xffffffff))
utils.FailMeMaybe(ewmh.WmWindowTypeSet(ct.X, ct.popup.Id, []string{
"_NET_WM_WINDOW_TYPE_DOCK",
}))
utils.FailMeMaybe(ct.popup.Listen(xproto.EventMaskKeyPress | xproto.EventMaskStructureNotify))
ct.popup.Resize(ct.Width, ct.Height*10)
ct.popup.Move(ct.Position, ct.Height)
ct.pu_img.XSurfaceSet(ct.popup.Id)
ct.pu_img.XDraw()
ct.pu_img.XPaint(ct.popup.Id)
}
开发者ID:AmandaCameron,项目名称:gobar,代码行数:28,代码来源:commandtray.go
示例3: NewInput
// NewInput constructs Input values. It needs an X connection, a parent window,
// the width of the input box, and theme information related for the font
// and background. Padding separating the text and the edges of the window
// may also be specified.
//
// While NewInput returns an *Input, a Input value also has an xwindow.Window
// value embedded into it. Thus, an Input can also be treated as a normal
// window on which you can assign callbacks, close, destroy, etc.
//
// As with all windows, the Input window should be destroyed when it is no
// longer in used.
func NewInput(X *xgbutil.XUtil, parent xproto.Window, width int, padding int,
font *truetype.Font, fontSize float64,
fontColor, bgColor render.Color) *Input {
_, height := xgraphics.TextMaxExtents(font, fontSize, "M")
height += misc.TextBreathe
width, height = width+2*padding, height+2*padding
img := xgraphics.New(X, image.Rect(0, 0, width, height))
win := xwindow.Must(xwindow.Create(X, parent))
win.Listen(xproto.EventMaskKeyPress)
win.Resize(width, height)
ti := &Input{
Window: win,
img: img,
Text: make([]rune, 0, 50),
font: font,
fontSize: fontSize,
fontColor: fontColor,
bgColor: bgColor,
padding: padding,
}
ti.Render()
return ti
}
开发者ID:dlintw,项目名称:wingo,代码行数:39,代码来源:input.go
示例4: newSelectItem
func newSelectItem(slct *Select, choice SelectChoice) *SelectItem {
si := &SelectItem{
slct: slct,
choice: choice,
}
si.regular = xwindow.Must(xwindow.Create(si.slct.X, si.slct.win.Id))
si.highlighted = xwindow.Must(xwindow.Create(si.slct.X, si.slct.win.Id))
// If the text overruns, make sure it's below the borders.
si.regular.StackSibling(si.slct.bRht.Id, xproto.StackModeBelow)
si.highlighted.StackSibling(si.slct.bRht.Id, xproto.StackModeBelow)
si.UpdateText()
return si
}
开发者ID:flying99999,项目名称:wingo,代码行数:17,代码来源:select_item.go
示例5: NewInput
func NewInput(X *xgbutil.XUtil, theme *InputTheme, config InputConfig) *Input {
input := &Input{
X: X,
theme: theme,
config: config,
showing: false,
do: nil,
history: make([]string, 0, 100),
}
// Create all windows used for the base of the input prompt.
cwin := func(p xproto.Window) *xwindow.Window {
return xwindow.Must(xwindow.Create(X, p))
}
input.win = cwin(X.RootWin())
input.label = cwin(input.win.Id)
input.input = text.NewInput(X, input.win.Id, 1000, theme.Padding,
theme.Font, theme.FontSize, theme.FontColor, theme.BgColor)
input.bInp = cwin(input.win.Id)
input.bTop, input.bBot = cwin(input.win.Id), cwin(input.win.Id)
input.bLft, input.bRht = cwin(input.win.Id), cwin(input.win.Id)
// Make the top-level window override redirect so the window manager
// doesn't mess with us.
input.win.Change(xproto.CwOverrideRedirect, 1)
input.win.Listen(xproto.EventMaskFocusChange)
input.input.Listen(xproto.EventMaskKeyPress)
// Colorize the windows.
cclr := func(w *xwindow.Window, clr render.Color) {
w.Change(xproto.CwBackPixel, clr.Uint32())
}
cclr(input.win, input.theme.BgColor)
cclr(input.bInp, input.theme.BorderColor)
cclr(input.bTop, input.theme.BorderColor)
cclr(input.bBot, input.theme.BorderColor)
cclr(input.bLft, input.theme.BorderColor)
cclr(input.bRht, input.theme.BorderColor)
// Map the sub-windows once.
input.label.Map()
input.input.Map()
input.bInp.Map()
input.bTop.Map()
input.bBot.Map()
input.bLft.Map()
input.bRht.Map()
// Connect the key response handler.
// The handler is responsible for tab completion and quitting if the
// cancel key has been pressed.
input.keyResponse().Connect(X, input.input.Id)
input.focusResponse().Connect(X, input.win.Id)
return input
}
开发者ID:Pursuit92,项目名称:wingo,代码行数:56,代码来源:input.go
示例6: Window
// Window is a convenience function for painting the provided
// Image value to a new window, destroying the pixmap created by that image,
// and returning the window value.
// The window is sized to the dimensions of the image.
func (im *Image) Window(parent xproto.Window) *xwindow.Window {
win := xwindow.Must(xwindow.Create(im.X, parent))
win.Resize(im.Bounds().Dx(), im.Bounds().Dy())
im.XSurfaceSet(win.Id)
im.XDraw()
im.XPaint(win.Id)
im.Destroy()
return win
}
开发者ID:auroralaboratories,项目名称:corona-api,代码行数:15,代码来源:image.go
示例7: NewCycle
// NewCycle creates a new prompt. As many prompts as you want can be created,
// and they could even technically be shown simultaneously so long as at most
// one of them is using a grab. (The grab will fail for the others and they
// will not be shown.)
//
// CycleTheme and CycleConfig values can either use DefaultCycle{Theme,Config}
// values found in this package, or custom ones can be created using
// composite literals.
func NewCycle(X *xgbutil.XUtil, theme *CycleTheme, config CycleConfig) *Cycle {
cycle := &Cycle{
X: X,
theme: theme,
config: config,
showing: false,
selected: -1,
grabMods: 0,
}
// Create all windows used for the base of the cycle prompt.
// This obviously doesn't include the windows representing the items.
cwin := func(p xproto.Window) *xwindow.Window {
return xwindow.Must(xwindow.Create(X, p))
}
cycle.win = cwin(X.RootWin())
cycle.bTop, cycle.bBot = cwin(cycle.win.Id), cwin(cycle.win.Id)
cycle.bLft, cycle.bRht = cwin(cycle.win.Id), cwin(cycle.win.Id)
// Make the top-level window override redirect so the window manager
// doesn't mess with us.
cycle.win.Change(xproto.CwOverrideRedirect, 1)
// Set the colors of each window.
cclr := func(w *xwindow.Window, clr render.Color) {
w.Change(xproto.CwBackPixel, uint32(clr.Int()))
}
cclr(cycle.win, cycle.theme.BgColor)
cclr(cycle.bTop, cycle.theme.BorderColor)
cclr(cycle.bBot, cycle.theme.BorderColor)
cclr(cycle.bLft, cycle.theme.BorderColor)
cclr(cycle.bRht, cycle.theme.BorderColor)
// Map the sub-windows once. (Real mapping only happens when
// cycle.win is mapped.)
cycle.bTop.Map()
cycle.bBot.Map()
cycle.bLft.Map()
cycle.bRht.Map()
// Connect the key response handler (i.e., the alt-tab'ing, canceling, etc.)
cycle.keyResponse().Connect(X, X.Dummy())
// Guess the maximum font height.
_, cycle.fontHeight = xgraphics.TextMaxExtents(
cycle.theme.Font, cycle.theme.FontSize, "A")
cycle.fontHeight += misc.TextBreathe
return cycle
}
开发者ID:yannicklm,项目名称:wingo,代码行数:58,代码来源:cycle.go
示例8: NewMessage
func NewMessage(X *xgbutil.XUtil,
theme *MessageTheme, config MessageConfig) *Message {
msg := &Message{
X: X,
theme: theme,
config: config,
showing: false,
duration: 0,
hidden: nil,
cancelTimeout: make(chan struct{}, 0),
textWins: make([]*xwindow.Window, 0),
}
// Create all windows used for the base of the message prompt.
cwin := func(p xproto.Window) *xwindow.Window {
return xwindow.Must(xwindow.Create(X, p))
}
msg.win = cwin(X.RootWin())
msg.bTop, msg.bBot = cwin(msg.win.Id), cwin(msg.win.Id)
msg.bLft, msg.bRht = cwin(msg.win.Id), cwin(msg.win.Id)
// Make the top-level window override redirect so the window manager
// doesn't mess with us.
msg.win.Change(xproto.CwOverrideRedirect, 1)
msg.win.Listen(xproto.EventMaskFocusChange)
msg.bTop.Listen(xproto.EventMaskKeyPress)
// Colorize the windows.
cclr := func(w *xwindow.Window, clr render.Color) {
w.Change(xproto.CwBackPixel, clr.Uint32())
}
cclr(msg.win, msg.theme.BgColor)
cclr(msg.bTop, msg.theme.BorderColor)
cclr(msg.bBot, msg.theme.BorderColor)
cclr(msg.bLft, msg.theme.BorderColor)
cclr(msg.bRht, msg.theme.BorderColor)
// Map the sub-windows once.
msg.bTop.Map()
msg.bBot.Map()
msg.bLft.Map()
msg.bRht.Map()
msg.keyResponse().Connect(X, msg.bTop.Id)
msg.focusResponse().Connect(X, msg.win.Id)
return msg
}
开发者ID:flying99999,项目名称:wingo,代码行数:49,代码来源:message.go
示例9: Init
func (ct *CommandTray) Init() {
var err error
ct.img = xgraphics.New(ct.X, image.Rect(0, 0, ct.Width, ct.Height))
ct.pu_img = xgraphics.New(ct.X, image.Rect(0, 0, ct.Width, ct.Height*10))
ct.window, err = xwindow.Create(ct.X, ct.Parent.Id)
utils.FailMeMaybe(err)
utils.FailMeMaybe(ct.img.XSurfaceSet(ct.window.Id))
ct.window.Move(ct.Position, 0)
ct.window.Resize(ct.Width, ct.Height)
ct.window.Map()
}
开发者ID:AmandaCameron,项目名称:gobar,代码行数:15,代码来源:commandtray.go
示例10: newSelectGroupItem
func newSelectGroupItem(slct *Select, group SelectGroup) *SelectGroupItem {
si := &SelectGroupItem{
slct: slct,
group: group,
}
si.win = xwindow.Must(xwindow.Create(si.slct.X, si.slct.win.Id))
si.win.Change(xproto.CwBackPixel, si.slct.theme.BgColor.Uint32())
// If the text overruns, make sure it's below the borders.
si.win.StackSibling(si.slct.bRht.Id, xproto.StackModeBelow)
si.UpdateText()
return si
}
开发者ID:pascience,项目名称:foci,代码行数:16,代码来源:select_group.go
示例11: Init
func (c *Clock) Init() {
var err error
c.img = xgraphics.New(c.X, image.Rect(0, 0, c.Width, c.Height))
c.window, err = xwindow.Create(c.X, c.Parent.Id)
utils.FailMeMaybe(err)
c.window.Resize(c.Width, c.Height)
c.window.Move(c.Position, 0)
c.img.XSurfaceSet(c.window.Id)
c.window.Map()
c.Draw()
go c.tickTock()
}
开发者ID:AmandaCameron,项目名称:gobar,代码行数:16,代码来源:clock.go
示例12: Init
func (sb *StatusBar) Init() {
sb.img = xgraphics.New(sb.X, image.Rect(0, 0, sb.Width, sb.Height))
var err error
sb.window, err = xwindow.Create(sb.X, sb.Parent.Id)
utils.FailMeMaybe(err)
sb.window.Move(sb.Position, 0)
sb.window.Resize(sb.Width, sb.Height)
sb.window.Map()
sb.img.XSurfaceSet(sb.window.Id)
utils.FailMeMaybe(sb.initTray())
sb.Draw()
}
开发者ID:AmandaCameron,项目名称:gobar,代码行数:17,代码来源:statbar.go
示例13: main
func main() {
X, err := xgbutil.NewConn()
failMeMaybe(err)
tray, err := NewSystemTray(X)
failMeMaybe(err)
hdlr := &Handler{
X: X,
}
hdlr.Window, err = xwindow.Create(X, X.RootWin())
failMeMaybe(err)
hdlr.Window.Move(0, 24)
hdlr.Window.Map()
tray.Handler = hdlr
xevent.Main(X)
}
开发者ID:AmandaCameron,项目名称:gobar,代码行数:21,代码来源:main.go
示例14: Init
func (t *Tracker) Init() {
var err error
t.img = xgraphics.New(t.X, image.Rect(0, 0, t.Size, t.Size))
t.window, err = xwindow.Create(t.X, t.Parent.Id)
utils.FailMeMaybe(err)
t.window.Resize(t.Size, t.Size)
t.window.Move(t.Position, 0)
t.img.XSurfaceSet(t.window.Id)
t.window.Map()
t.stopMe = true
l := startup.Listener{
X: t.X,
Callbacks: t,
}
l.Initialize()
t.Draw()
}
开发者ID:AmandaCameron,项目名称:gobar,代码行数:24,代码来源:tracker.go
示例15: main
func main() {
// Signal Handling.
sigChan := make(chan os.Signal)
signal.Notify(sigChan, syscall.SIGTERM, syscall.SIGINT)
paths := basedir.Paths{
XDGSuffix: "gobar",
GoImportPath: "github.com/AmandaCameron/gobar/data",
}
file, err := paths.ConfigFile("config.wini")
utils.FailMeMaybe(err)
cfg := loadConfig(file) //os.Getenv("HOME") + "/.config/gobar/config.wini")
// Load Images.
images.Init(paths)
// Setup the X Connection
X, err := xgbutil.NewConn()
utils.FailMeMaybe(err)
win, err := xwindow.Create(X, X.RootWin())
utils.FailMeMaybe(err)
win.Resize(cfg.BarWidth, cfg.BarSize)
// Setup the EWMH Stuff
utils.FailMeMaybe(ewmh.RestackWindow(X, win.Id))
var strut *ewmh.WmStrutPartial
if cfg.Position == "Top" {
strut = &ewmh.WmStrutPartial{
Top: uint(cfg.BarSize),
TopStartX: 0,
TopEndX: uint(cfg.BarWidth),
}
win.Move(0, 0)
} else if cfg.Position == "Bottom" {
strut = &ewmh.WmStrutPartial{
Bottom: uint(cfg.BarSize),
BottomStartX: 0,
BottomEndX: uint(cfg.BarWidth),
}
win.Move(0, 600-cfg.BarSize)
} else {
println("Invalid Position:", cfg.Position)
os.Exit(1)
}
utils.FailMeMaybe(ewmh.WmStrutPartialSet(X, win.Id, strut))
utils.FailMeMaybe(ewmh.WmWindowTypeSet(X, win.Id, []string{
"_NET_WM_WINDOW_TYPE_DOCK",
}))
// Put us everywhere.
utils.FailMeMaybe(ewmh.WmDesktopSet(X, win.Id, 0xFFFFFFFF))
win.Map()
keybind.Initialize(X)
// Get the DE settings, if we can.
xs, err := xsettings.New(X)
if err != nil {
// Maybe this should be an error, maybe not?
xs = nil
}
// Draw the background
bg := xgraphics.BGRA{
R: 64,
G: 64,
B: 64,
A: 255,
}
img := xgraphics.New(X, image.Rect(0, 0, cfg.BarWidth, cfg.BarSize))
img.For(func(x, y int) xgraphics.BGRA {
return bg
})
utils.FailMeMaybe(img.XSurfaceSet(win.Id))
img.XDraw()
img.XPaint(win.Id)
// Connect to DBus
//.........这里部分代码省略.........
开发者ID:AmandaCameron,项目名称:gobar,代码行数:101,代码来源:gobar.go
示例16: ewmhSupportingWmCheck
func (wingo *wingoState) ewmhSupportingWmCheck() {
supportingWin := xwindow.Must(xwindow.Create(X, wingo.root.Id))
ewmh.SupportingWmCheckSet(X, wingo.root.Id, supportingWin.Id)
ewmh.SupportingWmCheckSet(X, supportingWin.Id, supportingWin.Id)
ewmh.WmNameSet(X, supportingWin.Id, "Wingo")
}
开发者ID:dlintw,项目名称:wingo,代码行数:6,代码来源:state_ewmh.go
示例17: Show
func (msg *Message) Show(workarea xrect.Rect, message string,
duration time.Duration, hidden func(msg *Message)) bool {
if msg.showing {
return false
}
msg.win.Stack(xproto.StackModeAbove)
pad, bs := msg.theme.Padding, msg.theme.BorderSize
height := pad + bs
width := 0
for _, line := range strings.Split(strings.TrimSpace(message), "\n") {
textWin := xwindow.Must(xwindow.Create(msg.X, msg.win.Id))
msg.textWins = append(msg.textWins, textWin)
if len(line) == 0 {
line = " "
}
textWin.Map()
textWin.Move(bs+pad, height)
text.DrawText(textWin, msg.theme.Font, msg.theme.FontSize,
msg.theme.FontColor, msg.theme.BgColor, line)
height += textWin.Geom.Height()
if w := textWin.Geom.Width(); w > width {
width = w
}
}
height += pad + bs
width += pad*2 + bs*2
// position the damn window based on its width/height (i.e., center it)
posx := workarea.X() + workarea.Width()/2 - width/2
posy := workarea.Y() + workarea.Height()/2 - height/2
msg.win.MoveResize(posx, posy, width, height)
msg.bTop.Resize(width, bs)
msg.bBot.MoveResize(0, height-bs, width, bs)
msg.bLft.Resize(bs, height)
msg.bRht.MoveResize(width-bs, 0, bs, height)
msg.showing = true
msg.duration = duration
msg.hidden = hidden
msg.win.Map()
msg.lastShow = time.Now()
// If the duration is non-zero, then wait for that amount of time and
// automatically hide the popup. Otherwise, focus the window and wait
// for user interaction.
if duration == 0 {
msg.bTop.Focus()
} else {
go func() {
// If `Hide` is called before the timeout expires, we'll
// cancel the timeout.
select {
case <-time.After(duration):
msg.Hide()
case <-msg.cancelTimeout:
}
}()
}
return true
}
开发者ID:flying99999,项目名称:wingo,代码行数:66,代码来源:message.go
示例18: xwmInit
//.........这里部分代码省略.........
"_NET_WM_WINDOW_TYPE_DND",
"_NET_WM_WINDOW_TYPE_NORMAL",
"_NET_WM_STATE",
"_NET_WM_STATE_STICKY",
"_NET_WM_STATE_MAXIMIZED_VERT",
"_NET_WM_STATE_MAXIMIZED_HORZ",
"_NET_WM_STATE_SKIP_TASKBAR",
"_NET_WM_STATE_SKIP_PAGER",
"_NET_WM_STATE_HIDDEN",
"_NET_WM_STATE_FULLSCREEN",
"_NET_WM_STATE_ABOVE",
"_NET_WM_STATE_BELOW",
"_NET_WM_STATE_DEMANDS_ATTENTION",
"_NET_WM_STATE_FOCUSED",
"_NET_WM_ALLOWED_ACTIONS",
"_NET_WM_ACTION_MOVE",
"_NET_WM_ACTION_RESIZE",
"_NET_WM_ACTION_MINIMIZE",
"_NET_WM_ACTION_STICK",
"_NET_WM_ACTION_MAXIMIZE_HORZ",
"_NET_WM_ACTION_MAXIMIZE_VERT",
"_NET_WM_ACTION_FULLSCREEN",
"_NET_WM_ACTION_CHANGE_DESKTOP",
"_NET_WM_ACTION_CLOSE",
"_NET_WM_ACTION_ABOVE",
"_NET_AM_ACTION_BELOW",
"_NET_WM_STRUT_PARTIAL",
"_NET_WM_ICON",
"_NET_FRAME_EXTENTS",
"WM_TRANSIENT_FOR",
})
// create wm window
win, _ := xwindow.Create(X, root.Id)
xproto.MapWindow(X.Conn(), win.Id)
atomValues := make([]xproto.Atom, len(atomNames))
for num, cookie := range cookies {
reply, _ := cookie.Reply()
atomValues[num] = reply.Atom
}
/* take WM_S0 selection last, which
* signals to Xwayland that we're done with setup. */
xproto.SetSelectionOwner(X.Conn(), win.Id,
atomValues[3],
xproto.TimeCurrentTime,
)
mapResquest := func(event xgb.Event) {
ev, _ := event.(xproto.MapRequestEvent)
log.Info("MapRequest: ", ev)
xproto.MapWindow(X.Conn(), ev.Window)
icccm.WmStateSet(X, ev.Window, &icccm.WmState{
State: icccm.StateNormal,
Icon: ev.Window,
})
// TODO: set _net_wm_state
}
for {
x := X.Conn()
ev, xerr := x.WaitForEvent()
if ev == nil && xerr == nil {
开发者ID:fangyuanziti,项目名称:wayland-html,代码行数:67,代码来源:xwm.go
示例19: main
func main() {
X, err := xgbutil.NewConn()
fatal(err)
// Remember to always initialize the keybind package before usage.
keybind.Initialize(X)
// We create a benign parent window. Its only value in this example is
// instructional. In particular, it shows how to have a sub-window get
// focus using the ICCCM WM_TAKE_FOCUS protocol. (Since by default,
// the window manager will assign focus to your top-level window.)
// The real magic happens below with the WMTakeFocus method call.
parentWin, err := xwindow.Create(X, X.RootWin())
fatal(err)
// NewInput creates a new input window and handles all of the text drawing
// for you. It can be any width, but the height will be automatically
// determined by the height extents of the font size chosen.
input := text.NewInput(X, parentWin.Id, width, padding, font, fontSize,
fontColor, bgColor)
parentWin.Resize(input.Geom.Width(), input.Geom.Height())
// Make sure X reports KeyPress events when this window is focused.
input.Listen(xproto.EventMaskKeyPress)
// Listen to KeyPress events. If it's a BackSpace, remove the last
// character in the input box. If it's "Return" quit. If it's "Escape",
// clear the input box.
// Otherwise, try to add the key pressed to the input box.
// (Not all key presses correspond to a single character that is added.)
xevent.KeyPressFun(
func(X *xgbutil.XUtil, ev xevent.KeyPressEvent) {
mods, kc := ev.State, ev.Detail
switch {
case keybind.KeyMatch(X, "BackSpace", mods, kc):
input.Remove()
case keybind.KeyMatch(X, "Return", mods, kc):
log.Println("Return has been pressed.")
log.Printf("The current text is: %s", string(input.Text))
log.Println("Quitting...")
xevent.Quit(X)
case keybind.KeyMatch(X, "Escape", mods, kc):
input.Reset()
default:
input.Add(mods, kc)
}
}).Connect(X, input.Id)
// Implement the WM_DELETE_WINDOW protocol.
parentWin.WMGracefulClose(func(w *xwindow.Window) {
xevent.Quit(X)
})
// Implement the WM_TAKE_FOCUS protocol. The callback function provided
// is executed when a valid WM_TAKE_FOCUS ClientMessage event has been
// received from the window manager.
// According to ICCCM Section 4.2.7, this is one of the three valid ways
// of setting input focus to a sub-window. (It's also easiest since it
// doesn't require us to monitor FocusChange events. EW.)
// If you have multiple sub-windows that can be focused, this callback
// function is where the logic would go to pick which sub-window should
// be focused upon receipt of a WM_TAKE_FOCUS message.
parentWin.WMTakeFocus(func(w *xwindow.Window, tstamp xproto.Timestamp) {
input.FocusParent(tstamp)
})
// Map the window and start the main X event loop.
input.Map()
parentWin.Map()
xevent.Main(X)
}
开发者ID:mkrull,项目名称:wingo,代码行数:71,代码来源:main.go
示例20: NewSelect
func NewSelect(X *xgbutil.XUtil,
theme *SelectTheme, config SelectConfig) *Select {
slct := &Select{
X: X,
theme: theme,
config: config,
showing: false,
selected: -1,
tabComplete: TabCompletePrefix,
}
// Create all windows used for the base of the select prompt. This
// obviously doesn't include the windows representing the items/groups.
cwin := func(p xproto.Window) *xwindow.Window {
return xwindow.Must(xwindow.Create(X, p))
}
slct.win = cwin(X.RootWin())
slct.bInp = cwin(slct.win.Id)
slct.bTop, slct.bBot = cwin(slct.win.Id), cwin(slct.win.Id)
slct.bLft, slct.bRht = cwin(slct.win.Id), cwin(slct.win.Id)
// Make the top-level window override redirect so the window manager
// doesn't mess with us.
slct.win.Change(xproto.CwOverrideRedirect, 1)
slct.win.Listen(xproto.EventMaskFocusChange)
slct.bInp.Listen(xproto.EventMaskKeyPress)
// Create the text input window.
slct.input = text.NewInput(X, slct.win.Id, 1000, 10,
slct.theme.Font, slct.theme.FontSize,
slct.theme.FontColor, slct.theme.BgColor)
slct.input.Move(slct.theme.BorderSize, slct.theme.BorderSize)
slct.input.StackSibling(slct.bRht.Id, xproto.StackModeBelow)
// Colorize the windows.
cclr := func(w *xwindow.Window, clr render.Color) {
w.Change(xproto.CwBackPixel, clr.Uint32())
}
cclr(slct.win, slct.theme.BgColor)
cclr(slct.bInp, slct.theme.BorderColor)
cclr(slct.bTop, slct.theme.BorderColor)
cclr(slct.bBot, slct.theme.BorderColor)
cclr(slct.bLft, slct.theme.BorderColor)
cclr(slct.bRht, slct.theme.BorderColor)
// Map the sub-windows once. (Real mapping only happens when
// cycle.win is mapped.)
slct.bInp.Map()
slct.bTop.Map()
slct.bBot.Map()
slct.bLft.Map()
slct.bRht.Map()
slct.input.Map()
// Connect the key response handler.
// The handler is responsible for tab completion and quitting if the
// cancel key has been pressed.
slct.keyResponse().Connect(X, slct.bInp.Id)
slct.focusResponse().Connect(X, slct.win.Id)
// Attach a mouse handler so the user can re-focus the prompt window.
mousebind.ButtonReleaseFun(
func(X *xgbutil.XUtil, ev xevent.ButtonReleaseEvent) {
slct.win.Focus()
}).Connect(X, slct.win.Id, "1", false, true)
return slct
}
开发者ID:cshapeshifter,项目名称:wingo,代码行数:69,代码来源:select.go
注:本文中的github.com/BurntSushi/xgbutil/xwindow.Create函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论