Sha256: 85b94e1d83166d4e3e2b4c91757df05f96ab7d5e00b15d41d317807e8dd91101

Contents?: true

Size: 1.13 KB

Versions: 17

Compression:

Stored size: 1.13 KB

Contents

def fx(str, *args, bg: nil)
  eff = RubyText::Effects.new(*args, bg: bg)
  str.define_singleton_method(:effect) { eff } 
  str  # must return str
end

class RubyText::Effects   # dumb name?
  Modes  = {bold:    Curses::A_BOLD,
            normal:  Curses::A_NORMAL,
            reverse: Curses::A_REVERSE, 
            under:   Curses::A_UNDERLINE}

  Others = %[:show, :hide]  # show/hide cursor; more later??

  attr_reader :value, :fg, :bg

  # TODO rewrite logic to accommodate color pairs
  
  def initialize(*args, bg: nil)
    bits = 0
    @list = args
    args.each do |arg|
      if Modes.keys.include?(arg)
        val = Modes[arg]
        bits |= val
      elsif ::Colors.include?(arg)
        @fg = arg   # symbol
      end
    end
    @bg = bg || @bg
    @value = bits
  end

  def set(win)
    @old_fg, @old_bg  = win.fg, win.bg  # Save off current state?
    attr, fg, bg = self.value, self.fg, self.bg
    win.cwin.attron(attr)
    fg ||= win.fg
    bg ||= win.bg
    win.set_colors(fg, bg)
  end

  def reset(win)
    attr = self.value
    win.cwin.attroff(attr)
    win.set_colors(@old_fg, @old_bg)  # Does restore logic work?
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
rubytext-0.1.22 lib/effects.rb
rubytext-0.1.21 lib/effects.rb
rubytext-0.1.20 lib/effects.rb
rubytext-0.1.19 lib/effects.rb
rubytext-0.1.18 lib/effects.rb
rubytext-0.1.17 lib/effects.rb
rubytext-0.1.16 lib/effects.rb
rubytext-0.1.15 lib/effects.rb
rubytext-0.1.14 lib/effects.rb
rubytext-0.1.13 lib/effects.rb
rubytext-0.1.12 lib/effects.rb
rubytext-0.1.11 lib/effects.rb
rubytext-0.1.10 lib/effects.rb
rubytext-0.1.8 lib/effects.rb
rubytext-0.1.7 lib/effects.rb
rubytext-0.1.6 lib/effects.rb
rubytext-0.1.5 lib/effects.rb