added license GPL
[winnie] / src / window.cc
index 768c2ea..04f72cd 100644 (file)
@@ -1,3 +1,24 @@
+/*
+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 <http://www.gnu.org/licenses/>.
+
+Author: Eleni Maria Stea <elene.mst@gmail.com>
+*/
+
 #include <algorithm>
 #include <stdio.h> //TODO
 #include <string.h>
@@ -16,6 +37,7 @@ Window::Window()
        dirty = true;
        managed = true;
        focusable = true;
+       state = STATE_NORMAL;
 }
 
 Window::~Window()
@@ -96,14 +118,18 @@ void Window::draw(Rect *dirty_region)
        Rect abs_rect = get_absolute_rect();
        Rect intersect = rect_intersection(abs_rect, *dirty_region);
        if(intersect.width && intersect.height) {
+               Rect prev_clip = get_clipping_rect();
+               set_clipping_rect(abs_rect);
+               
                if(callbacks.display) {
                        callbacks.display(this);
                }
                dirty = false;
 
                draw_children(abs_rect);
-
+               
                *dirty_region = rect_union(*dirty_region, abs_rect);
+               set_clipping_rect(prev_clip);
        }
 }
 
@@ -233,3 +259,13 @@ Window *Window::get_parent()
 {
        return parent;
 }
+
+void Window::set_state(State state)
+{
+       this->state = state;
+}
+
+Window::State Window::get_state() const
+{
+       return state;
+}