2 ShadowData = Struct.new(:radius, :color, :grow, :offset)
4 ShadowData.new(7.0, Qt::Color.new(0x40, 0x40, 0x50), 5, Qt::PointF.new(6, 4))
6 def with_shadow(loader, data = DEFAULT_SHADOW_DATA)
7 lambda do |piece, size|
8 isz = size * 100 / (100 + data.grow) + Qt::Point.new(0.5, 0.5)
10 data.offset.x * isz.x / 200.0,
11 data.offset.y * isz.x / 200.0)
12 img = loader[piece, isz]
13 scaled_data = ShadowData.new(data.radius * isz.x / 100.0,
17 s = shadow(img, scaled_data)
18 Qt::Painter.new(s).paint do |p|
19 dst = Qt::Rect.new((size.x - isz.x) / 2 - off.x,
20 (size.y - isz.y) / 2 - off.y,
22 p.draw_image(dst, img, Qt::Rect.new(Qt::Point.new(0, 0), isz))
31 img = Qt::Image.painted(Qt::Point.new(img.width + data.grow,
32 img.height + data.grow)) do |p|
33 px = (data.grow * 0.5 + data.offset.x).to_i
34 py = (data.grow * 0.5 + data.offset.y).to_i
36 p.composition_mode = Qt::Painter::CompositionMode_Source
37 p.fill_rect Qt::Rect.new(px, py, img.width, img.height), data.color
38 p.composition_mode = Qt::Painter::CompositionMode_DestinationAtop
39 p.draw_image Qt::Point.new(px, py), img
41 img.exp_blur(data.radius)