#==============================================================================
# ■ Scroll_Bar vol.3.20
# ※include HIDE_SCROLL_BARしたウィンドウより上に挿入
#------------------------------------------------------------------------------
# 07/09/02
#==============================================================================
module HIDE_SCROLL_BAR
  attr_accessor :bar_min      # 一番薄い状態(透明度0〜255)
  attr_accessor :bar_max      # 一番濃い状態(透明度0〜255)
  attr_accessor :bar_speed    # 変化する速さ(0=点滅なし 大＝速い　小＝遅い)
  attr_accessor :bar_stop     # 点滅の停止状態の透明度(カーソル選択済み)
  #--------------------------------------------------------------------------
  # ■ スクロールバー点滅の初期設定(外部操作 = self.bar_ )
  #--------------------------------------------------------------------------
  def initialize(x, y, width, height)
    super(x, y, width, height)
    @bar_min = 50
    @bar_max = 250
    @bar_speed = 8
    @bar_stop = 160
  end
  #--------------------------------------------------------------------------
  # ■ スクロールバーを作成
  #     graphic      : スクロールバー画像を指定
  #     cx           : スクロールバーX座標の補正値(+-)
  #     cy           : スクロールバーY座標の補正値(+-)
  #     back_bar     : スクロールバーの背景描画フラグ
  #--------------------------------------------------------------------------
  def make_scroll_bar(graphic = "scroll_bar",cx = 0,cy = 0,back_bar = true)
    @back_bar = back_bar
    bar = RPG::Cache.windowskin(graphic)
    bx = self.x+self.width-16 + cx
    by = self.y + cy
    @bar_height = self.height - (cy*2)
    # □スクロールバー背景の描画
    if @back_bar
      @scroll_bar_back = Sprite.new(Viewport.new(bx,by,16,@bar_height))
      @scroll_bar_back.viewport.z = self.z + 2
      @scroll_bar_back.bitmap = Bitmap.new(16,@bar_height)
      # □スクロールバー背景画像の引き伸ばし描画(真中)
      @scroll_bar_back.bitmap.stretch_blt(Rect.new(0,16,32,@bar_height-32),bar,Rect.new(0,16,32,32))
      # □スクロールバー背景画像の描画(上下)
      @scroll_bar_back.bitmap.blt(0,0,bar,Rect.new(0,0,32,16))
      @scroll_bar_back.bitmap.blt(0,@bar_height - 16,bar,Rect.new(0,48,32,16))
    end
    @scroll_bar = Sprite.new(Viewport.new(bx,by,16,@bar_height))
    @scroll_bar.viewport.z = self.z + 3
    @scroll_bar.bitmap = Bitmap.new(16,@bar_height)
    # □スクロールバー画像の引き伸ばし描画(真中)
    @scroll_bar.bitmap.stretch_blt(Rect.new(0,16,32,64),bar,Rect.new(16,16,32,32))
    # □スクロールバー画像の描画(上下)
    @scroll_bar.bitmap.blt(0,0,bar,Rect.new(16,0,32,16))
    @scroll_bar.bitmap.blt(0,80,bar,Rect.new(16,48,32,16))
    # □スクロールバーの初期位置
    if self.row_max <= self.page_row_max
      @scroll_bar.oy = -(@bar_height - 96)
    else
      @scroll_bar.oy = 0
    end
    # □スクロールバーの初期透明度(停止状態)
    @scroll_bar.opacity = @bar_stop
    @count_bar = @bar_max
  end
  #--------------------------------------------------------------------------
  # ■ スクロールバーの更新
  #--------------------------------------------------------------------------
  def update
    if @scroll_bar != nil
      # □z座標を変更した場合の不具合を解消
      if @cbp == nil
        @cbp = 0
        @scroll_bar.viewport.z = self.z + 3
        if @back_bar
          @scroll_bar_back.viewport.z = self.z + 2
        end
      end
      # □移動するY座標の転送幅を計算
      crs_h = (@bar_height - 32.0) / self.page_row_max
      peg_h = (@bar_height - 96.0) / (self.row_max - self.page_row_max)
      if self.oy == (self.row_max - self.page_row_max) * crs_h or self.row_max <= self.page_row_max
        @scroll_bar.oy = -(@bar_height - 96)
      elsif self.oy > 0
        # □最終描画位置の補正
        if @bar_height - 96 < peg_h * (self.oy/crs_h)
          @scroll_bar.oy = -(@bar_height - 96)
        else
          @scroll_bar.oy = -(peg_h * (self.oy/crs_h))
        end
      elsif self.oy == 0
        @scroll_bar.oy = 0
      end
      # □スクロールバーの点滅の開始(@bar_speed=0 点滅なし)
      if self.active == true && @bar_speed != 0
        @scroll_bar.opacity = @count_bar
        if @count_bar >= @bar_max
          @cbp = -@bar_speed
        elsif @count_bar <= @bar_min
          @cbp = @bar_speed
        end
        @count_bar += @cbp
      # □スクロールバーの点滅の停止
      else
        @scroll_bar.opacity = @bar_stop
      end
    end
    super
  end
  #--------------------------------------------------------------------------
  # ■ スクロールバーの削除
  #--------------------------------------------------------------------------
  def dispose
    if @scroll_bar != nil
      @scroll_bar.viewport.dispose
      @scroll_bar.bitmap.dispose
      @scroll_bar.dispose
      @scroll_bar = nil
      if @back_bar
        @scroll_bar_back.viewport.dispose
        @scroll_bar_back.bitmap.dispose
        @scroll_bar_back.dispose
        @scroll_bar_back = nil
      end
    end
    super
  end
  #--------------------------------------------------------------------------
  # ■ スクロールバーの可視化
  #--------------------------------------------------------------------------
  def visible=(visible)
    if @scroll_bar != nil
      @scroll_bar.visible = visible
      @scroll_bar_back.visible = visible
    end
    super
  end
end