class Rabbit::Theme::Applier
Constants
- NORMALIZED_HEIGHT
- NORMALIZED_WIDTH
-
Those constants are meaningless. :p
Public Class Methods
Source
# File lib/rabbit/theme/applier.rb, line 247 def initialize(theme, &callback) super() @theme = theme @callback = callback dirty_count_clean @match_cache = {} @current_target = nil class << slides def elements self end end end
Calls superclass method
Rabbit::Theme::Searcher::new
Public Instance Methods
Source
# File lib/rabbit/theme/applier.rb, line 332 def [](name) instance_variable_get("@#{name}") end
Source
# File lib/rabbit/theme/applier.rb, line 261 def apply_theme(name) entry = find_theme(name) src = File.open(entry.theme_file, "r:utf-8") do |f| f.read end in_theme(entry) do instance_eval(normalize_source(src), entry.theme_file) end end
Source
# File lib/rabbit/theme/applier.rb, line 307 def font_size(size) # TODO: Convert to point from pixel if wide_aspect_ratio? ((canvas.height * size) / normalized_height) else ((canvas.width * size) / normalized_width) end end
Source
# File lib/rabbit/theme/applier.rb, line 271 def make_container(ary) ElementContainer.new(self, ary) end
Source
# File lib/rabbit/theme/applier.rb, line 287 def normalized_height NORMALIZED_HEIGHT / Canvas::INTERNAL_DPI end
Source
# File lib/rabbit/theme/applier.rb, line 291 def normalized_size(s) if wide_aspect_ratio? normalized_y(s) else normalized_x(s) end end
Source
# File lib/rabbit/theme/applier.rb, line 283 def normalized_width NORMALIZED_WIDTH / Canvas::INTERNAL_DPI end
Source
# File lib/rabbit/theme/applier.rb, line 299 def normalized_x(sx) ((sx / canvas.width.to_f) * normalized_width).ceil end
Source
# File lib/rabbit/theme/applier.rb, line 303 def normalized_y(sy) ((sy / canvas.height.to_f) * normalized_height).ceil end
Source
# File lib/rabbit/theme/applier.rb, line 316 def screen_size(n) if wide_aspect_ratio? screen_y(n) else screen_x(n) end end
Source
# File lib/rabbit/theme/applier.rb, line 324 def screen_x(nx) ((canvas.width * nx) / normalized_width).ceil end
Source
# File lib/rabbit/theme/applier.rb, line 328 def screen_y(ny) ((canvas.height * ny) / normalized_height).ceil end
Source
# File lib/rabbit/theme/applier.rb, line 275 def to_container(obj) if obj.is_a?(ElementContainer) obj else make_container([obj]) end end
Private Instance Methods
Source
# File lib/rabbit/theme/applier.rb, line 477 def _match(current, *paths) last_path_index = paths.size - 1 paths.each_with_index do |path, i| current = _match_with_cache(current, path, i == last_path_index) do current = ignore_wait_block(current) unless i == last_path_index if path.nil? slides elsif path == "**" all_sub_elements(current) else if path == "*" working = current # all OK else working = current.find_all do |element| path === element end end if i != last_path_index working.inject([]) do |result, elem| if elem.respond_to?(:elements) result + elem.elements else result << elem end end else working end end end end current end
Source
# File lib/rabbit/theme/applier.rb, line 513 def _match_with_cache(current, path, last_path) key = [current, path, last_path] @match_cache[key] ||= yield @match_cache[key] end
Source
# File lib/rabbit/theme/applier.rb, line 422 def activate(name, &block) canvas.activate(name, &block) end
Source
# File lib/rabbit/theme/applier.rb, line 418 def add_gesture_action(sequence, action=Proc.new) canvas.add_gesture_action(sequence, action) end
Source
# File lib/rabbit/theme/applier.rb, line 519 def all_sub_elements(element) if element.respond_to?(:inject) if element.respond_to?(:elements) elems = element.elements else elems = element end elems.inject([]) do |result, elem| (result << elem) + all_sub_elements(elem) end else [] end end
Source
# File lib/rabbit/theme/applier.rb, line 658 def base_directory canvas.full_path(".") end
Source
# File lib/rabbit/theme/applier.rb, line 622 def connect_key(keyval, modifier=nil, flags=nil, &block) modifier ||= Gdk::ModifierType.new flags ||= Gtk::AccelFlags::VISIBLE canvas.connect_key(keyval, modifier, flags, &block) end
Source
# File lib/rabbit/theme/applier.rb, line 632 def deprecated_method(current, deprecated) format = _("%s is deprecated. Use %s instead.") message = format % [deprecated, current] warning(message) end
Source
# File lib/rabbit/theme/applier.rb, line 617 def dirtied @callback.call if @callback super end
Calls superclass method
Rabbit::DirtyCount#dirtied
Source
# File lib/rabbit/theme/applier.rb, line 628 def disconnect_key(keyval, modifier=nil) canvas.disconnect_key(keyval, modifier) end
Source
# File lib/rabbit/theme/applier.rb, line 570 def draw_frame(*args, &block) split_targets(args) do |targets, args| targets.draw_frame(*args, &block) end end
Source
# File lib/rabbit/theme/applier.rb, line 556 def draw_image_mark(*args, &block) split_targets(args) do |targets, args| image_name, *args = args image_name = find_file(image_name) targets.draw_image_mark(image_name, *args, &block) end end
Source
# File lib/rabbit/theme/applier.rb, line 550 def draw_mark(*args, &block) split_targets(args) do |targets, args| targets.draw_mark(*args, &block) end end
Source
# File lib/rabbit/theme/applier.rb, line 564 def draw_order(*args, &block) split_targets(args) do |targets, args| targets.draw_order(*args, &block) end end
Source
# File lib/rabbit/theme/applier.rb, line 646 def entity(key) Parser::Ext::Entity::TABLE[key] end
Source
# File lib/rabbit/theme/applier.rb, line 430 def find_font_family(target_name) families = font_families.grep(/#{Regexp.escape(target_name)}/i) return nil if families.empty? if families.include?(target_name) target_name else families.first end end
Source
# File lib/rabbit/theme/applier.rb, line 426 def font_families canvas.font_families.collect {|family| family.name} end
Source
# File lib/rabbit/theme/applier.rb, line 534 def ignore_wait_block(elements) elements.inject([]) do |result, element| if element.is_a?(WaitBlock) result + ignore_wait_block(element.elements) else result + [element] end end end
Source
# File lib/rabbit/theme/applier.rb, line 650 def image_element(path, properties={}) image = Parser::Ext::Image.make_image(canvas, path, properties) if image.nil? raise ImageFileDoesNotExistError.new(path) end image end
Source
# File lib/rabbit/theme/applier.rb, line 666 def image_load_path super + [base_directory].compact end
Calls superclass method
Rabbit::Theme::Searcher#image_load_path
Source
# File lib/rabbit/theme/applier.rb, line 349 def include_theme(name) begin apply_theme(name) rescue ThemeExit info($!.message) if $!.have_message? end end
Source
# File lib/rabbit/theme/applier.rb, line 544 def indent(*args, &block) split_targets(args) do |targets, args| targets.indent(*args, &block) end end
Source
# File lib/rabbit/theme/applier.rb, line 456 def match(*paths, &block) dirty targets = _match(slides, *paths) return if targets.empty? begin @current_target = make_container(targets) block.call(@current_target) ensure @current_target = nil end end
Source
# File lib/rabbit/theme/applier.rb, line 469 def method_missing(meth, *args, &block) if @current_target @current_target.__send__(meth, *args, &block) else super end end
Calls superclass method
Source
# File lib/rabbit/theme/applier.rb, line 341 def normalize_source(src) src.gsub(/(?=^|\W)@(very_)?huge_(script_)?font_size(?=$|\W)/) do |x| x = "x" x *= 2 unless $1.nil? "@#{x}_large_#{$2}font_size" end end
Source
# File lib/rabbit/theme/applier.rb, line 393 def set_background(color) canvas.background = canvas.make_color(color) end
Source
# File lib/rabbit/theme/applier.rb, line 397 def set_background_image(filename) loader = ImageLoader.new(find_file(filename)) canvas.background_image = loader.pixbuf end
Source
# File lib/rabbit/theme/applier.rb, line 440 def set_font_family(target, family=@font_family) target.prop_set("font_family", family) if family end
Source
# File lib/rabbit/theme/applier.rb, line 444 def set_font_resolution_ratio(ratio) canvas.font_resolution_ratio = ratio end
Source
# File lib/rabbit/theme/applier.rb, line 389 def set_foreground(color) canvas.foreground = canvas.make_color(color) end
Source
# File lib/rabbit/theme/applier.rb, line 410 def set_graffiti_color(color) canvas.graffiti_color = Renderer::Color.parse(color) end
Source
# File lib/rabbit/theme/applier.rb, line 414 def set_graffiti_line_width(line_width) canvas.graffiti_line_width = line_width end
Source
# File lib/rabbit/theme/applier.rb, line 406 def set_progress_background(color) canvas.progress_background = canvas.make_color(color) end
Source
# File lib/rabbit/theme/applier.rb, line 402 def set_progress_foreground(*color) canvas.progress_foreground = canvas.make_color(*color) end
Source
# File lib/rabbit/theme/applier.rb, line 385 def slides_per_page canvas.slides_per_page end
Source
# File lib/rabbit/theme/applier.rb, line 642 def span(attributes, content) tag("span", attributes, content) end
Source
# File lib/rabbit/theme/applier.rb, line 576 def split_targets(args) if args.empty? or !(args.first.is_a?(Element::Base) or args.first.is_a?(ElementContainer)) targets = @current_target else targets, *args = args end yield [to_container(targets), args] end
Source
# File lib/rabbit/theme/applier.rb, line 588 def start_auto_redraw_timer(interval) canvas.start_auto_redraw_timer(interval) end
Source
# File lib/rabbit/theme/applier.rb, line 606 def start_auto_reload_thread(interval) deprecated_method("start_auto_redraw_timer", "start_auto_reload_thread") start_auto_redraw_timer(interval) end
Source
# File lib/rabbit/theme/applier.rb, line 596 def start_auto_reload_timer(interval) deprecated_method("start_auto_redraw_timer", "start_auto_reload_timer") canvas.start_auto_redraw_timer(interval) end
For backward compatibility
Source
# File lib/rabbit/theme/applier.rb, line 591 def stop_auto_redraw_timer canvas.stop_auto_redraw_timer end
Source
# File lib/rabbit/theme/applier.rb, line 611 def stop_auto_reload_thread deprecated_method("stop_auto_redraw_timer", "stop_auto_reload_thread") stop_auto_redraw_timer end
Source
# File lib/rabbit/theme/applier.rb, line 601 def stop_auto_reload_timer deprecated_method("stop_auto_redraw_timer", "stop_auto_reload_timer") canvas.stop_auto_redraw_timer end
Source
# File lib/rabbit/theme/applier.rb, line 638 def tag(name, attributes, content) PangoMarkup.new(name, attributes, content).to_s end
Source
# File lib/rabbit/theme/applier.rb, line 381 def theme_exit(message=nil) raise ThemeExit.new(message) end
Source
# File lib/rabbit/theme/applier.rb, line 662 def theme_load_path super + [base_directory].compact end
Calls superclass method
Rabbit::Theme::Searcher#theme_load_path
Source
# File lib/rabbit/theme/applier.rb, line 337 def wide_aspect_ratio? (canvas.width / 4) > (canvas.height / 3) end