EKLib(Addons) - Double Window v.1.0b
Предисловие:
От мелких классовых изменений, плавно переходим к созданию классов... Баги ловились, ловятся, но имеют все шансы ловиться и в будущем. Найдете - высылайте. Грохну. Вот...
Описание:
Данный класс представляет собой два совмещенных окна, позволяющих сделать видимость произвольного отступа содержимого окна от рамки, вместо стандартных 16.
В следующих версиях планирую:
- Грохнуть все, что вы нароете
- Реализовать все, что вы предложите
Установка:
- В редакторе скриптов создайте чистую страницу над "Main" и скопируйте туда данный скрипт.
Требования:
Совместимость с другими версиями библиотеки не гарантируется!
Скрипт:
	Код:
	#==============================================================================
# EKLib(Addons) - Double Window v.1.0b
#------------------------------------------------------------------------------
# Created by: Equilibrium Keeper [equilibriumkeeper@inbox.com]
# Created on: 05.01.2009 22:44:39
# Отдельное спасибо: insider, Snaiper, Рольф, Dr. Nick To, Steck, BuBlicK
#          А так же: rpgmaker.sk6.ru, rpg-maker.info, gdsa.rpgmaker.ru,
#                    otvety.google.ru
# Были заимствованы идеия из скриптов следующих авторов: insider, ripp3r
#==============================================================================
# Описание: Данный класс представляет собой два совмещенных окна, позволяющих сделать
# видимость произвольного отступа содержимого окна от рамки, вместо
# стандартных 16.
#------------------------------------------------------------------------------
# Особенности:
#   1. После изменения любого параметра окна, необходимо обязательно
#      вызвать метод "update"
#   2. При задании параметра contents_opacity, не использовать сокращенные методы,
#      такие как: +=, -=, *=, /=, %=
#------------------------------------------------------------------------------
# Установка: В редакторе скриптов создайте чистую страницу над "Main" и
#            скопируйте туда данный скрипт.
#------------------------------------------------------------------------------
# Требования: Наличие библиотеки EK Lib v2.1
#             Совместимость с другими версиями библиотеки не гарантируется!
#------------------------------------------------------------------------------
# Примечание: В описании скриптов используются следующие сокращения:
# [](array) - массив; i(integer) - целое число; f(float) - дробное число
# b(boolean) - true/false; s(string) - строка
# В круглых () скобках указаны рекомедуемые значения параметров
# В фигурных {} скобках указаны допустимые значения параметров
#==============================================================================
class Window_Double < Window_Base
  #----------------------------------------------------------------------------
  # Инициализация нового окна
  # x       :integer - координата X окна
  # y       :integer - координата Y окна
  # width   :integer - ширина окна
  # height  :integer - высота окна
  # x_space :integer (4~16) - отступ от рамки по горизонтали
  # y_space :integer (0~16) - отступ от рамки по вертикали
  #----------------------------------------------------------------------------
  attr_reader :x_space
  attr_reader :y_space
  #----------------------------------------------------------------------------
  def initialize(x, y, width, height, x_space = 8, y_space = 4)
    super(x, y, width, height)
    @x_space = x_space
    @y_space = y_space
    x2 = x - (16 - x_space)
    y2 = y - (16 - y_space)
    width2 = width + 32 - x_space
    height2 = height + 32 - y_space
    self.back_opacity = 0
    @window_invisible = Window_Base.new(x2, y2, width2, height2)    
    @window_invisible.contents = Bitmap.new(self.width - x_space * 2, self.height - y_space * 2)
    @window_invisible.opacity = 0
    @window_invisible.active = false
  end
  #----------------------------------------------------------------------------
  # Уничтожение окна
  #----------------------------------------------------------------------------
  def dispose
    @window_invisible.dispose
    super
  end
  #----------------------------------------------------------------------------
  # Обновление окна
  #----------------------------------------------------------------------------
  def update
    if self.x - @window_invisible.x != 16 - @x_space
      @window_invisible.x = self.x + @x_space - 16
      resize = true
    end
    if self.y - @window_invisible.y != 16 - @y_space
      @window_invisible.y = self.y + @y_space - 16
      resize = true
    end
    if @window_invisible.width - self.width != 32 - @x_space
      @window_invisible.width = self.width - @x_space * 2 + 32
      @window_invisible
      resize = true
    end
    if @window_invisible.height - self.height != 32 - @y_space
      @window_invisible.height = self.height - @y_space * 2 + 32
      resize = true
    end
    if resize
      @window_invisible.contents = @window_invisible.contents.resize(
                        self.width - @x_space * 2, self.height - @y_space * 2,
                        false, nil)
      resize = false
    end
    @window_invisible.update
    super
  end
  #----------------------------------------------------------------------------
  # Метод устанавливает новую шкурку для окна
  # bitmap :bitmap - рисунок, который будет использован в качестве "шкурки"
  #----------------------------------------------------------------------------
  def windowskin=(bitmap)
    @window_invisible.windowskin = bitmap unless @window_invisible == nil || @window_invisible.disposed?
    super(bitmap)
  end
  #----------------------------------------------------------------------------
  # Метод возвращает рисунок (bitmap), используемый, как содержимое окна
  #----------------------------------------------------------------------------
  def contents
    return @window_invisible.contents unless @window_invisible == nil || @window_invisible.disposed?
  end
  #----------------------------------------------------------------------------
  # Метод устанавливает новый рисунок, используемый, как содержимое окна
  # bitmap :bitmap - рисунок
  #----------------------------------------------------------------------------
  def contents=(bitmap)
    @window_invisible.contents = bitmap unless @window_invisible == nil || @window_invisible.disposed?
  end
  #----------------------------------------------------------------------------
  # Метод устанавливает новое значение для параметра "видимости" окна
  # boolean :boolean - флаг "видимости"; если true - окно видимо
  #----------------------------------------------------------------------------
  def visible=(boolean)
    @window_invisible.visible = boolean unless @window_invisible == nil || @window_invisible.disposed?
    super(boolean)
  end
  #----------------------------------------------------------------------------
  # Метод возвращает true если обои растягиваются; false - если нет.
  #----------------------------------------------------------------------------
  def stretch
    return @window_invisible.stretch unless @window_invisible == nil || @window_invisible.disposed?
  end
  #----------------------------------------------------------------------------
  # Метод устанавливает новое значение параметра отображения обоев
  # boolean :boolean - флаг отображения обоев; если true - растягиваются; false - нет
  #----------------------------------------------------------------------------
  def stretch=(boolean)
    @window_invisible.stretch = boolean unless @window_invisible == nil || @window_invisible.disposed?
  end
  #----------------------------------------------------------------------------
  # Метод возвращает значение непрозрачности содержимого окна
  #----------------------------------------------------------------------------
  def contents_opacity
    return @window_invisible.contents_opacity unless @window_invisible == nil || @window_invisible.disposed?
  end
  #----------------------------------------------------------------------------
  # Метод устанавливает новое значение непрозрачности содержимого окна
  # int :integer - непрозрачность
  # Примечание: не использовать сокращенные методы, такие как: +=, -=, *=, /=, %=
  #----------------------------------------------------------------------------
  def contents_opacity=(int)
    @window_invisible.contents_opacity = int unless @window_invisible == nil || @window_invisible.disposed?
  end
  #----------------------------------------------------------------------------  
end
#==============================================================================
 
						
					
Социальные закладки