mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-06 06:01:46 +00:00
119 lines
3.1 KiB
Ruby
119 lines
3.1 KiB
Ruby
#===============================================================================
|
|
# Displays an icon bitmap in a window. Supports animated images.
|
|
#===============================================================================
|
|
class IconWindow < SpriteWindow_Base
|
|
attr_reader :name
|
|
|
|
def initialize(x, y, width, height, viewport = nil)
|
|
super(x, y, width, height)
|
|
self.viewport = viewport
|
|
self.contents = nil
|
|
@name = ""
|
|
@_iconbitmap = nil
|
|
end
|
|
|
|
def dispose
|
|
clearBitmaps
|
|
super
|
|
end
|
|
|
|
def update
|
|
super
|
|
if @_iconbitmap
|
|
@_iconbitmap.update
|
|
self.contents = @_iconbitmap.bitmap
|
|
end
|
|
end
|
|
|
|
def clearBitmaps
|
|
@_iconbitmap&.dispose
|
|
@_iconbitmap = nil
|
|
self.contents = nil if !self.disposed?
|
|
end
|
|
|
|
# Sets the icon's filename. Alias for setBitmap.
|
|
def name=(value)
|
|
setBitmap(value)
|
|
end
|
|
|
|
# Sets the icon's filename.
|
|
def setBitmap(file, hue = 0)
|
|
clearBitmaps
|
|
@name = file
|
|
return if file.nil?
|
|
if file == ""
|
|
@_iconbitmap = nil
|
|
else
|
|
@_iconbitmap = AnimatedBitmap.new(file, hue)
|
|
# for compatibility
|
|
self.contents = @_iconbitmap ? @_iconbitmap.bitmap : nil
|
|
end
|
|
end
|
|
end
|
|
|
|
#===============================================================================
|
|
# Displays an icon bitmap in a window. Supports animated images.
|
|
# Accepts bitmaps and paths to bitmap files in its constructor.
|
|
#===============================================================================
|
|
class PictureWindow < SpriteWindow_Base
|
|
def initialize(pathOrBitmap)
|
|
super(0, 0, 32, 32)
|
|
self.viewport = viewport
|
|
self.contents = nil
|
|
@_iconbitmap = nil
|
|
setBitmap(pathOrBitmap)
|
|
end
|
|
|
|
def dispose
|
|
clearBitmaps
|
|
super
|
|
end
|
|
|
|
def update
|
|
super
|
|
if @_iconbitmap
|
|
if @_iconbitmap.is_a?(Bitmap)
|
|
self.contents = @_iconbitmap
|
|
else
|
|
@_iconbitmap.update
|
|
self.contents = @_iconbitmap.bitmap
|
|
end
|
|
end
|
|
end
|
|
|
|
def clearBitmaps
|
|
@_iconbitmap&.dispose
|
|
@_iconbitmap = nil
|
|
self.contents = nil if !self.disposed?
|
|
end
|
|
|
|
# Sets the icon's bitmap or filename. (hue parameter
|
|
# is ignored unless pathOrBitmap is a filename)
|
|
def setBitmap(pathOrBitmap, hue = 0)
|
|
clearBitmaps
|
|
if pathOrBitmap && pathOrBitmap != ""
|
|
case pathOrBitmap
|
|
when Bitmap
|
|
@_iconbitmap = pathOrBitmap
|
|
self.contents = @_iconbitmap
|
|
self.width = @_iconbitmap.width + self.borderX
|
|
self.height = @_iconbitmap.height + self.borderY
|
|
when AnimatedBitmap
|
|
@_iconbitmap = pathOrBitmap
|
|
self.contents = @_iconbitmap.bitmap
|
|
self.width = @_iconbitmap.bitmap.width + self.borderX
|
|
self.height = @_iconbitmap.bitmap.height + self.borderY
|
|
else
|
|
@_iconbitmap = AnimatedBitmap.new(pathOrBitmap, hue)
|
|
self.contents = @_iconbitmap&.bitmap
|
|
self.width = self.borderX + (@_iconbitmap&.bitmap&.width || 32)
|
|
self.height = self.borderY + (@_iconbitmap&.bitmap&.height || 32)
|
|
end
|
|
else
|
|
@_iconbitmap = nil
|
|
self.width = 32 + self.borderX
|
|
self.height = 32 + self.borderY
|
|
end
|
|
end
|
|
end
|