1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
# -*- coding: utf-8 -*-
# /(^o^)\
require_relative '../utils'
miquire :core, 'environment', 'serialthread', 'skin'
miquire :mui, 'web_image_loader'
require 'gtk2'
require 'observer'
# Web上の画像をレンダリングできる。
# レンダリング中は読み込み中の代替イメージが表示され、ロードが終了したら指定された画像が表示される。
# メモリキャッシュ、ストレージキャッシュがついてる。
module Gtk
class WebIcon < Image
DEFAULT_RECTANGLE = Gdk::Rectangle.new(0, 0, 48, 48)
include Observable
# ==== Args
# [url] 画像のURLもしくはパス(String)
# [rect] 画像のサイズ(Gdk::Rectangle) または幅(px)
# [height] 画像の高さ(px)
def initialize(url, rect = DEFAULT_RECTANGLE, height = nil)
rect = Gdk::Rectangle.new(0, 0, rect, height) if height
case url
when Diva::Model
super(load_model(url, rect))
when GdkPixbuf::Pixbuf
super(url)
else
photo = Enumerator.new{|y|
Plugin.filtering(:photo_filter, url, y)
}.first
super(load_model(photo || Skin['notfound.png'], rect))
end
end
def load_model(photo, rect)
photo.load_pixbuf(width: rect.width, height: rect.height){|pb|
update_pixbuf(pb)
}
end
def update_pixbuf(pixbuf)
unless destroyed?
self.pixbuf = pixbuf
self.changed
self.notify_observers
end
end
end
end
|