static public Rectangle Edge(this Rectangle src, XCOMlike dir_code) { switch (dir_code) { case XCOMlike.N: return(new Rectangle(src.Left, src.Top, src.Width, 1)); case XCOMlike.S: return(new Rectangle(src.Left, src.Bottom - 1, src.Width, 1)); case XCOMlike.W: return(new Rectangle(src.Left, src.Top, 1, src.Height)); case XCOMlike.E: return(new Rectangle(src.Right - 1, src.Top, 1, src.Height)); default: throw new InvalidOperationException("direction code out of range"); } }
static public Point Anchor(this Rectangle src, XCOMlike dir_code) // Tk/Tcl anchor point for aligning a rectangle { switch (dir_code) { case XCOMlike.N: return(new Point(src.Width / 2 + src.Left, src.Top)); case XCOMlike.NE: return(new Point(src.Right - 1, src.Top)); case XCOMlike.E: return(new Point(src.Right - 1, src.Height / 2 + src.Top)); case XCOMlike.SE: return(new Point(src.Right - 1, src.Bottom - 1)); case XCOMlike.S: return(new Point(src.Width / 2 + src.Left, src.Bottom - 1)); case XCOMlike.SW: return(new Point(src.Left, src.Bottom - 1)); case XCOMlike.W: return(new Point(src.Left, src.Height / 2 + src.Top)); case XCOMlike.NW: return(new Point(src.Left, src.Top)); default: throw new InvalidOperationException("direction code out of range"); } }