module view;

import dsfml.system.all;
import dsfml.window.all;
import dsfml.graphics.all;

void main()
{
    RenderWindow window = new RenderWindow(VideoMode(800, 600), "View sample");
    window.setFramerateLimit(100);
    Input input = window.getInput();
    Vector2f top;
    Rect!(float) bound;
    Shape s;
    bool mousePressed;
    
    Sprite background = new Sprite(new Image("Data/background.jpg"));
    
    Font f = new Font("Data/cheeseburger.ttf");
    String str = new String("Create a selection of the background with your mouse.\nPress Enter to zoom to this selection.\nPress Escape to return to the default view."c, f);
    
    while (window.isOpened())
    {
        Event evt;
        
        while (window.getEvent(evt))
        {
            if (        evt.Type == Event.EventType.MOUSEBUTTONPRESSED &&
                        evt.MouseButton.Button == MouseButtons.LEFT)
            {
                top = window.convertCoords(input.getMouseX(), input.getMouseY());
                mousePressed = true;
                
            }
            else if (   evt.Type == Event.EventType.MOUSEBUTTONRELEASED &&
                        evt.MouseButton.Button == MouseButtons.LEFT)
            {
                mousePressed = false;   
            }
            else if (   evt.Type == Event.EventType.MOUSEMOVED &&
                        mousePressed)
            {
                Vector2f bottom = window.convertCoords(input.getMouseX(), input.getMouseY());
                bound = new Rect!(float)(top.x, top.y, bottom.x, bottom.y);
                s = Shape.rectangle(top.x, top.y, bottom.x, bottom.y, Color(0, 0, 0, 0), 1, Color.BLACK);
            }
            else if (   evt.Type == Event.EventType.KEYPRESSED &&
                        evt.Key.Code == KeyCode.RETURN)
            {
                if (bound !is null)
                    window.setView(new View(bound));
                s = null;
            }
            else if (   evt.Type == Event.EventType.KEYPRESSED &&
                        evt.Key.Code == KeyCode.ESCAPE)
            {
                window.setView(window.getDefaultView());   
            }
            else if (   evt.Type == Event.EventType.CLOSED)
                window.close();
            
        }
        
        window.draw(background);
        window.draw(str);
        if (s !is null) window.draw(s);
        window.display();
    }
}