=begin header layout.rb - a part of testgtk.c rewritten in Ruby/GTK2 Copyright (C) 2002-2005 Ruby-GNOME2 Project Team $Id: layout.rb,v 1.6 2005/07/17 16:55:27 mutoh Exp $ Rewritten by Minoru Inachi Original Copyright: GTK - The GIMP Toolkit Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. =end require 'sample' class LayoutSample < SampleWindow def initialize super("Gtk::Layout") set_default_size(200, 200) scrolledwindow = Gtk::ScrolledWindow.new add(scrolledwindow) @layout = Gtk::Layout.new(nil, nil) scrolledwindow.add(@layout) # We set step sizes here since GtkLayout does not set # them itself. @layout.hadjustment.step_increment = 10.0 @layout.vadjustment.step_increment = 10.0 @layout.set_events(Gdk::Event::EXPOSURE_MASK) @layout.signal_connect("expose_event") do | w, event | layout_expose_handler(event) end @layout.set_size(1600, 128000) for i in 0..15 do for j in 0..15 do buf = "Button #{i}, #{j}" if ((i + j) % 2) != 0 then button = Gtk::Button.new(buf) else button = Gtk::Label.new(buf) end @layout.put(button, j*100, i*100) button.show end end for i in 16..1279 do buf = "Button #{i}, 0" if (i % 2) != 0 then button = Gtk::Button.new(buf) else button = Gtk::Label.new(buf) end @layout.put(button, 0, i * 100) end end private def layout_expose_handler(event) imin = (event.area.x) / 10 imax = (event.area.x + event.area.width + 9) / 10 jmin = (event.area.y) / 10 jmax = (event.area.y + event.area.height + 9) / 10 for i in imin..imax-1 do for j in jmin..jmax-1 do if ((i+j) % 2) != 0 then @layout.bin_window.draw_rectangle( @layout.style.black_gc, true, 10 * i, 10 * j, 1 + i % 10, 1 + j % 10) end end end false end end