initial commit
git-svn-id: svn://anubis/misc/sierpinski-gtk@246 bd8a9e45-a331-0410-811e-c64571078777
This commit is contained in:
parent
af6ab63b92
commit
2b5692498c
40
Makefile
Normal file
40
Makefile
Normal 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
99
SierpinskiDA.cc
Normal 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
28
SierpinskiDA.h
Normal 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
46
sierpinski-gtk.cc
Normal 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);
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user