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