initial commit

git-svn-id: svn://anubis/misc/sierpinski-gtk@246 bd8a9e45-a331-0410-811e-c64571078777
This commit is contained in:
josh 2010-10-21 17:07:00 +00:00
parent af6ab63b92
commit 2b5692498c
4 changed files with 213 additions and 0 deletions

40
Makefile Normal file
View File

@ -0,0 +1,40 @@
SHELL := bash
TARGET := sierpinski-gtk
OBJS := $(patsubst %.cc,%.o,$(wildcard *.cc))
DEPS := $(OBJS:.o=.dep)
export GTKMM_VERSION := 2.4
export GTKGLEXTMM_VERSION := 1.2
ifdef WIN32
export CPPFLAGS += -I"$(shell cd)"
else
export CPPFLAGS += -I"$(shell pwd)"
endif
export CXXFLAGS := -Wall -O2 \
`pkg-config --cflags gtkmm-$(GTKMM_VERSION)` \
`pkg-config --cflags gtkglextmm-$(GTKGLEXTMM_VERSION)`
export LDFLAGS := `pkg-config --libs gtkmm-$(GTKMM_VERSION)` \
`pkg-config --libs gtkglextmm-$(GTKGLEXTMM_VERSION)`
all: $(TARGET)
$(TARGET): $(OBJS)
$(CXX) -o $@ $^ $(CXXFLAGS) $(LDFLAGS)
%.o: %.cc
$(CXX) -c -o $@ $(CPPFLAGS) $(CXXFLAGS) $<
# Make dependency files
%.dep: %.cc
@set -e; rm -f $@; \
$(CXX) -MM $(CPPFLAGS) $< > $@.$$$$; \
sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
rm -f $@.$$$$
clean:
-$(RM) -f *.o *.dep $(TARGET)
# Include dependency files
-include $(DEPS)

99
SierpinskiDA.cc Normal file
View File

@ -0,0 +1,99 @@
#include <GL/gl.h>
#include <GL/glu.h>
#include <gdkmm/cursor.h>
#include "SierpinskiDA.h"
SierpinskiDA::SierpinskiDA(const Glib::RefPtr<const Gdk::GL::Config> & config)
: Gtk::GL::DrawingArea(config)
{
set_gl_capability(config);
set_events(Gdk::POINTER_MOTION_MASK
| Gdk::BUTTON_PRESS_MASK
| Gdk::BUTTON_RELEASE_MASK
| Gdk::SCROLL_MASK);
}
bool SierpinskiDA::draw()
{
Glib::RefPtr<Gdk::GL::Window> glwindow = get_gl_window();
if (!glwindow->gl_begin(get_gl_context()))
return false;
glClearColor(0.1, 0.6, 1.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0, -2, 0,
0, 0, 0,
0, 0, 1);
if (glwindow->is_double_buffered())
glwindow->swap_buffers();
else
glFlush();
return true;
}
bool SierpinskiDA::on_motion_notify_event(GdkEventMotion * event)
{
get_pointer(m_x, m_y);
return true;
}
bool SierpinskiDA::on_button_press_event(GdkEventButton * event)
{
return false;
}
bool SierpinskiDA::on_button_release_event(GdkEventButton * event)
{
return false;
}
bool SierpinskiDA::on_scroll_event(GdkEventScroll * event)
{
return false;
}
void SierpinskiDA::on_realize()
{
Gtk::GL::DrawingArea::on_realize();
Glib::RefPtr<Gdk::GL::Window> glwindow = get_gl_window();
glwindow->get_window()->set_cursor(Gdk::Cursor(Gdk::CROSSHAIR));
if (!glwindow->gl_begin(get_gl_context()))
return;
glViewport(0, 0, get_width(), get_height());
glwindow->gl_end();
}
/*
* called on widget resizes
*/
bool SierpinskiDA::on_configure_event(GdkEventConfigure * event)
{
Glib::RefPtr<Gdk::GL::Window> glwindow = get_gl_window();
if (!glwindow->gl_begin(get_gl_context()))
return false;
glViewport(0, 0, get_width(), get_height());
glwindow->gl_end();
return true;
}
bool SierpinskiDA::on_expose_event(GdkEventExpose * event)
{
return draw();
}

28
SierpinskiDA.h Normal file
View File

@ -0,0 +1,28 @@
#ifndef GLWIDGET_H
#define GLWIDGET_H
#include <gtkmm/gl/drawingarea.h>
class SierpinskiDA : public Gtk::GL::DrawingArea
{
public:
SierpinskiDA(const Glib::RefPtr<const Gdk::GL::Config> & config);
protected:
int m_x, m_y;
virtual bool draw();
virtual void on_realize();
virtual bool on_configure_event(GdkEventConfigure * event);
virtual bool on_expose_event(GdkEventExpose * event);
/* signal handlers */
virtual bool on_motion_notify_event(GdkEventMotion * event);
virtual bool on_button_press_event(GdkEventButton * event);
virtual bool on_button_release_event(GdkEventButton * event);
virtual bool on_scroll_event(GdkEventScroll * event);
};
#endif

46
sierpinski-gtk.cc Normal file
View File

@ -0,0 +1,46 @@
#include <iostream>
#include <gtkmm/main.h>
#include <gtkmm/window.h>
#include <gtkmm/box.h>
#include <gtkglmm.h>
#include "SierpinskiDA.h"
int main(int argc, char * argv[])
{
Gtk::Main gtkmain(argc, argv);
Gtk::GL::init(argc, argv);
Glib::RefPtr<Gdk::GL::Config> glconfig;
glconfig = Gdk::GL::Config::create(Gdk::GL::MODE_RGB |
Gdk::GL::MODE_DEPTH |
Gdk::GL::MODE_DOUBLE);
if (!glconfig)
{
std::cerr << "Could not create double-buffered GL visual"
<< "Trying single-buffered visual." << std::endl;
glconfig = Gdk::GL::Config::create(Gdk::GL::MODE_RGB |
Gdk::GL::MODE_DEPTH);
if (!glconfig)
{
std::cerr << "Cannot create OpenGL context!" << std::endl;
return -1;
}
}
Gtk::Window mw;
mw.set_default_size(400, 500);
Gtk::VBox vbox;
SierpinskiDA da(glconfig);
vbox.pack_start(da);
mw.add(vbox);
mw.show_all();
Gtk::Main::run(mw);
}