// NewDrawable converts an X drawable into a xgraphics.Image. // This is used in NewIcccmIcon. func NewDrawable(X *xgbutil.XUtil, did xproto.Drawable) (*Image, error) { // Get the geometry of the pixmap for use in the GetImage request. pgeom, err := xwindow.RawGeometry(X, xproto.Drawable(did)) if err != nil { return nil, err } // Get the image data for each pixmap. pixmapData, err := xproto.GetImage(X.Conn(), xproto.ImageFormatZPixmap, did, 0, 0, uint16(pgeom.Width()), uint16(pgeom.Height()), (1<<32)-1).Reply() if err != nil { return nil, err } // Now create the xgraphics.Image and populate it with data from // pixmapData and maskData. ximg := New(X, image.Rect(0, 0, pgeom.Width(), pgeom.Height())) // We'll try to be a little flexible with the image format returned, // but not completely flexible. err = readDrawableData(X, ximg, did, pixmapData, pgeom.Width(), pgeom.Height()) if err != nil { return nil, err } return ximg, nil }
func main() { X, _ := xgbutil.Dial("") active, _ := ewmh.ActiveWindowGet(X) geom, err := xwindow.GetGeometry(X, active) if err != nil { fmt.Println(err) } else { fmt.Println(geom) } // ewmh.WmStateReqExtra(X, active, ewmh.StateToggle, // "_NET_WM_STATE_MAXIMIZED_VERT", // "_NET_WM_STATE_MAXIMIZED_HORZ", 2) time.Sleep(time.Millisecond) // err = xwindow.MoveResize(X, active, geom.X, geom.Y, // geom.Width - 100, geom.Height) fmt.Println(err) fmt.Printf("\n") rgeom, err := xwindow.RawGeometry(X, X.RootWin()) if err != nil { fmt.Println(err) } else { fmt.Println(rgeom) } X.Conn().Close() }
func main() { X, _ := xgbutil.NewConn() heads, err := xinerama.PhysicalHeads(X) if err != nil { fmt.Printf("ERROR: %v\n", err) } // Test intersection r1 := xrect.New(0, 0, 100, 100) r2 := xrect.New(100, 100, 100, 100) fmt.Println(xrect.IntersectArea(r1, r2)) // Test largest overlap window := xrect.New(1800, 0, 300, 200) fmt.Println(xrect.LargestOverlap(window, heads)) // Test ApplyStrut rgeom, _ := xwindow.RawGeometry(X, xproto.Drawable(X.RootWin())) fmt.Println("---------------------------") for i, head := range heads { fmt.Printf("%d - %v\n", i, head) } // Let's actually apply struts to the current environment clients, _ := ewmh.ClientListGet(X) for _, client := range clients { strut, err := ewmh.WmStrutPartialGet(X, client) if err == nil { xrect.ApplyStrut(heads, rgeom.Width(), rgeom.Height(), strut.Left, strut.Right, strut.Top, strut.Bottom, strut.LeftStartY, strut.LeftEndY, strut.RightStartY, strut.RightEndY, strut.TopStartX, strut.TopEndX, strut.BottomStartX, strut.BottomEndX) } } fmt.Println("---------------------------") fmt.Println("After applying struts...") for i, head := range heads { fmt.Printf("%d - %v\n", i, head) } }