rabbit 2.0.2 → 2.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README +1 -1
- data/Rakefile +1 -1
- data/data/account.kou.gpg +0 -0
- data/data/locale/en/LC_MESSAGES/rabbit.mo +0 -0
- data/data/locale/fr/LC_MESSAGES/rabbit.mo +0 -0
- data/data/locale/ja/LC_MESSAGES/rabbit.mo +0 -0
- data/doc/_config.yml +2 -2
- data/doc/_includes/en.menu.html +1 -1
- data/doc/_includes/ja.menu.html +1 -1
- data/doc/_layouts/skeleton.html +2 -2
- data/doc/en/development.rd +2 -2
- data/doc/en/install/homebrew.rd +11 -158
- data/doc/en/install/index.rd +1 -16
- data/doc/en/install/windows.rd +1 -1
- data/doc/en/news.rd +70 -1
- data/doc/en/usage/rabbit.rd +1 -1
- data/doc/en/users.rd +8 -8
- data/doc/images/screenshots/en/blue-circle.png +0 -0
- data/doc/images/screenshots/en/clear-blue-raw.png +0 -0
- data/doc/images/screenshots/en/clear-blue.png +0 -0
- data/doc/images/screenshots/en/cozmixng-raw.png +0 -0
- data/doc/images/screenshots/en/cozmixng.png +0 -0
- data/doc/images/screenshots/en/dark-gradation-raw.png +0 -0
- data/doc/images/screenshots/en/dark-gradation.png +0 -0
- data/doc/images/screenshots/en/day-white.png +0 -0
- data/doc/images/screenshots/en/debian-raw.png +0 -0
- data/doc/images/screenshots/en/debian.png +0 -0
- data/doc/images/screenshots/en/green-circle.png +0 -0
- data/doc/images/screenshots/en/night-black.png +0 -0
- data/doc/images/screenshots/en/rabbit-raw.png +0 -0
- data/doc/images/screenshots/en/rabbit.png +0 -0
- data/doc/images/screenshots/en/ranguba-raw.png +0 -0
- data/doc/images/screenshots/en/ranguba.png +0 -0
- data/doc/images/screenshots/en/red-frame.png +0 -0
- data/doc/images/screenshots/en/ruby-gnome2-raw.png +0 -0
- data/doc/images/screenshots/en/ruby-gnome2.png +0 -0
- data/doc/images/screenshots/en/rubykaigi2011-raw.png +0 -0
- data/doc/images/screenshots/en/rubykaigi2011.png +0 -0
- data/doc/images/screenshots/ja/blue-circle.png +0 -0
- data/doc/images/screenshots/ja/clear-blue-raw.png +0 -0
- data/doc/images/screenshots/ja/clear-blue.png +0 -0
- data/doc/images/screenshots/ja/cozmixng-raw.png +0 -0
- data/doc/images/screenshots/ja/cozmixng.png +0 -0
- data/doc/images/screenshots/ja/dark-gradation-raw.png +0 -0
- data/doc/images/screenshots/ja/dark-gradation.png +0 -0
- data/doc/images/screenshots/ja/day-white.png +0 -0
- data/doc/images/screenshots/ja/debian-raw.png +0 -0
- data/doc/images/screenshots/ja/debian.png +0 -0
- data/doc/images/screenshots/ja/green-circle.png +0 -0
- data/doc/images/screenshots/ja/night-black.png +0 -0
- data/doc/images/screenshots/ja/rabbit-raw.png +0 -0
- data/doc/images/screenshots/ja/rabbit.png +0 -0
- data/doc/images/screenshots/ja/ranguba-raw.png +0 -0
- data/doc/images/screenshots/ja/ranguba.png +0 -0
- data/doc/images/screenshots/ja/red-frame.png +0 -0
- data/doc/images/screenshots/ja/ruby-gnome2-raw.png +0 -0
- data/doc/images/screenshots/ja/ruby-gnome2.png +0 -0
- data/doc/images/screenshots/ja/rubykaigi2011-raw.png +0 -0
- data/doc/images/screenshots/ja/rubykaigi2011.png +0 -0
- data/doc/index.html.en +1 -1
- data/doc/index.html.ja +1 -1
- data/doc/ja/development.rd +6 -7
- data/doc/ja/install/homebrew.rd +10 -156
- data/doc/ja/install/index.rd +1 -15
- data/doc/ja/install/macports.rd +1 -1
- data/doc/ja/news.rd +69 -1
- data/doc/ja/usage/rabbit-slide.rd +5 -5
- data/doc/ja/usage/rabbit-theme.rd +2 -2
- data/doc/ja/usage/rabbit.rd +1 -1
- data/doc/ja/users.rd +10 -10
- data/lib/rabbit/author-configuration.rb +18 -12
- data/lib/rabbit/command/rabbit-slide.rb +1 -1
- data/lib/rabbit/command/rabbit.rb +3 -3
- data/lib/rabbit/element/block.rb +2 -2
- data/lib/rabbit/element/text-renderer.rb +3 -1
- data/lib/rabbit/html/template.erb +1 -1
- data/lib/rabbit/image/dia.rb +19 -20
- data/lib/rabbit/image/eps.rb +1 -1
- data/lib/rabbit/parser/image.rb +14 -6
- data/lib/rabbit/renderer/engine/cairo.rb +27 -12
- data/lib/rabbit/renderer/print/cairo.rb +10 -2
- data/lib/rabbit/slide-configuration.rb +27 -14
- data/lib/rabbit/soap/base.rb +1 -1
- data/lib/rabbit/task/slide.rb +71 -33
- data/lib/rabbit/task/theme.rb +61 -19
- data/lib/rabbit/theme/clear-blue/clear-blue.rb +17 -0
- data/lib/rabbit/theme/color-circle-block-quote/color-circle-block-quote.rb +2 -0
- data/lib/rabbit/theme/default-block-quote/default-block-quote.rb +162 -75
- data/lib/rabbit/theme/image/image.rb +3 -1
- data/lib/rabbit/theme/rabbit-block-quote/rabbit-block-quote.rb +2 -0
- data/lib/rabbit/theme/title-on-image-toolkit/title-on-image-toolkit.rb +25 -13
- data/lib/rabbit/utils.rb +16 -3
- data/lib/rabbit/version.rb +1 -1
- data/po/en/rabbit.po +182 -180
- data/po/fr/rabbit.po +182 -180
- data/po/ja/rabbit.po +184 -169
- data/po/rabbit.pot +176 -164
- data/rabbit.gemspec +63 -0
- data/test/image/test-dia.rb +54 -0
- data/test/image/test-eps.rb +41 -0
- data/test/rabbit-test-utils.rb +22 -20
- data/test/run-test.rb +20 -6
- data/test/test-slide-configuration.rb +2 -0
- metadata +8 -3
|
@@ -19,7 +19,7 @@ RubyGems.orgやSlideShareへの公開をコマンド一発で実行できます
|
|
|
19
19
|
Rabbitでよいスライドを作成し、よい発表をし、そして、共有しましょう!
|
|
20
20
|
|
|
21
21
|
TODO: RubyGems.orgに公開したスライドは
|
|
22
|
-
((<URL:http://slide.rabbit-
|
|
22
|
+
((<URL:http://slide.rabbit-shocker.org/>))で閲覧できるようになる予定で
|
|
23
23
|
す。
|
|
24
24
|
|
|
25
25
|
== 雛形作成
|
|
@@ -92,21 +92,21 @@ TODO: すべてのパラメーターの説明を書く。
|
|
|
92
92
|
あなたの情報
|
|
93
93
|
--name=NAME 新しいスライドの作者の名前
|
|
94
94
|
(例: --name="Kouhei Sutou")
|
|
95
|
-
(デフォルト:
|
|
95
|
+
(デフォルト: nil)
|
|
96
96
|
(省略可能)
|
|
97
97
|
--email=EMAIL 新しいスライドの作者のEメールアドレス
|
|
98
98
|
(例: --email=kou@cozmixng.org)
|
|
99
|
-
(デフォルト:
|
|
99
|
+
(デフォルト: nil)
|
|
100
100
|
(省略可能)
|
|
101
101
|
--rubygems-user=USER RubyGems.orgのアカウント
|
|
102
102
|
RubyGems.orgにスライドを公開するときに使います
|
|
103
103
|
(例: --rubygems-user=kou)
|
|
104
|
-
(デフォルト:
|
|
104
|
+
(デフォルト: nil)
|
|
105
105
|
(省略可能)
|
|
106
106
|
--slideshare-user=USER SlideShareのアカウント
|
|
107
107
|
SlideShareにスライドを公開するときに使います
|
|
108
108
|
(例: --slideshare-user=kou)
|
|
109
|
-
(デフォルト:
|
|
109
|
+
(デフォルト: nil)
|
|
110
110
|
(省略可能)
|
|
111
111
|
--speaker-deck-user=USER Speaker Deckのアカウント
|
|
112
112
|
Speaker Deckにスライドを公開するときに使います
|
|
@@ -19,7 +19,7 @@ rabbit-themeはテーマの雛形を生成するコマンドです。
|
|
|
19
19
|
Rabbitでよいテーマを作成し、よい発表をし、そして、共有しましょう!
|
|
20
20
|
|
|
21
21
|
TODO: RubyGems.orgに公開したスライドは
|
|
22
|
-
((<URL:http://theme.rabbit-
|
|
22
|
+
((<URL:http://theme.rabbit-shocker.org/>))で閲覧できるようになる予定で
|
|
23
23
|
す。
|
|
24
24
|
|
|
25
25
|
== 雛形作成
|
|
@@ -63,7 +63,7 @@ RubyGems.orgで公開する場合は((%--name%))、((%--email%))、
|
|
|
63
63
|
(省略可能)
|
|
64
64
|
--email=EMAIL 新しいスライドの作者のEメールアドレス
|
|
65
65
|
(例: --email=kou@cozmixng.org)
|
|
66
|
-
(デフォルト: lavie@rabbit-
|
|
66
|
+
(デフォルト: lavie@rabbit-shocker.org)
|
|
67
67
|
(省略可能)
|
|
68
68
|
--rubygems-user=USER RubyGems.orgのアカウント
|
|
69
69
|
RubyGems.orgにスライドを公開するときに使います
|
data/doc/ja/usage/rabbit.rd
CHANGED
|
@@ -103,7 +103,7 @@ WindowsユーザならRDファイルをbin/rabbit.batにドラッグアンド
|
|
|
103
103
|
いてもソースを再読み込みしません.
|
|
104
104
|
|
|
105
105
|
例:
|
|
106
|
-
% rabbit --type uri https://raw.github.com/
|
|
106
|
+
% rabbit --type uri https://raw.github.com/rabbit-shocker/rabbit/master/sample/rabbit-implementation.rd
|
|
107
107
|
とか
|
|
108
108
|
% rabbit --type uri ftp://.../XXX.rd
|
|
109
109
|
とか
|
data/doc/ja/users.rd
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
---
|
|
2
2
|
layout: ja
|
|
3
|
-
title: ショッカー -
|
|
3
|
+
title: Rabbitショッカー - ユーザーのみなさん
|
|
4
4
|
---
|
|
5
|
-
== ショッカーとは?
|
|
5
|
+
== Rabbitショッカーとは?
|
|
6
6
|
|
|
7
|
-
Rabbit
|
|
7
|
+
Rabbitユーザのコミュニティとして「Rabbitショッカー」があります。
|
|
8
8
|
|
|
9
9
|
== 活動の場
|
|
10
10
|
|
|
11
|
-
ショッカーの活動場所はプレゼンテーションの場以外にもいくつか
|
|
11
|
+
Rabbitショッカーの活動場所はプレゼンテーションの場以外にもいくつか
|
|
12
12
|
あります。
|
|
13
13
|
|
|
14
14
|
=== メーリングリスト
|
|
15
15
|
|
|
16
|
-
ショッカーのためにrabbit-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
Rabbitショッカーのためにrabbit-shockerというメーリングリストがあります。
|
|
17
|
+
(((<アーカイブ
|
|
18
|
+
|URL:http://www.cozmixng.org/~w3ml/index.rb/rabbit-shocker/>)))
|
|
19
19
|
|
|
20
20
|
以下のようなメールを送るとメーリングリストへ参加できます。
|
|
21
21
|
|
|
22
|
-
To: rabbit-
|
|
22
|
+
To: rabbit-shocker@ml.cozmixng.org
|
|
23
23
|
Cc: kou@cozmixng.org
|
|
24
24
|
Subject: イー
|
|
25
25
|
|
|
26
|
-
ショッカーに入りたいです!
|
|
26
|
+
Rabbitショッカーに入りたいです!
|
|
27
27
|
|
|
28
28
|
また、Rabbitを使っていると強制的に加入させられることもありま
|
|
29
29
|
す。
|
|
@@ -62,7 +62,7 @@ Rabbitユーザのコミュニティとして「ショッカー」がありま
|
|
|
62
62
|
|
|
63
63
|
# LLDN後
|
|
64
64
|
|
|
65
|
-
* ((<かくたに|URL:http://kakutani.com/>))さん(((
|
|
65
|
+
* ((<かくたに|URL:http://kakutani.com/>))さん(((*Rabbitショッカー代表*))/もっともRabbitを使いこないしているユーザの一人/もっともRabbitを宣伝してくれるユーザの一人)
|
|
66
66
|
* 中長期的な目標としてパッチを投げられるようになりたいです。
|
|
67
67
|
* ((<『ビルドツールを知ろう』|URL:http://kakutani.com/articles/esm-tokyo-study/buildtool/>))
|
|
68
68
|
* ((<『self.wake_up :from => "The Matrix"』|URL:http://kakutani.com/articles/xpmatsuri2005/>))
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
require "yaml"
|
|
18
18
|
|
|
19
19
|
require "rabbit/gettext"
|
|
20
|
+
require "rabbit/logger"
|
|
20
21
|
require "rabbit/path-manipulatable"
|
|
21
22
|
|
|
22
23
|
module Rabbit
|
|
@@ -29,17 +30,13 @@ module Rabbit
|
|
|
29
30
|
attr_accessor :rubygems_user, :slideshare_user, :speaker_deck_user
|
|
30
31
|
def initialize(logger=nil)
|
|
31
32
|
@logger = logger || Logger.default
|
|
32
|
-
|
|
33
|
-
@name = nil
|
|
34
|
-
@email = nil
|
|
35
|
-
@rubygems_user = nil
|
|
36
|
-
@slideshare_user = nil
|
|
37
|
-
@speaker_deck_user = nil
|
|
33
|
+
clear
|
|
38
34
|
end
|
|
39
35
|
|
|
40
36
|
def load
|
|
41
37
|
return unless File.exist?(path)
|
|
42
38
|
conf = YAML.load(File.read(path))
|
|
39
|
+
clear
|
|
43
40
|
merge!(conf)
|
|
44
41
|
rescue
|
|
45
42
|
format = _("Failed to read author configuration: %s: %s")
|
|
@@ -56,13 +53,22 @@ module Rabbit
|
|
|
56
53
|
@logger.error(format % [path, $!.message])
|
|
57
54
|
end
|
|
58
55
|
|
|
56
|
+
def clear
|
|
57
|
+
@markup_language = nil
|
|
58
|
+
@name = nil
|
|
59
|
+
@email = nil
|
|
60
|
+
@rubygems_user = nil
|
|
61
|
+
@slideshare_user = nil
|
|
62
|
+
@speaker_deck_user = nil
|
|
63
|
+
end
|
|
64
|
+
|
|
59
65
|
def merge!(conf)
|
|
60
|
-
@markup_language
|
|
61
|
-
@name
|
|
62
|
-
@email
|
|
63
|
-
@rubygems_user
|
|
64
|
-
@slideshare_user
|
|
65
|
-
@speaker_deck_user
|
|
66
|
+
@markup_language ||= conf["markup_language"]
|
|
67
|
+
@name ||= conf["name"]
|
|
68
|
+
@email ||= conf["email"]
|
|
69
|
+
@rubygems_user ||= conf["rubygems_user"]
|
|
70
|
+
@slideshare_user ||= conf["slideshare_user"]
|
|
71
|
+
@speaker_deck_user ||= conf["speaker_deck_user"]
|
|
66
72
|
end
|
|
67
73
|
|
|
68
74
|
def to_hash
|
|
@@ -441,7 +441,7 @@ EOR
|
|
|
441
441
|
end
|
|
442
442
|
|
|
443
443
|
def slide_source_image(source, generator)
|
|
444
|
-
lavie = "https://raw.github.com/
|
|
444
|
+
lavie = "https://raw.github.com/rabbit-shocker/rabbit/master/sample/lavie.png"
|
|
445
445
|
options = {
|
|
446
446
|
:relative_height => 100,
|
|
447
447
|
}
|
|
@@ -106,7 +106,7 @@ module Rabbit
|
|
|
106
106
|
options.print = false
|
|
107
107
|
options.print_out_filename = nil
|
|
108
108
|
options.slides_per_page = 1
|
|
109
|
-
options.draw_scaled_image =
|
|
109
|
+
options.draw_scaled_image = nil
|
|
110
110
|
options.margin_left = nil
|
|
111
111
|
options.margin_right = nil
|
|
112
112
|
options.margin_top = nil
|
|
@@ -328,7 +328,7 @@ module Rabbit
|
|
|
328
328
|
parser.on("--[no-]draw-scaled-image",
|
|
329
329
|
_("Draw scaled image."),
|
|
330
330
|
_("Better look for displaying but lesser look for printing."),
|
|
331
|
-
"(
|
|
331
|
+
"(auto)") do |boolean|
|
|
332
332
|
options.draw_scaled_image = boolean
|
|
333
333
|
end
|
|
334
334
|
|
|
@@ -807,7 +807,7 @@ module Rabbit
|
|
|
807
807
|
parse(canvas, source)
|
|
808
808
|
canvas.print
|
|
809
809
|
canvas.quit
|
|
810
|
-
rescue Rabbit::NoPrintSupportError
|
|
810
|
+
rescue ::Rabbit::NoPrintSupportError
|
|
811
811
|
@logger.error($!.message)
|
|
812
812
|
end
|
|
813
813
|
|
data/lib/rabbit/element/block.rb
CHANGED
|
@@ -12,11 +12,11 @@ module Rabbit
|
|
|
12
12
|
include BlockElement
|
|
13
13
|
include BlockHorizontalCentering
|
|
14
14
|
|
|
15
|
-
attr_reader :cite, :title
|
|
15
|
+
attr_reader :cite, :title, :avatar
|
|
16
16
|
|
|
17
17
|
def initialize(elems=[], prop={})
|
|
18
18
|
super(elems)
|
|
19
|
-
%w(cite title).each do |name|
|
|
19
|
+
%w(cite title avatar).each do |name|
|
|
20
20
|
instance_variable_set("@#{name}", prop[name])
|
|
21
21
|
end
|
|
22
22
|
end
|
|
@@ -208,7 +208,9 @@ module Rabbit
|
|
|
208
208
|
layout.set_width(-1)
|
|
209
209
|
end
|
|
210
210
|
layout.set_alignment(@align)
|
|
211
|
-
|
|
211
|
+
indent = @indent
|
|
212
|
+
indent = indent.value if indent.respond_to?(:value)
|
|
213
|
+
layout.set_indent(indent)
|
|
212
214
|
layout.set_spacing(@spacing * Pango::SCALE)
|
|
213
215
|
layout.justify = @justify
|
|
214
216
|
layout.context_changed
|
data/lib/rabbit/image/dia.rb
CHANGED
|
@@ -16,39 +16,38 @@ module Rabbit
|
|
|
16
16
|
|
|
17
17
|
class << self
|
|
18
18
|
def match?(filename)
|
|
19
|
+
return true if File.extname(filename).downcase.end_with?(".dia")
|
|
19
20
|
File.open(filename) do |f|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
first_line = f.gets
|
|
22
|
+
second_line = f.gets
|
|
23
|
+
return false unless second_line
|
|
24
|
+
return false unless first_line.start_with?("<?xml")
|
|
25
|
+
return false unless second_line.start_with?("<dia:diagram")
|
|
26
|
+
true
|
|
26
27
|
end
|
|
27
|
-
rescue ArgumentError
|
|
28
|
-
false
|
|
29
28
|
end
|
|
30
29
|
end
|
|
31
30
|
|
|
32
|
-
def_delegators(:@
|
|
33
|
-
def_delegators(:@
|
|
34
|
-
def_delegators(:@
|
|
35
|
-
def_delegators(:@
|
|
36
|
-
def_delegators(:@
|
|
37
|
-
def_delegators(:@
|
|
31
|
+
def_delegators(:@svg_loader, :keep_ratio, :keep_ratio=)
|
|
32
|
+
def_delegators(:@svg_loader, :pixbuf, :internal_pixbuf)
|
|
33
|
+
def_delegators(:@svg_loader, :width, :height)
|
|
34
|
+
def_delegators(:@svg_loader, :original_width, :original_height)
|
|
35
|
+
def_delegators(:@svg_loader, :resize, :ensure_resize)
|
|
36
|
+
def_delegators(:@svg_loader, :update_size)
|
|
38
37
|
|
|
39
38
|
def initialize(filename, keep_ratio)
|
|
40
|
-
|
|
39
|
+
init_svg_loader(filename, keep_ratio)
|
|
41
40
|
super
|
|
42
41
|
end
|
|
43
42
|
|
|
44
43
|
private
|
|
45
|
-
def
|
|
46
|
-
@
|
|
47
|
-
args = ["--export=#{@
|
|
48
|
-
args << "--filter=
|
|
44
|
+
def init_svg_loader(filename, keep_ratio)
|
|
45
|
+
@svg_file = Tempfile.new(["rabbit-loader-dia", ".svg"])
|
|
46
|
+
args = ["--export=#{@svg_file.path}"]
|
|
47
|
+
args << "--filter=svg"
|
|
49
48
|
args << filename
|
|
50
49
|
if DIA_COMMANDS.any? {|dia| run(dia, *args)}
|
|
51
|
-
@
|
|
50
|
+
@svg_loader = SVG.new(@svg_file.path, keep_ratio)
|
|
52
51
|
else
|
|
53
52
|
raise DiaCanNotHandleError.new("dia #{args.join(' ')}",
|
|
54
53
|
DIA_COMMANDS)
|
data/lib/rabbit/image/eps.rb
CHANGED
data/lib/rabbit/parser/image.rb
CHANGED
|
@@ -11,20 +11,28 @@ module Rabbit
|
|
|
11
11
|
|
|
12
12
|
class << self
|
|
13
13
|
def match?(source)
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
options = {
|
|
15
|
+
:prefix => "image-parser-match",
|
|
16
|
+
:source => source,
|
|
17
|
+
}
|
|
18
|
+
Rabbit::TemporaryFile.create(options) do |input|
|
|
19
|
+
begin
|
|
16
20
|
Rabbit::ImageLoader.new(input.path)
|
|
21
|
+
true
|
|
22
|
+
rescue Rabbit::ImageLoadError
|
|
23
|
+
false
|
|
17
24
|
end
|
|
18
|
-
true
|
|
19
|
-
rescue Rabbit::ImageLoadError
|
|
20
|
-
false
|
|
21
25
|
end
|
|
22
26
|
end
|
|
23
27
|
end
|
|
24
28
|
|
|
25
29
|
include Element
|
|
26
30
|
def parse
|
|
27
|
-
|
|
31
|
+
options = {
|
|
32
|
+
:prefix => "image-parser-parse",
|
|
33
|
+
:source => @source,
|
|
34
|
+
}
|
|
35
|
+
TemporaryFile.create(options) do |image|
|
|
28
36
|
@image = image
|
|
29
37
|
@canvas << ImageTitleSlide.new(@image.path)
|
|
30
38
|
end
|
|
@@ -251,20 +251,9 @@ module Rabbit
|
|
|
251
251
|
|
|
252
252
|
def draw_pixbuf(pixbuf, x, y, params={})
|
|
253
253
|
x, y = from_screen(x, y)
|
|
254
|
-
|
|
255
|
-
draw_scaled_pixbuf = params[:draw_scaled_pixbuf]
|
|
256
|
-
draw_scaled_pixbuf = @draw_scaled_image if draw_scaled_pixbuf.nil?
|
|
257
|
-
width = (params[:width] || pixbuf.width).to_f
|
|
258
|
-
height = (params[:height] || pixbuf.height).to_f
|
|
259
|
-
if draw_scaled_pixbuf and
|
|
260
|
-
[width, height] != [pixbuf.width, pixbuf.height]
|
|
261
|
-
pixbuf = pixbuf.scale(width, height)
|
|
262
|
-
end
|
|
263
254
|
@context.save do
|
|
264
255
|
@context.translate(x, y)
|
|
265
|
-
|
|
266
|
-
@context.scale(width / pixbuf.width, height / pixbuf.height)
|
|
267
|
-
end
|
|
256
|
+
pixbuf = scale_pixbuf(pixbuf, params)
|
|
268
257
|
@context.set_source_pixbuf(pixbuf, 0, 0)
|
|
269
258
|
@context.paint(params[:alpha])
|
|
270
259
|
end
|
|
@@ -272,6 +261,32 @@ module Rabbit
|
|
|
272
261
|
_draw_reflected_pixbuf(pixbuf, x, y, params[:reflect])
|
|
273
262
|
end
|
|
274
263
|
|
|
264
|
+
def scale_pixbuf(pixbuf, params)
|
|
265
|
+
draw_scaled_pixbuf = params[:draw_scaled_pixbuf]
|
|
266
|
+
draw_scaled_pixbuf = @draw_scaled_image if draw_scaled_pixbuf.nil?
|
|
267
|
+
width = (params[:width] || pixbuf.width).to_f
|
|
268
|
+
height = (params[:height] || pixbuf.height).to_f
|
|
269
|
+
|
|
270
|
+
return pixbuf if [width, height] == [pixbuf.width, pixbuf.height]
|
|
271
|
+
case draw_scaled_image
|
|
272
|
+
when true
|
|
273
|
+
return pixbuf.scale(width, height)
|
|
274
|
+
when false
|
|
275
|
+
@context.scale(width / pixbuf.width, height / pixbuf.height)
|
|
276
|
+
return pixbuf
|
|
277
|
+
else
|
|
278
|
+
scales = [4, 3, 2]
|
|
279
|
+
scales.each do |scale|
|
|
280
|
+
if width * scale < pixbuf.width and height * scale < pixbuf.height
|
|
281
|
+
@context.scale(1.0 / scale, 1.0 / scale)
|
|
282
|
+
return pixbuf.scale(width * scale, height * scale)
|
|
283
|
+
end
|
|
284
|
+
end
|
|
285
|
+
@context.scale(width / pixbuf.width, height / pixbuf.height)
|
|
286
|
+
return pixbuf
|
|
287
|
+
end
|
|
288
|
+
end
|
|
289
|
+
|
|
275
290
|
def rsvg_available?
|
|
276
291
|
if @@rsvg_available.nil?
|
|
277
292
|
@@rsvg_available = RSVG.cairo_available?
|
|
@@ -85,8 +85,10 @@ module Rabbit
|
|
|
85
85
|
|
|
86
86
|
private
|
|
87
87
|
def init_paper
|
|
88
|
-
|
|
89
|
-
|
|
88
|
+
default_width_mm = 360
|
|
89
|
+
default_height_mm = 270
|
|
90
|
+
@page_width = @paper_width || default_width_mm
|
|
91
|
+
@page_height = @paper_height || default_height_mm
|
|
90
92
|
end
|
|
91
93
|
|
|
92
94
|
def init_color
|
|
@@ -95,6 +97,12 @@ module Rabbit
|
|
|
95
97
|
@background = make_color(@background_color)
|
|
96
98
|
end
|
|
97
99
|
|
|
100
|
+
def init_dpi
|
|
101
|
+
super
|
|
102
|
+
@x_dpi = 300
|
|
103
|
+
@y_dpi = 300
|
|
104
|
+
end
|
|
105
|
+
|
|
98
106
|
def create_context(output=nil)
|
|
99
107
|
surface = find_surface(filename, output)
|
|
100
108
|
surface.set_fallback_resolution(@x_dpi, @y_dpi)
|
|
@@ -19,6 +19,7 @@ require "time"
|
|
|
19
19
|
require "yaml"
|
|
20
20
|
|
|
21
21
|
require "rabbit/gettext"
|
|
22
|
+
require "rabbit/logger"
|
|
22
23
|
require "rabbit/author-configuration"
|
|
23
24
|
require "rabbit/path-manipulatable"
|
|
24
25
|
|
|
@@ -31,23 +32,18 @@ module Rabbit
|
|
|
31
32
|
|
|
32
33
|
attr_accessor :logger
|
|
33
34
|
attr_accessor :id, :base_name, :tags, :presentation_date
|
|
34
|
-
attr_accessor :licenses
|
|
35
|
+
attr_accessor :licenses, :slideshare_id, :speaker_deck_id
|
|
35
36
|
attr_writer :version
|
|
36
37
|
attr_accessor :author
|
|
37
38
|
def initialize(logger=nil)
|
|
38
39
|
@logger = logger || Logger.default
|
|
39
|
-
|
|
40
|
-
@base_name = nil
|
|
41
|
-
@tags = []
|
|
42
|
-
@presentation_date = nil
|
|
43
|
-
@version = nil
|
|
44
|
-
@licenses = []
|
|
45
|
-
@author = nil
|
|
40
|
+
clear
|
|
46
41
|
end
|
|
47
42
|
|
|
48
43
|
def load
|
|
49
44
|
return unless File.exist?(path)
|
|
50
45
|
conf = YAML.load(File.read(path))
|
|
46
|
+
clear
|
|
51
47
|
merge!(conf)
|
|
52
48
|
rescue
|
|
53
49
|
format = _("Failed to read slide configuration: %s: %s")
|
|
@@ -64,13 +60,28 @@ module Rabbit
|
|
|
64
60
|
@logger.error(format % [config_path, $!.message])
|
|
65
61
|
end
|
|
66
62
|
|
|
63
|
+
def clear
|
|
64
|
+
@id = nil
|
|
65
|
+
@base_name = nil
|
|
66
|
+
@tags = []
|
|
67
|
+
@presentation_date = nil
|
|
68
|
+
@version = nil
|
|
69
|
+
@licenses = []
|
|
70
|
+
@slideshare_id = nil
|
|
71
|
+
@speaker_deck_id = nil
|
|
72
|
+
@author = nil
|
|
73
|
+
end
|
|
74
|
+
|
|
67
75
|
def merge!(conf)
|
|
68
|
-
@id
|
|
69
|
-
@base_name
|
|
70
|
-
@
|
|
71
|
-
@
|
|
72
|
-
@
|
|
73
|
-
@
|
|
76
|
+
@id ||= conf["id"]
|
|
77
|
+
@base_name ||= conf["base_name"]
|
|
78
|
+
@presentation_date ||= conf["presentation_date"]
|
|
79
|
+
@version ||= conf["version"]
|
|
80
|
+
@slideshare_id ||= conf["slideshare_id"]
|
|
81
|
+
@speaker_deck_id ||= conf["speaker_deck_id"]
|
|
82
|
+
|
|
83
|
+
@tags |= (conf["tags"] || [])
|
|
84
|
+
@licenses |= (conf["licenses"] || [])
|
|
74
85
|
|
|
75
86
|
@author = AuthorConfiguration.new(@logger)
|
|
76
87
|
@author.merge!(conf["author"] || {})
|
|
@@ -84,6 +95,8 @@ module Rabbit
|
|
|
84
95
|
"presentation_date" => @presentation_date,
|
|
85
96
|
"version" => version,
|
|
86
97
|
"licenses" => @licenses,
|
|
98
|
+
"slideshare_id" => @slideshare_id,
|
|
99
|
+
"speaker_deck_id" => @speaker_deck_id,
|
|
87
100
|
}
|
|
88
101
|
config["author"] = @author.to_hash if @author
|
|
89
102
|
config
|