PKG_NAME = "embrace"
DATADIR = "/usr/local/share/#{PKG_NAME}/"
-class Evas::EvasObject
- def move_relative(obj, x, y)
- # FIXME investigate whether there's an easier way
- move(*obj.geometry[0..1].zip([x, y]).map { |(a, b)| a + b })
- end
-
- def center(obj)
- a = geometry
- b = obj.geometry
-
- move_relative(obj, (b[2] / 2) - (a[2] / 2),
- (b[3] / 2) - (a[3] / 2))
- end
-
- def alpha=(alpha)
- set_color(*(get_color[0..-2] << alpha))
- end
-end
-
module Embrace
VERSION = "0.0.1"
ICON_FILE = DATADIR + "l33t_MAI_envelope.png"
- MAX_ICONS = 11
class ZeroToOneAnimator < Ecore::Animator
def initialize(duration)
# an animator that runs for the specified number of seconds,
# and yields values between 0 and 255
class AlphaAnimator < ZeroToOneAnimator
- def initialize(duration, *objects)
+ def initialize(duration, object)
super(duration) do |v|
a = compute_alpha(v)
- objects.each { |o| o.alpha = a }
+ object.set_color(a, a, a, a)
end
end
@objects = [@img, @label]
@objects.each { |o| add_member(o) }
- set_color(255, 255, 255, 0)
- @img.set_color(255, 255, 255, 0)
- @label.set_color(255, 0, 0, 0)
+ set_color(0, 0, 0, 0)
@img.set_file(ICON_FILE)
@img.set_fill(0, 0, *@img.get_size)
@label.text = name
@label.set_font("VeraBd", 10)
+ a = @label.geometry
+ b = *@img.get_size
+
+ @label_offset_x = (b[0] / 2) - (a[2] / 2)
+ @label_offset_y = (b[1] / 2) - (a[3] / 2)
+
resize(*@img.get_size)
end
end
def smart_move(x, y)
- @objects.each { |o| o.move(x, y) }
+ @img.move(x, y)
- @label.center(self)
+ # center the label on the image
+ @label.move(x + @label_offset_x,
+ y + @label_offset_y)
end
def smart_resize(w, h)
end
def smart_color_set(r, g, b, a)
- @objects.each { |o| o.alpha = a }
+ @img.set_color(r, g, b, a)
+ @label.set_color(r, 0, 0, a)
end
end
super
@bg = Evas::Rectangle.new(evas)
- @bg.set_color(0, 0, 0, 8)
+ @bg.set_color(0, 0, 0, 0)
add_member(@bg)
Kernel.raise(ContainerFullError) if slots_left.zero?
Kernel.raise(ContainerLockedError) unless @add_lock_count.zero?
- i.move_relative(self, 0, 0)
+ geo = geometry
+
+ i.move(geo[0],
+ geo[1] + geo[3] % Main.instance.icon_height)
+
i.slot = next_slot
i.clip = self
i.fade_in
end
private
+ def max_icons
+ geometry.pop / Main.instance.icon_height
+ end
+
def slots_left
- MAX_ICONS - @icons.nitems - @about_to_add
+ max_icons - @icons.nitems - @about_to_add
end
def next_slot
@container.layer = -1
@container.show
- size = [@icon_dim.first, icon_height * MAX_ICONS]
+ size = [@icon_dim.first]
+
+ arg = ARGV.shift
+ if arg.nil?
+ size << icon_height * 11
+ else
+ size << arg.to_i
+ end
+
resize(*size)
set_size_min(*size)
set_size_max(*size)