mirror of
https://github.com/cyberarm/w3d_hub_linux_launcher.git
synced 2026-09-19 23:03:53 +00:00
60 lines
1.9 KiB
Ruby
60 lines
1.9 KiB
Ruby
module W3DHubLauncher
|
|
module GuiExt
|
|
BLACK_IMAGE = Gosu.render(64, 64, retro: true) { Gosu.draw_rect(0, 0, 32, 32, Gosu::Color::BLACK) }
|
|
WHITE_IMAGE = Gosu.render(64, 64, retro: true) { Gosu.draw_rect(0, 0, 32, 32, Gosu::Color::WHITE) }
|
|
|
|
def safe_get_image(path, retro: false)
|
|
raise RuntimeError, "Images may only be loaded from the main thread!" unless Thread.current == Thread.main
|
|
|
|
begin
|
|
return get_image(path, retro: retro) if File.exist?(path)
|
|
rescue RuntimeError => e
|
|
pp e
|
|
end
|
|
|
|
path = "#{ROOT_PATH}/media/default.png"
|
|
return get_image(path, retro: retro) if File.exist?(path)
|
|
|
|
WHITE_IMAGE
|
|
end
|
|
|
|
def rounded_avatar(image)
|
|
circle = get_image("#{ROOT_PATH}/media/ui/circle.png")
|
|
scale = [(circle.width.to_f / image.width).abs, (circle.width.to_f / image.height).abs].min
|
|
|
|
Gosu.render(circle.width, circle.height) do
|
|
image.draw_rot(circle.width / 2, circle.height / 2, 0, 0, 0.5, 0.5, scale, scale)
|
|
circle.draw(0, 0, 1, 1, 1, 0xff_ffffff, :multiply)
|
|
end
|
|
end
|
|
|
|
# Downloads requested url and on success check if host element is still in the layout and call the block if so.
|
|
def remote_image(path, url:, element:, &block)
|
|
memcache_key = :"lock_net_download_#{element.style.tag}"
|
|
|
|
if !File.exist?(path) && MemCache[memcache_key].nil?
|
|
MemCache[memcache_key] = true
|
|
|
|
Worker::Api.download_url(url, path) do |result|
|
|
# ignore progress reports
|
|
next unless result.okay? && result.data == true
|
|
|
|
MemCache.delete(memcache_key)
|
|
# does the target element still exist in the layout?
|
|
e = find_element_by_tag(element.root, element.style.tag)
|
|
|
|
next unless e
|
|
|
|
if result.okay?
|
|
block.call(element, path)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
def on_main_thread(block)
|
|
window.add_to_queue(block)
|
|
end
|
|
end
|
|
end
|