Improved shogi theme. Add shadows.
[kaya.git] / lib / themes / shogi / shogi.rb
blob3ce8c768a98f3a1ad203dda9cb69f7519d53544f
1 require 'qtutils'
2 require 'themes/theme'
3 require 'themes/shadow'
5 class ShogiTheme
6   include Theme
7   include Shadower
8   
9   BASE_DIR = File.dirname(__FILE__)
10   TYPES = { :knight => 'n' }
11   NUDE_TILE = File.join(BASE_DIR, 'nude_tile.svg')
12   RATIOS = {
13     :king => 1.0,
14     :rook => 0.96,
15     :bishop => 0.93,
16     :gold => 0.9,
17     :silver => 0.9,
18     :knight => 0.86,
19     :lance => 0.83,
20     :pawn => 0.8 }
22   theme :name => 'Shogi',
23         :keywords => %w(shogi pieces)
25   def initialize(opts = {})
26     @loader = lambda do |piece, size|
27       tile = Qt::SvgRenderer.new(NUDE_TILE)
28       kanji = Qt::SvgRenderer.new(filename(piece))
29       ratio = RATIOS[piece.type] || 0.9
30       img = Qt::Image.painted(size) do |p|
31         p.scale(ratio, ratio)
32         p.translate(size * (1 - ratio) / 2)
33         if piece.color == :white
34           p.translate(size)
35           p.rotate(180)
36         end
37         tile.render(p)
38         kanji.render(p)
39       end
40     end
41     if opts.has_key? :shadow
42       @loader = with_shadow(@loader)
43     end
44   end
46   def pixmap(piece, size)
47     @loader[piece, size].to_pix
48   end
49   
50   def filename(piece)
51     color = piece.color.to_s[0, 1]
52 #     type = TYPES[piece.type] || piece.type.to_s[0, 1]
53     name = piece.type.to_s + ".svg"
54     File.join(BASE_DIR, name)
55   end
56 end