예제 #1
0
        static bool WindowsShareViewport(Wnck.Window first, Wnck.Window second)
        {
            if (first == null || second == null)
            {
                return(false);
            }

            Wnck.Workspace wksp = first.Workspace ?? second.Workspace;
            if (wksp == null)
            {
                return(false);
            }

            Gdk.Rectangle firstGeo, secondGeo;

            first.GetGeometry(out firstGeo.X, out firstGeo.Y, out firstGeo.Width, out firstGeo.Height);
            second.GetGeometry(out secondGeo.X, out secondGeo.Y, out secondGeo.Width, out secondGeo.Height);

            firstGeo.X += wksp.ViewportX;
            firstGeo.Y += wksp.ViewportY;

            secondGeo.X += wksp.ViewportX;
            secondGeo.Y += wksp.ViewportY;

            int viewportWidth, viewportHeight;

            viewportWidth  = first.Screen.Width;
            viewportHeight = first.Screen.Height;

            int firstViewportX = ((firstGeo.X + firstGeo.Width / 2) / viewportWidth) * viewportWidth;
            int firstViewportY = ((firstGeo.Y + firstGeo.Height / 2) / viewportHeight) * viewportHeight;

            Gdk.Rectangle viewpRect = new Gdk.Rectangle(firstViewportX, firstViewportY,
                                                        viewportWidth, viewportHeight);

            return(viewpRect.IntersectsWith(secondGeo));
        }
예제 #2
0
 public static Gdk.Rectangle EasyGeometry(this Wnck.Window self)
 {
     Gdk.Rectangle geo;
     self.GetGeometry(out geo.X, out geo.Y, out geo.Width, out geo.Height);
     return(geo);
 }