view libclient/malikania/backend/sdl/window_backend.hpp @ 42:a47a4477f347

Misc: new style, closes #578
author David Demelier <markand@malikania.fr>
date Tue, 29 Nov 2016 21:21:36 +0100
parents libclient/malikania/backend/sdl/window-backend.hpp@d4f5f7231b84
children fabbe1759cec
line wrap: on
line source

/*
 * window_backend.hpp -- window object (SDL2 implementation)
 *
 * Copyright (c) 2013-2016 Malikania Authors
 *
 * Permission to use, copy, modify, and/or distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 */

#ifndef MALIKANIA_WINDOW_BACKEND_HPP
#define MALIKANIA_WINDOW_BACKEND_HPP

#include <memory>
#include <vector>

#include <SDL.h>

#include <malikania/window.hpp>

namespace malikania {

class window::backend_impl {
private:
    std::unique_ptr<SDL_Window, void (*)(SDL_Window *)> m_window;
    std::unique_ptr<SDL_Renderer, void (*)(SDL_Renderer *)> m_renderer;

public:
    backend_impl(window& self, unsigned width, unsigned height, const std::string& title);

    inline SDL_Renderer* renderer() noexcept
    {
        return m_renderer.get();
    }

    void poll(window& self);

    void close();

    void clear();

    void present();

    color drawing_color() const;

    void set_drawing_color(const color& color);

    void draw_line(const line& line);

    void draw_lines(const std::vector<point>& points);

    void draw_point(const point& point);

    void draw_points(const std::vector<point>& points);

    void draw_rectangle(const rectangle& rect);

    void draw_rectangles(const std::vector<rectangle>& rects);

    void fill_rectangle(const rectangle& rect);

    void fill_rectangles(const std::vector<rectangle>& rects);

    void draw_text(const std::string& text, font& font, const rectangle& rectangle);

    void draw_text(const std::string& text, font& font, const point& point);
};

} // !malikania

#endif // !MALIKANIA_WINDOW_BACKEND_HPP