1 # Copyright (c) 2009 Paolo Capriotti <p.capriotti@gmail.com>
3 # This program is free software; you can redistribute it and/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation; either version 2 of the License, or
6 # (at your option) any later version.
10 class Item < Qt::GraphicsPixmapItem
11 attr_reader :name, :item
14 # name is whatever information the caller needs
15 # to recreate this piece with a different size
17 def initialize(name, pixmap, parent)
18 super(pixmap || Qt::Pixmap.new, parent)
23 def paint(p, options, widget)
27 super p, options, widget
38 scene.remove_item self
43 # Qt::Pixmap#effects is private, use __send__ to override
44 pixmap.__send__(:effects).each do |effect|
45 set_graphics_effect(effect)
47 pixmap.instance_variable_set("@effects", [])
51 class ReloadableItem < Item
52 def initialize(name, reloader, parent)
53 super(name, nil, parent)
62 class AutoreloadableItem < Item
63 def initialize(name, pix_loader, parent)
64 super(name, nil, parent)
65 @pix_loader = pix_loader
68 def set_geometry(rect)
69 self.pos = rect.top_left.to_f
70 self.pixmap = @pix_loader[rect.size]
75 BACKGROUND_ZVALUE = -10
79 item_factory, arg = if opts[:reloader]
80 [ReloadableItem, opts[:reloader]]
81 elsif opts[:pix_loader]
82 [AutoreloadableItem, opts[:pix_loader]]
87 item = item_factory.new(opts[:name], arg, opts.fetch(:parent, item_parent))
88 item.pos = opts[:pos] || Qt::PointF.new(0, 0)
89 item.z_value = opts[:z] || 0
90 item.visible = false if opts[:hidden]
94 def destroy_item(item)
95 scene.remove_item item
99 item.z_value = TEMP_ZVALUE