Fixed font/image handling.
[redact.git] / lib / redact / part.rb
index c271fef5f27af986b572753ffa7ec000c8092377..c9dc87f16e81e3645ebfa2aea37073fe46538ab4 100644 (file)
@@ -1,5 +1,5 @@
 #--
-# $Id: part.rb 26 2005-04-14 19:44:49Z tilman $
+# $Id: part.rb 49 2005-06-09 17:21:05Z tilman $
 #
 # Copyright (c) 2005 Tilman Sauerbeck (tilman at code-monkey de)
 #
@@ -216,7 +216,12 @@ module Redact
                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
 
@@ -347,6 +352,7 @@ module Redact
                         "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],
@@ -386,6 +392,7 @@ module Redact
                        @id = image.id
                end
 
+               protected
                def to_eet_name
                        "Edje_Part_Image_Id"
                end
@@ -393,14 +400,28 @@ module Redact
 
        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
@@ -412,16 +433,24 @@ module Redact
                        @image = nil
                        @tweens = Tweens.new
                        @border = [0, 0, 0, 0]
+                       @border_fill_middle = true
                        @fill_smooth = true
                        @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
 
@@ -444,6 +473,7 @@ module Redact
                        @border = [r, r, t, b]
                end
 
+               protected
                def to_eet_properties
                        super.merge!(
                        {"image.id" => [@image.nil? ? -1 : @image.id],
@@ -452,6 +482,7 @@ module Redact
                         "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],
@@ -462,6 +493,16 @@ module Redact
                         "fill.rel_y" => [1.0, :double],
                         "fill.abs_y" => [0]})
                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 TextDescription < Description
@@ -509,15 +550,21 @@ module Redact
 
                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)
@@ -528,6 +575,7 @@ module Redact
                        @shadow_color = parse_hex_color(c)
                end
 
+               protected
                def to_eet_properties
                        super.merge!(
                        {"color2.r" => [@outline_color[0], :char],
@@ -551,5 +599,15 @@ module Redact
                         "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