source: trunk/src/gui/gui_element.cc @ 69

Last change on this file since 69 was 69, checked in by epyon, 12 years ago
  • gui::element - render_data, class, dirty and text fields added with proper accessors
  • gui::element - on_event implemented and draw calling environment
  • gui::environment skeleton class added
File size: 1.9 KB
Line 
1// Copyright (C) 2012-2013 ChaosForge / Kornel Kisielewicz
2// http://chaosforge.org/
3//
4// This file is part of NV Libraries.
5// For conditions of distribution and use, see copyright notice in nv.hh
6
7#include "nv/gui/gui_element.hh"
8
9#include "nv/gui/gui_environment.hh"
10
11using namespace nv;
12using namespace nv::gui;
13
14element::element( root* aroot, const rectangle r )
15        : object( aroot, "", 0 ), m_class(""), m_relative( r ), m_absolute( r ), m_enabled( true ), m_visible( true ), m_dirty( true )
16{
17
18}
19
20void element::on_update( uint32 elapsed )
21{
22        if ( is_visible() )
23        {
24                for ( object* i : *this )
25                {
26                        ((element*)i)->on_update( elapsed );
27                }
28        }
29}
30
31void element::on_draw()
32{
33        if ( is_visible() )
34        {
35                ((environment*)m_root)->draw( this );
36                for ( object* i : *this )
37                {
38                        ((element*)i)->on_draw();
39                }
40        }
41}
42
43bool element::on_event( const io_event& event )
44{
45        return m_parent ? ((element*)m_parent)->on_event( event ) : false;
46}
47
48element* element::get_element( const position& p )
49{
50        if ( !is_visible() ) return nullptr;
51
52        element* result = nullptr;
53        list::reverse_iterator it = m_children.rbegin();
54
55        while ( it != m_children.rend() )
56        {
57                result = ((element*)(*it))->get_element( p );
58                if ( result ) return result;
59                ++it;
60        }
61
62        if ( contains( p ) ) return this;
63        return nullptr;
64}
65
66bool element::contains( const position& p ) const
67{
68        return m_absolute.contains( p );
69}
70
71void element::set_relative( const rectangle& r )
72{
73        m_dirty    = true;
74        m_relative = r;
75        recalculate_absolute();
76}
77
78void element::set_relative( const position& p )
79{
80        set_relative( rectangle( p, p + m_relative.get_size() ) );
81}
82
83void element::recalculate_absolute()
84{
85        rectangle pabsolute;
86
87        if ( m_parent )
88        {
89                pabsolute = ((element*)(m_parent))->m_absolute;
90        }
91
92        m_absolute = m_relative + pabsolute.upper_left;
93
94        for ( object* o : *this )
95        {
96                ((element*)o)->recalculate_absolute();
97        }
98}
Note: See TracBrowser for help on using the repository browser.