[Racer-svn] SF.net SVN: racer:[37] trunk/racer_editor
Status: Alpha
Brought to you by:
jlegg
From: <jl...@us...> - 2009-09-25 22:47:57
|
Revision: 37 http://racer.svn.sourceforge.net/racer/?rev=37&view=rev Author: jlegg Date: 2009-09-25 22:47:46 +0000 (Fri, 25 Sep 2009) Log Message: ----------- Allow scrolling the Viewport object by using a scroll wheel over the View. Modified Paths: -------------- trunk/racer_editor/View.cpp trunk/racer_editor/View.h trunk/racer_editor/Viewport.cpp trunk/racer_editor/Viewport.h Modified: trunk/racer_editor/View.cpp =================================================================== --- trunk/racer_editor/View.cpp 2009-09-24 18:10:15 UTC (rev 36) +++ trunk/racer_editor/View.cpp 2009-09-25 22:47:46 UTC (rev 37) @@ -16,20 +16,15 @@ #include <GL/glu.h> View::View() - : m_gl_config(Gdk::GL::Config::create(Gdk::GL::MODE_RGB | - Gdk::GL::MODE_DEPTH | - Gdk::GL::MODE_DOUBLE)) + : Gtk::GL::DrawingArea(Gdk::GL::Config::create(Gdk::GL::MODE_RGB | + Gdk::GL::MODE_DEPTH | + Gdk::GL::MODE_DOUBLE)) , document(0) , scale(8.0) , centre(0.0, 0.0, 0.0) , view_angle(VIEW_TOP) { - if (!m_gl_config) - { - std::cerr << "Cannot make a double buffered OpenGL visual."; - throw; - } - set_gl_capability(m_gl_config); + add_events(Gdk::SCROLL_MASK); } View::~View() @@ -109,6 +104,11 @@ return true; } +bool View::on_scroll_event(GdkEventScroll* event) +{ + return false; +} + void View::recentre_view() { glLoadIdentity(); Modified: trunk/racer_editor/View.h =================================================================== --- trunk/racer_editor/View.h 2009-09-24 18:10:15 UTC (rev 36) +++ trunk/racer_editor/View.h 2009-09-25 22:47:46 UTC (rev 37) @@ -72,6 +72,7 @@ virtual void on_realize(); virtual bool on_configure_event(GdkEventConfigure* event); virtual bool on_expose_event(GdkEventExpose* event); + virtual bool on_scroll_event(GdkEventScroll* event); /** Set the OpenGL modelview matrix so we can draw the scene with the * correct orientation, scale, and centre. @@ -81,8 +82,6 @@ /// Draw the path of the track. void draw_path(const Track::Path & path); - Glib::RefPtr<Gdk::GL::Config> m_gl_config; - /// The document to show and edit Document::Document * document; Modified: trunk/racer_editor/Viewport.cpp =================================================================== --- trunk/racer_editor/Viewport.cpp 2009-09-24 18:10:15 UTC (rev 36) +++ trunk/racer_editor/Viewport.cpp 2009-09-25 22:47:46 UTC (rev 37) @@ -14,12 +14,13 @@ Viewport::Viewport() : Gtk::Table(2, 2) - , m_h_scroll_adjustment(49.5, 0.0, 101.0, 0.1, 1.0, 1.0) + , m_h_scroll_adjustment(49.5, 0.0, 101.0, 1.5, 1.0, 1.0) , m_h_scroll_bar(m_h_scroll_adjustment) - , m_v_scroll_adjustment(49.5, 0.0, 101.0, 0.1, 1.0, 1.0) + , m_v_scroll_adjustment(49.5, 0.0, 101.0, 1.5, 1.0, 1.0) , m_v_scroll_bar(m_v_scroll_adjustment) , document(0) { + add_events(Gdk::SCROLL_MASK); attach(m_h_scroll_bar, 0, 1, 1, 2, Gtk::FILL | Gtk::EXPAND, Gtk::SHRINK); m_h_scroll_bar.show(); @@ -148,6 +149,7 @@ // set the page size of the adjustments to the amount shown on the screen. m_h_scroll_adjustment.set_page_size(double(m_view.get_width()) / scale); m_v_scroll_adjustment.set_page_size(double(m_view.get_height()) / scale); + /// @todo adjust step size to reflect the scale. // gtk expects the value to be the lower bound of the visible range, but // we've given it the middle. Correct fot this: /*m_h_scroll_adjustment.set_value(m_h_scroll_adjustment.get_value() - @@ -201,3 +203,35 @@ m_view.set_centre(centre); return true; } + +bool Viewport::on_scroll_event(GdkEventScroll * event) +{ + switch (event->direction) + { + case GDK_SCROLL_UP: + m_v_scroll_bar.set_value(m_v_scroll_bar.get_value() + + m_v_scroll_adjustment.get_step_increment()); + on_v_scrollbar_change_value(Gtk::SCROLL_NONE, + m_v_scroll_bar.get_value()); + break; + case GDK_SCROLL_DOWN: + m_v_scroll_bar.set_value(m_v_scroll_bar.get_value() + - m_v_scroll_adjustment.get_step_increment()); + on_v_scrollbar_change_value(Gtk::SCROLL_NONE, + m_v_scroll_bar.get_value()); + break; + case GDK_SCROLL_LEFT: + m_h_scroll_bar.set_value(m_h_scroll_bar.get_value() + - m_h_scroll_adjustment.get_step_increment()); + on_h_scrollbar_change_value(Gtk::SCROLL_NONE, + m_h_scroll_bar.get_value()); + break; + case GDK_SCROLL_RIGHT: + m_h_scroll_bar.set_value(m_h_scroll_bar.get_value() + + m_h_scroll_adjustment.get_step_increment()); + on_h_scrollbar_change_value(Gtk::SCROLL_NONE, + m_h_scroll_bar.get_value()); + break; + } + return true; +} Modified: trunk/racer_editor/Viewport.h =================================================================== --- trunk/racer_editor/Viewport.h 2009-09-24 18:10:15 UTC (rev 36) +++ trunk/racer_editor/Viewport.h 2009-09-25 22:47:46 UTC (rev 37) @@ -61,6 +61,8 @@ */ bool on_v_scrollbar_change_value(Gtk::ScrollType scroll, double new_value); + virtual bool on_scroll_event(GdkEventScroll* event); + // scrollbars Gtk::Adjustment m_h_scroll_adjustment; Gtk::HScrollbar m_h_scroll_bar; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |