# Long text widget.


module Zori
  class LongText
    include Widget
    include Draggable
    extend Forwardable
    
    BUTTON_BACKGROUND = [0x33, 0x33, 0xff, 0xaa]
    HOVER_BACKGROUND  = [0x55, 0x55, 0xff, 0xaa]

    def initialize(params={}, &block)
      super(params, &block)
      text                 = params[:text]
      @margin              = params[:margin] || 4
      @align               = params[:align] || :left
      @text                = text
      @bg                  = graph_box(@x, @y, @w, @h)
      @bg.border_thickness = 0
      @bg.border_color     = [255, 255, 255, 128]
      @bg.background_color = BUTTON_BACKGROUND

      text_f = Eruta::ALIGN_LEFT
      if @align == :center
        text_f = Eruta::ALIGN_CENTER
      elsif @align == :right
        text_f = Eruta::ALIGN_RIGHT
      end
      
      @tg                  = graph_longtext(@x, @y, @w, @h, text)
      @tg.text_flags       = text_f
      @tg.font             = Eruta::Zori.font.id
      @tg.background_color = [0,0,0]
      @tg.color            = [255,255, 64]
      @tg.margin           = @margin
      @tg.page             = 0
    end

    def on_mouse_axes(t, x, y, z, w, dx, dy, dz, dw)
      super
      
      # Check for hovering.
      if self.inside?(x, y)
        @bg.border_thickness = 1
        @bg.background_color = HOVER_BACKGROUND
        self.hover
      else
        @bg.border_thickness = 0
        @bg.background_color = BUTTON_BACKGROUND
        self.unhover
      end
      return false # don't consume the event
    end
    
    def on_mouse_button_down(t, x, y, z, w, b)
      super
      return false unless self.inside?(x, y)
      self.delay = self.delay / 10.0
      p self.line_start, self.line_stop, b
      if @action
        @action.call(self)
      end
    end
    
    def on_mouse_button_up(t, x, y, z, w, b)
      self.delay = self.delay * 10.0
      if @tg.paused && (b == 1)
        @tg.next_page
      end
      if (b==2)
        @tg.page = 0
      end
      return super
    end
        
    def can_drag?
      return true
    end

    def text=(t)
      @tg.text = t
    end

    def_delegator :@tg, :line_start=
    def_delegator :@tg, :line_stop=
    def_delegator :@tg, :delay=
    def_delegator :@tg, :line_start
    def_delegator :@tg, :line_stop
    def_delegator :@tg, :delay
    def_delegator :@tg, :page_lines=
    def_delegator :@tg, :page_lines
    def_delegator :@tg, :paused=
    def_delegator :@tg, :paused
    def_delegator :@tg, :page=
    def_delegator :@tg, :page
    def_delegator :@tg, :last_page
    def_delegator :@tg, :next_page
    def_delegator :@tg, :previous_page
    def_delegator :@tg, :"at_end?"
 

        
  end
end