program "helloworld"
{
- source "helloworld.cpp";
+ source "examples/helloworld.cpp";
require "sigc++-2.0";
use "mspgltk";
};
--- /dev/null
+/*
+A simple graphical Hello World application implemented with mspgltk.
+Demonstrates some of the most common widget types.
+*/
+
+#include <msp/core/application.h>
+#include <msp/graphics/simplewindow.h>
+#include <msp/gl/blend.h>
+#include <msp/gl/matrix.h>
+#include <msp/gltk/button.h>
+#include <msp/gltk/entry.h>
+#include <msp/gltk/label.h>
+#include <msp/gltk/panel.h>
+#include <msp/gltk/resources.h>
+#include <msp/gltk/root.h>
+
+using namespace Msp;
+
+// Application class. Because it's so much nicer than global variables.
+class HelloWorld: public Msp::RegisteredApplication<HelloWorld>
+{
+private:
+ // An OpenGL window to display our widgets in
+ Graphics::SimpleGLWindow wnd;
+
+ // GLtk resources and widgets
+ GLtk::Resources res;
+ GLtk::Root root;
+ GLtk::Entry *ent_name;
+ GLtk::Label *lbl_hello;
+
+public:
+ HelloWorld(int, char **);
+private:
+ virtual void tick();
+ void show_hello();
+};
+
+
+HelloWorld::HelloWorld(int, char **):
+ wnd(200, 200),
+ // Load resources. This must be done before the root widget is created.
+ res("basic.skin"),
+ // A Root receives input from a Graphics::Window and passes it on
+ root(res, wnd)
+{
+ wnd.set_title("Hello World");
+ wnd.signal_close.connect(sigc::bind(sigc::mem_fun(this, &HelloWorld::exit), 0));
+
+ /* Container widgets will delete their contents upon destruction so we can
+ safely forget about the pointers after setting the widgets up. */
+
+ // Panels can be used to divide the window into sub-areas
+ GLtk::Panel *panel = new GLtk::Panel;
+ root.add(*panel);
+ panel->set_geometry(GLtk::Geometry(20, 20, 160, 160));
+
+ GLtk::Label *lbl;
+ // Prompts can be displayed with Labels
+ panel->add(*(lbl = new GLtk::Label("Type your name below:")));
+ lbl->set_geometry(GLtk::Geometry(10, 130, 140, 20));
+
+ // The user can type text into an Entry
+ panel->add(*(ent_name = new GLtk::Entry));
+ ent_name->set_geometry(GLtk::Geometry(10, 110, 140, 20));
+
+ GLtk::Button *btn;
+ // Buttons can be wired to cause things to happen
+ panel->add(*(btn = new GLtk::Button("Hello")));
+ btn->set_geometry(GLtk::Geometry(10, 85, 140, 20));
+ btn->signal_clicked.connect(sigc::mem_fun(this, &HelloWorld::show_hello));
+
+ // Another label for displaying some information
+ panel->add(*(lbl_hello = new GLtk::Label));
+ lbl_hello->set_geometry(GLtk::Geometry(10, 65, 140, 20));
+
+ // The user might want to exit the program (*gasp*)
+ panel->add(*(btn = new GLtk::Button("Exit")));
+ btn->set_geometry(GLtk::Geometry(50, 10, 100, 20));
+ btn->signal_clicked.connect(sigc::bind(sigc::mem_fun(this, &HelloWorld::exit), 0));
+
+ // Done with setting things up, show the window!
+ wnd.show();
+}
+
+// This function will be called periodically from the main loop
+void HelloWorld::tick()
+{
+ wnd.tick();
+
+ // Set up an orthogonal projection matching the root widget
+ GL::MatrixStack::projection() = GL::Matrix::ortho_bottomleft(200, 200);
+ GL::MatrixStack::modelview() = GL::Matrix();
+
+ // Font rendering requires blending
+ GL::Bind bind_blend(GL::Blend::alpha());
+
+ root.render();
+
+ wnd.swap_buffers();
+}
+
+// Displays a greeting to the user
+void HelloWorld::show_hello()
+{
+ lbl_hello->set_text("Hello, "+ent_name->get_text()+"!");
+}
+++ /dev/null
-/*
-A simple graphical Hello World application implemented with mspgltk.
-Demonstrates some of the most common widget types.
-*/
-
-#include <msp/core/application.h>
-#include <msp/graphics/simplewindow.h>
-#include <msp/gl/blend.h>
-#include <msp/gl/matrix.h>
-#include <msp/gltk/button.h>
-#include <msp/gltk/entry.h>
-#include <msp/gltk/label.h>
-#include <msp/gltk/panel.h>
-#include <msp/gltk/resources.h>
-#include <msp/gltk/root.h>
-
-using namespace Msp;
-
-// Application class. Because it's so much nicer than global variables.
-class HelloWorld: public Msp::RegisteredApplication<HelloWorld>
-{
-private:
- // An OpenGL window to display our widgets in
- Graphics::SimpleGLWindow wnd;
-
- // GLtk resources and widgets
- GLtk::Resources res;
- GLtk::Root root;
- GLtk::Entry *ent_name;
- GLtk::Label *lbl_hello;
-
-public:
- HelloWorld(int, char **);
-private:
- virtual void tick();
- void show_hello();
-};
-
-
-HelloWorld::HelloWorld(int, char **):
- wnd(200, 200),
- // Load resources. This must be done before the root widget is created.
- res("basic.skin"),
- // A Root receives input from a Graphics::Window and passes it on
- root(res, wnd)
-{
- wnd.set_title("Hello World");
- wnd.signal_close.connect(sigc::bind(sigc::mem_fun(this, &HelloWorld::exit), 0));
-
- /* Container widgets will delete their contents upon destruction so we can
- safely forget about the pointers after setting the widgets up. */
-
- // Panels can be used to divide the window into sub-areas
- GLtk::Panel *panel = new GLtk::Panel;
- root.add(*panel);
- panel->set_geometry(GLtk::Geometry(20, 20, 160, 160));
-
- GLtk::Label *lbl;
- // Prompts can be displayed with Labels
- panel->add(*(lbl = new GLtk::Label("Type your name below:")));
- lbl->set_geometry(GLtk::Geometry(10, 130, 140, 20));
-
- // The user can type text into an Entry
- panel->add(*(ent_name = new GLtk::Entry));
- ent_name->set_geometry(GLtk::Geometry(10, 110, 140, 20));
-
- GLtk::Button *btn;
- // Buttons can be wired to cause things to happen
- panel->add(*(btn = new GLtk::Button("Hello")));
- btn->set_geometry(GLtk::Geometry(10, 85, 140, 20));
- btn->signal_clicked.connect(sigc::mem_fun(this, &HelloWorld::show_hello));
-
- // Another label for displaying some information
- panel->add(*(lbl_hello = new GLtk::Label));
- lbl_hello->set_geometry(GLtk::Geometry(10, 65, 140, 20));
-
- // The user might want to exit the program (*gasp*)
- panel->add(*(btn = new GLtk::Button("Exit")));
- btn->set_geometry(GLtk::Geometry(50, 10, 100, 20));
- btn->signal_clicked.connect(sigc::bind(sigc::mem_fun(this, &HelloWorld::exit), 0));
-
- // Done with setting things up, show the window!
- wnd.show();
-}
-
-// This function will be called periodically from the main loop
-void HelloWorld::tick()
-{
- wnd.tick();
-
- // Set up an orthogonal projection matching the root widget
- GL::MatrixStack::projection() = GL::Matrix::ortho_bottomleft(200, 200);
- GL::MatrixStack::modelview() = GL::Matrix();
-
- // Font rendering requires blending
- GL::Bind bind_blend(GL::Blend::alpha());
-
- root.render();
-
- wnd.swap_buffers();
-}
-
-// Displays a greeting to the user
-void HelloWorld::show_hello()
-{
- lbl_hello->set_text("Hello, "+ent_name->get_text()+"!");
-}