[ruby-gnome2-doc-cvs] [Hiki] create - ruby-gtk-Tutorials Rulers

Zurück zum Archiv-Index

ruby-****@sourc***** ruby-****@sourc*****
2003年 8月 15日 (金) 12:21:41 JST


-------------------------
REMOTE_ADDR = 163.135.10.36
REMOTE_HOST = 
        URL = http://ruby-gnome2.sourceforge.jp/?ruby-gtk-Tutorials+Rulers
-------------------------
ルーラウィジェットはあるウィンドウ内でのマウスポインタの位置を表示するために用いられる.
ウィンドウは幅方向に沿って計測する垂直ルーラと高さ方向に下って計測する水平ルーラを持つことができる.
ルーラ上の小さな三角形のインジケータが,ルーラに対応するポインタの正確な位置を示す.

まず最初にルーラを作成しなければならない.

  Gtk::HRuler.new    # 水平ルーラ
  Gtk::VRuler.new    # 垂直ルーラ

ルーラを作成したら計測の単位を定義することができる.
ルーラの計測の単位にはGtk::PIXELS, Gtk::INCHESあるいはGtk::CENTIMETERSを指定できる.
次のメソッドで単位の指定を行う:

  Gtk::Ruler#metric=(metric)
  Gtk::Ruler#set_metric(metric)

デフォルトはGtk::PIXELSである.

ルーラの他の重要な特徴はスケールの目盛線の付け方と,位置インジケータの最初の位置である.
これらは次のメソッドで指定する:

  Gtk::Ruler#set_range(lower, upper, position, max_size)

lowerとupper引数はルーラの範囲を定義し,max_sizeは表示できる最大の数値である.
positionはルーラの位置インジケータの最初の位置を定義する

800ピクセル幅のウィンドウに垂直ルーラを渡すには

    vruler = Gtk::VRuler.new
    vruler.set_range(0, 800, 0, 800)

のようにすればよい.

ルーラ上に表示される目盛りは0から800で100ピクセルごとに数が振られる.
もし代わりにルーラを7から16の範囲にしたければ,次のようにすればよい:

  vruler.set_range(7, 16, 0, 20)

ルーラ上のインジケータは小さな三角印をしていて,このルーラに対応するポインタの位置を示す.
もしルーラをマウスポインタを追跡するために使うなら,motion_notify_eventシグナルをルーラのGtk::Ruler#motion_notify_eventに接続する必要がある.
ウィンドウ領域中の全てのマウスの移動を追跡するためには次のようにする:
((-これ動きません.どうやればいいか分かる方,教えて下さい.-))

  area.signal_connect("motion_notify_event") do |w, e|
    vruler.signal_connect("motion_notify_event", e)
  end

以下の例は上に水平ルーラ,左に垂直ルーラの付いたドローイングエリアを作成する.
ドローイングエリアのサイズは幅が600ピクセル,高さが400ピクセルである.
水平ルーラは7から13までの区間で100 ピクセル毎に目盛りが付いている.
また垂直ルーラは0から400までの区間で100ピクセル毎に目盛りが付いている.
ドローイングエリアとルーラの配置はテーブルを用いて行われる.


  #! /usr/bin/env ruby
  require 'gtk2'
  
  Gtk.init
  window = Gtk::Window.new
  window.signal_connect("delete_event") {Gtk.main_quit}
  window.border_width = 10
  
  table = Gtk::Table.new(3, 2, false)
  window.add(table)
  
  area = Gtk::DrawingArea.new
  area.set_size_request(600, 400)
  table.attach(area, 1, 2, 1, 2, Gtk::EXPAND|Gtk::FILL, Gtk::FILL, 0, 0)
  area.set_events(Gdk::EventMotion::POINTER_MOTION_MASK|Gdk::EventMotion::POINTER_MOTION_HINT_MASK)
  
  hrule = Gtk::HRuler.new
  hrule.metric = Gtk::PIXELS
  hrule.set_range(7, 13, 0, 20)
  area.signal_connect("motion_notify_event") do |w, e|
  	# FIX ME!
  	# hrule.signal_emit("motion_notify_event", e)
  end
  table.attach(hrule, 1, 2, 0, 1, Gtk::EXPAND|Gtk::FILL, Gtk::FILL, 0, 0)
      
  vrule = Gtk::VRuler.new
  vrule.metric = Gtk::PIXELS
  vrule.set_range(0, 400, 10, 400)
  area.signal_connect("motion_notify_event") do |w, e|
  	# FIX ME!
  	# vrule.signal_emit("motion_notify_event", e)
  end
  table.attach(vrule, 0, 1, 1, 2, Gtk::EXPAND|Gtk::FILL, Gtk::FILL, 0, 0)
  
  window.show_all
  Gtk.main






ruby-gnome2-cvs メーリングリストの案内
Zurück zum Archiv-Index