Added border_fill_middle attribute to ImageDescription.
[redact.git] / lib / redact / part.rb
index 71f982307abe1f2d2ca4a0647971f3dee7ae5f09..974a6bec8ba47d8bc7720039582b2541e56ad61a 100644 (file)
@@ -1,5 +1,5 @@
 #--
-# $Id: part.rb 5 2005-03-26 20:23:02Z tilman $
+# $Id: part.rb 29 2005-04-16 15:59:07Z tilman $
 #
 # Copyright (c) 2005 Tilman Sauerbeck (tilman at code-monkey de)
 #
@@ -31,8 +31,8 @@ module Redact
 
                include Comparable
 
-               attr_reader :collection, :id, :name, :dragable, :clip
-               attr_accessor :mouse_events, :repeat_events
+               attr_reader :collection, :id, :name, :dragable, :clip,
+                           :mouse_events, :repeat_events
 
                def initialize(collection, id, name)
                        @collection = collection
@@ -57,13 +57,19 @@ module Redact
                        @id <=> b.id
                end
 
+               def mouse_events=(val)
+                       @mouse_events = (val == true)
+               end
+
+               def repeat_events=(val)
+                       @repeat_events = (val == true)
+               end
+
                def clip=(part)
-                       if self == part
+                       if part == self
                                raise(ArgumentError, "cannot clip part to itself")
-                       elsif part.nil?
-                               @clip = nil
-                       elsif part.collection != @collection
-                               raise(ArgumentError, "parts' collections not identical")
+                       elsif !part.nil? && part.collection != @collection
+                               raise(ArgumentError, "items not in the same collection")
                        else
                                @clip = part
                        end
@@ -124,22 +130,13 @@ module Redact
        end
 
        class TextPart < Part
-               EFFECT_NONE = 0
-               EFFECT_PLAIN = 1
-               EFFECT_OUTLINE = 2
-               EFFECT_SOFT_OUTLINE = 3
-               EFFECT_SHADOW = 4
-               EFFECT_SOFT_SHADOW = 5
-               EFFECT_OUTLINE_SHADOW = 6
-               EFFECT_OUTLINE_SOFT_SHADOW = 7
-
                attr_accessor :effect
 
                def initialize(collection, id, name)
                        super
 
                        @type = TYPE_TEXT
-                       @effect = EFFECT_NONE
+                       @effect = :none
                end
 
                protected
@@ -148,7 +145,20 @@ module Redact
                end
 
                def to_eet_properties
-                       super.merge!({"effect" => [@effect, :char]})
+                       effect = case @effect
+                       when :none: 0
+                       when :plain: 1
+                       when :outline: 2
+                       when :soft_outline: 3
+                       when :shadow: 4
+                       when :soft_shadow: 5
+                       when :outline_shadow: 6
+                       when :outline_soft_shadow: 7
+                       else
+                               raise(RedactError, "invalid effect value - #{@effect}")
+                       end
+
+                       super.merge!({"effect" => [effect, :char]})
                end
        end
 
@@ -178,10 +188,10 @@ module Redact
                end
 
                def confine=(part)
-                       if part == self
+                       if part == @part
                                raise(ArgumentError, "cannot confine part to itself")
                        elsif !part.nil? && part.collection != @part.collection
-                               raise(ArgumentError, "parts' collections not identical")
+                               raise(ArgumentError, "items not in the same collection")
                        else
                                @confine = part
                        end
@@ -211,8 +221,8 @@ module Redact
        end
 
        class Description
-               attr_reader :rel
-               attr_accessor :visible
+               attr_reader :rel, :aspect, :step, :visible, :color_class
+               attr_accessor :aspect_preference
 
                def initialize(name = "default", value = 0.0)
                        @name = name.to_str.dup.freeze
@@ -221,13 +231,30 @@ module Redact
                        @align = [0.5, 0.5]
                        @min = [0, 0]
                        @max = [-1, -1]
-                       @step_x = 0
-                       @step_y = 0
+                       @step = [0, 0]
+                       @aspect = [0.0, 0.0]
+                       @aspect_preference = :none
                        @rel = [Relation.new(0.0, 0), Relation.new(1.0, -1)]
                        @color = [].fill(255, 0..3)
                        @color_class = ""
                end
 
