X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=bin%2Fembrace;h=dc4fafc4904c2eff5a7d374190193f7d80fd0622;hb=91515591d2ece0ad027d72c525d20e199ff6a3d0;hp=f7ae62b0cf9ac72c17113b558c37a80e033e568d;hpb=b0551cddd6ab569d3ef743946b7a6720ae8bc9e7;p=embrace.git diff --git a/bin/embrace b/bin/embrace index f7ae62b..dc4fafc 100755 --- a/bin/embrace +++ b/bin/embrace @@ -17,6 +17,7 @@ # along with this program; if not, write to the Free Software Foundation, # Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. +require "evas" require "ecore" require "ecore_x" require "ecore_evas" @@ -27,29 +28,9 @@ require "embrace/imap" 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) @@ -81,10 +62,10 @@ module Embrace # 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 @@ -142,9 +123,7 @@ module Embrace @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) @@ -152,6 +131,12 @@ module Embrace @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 @@ -192,9 +177,11 @@ module Embrace 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) @@ -202,7 +189,8 @@ module Embrace 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 @@ -215,7 +203,7 @@ module Embrace super @bg = Evas::Rectangle.new(evas) - @bg.set_color(0, 0, 0, 8) + @bg.set_color(0, 0, 0, 0) add_member(@bg) @@ -243,7 +231,11 @@ module Embrace 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 @@ -328,8 +320,12 @@ module Embrace 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 @@ -358,7 +354,15 @@ module Embrace @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) @@ -390,9 +394,7 @@ module Embrace private def on_timer - return unless @server.nil? - - @server = IMAP::Session.new(@config) + @server ||= IMAP::Session.new(@config) true end