#--
-# $Id: part.rb 26 2005-04-14 19:44:49Z tilman $
-#
# Copyright (c) 2005 Tilman Sauerbeck (tilman at code-monkey de)
#
# Permission is hereby granted, free of charge, to any person obtaining
"dragable.y" => [@dragable.enabled[1], :char],
"dragable.step_y" => [@dragable.step[1]],
"dragable.count_y" => [@dragable.count[1]],
+ "dragable.events_id" => [-1],
"dragable.counfine_id" => [confine_id]} # not a typo!
end
@type = TYPE_TEXT
@effect = :none
+ @use_alternate_font_metrics = false
+ end
+
+ def use_alternate_font_metrics=(b)
+ @use_alternate_font_metrics = (b == true)
end
protected
raise(RedactError, "invalid effect value - #{@effect}")
end
- super.merge!({"effect" => [effect, :char]})
+ super.merge!(
+ {"effect" => [effect, :char],
+ "use_alternate_font_metrics" => [@use_alternate_font_metrics, :char]})
end
end
attr_reader :rel, :to_id, :offset
def initialize(rel, offset)
- @rel = [rel, rel]
+ @rel = [rel.to_f, rel.to_f]
@to_id = [-1, -1]
@offset = [offset, offset]
end
def set_rel(x, y)
- @rel = [x, y]
+ @rel = [x.to_f, y.to_f]
end
def set_offset(x, y)
end
def to=(part)
- @to_id = [].fill(part.nil? ? -1 : part.id, 0..1)
+ self.set_to(part)
+ end
+
+ def set_to(part_x, part_y = part_x)
+ @to_id = [part_x.nil? ? -1 : part_x.id,
+ part_y.nil? ? -1 : part_y.id]
end
end
@color_class = ""
end
+ def inherit(other)
+ unless other.is_a?(Description)
+ raise(ArgumentError, "Cannot inherit from description")
+ end
+
+ prot = ["@name", "@value"]
+
+ (instance_variables - prot).each do |v|
+ n = other.instance_variable_get(v.intern)
+ n = n.dup rescue n
+ instance_variable_set(v.intern, n)
+ end
+ end
+
def visible=(v)
@visible = (v == true)
end
"border.r" => [0],
"border.t" => [0],
"border.b" => [0],
+ "border.no_fill" => [false],
"fill.smooth" => [true],
"fill.pos_rel_x" => [0.0, :double],
"fill.pos_abs_x" => [0],
@id = image.id
end
+ protected
def to_eet_name
"Edje_Part_Image_Id"
end
class Tweens < Array
def <<(im)
- image = EDJE.image_dir.find { |e| e.filename == im }
+ im2 = find_image(im.to_str.strip)
+ raise(RedactError, "cannot find image - #{im}") if im2.nil?
+
+ image = EDJE.image_dir.find { |e| e.filename == im2 }
if image.nil?
- image = ImageDirectoryEntry.new(im)
+ image = ImageDirectoryEntry.new(im, im2)
EDJE.image_dir << image
end
super(Tween.new(image))
end
+
+ private
+ def find_image(file)
+ [".", OPTIONS.image_dir].each do |d|
+ f2 = File.join(d, file)
+ return Pathname.new(f2).cleanpath.to_s if File.file?(f2)
+ end
+
+ nil
+ end
+
end
class ImageDescription < Description
- attr_reader :image, :auto_rel, :tweens, :border_fill_middle
+ attr_reader :image, :auto_rel, :tweens, :border_fill_middle,
+ :fill_smooth, :fill_pos_rel, :fill_pos_abs,
+ :fill_rel, :fill_abs
def initialize(name = "default", value = 0.0)
super
@image = nil
@tweens = Tweens.new
@border = [0, 0, 0, 0]
+ @border_fill_middle = true
+
@fill_smooth = true
+ @fill_pos_rel = [0.0, 0.0]
+ @fill_pos_abs = [0, 0]
+ @fill_rel = [1.0, 1.0]
+ @fill_abs = [0, 0]
+
@auto_rel = false
end
+ def border_fill_middle=(var)
+ @border_fill_middle = (var == true)
+ end
+
def image=(im)
- return if !@image.nil? && im == @image.filename
+ im2 = find_image(im.to_str.strip)
+ raise(RedactError, "cannot find image - #{im}") if im2.nil?
+
+ return if !@image.nil? && im2 == @image.filename
- @image = EDJE.image_dir.find { |e| e.filename == im }
+ @image = EDJE.image_dir.find { |e| e.filename == im2 }
if @image.nil?
- @image = ImageDirectoryEntry.new(im)
+ @image = ImageDirectoryEntry.new(im, im2)
EDJE.image_dir << @image
end
end
def set_border(l = 0, r = 0, t = 0, b = 0)
- @border = [r, r, t, b]
+ @border = [l, r, t, b]
+ end
+
+ def fill_smooth=(v)
+ @fill_smooth = (v == true)
end
+ def set_fill_pos_rel(x, y)
+ @fill_pos_rel = [x.to_f, y.to_f]
+ end
+
+ def set_fill_pos_abs(x, y)
+ @fill_pos_abs = [x.to_i, y.to_i]
+ end
+
+ def set_fill_rel(x, y)
+ @fill_rel = [x.to_f, y.to_f]
+ end
+
+ def set_fill_abs(x, y)
+ @fill_abs = [x.to_i, y.to_i]
+ end
+
+ protected
def to_eet_properties
super.merge!(
{"image.id" => [@image.nil? ? -1 : @image.id],
"border.r" => [@border[1]],
"border.t" => [@border[2]],
"border.b" => [@border[3]],
+ "border.no_fill" => [!@border_fill_middle],
"fill.smooth" => [@fill_smooth],
- "fill.pos_rel_x" => [0.0, :double],
- "fill.pos_abs_x" => [0],
- "fill.rel_x" => [1.0, :double],
- "fill.abs_x" => [0],
- "fill.pos_rel_y" => [0.0, :double],
- "fill.pos_abs_y" => [0],
- "fill.rel_y" => [1.0, :double],
- "fill.abs_y" => [0]})
+ "fill.pos_rel_x" => [@fill_pos_rel[0], :double],
+ "fill.pos_abs_x" => [@fill_pos_abs[0]],
+ "fill.rel_x" => [@fill_rel[0], :double],
+ "fill.abs_x" => [@fill_abs[0]],
+ "fill.pos_rel_y" => [@fill_pos_rel[1], :double],
+ "fill.pos_abs_y" => [@fill_pos_abs[1]],
+ "fill.rel_y" => [@fill_rel[1], :double],
+ "fill.abs_y" => [@fill_abs[1]]})
+ end
+
+ private
+ def find_image(file)
+ [".", OPTIONS.image_dir].each do |d|
+ f2 = File.join(d, file)
+ return Pathname.new(f2).cleanpath.to_s if File.file?(f2)
+ end
+
+ nil
end
end
@font_size = 0
@fit = [false, false]
@text_min = [false, false]
+ @text_max = [false, false]
@text_align = [0.5, 0.5]
@text_id_source = -1
@text_id_text_source = -1
@text_min = [x, y]
end
+ def set_text_max(x = false, y = false)
+ @text_max = [x, y]
+ end
+
def set_text_align(x = 0.5, y = 0.5)
@text_align = [x, y]
end
def font=(f)
f = f.to_str.strip
- md = f.match(/.*\.ttf/)
+ md = f.match(/.*\.ttf$/)
unless md.nil?
- found = EDJE.font_dir.find { |font| font.filename == f }
+ f2 = find_font(f)
+ raise(RedactError, "cannot find font - #{f}") if f2.nil?
+
+ found = EDJE.font_dir.find { |font| font.filename == f2 }
if found.nil?
- EDJE.font_dir << FontDirectoryEntry.new(f)
+ EDJE.font_dir << FontDirectoryEntry.new(f, f2)
+ @font = EDJE.font_dir.last.alias
+ else
+ @font = found.alias
end
+ else
+ @font = f
end
-
- @font = f
end
def outline_color=(c)
@shadow_color = parse_hex_color(c)
end
+ protected
def to_eet_properties
super.merge!(
{"color2.r" => [@outline_color[0], :char],
"text.fit_y" => [@fit[1]],
"text.min_x" => [@text_min[0]],
"text.min_y" => [@text_min[1]],
+ "text.max_x" => [@text_max[0]],
+ "text.max_y" => [@text_max[1]],
"text.align.x" => [@text_align[0], :double],
"text.align.y" => [@text_align[1], :double],
"text.id_source" => [@text_id_source],
"text.id_text_source" => [@text_id_text_source]})
end
+
+ private
+ def find_font(file)
+ [".", OPTIONS.font_dir].each do |d|
+ f2 = File.join(d, file)
+ return Pathname.new(f2).cleanpath.to_s if File.file?(f2)
+ end
+
+ nil
+ end
end
end