class TransparentDemo

Overlay/Transparency

Use transparent background on GdkWindows to create a shadow effect on a GtkOverlay widget.

Constants

SHADOW_OFFSET_X
SHADOW_OFFSET_Y
SHADOW_RADIUS

Public Class Methods

new(main_window) click to toggle source
# File gtk3/sample/gtk-demo/transparent.rb, line 14
  def initialize(main_window)
    @window = Gtk::Window.new(:toplevel)
    @window.screen = main_window.screen
    @window.set_default_size(450, 450)
    @window.title = "Transparency"

    view = Gtk::TextView.new
    sw = Gtk::ScrolledWindow.new
    sw.set_policy(:automatic, :automatic)
    sw.add(view)

    overlay = Gtk::Overlay.new
    overlay.add(sw)
    @window.add(overlay)

    entry = Gtk::Entry.new
    css = <<-CSS
    * { border-width: 0px #{SHADOW_OFFSET_X}px #{SHADOW_OFFSET_Y}px 0px; }
    CSS
    provider = Gtk::CssProvider.new
    provider.load_from_data(css)
    style_context = entry.style_context
    style_context.add_provider(provider,
                               Gtk::StyleProvider::PRIORITY_APPLICATION)
    entry.signal_connect "draw" do |widget, cr|
      allocation = widget.allocation
      rect = [allocation.x + SHADOW_OFFSET_X,
              allocation.y + SHADOW_OFFSET_Y,
              allocation.width - SHADOW_OFFSET_X,
              allocation.height - SHADOW_OFFSET_Y
             ]
      draw_shadow_box(cr, rect, SHADOW_RADIUS, 0.4)
      false
    end

    overlay.add_overlay(entry)
    entry.valign = :center
    entry.halign = :start
    overlay.show_all
  end

Public Instance Methods

run() click to toggle source
# File gtk3/sample/gtk-demo/transparent.rb, line 55
def run
  if !@window.visible?
    @window.show_all
  else
    @window.destroy
  end
  @window
end