Theme -> Plugin.
[kaya.git] / lib / plugins / layouts / cool / cool.rb
blob772454621d8e7e07c0f54daf9e37720e75be3edd
1 require 'plugins/plugin'
3 class CoolLayout
4   include Plugin
5   
6   plugin :name => 'Layouts/Cool',
7          :keywords => %w(layout)
8         
9   # values relative to unit = 1
10   MARGIN = 0.2
11   CLOCK_WIDTH = 2.6
12   CLOCK_HEIGHT_RATIO = 0.4
13         
14   def initialize(game)
15     @game = game
16     @size = @game.size
17     @flipped = false
18   end
19         
20   def layout(rect, elements)
21     xrel = @size.x + MARGIN * 3 + CLOCK_WIDTH
22     yrel = @size.y + MARGIN * 2
23     unit = [rect.width / xrel, rect.height / yrel].min.floor
24     margin = MARGIN * unit
25     clock_width = CLOCK_WIDTH * unit
26     clock_height = clock_width * CLOCK_HEIGHT_RATIO
28     base = Qt::Point.new((rect.width - xrel * unit) / 2,
29                           (rect.height - yrel * unit) / 2)
30     
31     board_rect = Qt::Rect.new(
32       base.x + margin, base.y + margin,
33       @size.x * unit, @size.y * unit)
34     elements[:board].flip(@flipped)
35     elements[:board].set_geometry(board_rect)
37     pool_height = (board_rect.height - margin * (@game.players.size - 1)) / 
38                   @game.players.size
39     offy = base.y
40     flip = @flipped
41     @game.players.reverse.each do |player|
42       r_pool, r_clock = if flip
43         [Qt::Rect.new(
44             board_rect.right + margin,
45             offy + margin,
46             clock_width,
47             pool_height - clock_height - margin),
48           Qt::Rect.new(
49             board_rect.right + margin,
50             offy + margin + pool_height - clock_height,
51             clock_width,
52             clock_height)]
53       else
54         [Qt::Rect.new(
55             board_rect.right + margin,
56             offy + margin * 2 + clock_height,
57             clock_width,
58             pool_height - clock_height - margin),
59           Qt::Rect.new(
60             board_rect.right + margin,
61             offy + margin,
62             clock_width,
63             clock_height)]
64       end
65       unless elements[:pools].empty?
66         elements[:pools][player].flip(flip)
67         elements[:pools][player].set_geometry(r_pool)
68       end
69       elements[:clocks][player].set_geometry(r_clock)
70       offy = offy + margin + pool_height
71       flip = !flip
72     end
73   end
74   
75   def flip(value)
76     @flipped = value
77   end
78   
79   def flipped?
80     @flipped
81   end
82 end