+ {
+ Widget *old_focus = input_focus;
+
+ key_release(key, 0);
+
+ if(input_focus || old_focus)
+ return true;
+ }
+
+ return false;
+}
+
+bool Root::character_event(StringCodec::unichar ch)
+{
+ if(visible)
+ {
+ Widget *old_focus = input_focus;
+
+ character(ch);
+
+ if(input_focus || old_focus)
+ return true;
+ }
+
+ return false;
+}
+
+void Root::get_pointer(int &x, int &y)
+{
+ x = (mouse->get_axis_value(0)*0.5+0.5)*geom.w;
+ y = (mouse->get_axis_value(1)*0.5+0.5)*geom.h;
+}
+
+void Root::update_camera()
+{
+ camera.set_position(GL::Vector3(geom.w/2.0f, geom.h/2.0f, geom.h/2.0f));
+ camera.set_depth_clip(geom.h*0.1f, geom.h*0.9f);
+ camera.set_orthographic(geom.w, geom.h);
+}
+
+void Root::on_geometry_change()
+{
+ Panel::on_geometry_change();
+ update_camera();