+               def visible=(v)
+                       @visible = (v == true)
+               end
+
+               def color_class=(v)
+                       @color_class = v.to_str.dup
+               end
+
+               def set_step(x = 0, y = 0)
+                       @step = [x, y]
+               end
+
+               def set_aspect(x = 0.0, y = 0.0)
+                       @aspect = [x, y]
+               end
+
                def set_align(x = 0.5, y = 0.5)
                        @align = [x, y]
                end
@@ -271,6 +298,16 @@ module Redact
                end
 
                def to_eet_properties
+                       asp_pref = case @aspect_preference
+                       when :none: 0
+                       when :vertical: 1
+                       when :horizontal: 2
+                       when :both: 3
+                       else
+                               raise(RedactError, "invalid aspect preference value - " +
+                                     @aspect_preference.to_s)
+                       end
+
                        {"state.name" => [@name],
                         "state.value" => [@value, :double],
                         "visible" => [@visible],
@@ -280,11 +317,11 @@ module Redact
                         "min.h" => [@min[1]],
                         "max.w" => [@max[0]],
                         "max.h" => [@max[1]],
-                        "step.x" => [@step_x],
-                        "step.y" => [@step_y],
-                        "aspect.min" => [0.0, :double],
-                        "aspect.max" => [0.0, :double],
-                        "aspect.prefer" => [0, :char],
+                        "step.x" => [@step[0]],
+                        "step.y" => [@step[1]],
+                        "aspect.min" => [@aspect[0], :double],
+                        "aspect.max" => [@aspect[1], :double],
+                        "aspect.prefer" => [asp_pref, :char],
                         "rel1.relative_x" => [@rel[0].rel[0], :double],
                         "rel1.relative_y" => [@rel[0].rel[1], :double],
                         "rel1.offset_x" => [@rel[0].offset[0]],
@@ -310,6 +347,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],
@@ -349,6 +387,7 @@ module Redact
                        @id = image.id
                end
 
+               protected
                def to_eet_name
                        "Edje_Part_Image_Id"
                end
@@ -367,7 +406,7 @@ module Redact
        end
 
        class ImageDescription < Description
-               attr_reader :image, :auto_rel, :tweens
+               attr_reader :image, :auto_rel, :tweens, :border_fill_middle
 
                def initialize(name = "default", value = 0.0)
                        super
@@ -375,10 +414,15 @@ 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
 
@@ -407,6 +451,7 @@ module Redact
                        @border = [r, r, t, b]
                end
 
+               protected
                def to_eet_properties
                        super.merge!(
                        {"image.id" => [@image.nil? ? -1 : @image.id],
@@ -415,6 +460,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],
@@ -428,8 +474,7 @@ module Redact
        end
 
        class TextDescription < Description
-               attr_reader :font
-               attr_accessor :text, :font_size
+               attr_reader :font, :text, :font_size, :text_class
 
                def initialize(name = "default", value = 0.0)
                        super
@@ -447,6 +492,18 @@ module Redact
                        @text_id_text_source = -1
                end
 
+               def text=(v)
+                       @text = v.to_str.dup
+               end
+
+               def font_size=(v)
+                       @font_size = v.to_int
+               end
+
+               def text_class=(v)
+                       @text_class = v.to_str.dup
+               end
+
                def set_fit(x = false, y = false)
                        @fit = [x, y]
                end
@@ -460,7 +517,8 @@ module Redact
                end
 
                def font=(f)
-                       md = f.to_str.match(/.*\.ttf/)
+                       f = f.to_str.strip
+                       md = f.match(/.*\.ttf$/)
                        unless md.nil?
                                found = EDJE.font_dir.find { |font| font.filename == f }
                                if found.nil?
@@ -468,7 +526,7 @@ module Redact
                                end
                        end
 
-                       @font = f.dup
+                       @font = f
                end
 
                def outline_color=(c)
@@ -479,6 +537,7 @@ module Redact
                        @shadow_color = parse_hex_color(c)
                end
 
+               protected
                def to_eet_properties
                        super.merge!(
                        {"color2.r" => [@outline_color[0], :char],