線を引く
概要
Gtk::DrawingAreaに線を引く色を設定するためにコンストラクタで Gdk::Colormap::alloc_color() を使う。 その後、on_expose_event()の中で Gdk::GC::set_foreground()で色を指定し、 get_window()->draw_line()によって線を引くことが出来る。
ソース
drawline.cpp#include <gtkmm.h> enum { C_WHITE = 0, C_BLACK, C_NUM }; class MyDrawArea : public Gtk::DrawingArea { Glib::RefPtr< Gdk::GC > m_gc; Gdk::Color m_col[ C_NUM ]; public: MyDrawArea(); protected: virtual void on_realize(); virtual bool on_expose_event( GdkEventExpose* e ); }; MyDrawArea::MyDrawArea() { // カラーマップの登録 m_col[ C_WHITE ] = Gdk::Color( "white" ); m_col[ C_BLACK ] = Gdk::Color( "black" ); Glib::RefPtr< Gdk::Colormap > colmap = get_default_colormap(); for( int i = 0; i < C_NUM; ++i ) colmap->alloc_color( m_col[ i ] ); } void MyDrawArea::on_realize() { // 元のon_realize()のコールを忘れないこと Gtk::DrawingArea::on_realize(); // Gdk::Window からGCを作る m_gc = Gdk::GC::create( get_window() ); } bool MyDrawArea::on_expose_event( GdkEventExpose* event ) { int width = get_width(); int height =get_height(); // 背景の塗りつぶし get_window()->set_background( m_col[ C_BLACK ] ); get_window()->clear(); // 色をセットして線を引く m_gc->set_foreground( m_col[ C_WHITE ] ); get_window()->draw_line( m_gc, 0, 0, width, height ); return true; } class MainWin : public Gtk::Window { MyDrawArea m_drawarea; public: MainWin(){ add( m_drawarea ); show_all_children(); } }; int main( int argc, char *argv[] ) { Gtk::Main kit( argc, argv ); MainWin mainwin; Gtk::Main::run( mainwin ); return 0; }
コンパイル
必要なコンパイルオプションは pkg-config を使って取得する。g++ drawline.cpp -o drawline `pkg-config gtkmm-2.4 --cflags --libs`
結果
