1 // Integrate Canvas into FlightGear
3 // Copyright (C) 2012 Thomas Geymayer <tomgey@gmail.com>
5 // This program is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU General Public License as
7 // published by the Free Software Foundation; either version 2 of the
8 // License, or (at your option) any later version.
10 // This program is distributed in the hope that it will be useful, but
11 // WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 // General Public License for more details.
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software
17 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19 #include "FGCanvasSystemAdapter.hxx"
21 #include <Main/globals.hxx>
22 #include <Scripting/NasalSys.hxx>
23 #include <Viewer/renderer.hxx>
25 #include <osgDB/ReadFile>
30 //----------------------------------------------------------------------------
31 simgear::canvas::FontPtr
32 FGCanvasSystemAdapter::getFont(const std::string& name) const
34 SGPath path = globals->resolve_resource_path("Fonts/" + name);
41 "canvas::Text: No such font: " << name
43 return simgear::canvas::FontPtr();
50 "canvas::Text: using font file " << path.str()
53 simgear::canvas::FontPtr font = osgText::readFontFile(path.c_str());
59 "canvas::Text: Failed to open font file " << path.c_str()
65 //----------------------------------------------------------------------------
66 void FGCanvasSystemAdapter::addCamera(osg::Camera* camera) const
68 globals->get_renderer()->addCamera(camera, false);
71 //----------------------------------------------------------------------------
72 void FGCanvasSystemAdapter::removeCamera(osg::Camera* camera) const
74 globals->get_renderer()->removeCamera(camera);
77 //----------------------------------------------------------------------------
78 osg::Image* FGCanvasSystemAdapter::getImage(const std::string& path) const
80 SGPath tpath = globals->resolve_resource_path(path);
81 if( tpath.isNull() || !tpath.exists() )
83 SG_LOG(SG_GL, SG_ALERT, "canvas::Image: No such image: " << path);
87 return osgDB::readImageFile(tpath.c_str());
91 * Get current FGNasalSys instance.
93 static FGNasalSys* getNasalSys()
95 static FGNasalSys* nasal_sys = 0;
96 // TODO if Nasal is able to be removed and/or recreated at runtime we need
97 // to ensure that always the current instance is used
100 nasal_sys = dynamic_cast<FGNasalSys*>(globals->get_subsystem("nasal"));
102 throw std::runtime_error("FGCanvasSystemAdapter: no NasalSys");
108 //----------------------------------------------------------------------------
109 naContext FGCanvasSystemAdapter::getNasalContext() const
111 return getNasalSys()->context();
114 //----------------------------------------------------------------------------
115 int FGCanvasSystemAdapter::gcSave(naRef r)
117 return getNasalSys()->gcSave(r);
120 //----------------------------------------------------------------------------
121 void FGCanvasSystemAdapter::gcRelease(int key)
123 getNasalSys()->gcRelease(key);
126 //------------------------------------------------------------------------------
127 naRef FGCanvasSystemAdapter::callMethod( naRef code,
133 return getNasalSys()->callMethod(code, self, argc, args, locals);