Welcome, Guest. Please login or register. Did you miss your activation email?

Author Topic: Here is a demo to create a dragable borderless window with SFML.NET.  (Read 2455 times)

0 Members and 1 Guest are viewing this topic.

zwcloud

  • Newbie
  • *
  • Posts: 4
    • View Profile
https://gist.github.com/zwcloud/0c0e9f52d8010e1d5164

using System;
using SFML.System;
using SFML.Window;

namespace DragableWindow
{
    class DragableWindow : Window
    {
        private Vector2i grabbedOffset;
        private bool grabbedWindow;

        private void WindowOnClosed(object sender, EventArgs eventArgs)
        {
            Window window = (Window)sender;
            window.Close();
        }

        private void OnMouseButtonPressed(object sender, MouseButtonEventArgs e)
        {
            Window window = (Window)sender;
            if (e.Button == Mouse.Button.Left)
            {
                grabbedOffset = window.Position - Mouse.GetPosition();
                grabbedWindow = true;
            }
        }

        private void OnMouseMoved(object sender, MouseMoveEventArgs e)
        {
            Window window = (Window)sender;
            if (grabbedWindow)
            {
                var position = Mouse.GetPosition();
                var newPosition = position + grabbedOffset;
                if (window.Position != newPosition)
                {
                    window.Position = newPosition;
                    System.Diagnostics.Debug.WriteLine("offset: {0}, position: {1}", grabbedOffset, window.Position);
                }
            }
        }

        private void OnMouseButtonReleased(object sender, MouseButtonEventArgs e)
        {
            if (e.Button == Mouse.Button.Left)
            {
                grabbedWindow = false;
            }
        }

        public DragableWindow(VideoMode mode, string title, Styles style) : base(mode, title, style)
        {
            this.Closed += WindowOnClosed;
            this.MouseButtonPressed += OnMouseButtonPressed;
            this.MouseMoved += OnMouseMoved;
            this.MouseButtonReleased += OnMouseButtonReleased;
        }
    }


    static class Program
    {
        [STAThread]
        public static void Main()
        {
            Window window = new DragableWindow(new VideoMode(512, 512), "SFML Dragable Window", Styles.None);

            // Start game loop
            while (window.IsOpen)
            {
                // Process events
                window.DispatchEvents();

                // Display the rendered frame on screen
                window.Display();
            }
        }

    }
}