X-Git-Url: http://git.mutantstargoat.com?p=winnie;a=blobdiff_plain;f=libwinnie%2Fsrc%2Fwindow.h;fp=libwinnie%2Fsrc%2Fwindow.h;h=b5cc36055711f19362038984ca261aa18846f2f0;hp=0000000000000000000000000000000000000000;hb=7b5d2df884abb7084d71f17cc29a618c0b6f47ef;hpb=b4c8d68e0357683cec82fb8a9c5a4447155b3192 diff --git a/libwinnie/src/window.h b/libwinnie/src/window.h new file mode 100644 index 0000000..b5cc360 --- /dev/null +++ b/libwinnie/src/window.h @@ -0,0 +1,110 @@ +/* +winnie - an experimental window system + +Copyright (C) 2013 Eleni Maria Stea + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +Author: Eleni Maria Stea +*/ + +#ifndef WINDOW_H_ +#define WINDOW_H_ + +#include + +#include "geom.h" +#include "event.h" + +class Window { +public: + enum State {STATE_NORMAL, STATE_MINIMIZED, STATE_MAXIMIZED, STATE_SHADED}; + +private: + char *title; + State state; + + Rect rect; + Rect normal_rect; // normal state rectangle managed by the wm + + Callbacks callbacks; + + std::vector children; + Window* parent; + + bool dirty; + bool managed; // whether the wm manages (+decorates) this win + bool focusable; + +public: + Window(); + ~Window(); + + const Rect &get_rect() const; + Rect get_absolute_rect() const; + bool contains_point(int ptr_x, int ptr_y); + + void move(int x, int y); + void resize(int x, int y); + + void set_title(const char *s); + const char *get_title() const; + + /* mark this window as dirty, and notify the window manager + * to repaint it, and anything it used to cover. + */ + void invalidate(); + + void draw(Rect *dirty_region); + void draw_children(const Rect &dirty_region); + + unsigned char *get_win_start_on_fb(); + int get_scanline_width(); + + void set_managed(bool managed); + bool get_managed() const; + + void set_focusable(bool focusable); + bool get_focusable() const; + + bool get_dirty() const; + + void set_display_callback(DisplayFuncType func); + void set_keyboard_callback(KeyboardFuncType func); + void set_mouse_button_callback(MouseButtonFuncType func); + void set_mouse_motion_callback(MouseMotionFuncType func); + + const DisplayFuncType get_display_callback() const; + const KeyboardFuncType get_keyboard_callback() const; + const MouseButtonFuncType get_mouse_button_callback() const; + const MouseMotionFuncType get_mouse_motion_callback() const; + + // win hierarchy + void add_child(Window *win); + void remove_child(Window *win); + + Window **get_children(); + int get_children_count() const; + + const Window *get_parent() const; + Window *get_parent(); + + void set_state(State state); + State get_state() const; + + // XXX remove if not needed + friend class WindowManager; +}; + +#endif // WINDOW_H_