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

Last change on this file since 99 was 99, checked in by epyon, 12 years ago
  • vertex_buffer - added assign by range (will change with the next commit)
  • gl_vertex_buffer - implementation of the above
  • gui element - recalculate_absolute_children() added, destructor and fix
  • object - get_id added
  • lualib_test - cleanups
File size: 2.1 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, "" ), m_class(""), m_relative( r ), m_absolute( r ), m_enabled( true ), m_visible( true ), m_dirty( true ), m_render_data( nullptr )
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}
99
100void element::recalculate_absolute_children()
101{
102        for ( object* o : *this )
103        {
104                ((element*)o)->recalculate_absolute();
105        }
106}
107
108element::~element()
109{
110        delete m_render_data;
111}
Note: See TracBrowser for help on using the repository browser.