1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
#!/usr/bin/env ruby
#
# Copyright (c) 2014 Gian Mario Tagliaretti
# Copyright (c) 2015 Ruby-GNOME2 Project Team
#
# Permission is granted to copy, distribute and/or modify this document
# under the terms of the GNU Free Documentation License, Version 1.3
# or any later version published by the Free Software Foundation;
# with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
# A copy of the license is included in the section entitled "GNU
# Free Documentation License".
#
# Original code: https://github.com/sebp/PyGObject-Tutorial/blob/master/examples/layout_flowbox_example.py
require "gtk3"
unless Gtk::Version.or_later?(3, 12, 1)
puts "This sample requires GTK+ 3.12.1 or later: #{Gtk::Version::STRING}"
exit
end
COLORS = %w(AliceBlue AntiqueWhite AntiqueWhite1 AntiqueWhite2 AntiqueWhite3
AntiqueWhite4 aqua aquamarine aquamarine1 aquamarine2 aquamarine3
aquamarine4 azure azure1 azure2 azure3 azure4 beige bisque bisque1
bisque2 bisque3 bisque4 black BlanchedAlmond blue blue1 blue2
blue3 blue4 BlueViolet brown brown1 brown2 brown3 brown4 burlywood
burlywood1 burlywood2 burlywood3 burlywood4 CadetBlue CadetBlue1
CadetBlue2 CadetBlue3 CadetBlue4 chartreuse chartreuse1 chartreuse2
chartreuse3 chartreuse4 chocolate chocolate1 chocolate2 chocolate3
chocolate4 coral coral1 coral2 coral3 coral4)
class FlowBoxWindow < Gtk::Window
def initialize
super
set_border_width(10)
set_default_size(300, 250)
header = Gtk::HeaderBar.new
header.set_title("Flow Box")
header.subtitle = "Sample FlowBox app"
header.show_close_button = true
set_titlebar(header)
scrolled = Gtk::ScrolledWindow.new
scrolled.set_policy(Gtk::PolicyType::NEVER, Gtk::PolicyType::AUTOMATIC)
@flowbox = Gtk::FlowBox.new
@flowbox.set_valign(Gtk::Align::START)
@flowbox.set_max_children_per_line(30)
@flowbox.set_selection_mode(Gtk::SelectionMode::NONE)
fill_flowbox
scrolled.add(@flowbox)
add(scrolled)
signal_connect("destroy") { Gtk.main_quit }
end
private
def color_swatch_new(color_name)
color = Gdk::RGBA.parse(color_name)
button = Gtk::Button.new
area = Gtk::DrawingArea.new
area.set_size_request(24, 24)
area.override_background_color(0, color)
button.add(area)
button
end
def fill_flowbox
COLORS.each do |color|
@flowbox.add(color_swatch_new(color))
end
end
end
win = FlowBoxWindow.new
win.show_all
Gtk.main
|