File: cairo_sub_parts_helper.rb

package info (click to toggle)
mikutter 3.0.7%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 9,396 kB
  • ctags: 1,916
  • sloc: ruby: 16,619; sh: 117; makefile: 27
file content (69 lines) | stat: -rw-r--r-- 1,502 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# -*- coding: utf-8 -*-
miquire :lib, 'uithreadonly'
miquire :core, 'userconfig'

require 'gtk2'
require 'cairo'

module Gdk::SubPartsHelper

  def initialize(*args)
    @subparts_height = nil
    super end

  # 今サポートされている全てのSubPartsを配列で返す
  # ==== Return
  # Subpartsクラスの配列
  def self.subparts_classes
    @subparts_classes ||= [] end

  def subparts
    @subparts ||= Gdk::SubPartsHelper.subparts_classes.map{ |klass| klass.new(self) } end

  def render_parts(context)
    context.save{
      mainpart_height
      context.translate(0, mainpart_height)
      subparts.each{ |part|
        context.save{
          part.render(context) }
        context.translate(0, part.height) } }
    self end

  def subparts_height
    result = _subparts_height
    reset_height if(@subparts_height != result)
    @subparts_height = result end

  private

  def _subparts_height
    subparts.inject(0){ |sum, part| sum + part.height } end end

class Gdk::SubParts
  include UiThreadOnly

  attr_reader :helper

  def self.regist
    index = where_should_insert_it(self.to_s, Gdk::SubPartsHelper.subparts_classes.map(&:to_s), UserConfig[:subparts_order] || [])
    Gdk::SubPartsHelper.subparts_classes.insert(index, self)
  end

  def initialize(helper)
    @helper = helper
  end

  def render(context)
  end

  def width
    helper.width end

  def height
    0 end

  def dummy_context
    Gdk::Pixmap.new(nil, 1, 1, @helper.color).create_cairo_context end

end