module Diva::Model::PhotoInterface

Constants

GdkPixbufCache

Public Instance Methods

download_pixbuf(width:, height:) click to toggle source

特定のサイズのPixbufを作成するDeferredを返す

# File core/mui/gtk_photo_pixbuf.rb, line 12
def download_pixbuf(width:, height:)
  increase_read_count
  cache_get_defer(width: width, height: height).trap do |err|
    error err if err
    gen_pixbuf_from_raw_data(width: width, height: height)
  end
end
load_pixbuf(width:, height:, ifnone: Skin['notfound.png'].pixbuf(width: width, height: height), &complete_callback) click to toggle source

#download_pixbuf と似ているが、すぐさまキャッシュされているGdkPixbuf::Pixbufを返す。 取得に失敗した場合は ifnone を返す。 もしキャッシュされた GdkPixbuf::Pixbuf が存在しない場合、ロード中を示すPixbufを返し、 GdkPixbuf::Pixbuf の作成を開始する。 作成が完了したら、その Pixbuf を引数に _&complete_callback_ が呼び出される。

Args

width:

取得する Pixbuf の幅(px)

height:

取得する Pixbuf の高さ(px)

ifnone:

Pixbuf が存在しなかった時に _&complete_callback_ に渡す値

&complete_callback

このメソッドによって画像のダウンロードが行われた場合、ダウンロード完了時に呼ばれる

Return

GdkPixbuf::Pixbuf

pixbuf

# File core/mui/gtk_photo_pixbuf.rb, line 32
def load_pixbuf(width:, height:, ifnone: Skin['notfound.png'].pixbuf(width: width, height: height), &complete_callback)
  result = pixbuf(width: width, height: height) rescue ifnone
  if result
    result
  else
    download_pixbuf(width: width, height: height).next(&complete_callback).trap{
      complete_callback.(ifnone)
    }
    Skin['loading.png'].pixbuf(width: width, height: height)
  end
end
local?() click to toggle source

ローカルファイルシステム上のものなら真

# File core/mui/gtk_photo_pixbuf.rb, line 7
def local?
  uri.scheme == 'file'.freeze
end
pixbuf(width:, height:) click to toggle source

引数の寸法の GdkPixbuf::Pixbuf を、Pixbufキャッシュから返す。 Pixbufキャッシュに存在しない場合は nil を返す。 ただし、ロファイルシステム上に見つかった場合は、その場でそれを読み込んで返す。 つまり、ファイルシステムのファイルを示している場合は、このメソッドはnilを返さず、常に GdkPixbuf::Pixbuf を返す。

Args

width:

Pixbufの幅(px)

height:

Pixbufの高さ(px)

Return

GdkPixbuf::Pixbuf

メモリキャッシュやファイルシステムから画像が見つかった場合

nil

画像がローカルにキャッシュされていない場合

# File core/mui/gtk_photo_pixbuf.rb, line 54
def pixbuf(width:, height:)
  result = pixbuf_cache[[width, height].hash]
  if result
    result.read_count += 1
    result.reserver.cancel if result.reserver
    result.reserver = pixbuf_forget(width, height, result.read_count)
    result.pixbuf
  elsif local?
    pixbuf_cache_set(GdkPixbuf::Pixbuf.new(file: uri.path, width: width, height: height), width: width, height: height)
  end
end