bigboard r7411 - in trunk: . bigboard bigboard/core bigboard/stocks bigboard/stocks/files bigboard/stocks/mail bigboard/stocks/people bigboard/stocks/search bigboard/stocks/self bigboard/themes/default bigboard/themes/fedora



Author: otaylor
Date: Sat Jun 28 00:15:52 2008
New Revision: 7411
URL: http://svn.gnome.org/viewvc/bigboard?rev=7411&view=rev

Log:
Change the UI for the not visible mode:
 - Small "tabs" are visible at the slide of screen
 - Tabs slide out on mouse-over

Make the top-level window have an alpha-channel when a compositing 
 manager is running

Shape the toplevel window with a square for each stock when a compositing
 manager is not running

Stock MailStock PeopleStock FileStock: Add a concept of "active", that keeps
  stocks from sliding back, and mark stock as active while a slideout is up

SearchEntry SelfStock search.xml SearchStock: Remove the Search "Stock",
  make it just a SearchEntry class that the SelfStock can use

DockWindow: Dock window base class

ExpandBox: Class for doing interpolating transition animations

themes/fedora/*.css themes/fedora/*.svg: Redo Fedora using SVG background images


Added:
   trunk/bigboard/core/search_entry.py
      - copied, changed from r7400, /trunk/bigboard/stocks/search/SearchStock.py
   trunk/bigboard/dock_window.py
   trunk/bigboard/expand_box.py
   trunk/bigboard/themes/fedora/grippy.png   (contents, props changed)
   trunk/bigboard/themes/fedora/stock-bottom-alpha.svg
   trunk/bigboard/themes/fedora/stock-bottom-solid.svg
   trunk/bigboard/themes/fedora/stock-header-left-alpha.svg
   trunk/bigboard/themes/fedora/stock-header-left-solid.svg
   trunk/bigboard/themes/fedora/stock-header-right-alpha.svg
   trunk/bigboard/themes/fedora/stock-header-right-prelight-alpha.svg
   trunk/bigboard/themes/fedora/stock-header-right-prelight-solid.svg
   trunk/bigboard/themes/fedora/stock-header-right-solid.svg
   trunk/bigboard/themes/fedora/stock-hidden-alpha.svg
   trunk/bigboard/themes/fedora/stock-hidden-solid.svg
   trunk/bigboard/themes/fedora/stock-main.svg
   trunk/bigboard/themes/fedora/theme-alpha.css
   trunk/bigboard/themes/fedora/theme-common.css
   trunk/bigboard/themes/fedora/theme-solid.css
Removed:
   trunk/bigboard/stocks/search/
   trunk/bigboard/stocks/search.xml
   trunk/bigboard/themes/fedora/theme.css
Modified:
   trunk/bigboard/core/exchange.py
   trunk/bigboard/core/panel.py
   trunk/bigboard/core/stock_holder.py
   trunk/bigboard/stock.py
   trunk/bigboard/stocks/files/FilesStock.py
   trunk/bigboard/stocks/mail/MailStock.py
   trunk/bigboard/stocks/people/PeopleStock.py
   trunk/bigboard/stocks/self.xml
   trunk/bigboard/stocks/self/SelfStock.py
   trunk/bigboard/theme_manager.py
   trunk/bigboard/themes/default/   (props changed)
   trunk/bigboard/themes/fedora/   (props changed)
   trunk/main.py

Modified: trunk/bigboard/core/exchange.py
==============================================================================
--- trunk/bigboard/core/exchange.py	(original)
+++ trunk/bigboard/core/exchange.py	Sat Jun 28 00:15:52 2008
@@ -126,7 +126,6 @@
             stylesheet = None
 
         return StockHolder(module, self.__widget_environ, pymodule=pymodule,
-                           is_notitle=(module.srcurl in self.__hardcoded_urls),
                            panel=kwargs['panel'], stylesheet=stylesheet)
         
     def render_url(self, url, **kwargs):

Modified: trunk/bigboard/core/panel.py
==============================================================================
--- trunk/bigboard/core/panel.py	(original)
+++ trunk/bigboard/core/panel.py	Sat Jun 28 00:15:52 2008
@@ -8,6 +8,7 @@
 import hippo
 
 from bigboard.big_widgets import Button, Header, Sidebar
+from bigboard.dock_window import DockWindow
 from bigboard.globals import BUS_NAME_STR, GCONF_PREFIX
 from bigboard.libbig.gutil import *
 import bigboard.keybinder
@@ -15,6 +16,11 @@
 from bigboard.stock import Stock
 from bigboard.theme_manager import ThemeManager
 
+try:
+    import bigboard.bignative as bignative
+except:
+    import bignative
+    
 from exchange import Exchange
 
 _logger = logging.getLogger("bigboard.Panel")
@@ -57,74 +63,92 @@
     def __idle_undo_visible(self):
         gconf.client_get_default().set_bool(GCONF_PREFIX + 'visible', True)
         return False        
+
+class StocksBox(hippo.CanvasBox, hippo.CanvasItem):
+    def __init__(self, *args, **kwargs):
+        hippo.CanvasBox.__init__(self, *args, **kwargs)
+        self.__hidden_width = 0
+        self.__visible_width = 0
+    
+    def do_get_width_request(self):
+        minimum, natural = hippo.CanvasBox.do_get_width_request(self)
+
+        max_hidden_width = 0
+        max_visible_width = 0
+
+        for child in self.get_children():
+            hidden_width = child.get_hidden_width()
+            visible_width = child.get_visible_width()
+            max_hidden_width = max(max_hidden_width, hidden_width)
+            max_visible_width = max(max_visible_width, visible_width)
+
+        if max_hidden_width != self.__hidden_width:
+            self.__hidden_width = max_hidden_width
+            self.notify('hidden-width')
+            
+        if max_visible_width != self.__visible_width:
+            self.__visible_width = max_visible_width
+            self.notify('visible-width')
+            
+        return minimum, natural
+
+    def get_hidden_width(self):
+        return self.__hidden_width
+    
+    def get_visible_width(self):
+        return self.__visible_width
+
+    hidden_width = gobject.property(type=int, getter=get_hidden_width)
+    visible_width = gobject.property(type=int, getter=get_visible_width)
+
+gobject.type_register(StocksBox)
     
 class Panel(dbus.service.Object):
     def __init__(self, bus_name):
         dbus.service.Object.__init__(self, bus_name, '/bigboard/panel')
           
         _logger.info("constructing")
-                
+
+        self.__visible = False
         self.__popped_out = False
         self.__shell = None
         
         gconf_client = gconf.client_get_default()
-        self._dw = Sidebar(GCONF_PREFIX + 'visible')
-        gconf_client.notify_add(GCONF_PREFIX + 'orientation', self.__sync_orient)        
+        
+        self._dw = DockWindow()
+        self._dw.connect_after('size-allocate', self.__on_dock_window_size_allocate)
+        self._dw.connect_after('realize', self.__on_dock_window_realize)
+        
+        self.__theme_mgr = ThemeManager.getInstance()
+        self.__theme_mgr.connect('theme-changed', self.__sync_theme)
+        self.__sync_theme()
+
+        self._dw.set_composited(self.__theme_mgr.composited)
+
+        gconf_client.notify_add(GCONF_PREFIX + 'orientation', self.__sync_orient)
         self.__sync_orient()            
 
         self.__keybinding = gconf_client.get_string('/apps/bigboard/focus_key')
         if self.__keybinding:
             bigboard.keybinder.tomboy_keybinder_bind(self.__keybinding, self.__on_focus)
     
-        self.__autohide_id = 0
-        
         self._holders = {} ## metainfo.srcurl to StockHolder
 
-        self._canvas = canvas = hippo.Canvas()
-        self._dw.get_content().add(self._canvas)
-        
-        self._main_box = hippo.CanvasBox(border_right=1, border_color=0x999999FF, padding_bottom=4)
-        self._canvas.set_root(self._main_box)
+        self._main_box = hippo.CanvasBox()
 
-        self._header_box = Header()
-        self._header_box.connect("button-press-event", self.__on_header_buttonpress)             
+        self._dw.set_root(self._main_box)
 
-        self.__unpopout_button = Button(label='Hide', label_ypadding=-2)
-        self.__unpopout_button.set_property('yalign', hippo.ALIGNMENT_CENTER)
-        self.__unpopout_button.connect("activated", lambda button: self.__do_unpopout())
-        self._header_box.append(self.__unpopout_button, hippo.PACK_END)
-     
         self._title = hippo.CanvasText(classes='header', text="My Desktop", font="Bold", xalign=hippo.ALIGNMENT_START, padding_left=8)
      
-        self._header_box.append(self._title, hippo.PACK_EXPAND)
-        
         self._size_button = None
         
-        self._main_box.append(self._header_box)
-        
-        self._stocks_box = hippo.CanvasBox(spacing=4)
+        self._stocks_box = StocksBox(spacing=4)
+        self._stocks_box.connect('notify::hidden-width', self.__on_hidden_width_changed)
+        self._stocks_box.connect('notify::visible-width', self.__on_visible_width_changed)
         
         self._main_box.append(self._stocks_box)
         
-        self.__theme_mgr = ThemeManager.getInstance()
-        self.__theme_mgr.connect('theme-changed', self.__sync_theme)
-        self.__sync_theme()    
-
-        self._canvas.get_context().connect('style-changed', self.__sync_opacity)
-        self.__sync_opacity()
-        
-        gconf_client.notify_add(GCONF_PREFIX + 'expand', self._sync_size)
-        self._sync_size()
-        
-        try:
-            self.__screensaver_proxy = dbus.SessionBus().get_object('org.gnome.ScreenSaver', '/org/gnome/ScreenSaver')
-            self.__screensaver_proxy.connect_to_signal('SessionIdleChanged',
-                                                       self.__on_session_idle_changed)
-        except dbus.DBusException, e:
-            _logger.warn("Couldn't find screensaver")
-            pass
-        
-        self.__exchange = Exchange(['builtin://self.xml', 'builtin://search.xml'])
+        self.__exchange = Exchange(['builtin://self.xml'])
         self.__exchange.connect("listings-changed", lambda *args: self.__sync_listing())
         
         # These are hardcoded as it isn't really sensible to remove them
@@ -133,33 +157,30 @@
         for metainfo in hardcoded_metas:
             self.__append_metainfo(metainfo, notitle=True)    
         self.__self_stock = self._holders[self.__hardcoded_stocks[0]].get_pymodule()
-        self.__search_stock = self._holders[self.__hardcoded_stocks[1]].get_pymodule()
+        self.__self_stock.set_panel_visible(self.__visible)
+        self.__self_stock.connect('toggle_visible', self.__on_toggle_visible)
         gobject.idle_add(self.__sync_listing)
 
-        if self.__self_stock.info_loaded:
-            self.__initial_appearance()
-        else:
-            self.__self_stock.connect('info-loaded', lambda *args: self.__initial_appearance())
-
         ## visible=True means we never hide, visible=False means we "autohide" and popout
         ## when the hotkey or applet is used
         gconf_client.notify_add(GCONF_PREFIX + 'visible', self.__sync_visible_mode)
         self.__sync_visible_mode()
         
+        if not self.__self_stock.info_loaded:
+            self.__self_stock.connect('info-loaded', self.__on_info_loaded)
+        else:
+            self._dw.show()
+
     @log_except(_logger)
-    def __initial_appearance(self):
+    def __on_info_loaded(self, stock):
         ## This function is where we show the canvas internally; we only want this to 
         ## happen after we've loaded information intially to avoid showing a partially-loaded
         ## state.
-        self._canvas.show() 
-        self.__queue_strut()
-        self.__idle_show_we_exist()
-        
-    @log_except()
-    def __on_session_idle_changed(self, isidle):
-        if not isidle:
-            self.__idle_show_we_exist()
+        self._dw.show()
 
+    def __on_toggle_visible(self, stock):
+        self.__set_visible_mode(not self.__visible)
+        
     def __on_header_buttonpress(self, box, e):
         _logger.debug("got shell header click: %s %s %s", e, e.button, e.modifiers)
         if e.button == 2:
@@ -183,35 +204,36 @@
 
     def __append_metainfo(self, metainfo, **kwargs):
         try:
-            exchange = self._holders[metainfo.srcurl]
+            holder = self._holders[metainfo.srcurl]
         except KeyError, e:
-            exchange = self.__exchange.render(metainfo, panel=self, **kwargs)
-            _logger.debug("rendered %s: %s", metainfo.srcurl, exchange)
-            if exchange:
-                self._holders[metainfo.srcurl] = exchange
-        if not exchange:
+            holder = self.__exchange.render(metainfo, panel=self, **kwargs)
+            _logger.debug("rendered %s: %s", metainfo.srcurl, holder)
+            if holder:
+                self._holders[metainfo.srcurl] = holder
+        if not holder:
             _logger.debug("failed to load stock from %s", metainfo.srcurl)
             return
-        _logger.debug("adding stock %s", exchange)
-        self._stocks_box.append(exchange)
+        _logger.debug("adding stock %s", holder)
+        holder.set_hidden(not self.__visible)
+        self._stocks_box.append(holder)
         
     @log_except(_logger)
     def __sync_listing(self):
         _logger.debug("doing stock listing sync")
         new_listed = list(self.__exchange.get_listed())
         new_listed_srcurls = map(lambda mi: mi.srcurl, new_listed)
-        for exchange in list(self._stocks_box.get_children()):
-            if exchange.get_metainfo().srcurl in self.__hardcoded_stocks:
+        for holder in list(self._stocks_box.get_children()):
+            if holder.get_metainfo().srcurl in self.__hardcoded_stocks:
                 continue
 
-            _logger.debug("unrendering %s", exchange)
+            _logger.debug("unrendering %s", holder)
             
-            self._stocks_box.remove(exchange)
+            self._stocks_box.remove(holder)
 
-            if exchange.get_metainfo().srcurl not in new_listed_srcurls:
-                _logger.debug("removing %s", exchange)                
-                del self._holders[exchange.get_metainfo().srcurl]
-                exchange.on_delisted()
+            if holder.get_metainfo().srcurl not in new_listed_srcurls:
+                _logger.debug("removing %s", holder)                
+                del self._holders[holder.get_metainfo().srcurl]
+                holder.on_delisted()
             
         for metainfo in new_listed:
             self.__append_metainfo(metainfo)
@@ -228,6 +250,18 @@
     def action_taken(self):
         _logger.debug("action taken")
         self.__leave_popped_out_state(immediate=True)
+
+    def __on_hidden_width_changed(self, stocks_box, paramspec):
+        _logger.debug("Hidden width is now %s", stocks_box.hidden_width)
+        if not self.__visible:
+            _logger.debug("Setting strut size to %s", stocks_box.hidden_width)
+            self._dw.strut_size = stocks_box.hidden_width
+        
+    def __on_visible_width_changed(self, stocks_box, paramspec):
+        _logger.debug("Visible width is now %s", stocks_box.visible_width)
+        if self.__visible:
+            _logger.debug("Setting strut size to %s", stocks_box.visible_width)
+            self._dw.strut_size = stocks_box.visible_width
         
     @log_except()
     def __sync_orient(self, *args):
@@ -239,49 +273,11 @@
         else:
             gravity = gtk.gdk.GRAVITY_EAST
         self._dw.set_gravity(gravity)
-        self.__queue_strut()
-        
-    @log_except()
-    def _toggle_size(self):
-        _logger.debug("toggling size")
-        expanded = gconf.client_get_default().get_bool(GCONF_PREFIX + 'expand')
-        gconf.client_get_default().set_bool(GCONF_PREFIX + 'expand', not expanded)
-            
-    def _sync_size(self, *args):
-        # This function should be deleted basically; we no longer support size changes.
-                   
-        self._canvas.set_size_request(Stock.SIZE_BULL_CONTENT_PX, 42)
-        
-        _logger.debug("queuing resize")
-        self._dw.queue_resize()  
-        _logger.debug("queuing strut")
-        self.__queue_strut()
-        _logger.debug("queuing strut complete")
         
     def __sync_theme(self, *args):
         theme = self.__theme_mgr.get_theme()
-        self._canvas.set_theme(theme)
-
-    def __sync_opacity(self, *args):
-        style = self._canvas.get_context().get_style()
-        opacity = style.get_double('opacity', False)
-        if opacity == None:
-            opacity = 1.0
+        self._dw.set_theme(theme)
 
-        self._dw.set_opacity(opacity)
-
-    @log_except()
-    def __idle_do_strut(self):
-        _logger.debug("setting strut in idle")
-        self._dw.do_set_wm_strut()
-        return False
-
-    def __queue_strut(self):
-        # TODO - this is kind of gross; we need the strut change to happen after
-        # the resize, but that appears to be an ultra-low priority internally
-        # so we can't easily queue something directly after.
-        call_timeout_once(250, self.__idle_do_strut)
-        
     ## There are two aspects to the sidebar state:
     ## the "visible" gconf key is like the old gnome-panel "autohide"
     ## preference. i.e. if !visible, the sidebar is normally collapsed
@@ -292,6 +288,7 @@
 
     def __notify_stocks_of_popped_out(self):
         for e in self._holders.values():
+            e.set_hidden(not self.__popped_out)
             e.on_popped_out_changed(self.__popped_out)
 
     ## Shows the sidebar
@@ -299,10 +296,8 @@
         if not self.__popped_out:
             _logger.debug("popping out")
 
-            self._dw.show()
             # we would prefer to need this, if iconify() worked on dock windows
             #self._dw.deiconify()
-            self.__queue_strut()
             self.__popped_out = True
 
             self.__notify_stocks_of_popped_out()
@@ -312,52 +307,41 @@
     ## Hides the sidebar, possibly after a delay, only if visible mode is False
     def __leave_popped_out_state(self, immediate=False):
         vis = gconf.client_get_default().get_bool(GCONF_PREFIX + 'visible')
-        if self.__popped_out and not vis and self.__autohide_id == 0:
-            _logger.debug("enqueued autohide timeout")            
-            self.__autohide_id = gobject.timeout_add(immediate and 1 or 1500, self.__idle_do_hide) 
+        if self.__popped_out and not vis:
+            _logger.debug("unpopping out")
             
-    @log_except()
-    def __idle_do_hide(self):
-        _logger.debug("in idle hide")
-        self.__autohide_id = 0
-        vis = gconf.client_get_default().get_bool(GCONF_PREFIX + 'visible')
-        if vis or not self.__popped_out:
-            return  
-
-        _logger.debug("unpopping out")
-        self.__popped_out = False
-        ## would be better to iconify, not hide - hide withdraws the
-        ## window, iconify should leave bigboard in the Ctrl+Alt+Tab
-        ## order.
-        ## Unfortunately, it appears metacity disallows minimize on
-        ## dock windows.
-        #self._dw.iconify()
-        self._dw.hide()
-        self.__queue_strut()
-
-        self.__notify_stocks_of_popped_out()        
+            self.__popped_out = False
+            
+            self.__notify_stocks_of_popped_out()        
 
-        self.EmitPoppedOutChanged()
+            self.EmitPoppedOutChanged()
 
+    def __sync_popped_out(self):
+        if self.__visible and not self.__popped_out:
+            self.__enter_popped_out_state()
+        elif not self.__visible and self.__popped_out:
+            self.__leave_popped_out_state()
+        
     ## syncs our current state to a change in the gconf setting for visible mode
     @log_except()
     def __sync_visible_mode(self, *args):
-        ## unpopout button is only visible if unpopout is allowed
-        vis = gconf.client_get_default().get_bool(GCONF_PREFIX + 'visible')
-        self.__unpopout_button.set_visible(not vis)
-        
-        if vis and not self.__popped_out:
-            self.__enter_popped_out_state()
-        elif not vis:
-            self.__leave_popped_out_state()
-            if not gconf.client_get_default().get_bool(GCONF_PREFIX + 'first_time_minimize_seen'):
-                dialog = FirstTimeMinimizeDialog(True)
-                dialog.show_all()
-
-        ## this is needed because the Sidebar widget knows about the 'visible' gconf key,
-        ## and if we're not in visible mode (in autohide mode), it never sets the strut.
-        ## However the Sidebar widget does not itself listen for changes on the gconf key.
-        self.__queue_strut()
+        visible = gconf.client_get_default().get_bool(GCONF_PREFIX + 'visible')
+
+        if visible != self.__visible:
+            self.__visible = visible
+            self.__self_stock.set_panel_visible(visible)
+
+            if self.__visible:
+                self._dw.strut_size = self._stocks_box.visible_width
+            else:
+                self._dw.strut_size = self._stocks_box.hidden_width
+
+            if not visible:
+                if not gconf.client_get_default().get_bool(GCONF_PREFIX + 'first_time_minimize_seen'):
+                    dialog = FirstTimeMinimizeDialog(True)
+                    dialog.show_all()
+
+            self.__sync_popped_out()
         
     ## Pops out the sidebar, and focuses it (if the sidebar is in visible mode, only has to focus)
     def __do_popout(self, xtimestamp):
@@ -370,7 +354,7 @@
         ## focus even if we were already shown
         _logger.debug("presenting with ts %s", xtimestamp)
         self._dw.present_with_time(xtimestamp)
-        self.__search_stock.focus()
+        self.__self_stock.focus_search()
 
     ## Hides the sidebar, only if not in visible mode
     def __do_unpopout(self):
@@ -389,6 +373,26 @@
         if setting != vis:
             gconf.client_get_default().set_bool(GCONF_PREFIX + 'visible', setting)
 
+    def __set_dock_window_shape(self):
+        if self._dw.composited:
+            return
+        
+        region = gtk.gdk.Region()
+        
+        for holder in self._stocks_box.get_children():
+            x, y = holder.get_context().translate_to_widget(holder)
+            width, height = holder.get_current_size()
+            region.union_with_rect(gtk.gdk.Rectangle(x, y, width, height))
+
+        bignative.window_shape_set_region(self._dw.window, region)
+
+    def __on_dock_window_size_allocate(self, dock_window, allocation):
+        if dock_window.window:
+            self.__set_dock_window_shape()
+            
+    def __on_dock_window_realize(self, dock_window):
+        self.__set_dock_window_shape()
+
     @dbus.service.method(BUS_IFACE_PANEL)
     def EmitPoppedOutChanged(self):
         _logger.debug("got emitPoppedOutChanged method call")        

Copied: trunk/bigboard/core/search_entry.py (from r7400, /trunk/bigboard/stocks/search/SearchStock.py)
==============================================================================
--- /trunk/bigboard/stocks/search/SearchStock.py	(original)
+++ trunk/bigboard/core/search_entry.py	Sat Jun 28 00:15:52 2008
@@ -14,9 +14,9 @@
 if __name__ == '__main__':
     def logger(domain, priority, msg):
         print msg
-    libbig.logutil.init('DEBUG', ['bigboard.search.SearchStock'], '')
+    libbig.logutil.init('DEBUG', ['bigboard.SearchEntry'], '')
         
-_logger = logging.getLogger("bigboard.stocks.SearchStock")
+_logger = logging.getLogger("bigboard.SearchEntry")
 
 _ICON_SIZE = 48
 
@@ -522,29 +522,6 @@
         else:
             return False
     
-class SearchStock(Stock):
-    """Search.  It's what's for dinner."""
-
-    def __init__(self, *args, **kwargs):
-        super(SearchStock,self).__init__(*args, **kwargs)
-        
-        self.__box = hippo.CanvasBox()
-        
-        self.__entry = SearchEntry()
-        self.__widget = hippo.CanvasWidget(widget=self.__entry)
-        self.__box.append(self.__widget)
-        self.__empty_box = CanvasVBox()
-
-        ## notify the main panel when a search result is chosen
-        self.__entry.connect('match-selected', lambda obj: self._panel.action_taken())
-
-    def get_content(self, size):
-        return size == self.SIZE_BULL and self.__box or self.__empty_box
-
-    def focus(self):
-        _logger.debug("doing focus")
-        self.__entry.grab_focus()
-            
 if __name__ == '__main__':
 
     class TestSearchResult(search.SearchResult):

Modified: trunk/bigboard/core/stock_holder.py
==============================================================================
--- trunk/bigboard/core/stock_holder.py	(original)
+++ trunk/bigboard/core/stock_holder.py	Sat Jun 28 00:15:52 2008
@@ -1,9 +1,15 @@
 import logging
+import math
+
+import cairo
 import gobject
+import gtk
 import hippo
 
-from bigboard.big_widgets import Arrow, Header, ThemeManager
+from bigboard.big_widgets import Arrow, Header
+from bigboard.expand_box import ExpandBox
 from bigboard.stock import Stock
+from bigboard.theme_manager import ThemeManager
 
 _logger = logging.getLogger("bigboard.StockHolder")
 
@@ -15,31 +21,126 @@
         self.widget.show_all() 
         self.set_property('widget', self.widget)
 
-class HeaderButton(hippo.CanvasBox):
-    def __init__(self):
-        hippo.CanvasBox.__init__(self, box_width=40, xalign=hippo.ALIGNMENT_END,
-                                 background_color=0x00000001)
-        self.set_clickable(True)
-        self.append(hippo.CanvasText(text=" "))
-
-    def do_paint_below_children(self, cr, dmgbox):
-        area = self.get_background_area()
-        self.get_style().paint(cr, 'more-button', area.x, area.y, area.width, area.height)
-        
-gobject.type_register(HeaderButton)
-         
 class Separator(hippo.CanvasBox):
     def __init__(self):
         hippo.CanvasBox.__init__(self, border_top=1, border_color=0x999999FF)
         
-class StockHolder(hippo.CanvasBox):
+class RotatedText(hippo.CanvasBox):
+    text = gobject.property(type=str)
+
+    def __create_layout(self, cr=None):
+        layout =  self.create_layout()
+        layout.set_text(self.text)
+        layout.set_font_description(self.get_style().get_font())
+        if not cr:
+            surface = self.create_surface(cairo.CONTENT_COLOR_ALPHA, 1, 1)
+            cr = gtk.gdk.CairoContext(cairo.Context(surface))
+            cr.rotate(- math.pi / 2)
+
+        cr.update_layout(layout)
+        
+        return layout
+
+    def do_paint_below_children(self, cr, rect):
+        cr2 = gtk.gdk.CairoContext(cr)
+        layout = self.__create_layout(cr2)
+        style = self.get_style()
+        hippo.cairo_set_source_rgba32(cr2, style.get_foreground_color())
+
+        width, height = layout.get_pixel_size()
+        cr2.translate(0, width)
+        cr2.rotate(- math.pi / 2)
+        
+        cr2.move_to(0, 0)
+        cr2.show_layout(layout)
+
+    def do_get_content_width_request(self):
+        width, height = self.__create_layout().get_pixel_size()
+        return height, height
+    
+    def do_get_content_height_request(self, width):
+        width, height = self.__create_layout().get_pixel_size()
+        return width, width
+
+class StackLayout(gobject.GObject,hippo.CanvasLayout):
+    def do_set_box(self, box):
+        self.__box = box
+        
+    def do_get_width_request(self):
+        max_item_min_width = 0
+        max_item_natural_width = 0
+
+        if self.__box.active:
+            active_child = self.__box.find_box_child(self.__box.active)
+
+        for child in self.__box.get_layout_children():
+            (min_width, natural_width) = child.get_width_request()
+            if child == active_child:
+                max_item_min_width = max(max_item_min_width, min_width)
+                max_item_natural_width = max(max_item_natural_width, natural_width)
+
+        return max_item_min_width, max_item_natural_width
+
+    def do_get_height_request(self, width):
+        max_item_min_height = 0
+        max_item_natural_height = 0
+
+        if self.__box.active:
+            active_child = self.__box.find_box_child(self.__box.active)
+
+        for child in self.__box.get_layout_children():
+            if child == active_child:
+                (min_height, natural_height) = child.get_height_request(width)
+            else:
+                (_, natural_width) = child.get_width_request()
+                (min_height, natural_height) = child.get_height_request(natural_width)
+            
+            max_item_min_height = max(max_item_min_height, min_height)
+            max_item_natural_height = max(max_item_natural_height, natural_height)
+
+        return max_item_min_height, max_item_natural_height
+
+    def do_allocate(self, x, y, width, height, requested_width, requested_height, origin_changed):
+        if self.__box.active:
+            active_child = self.__box.find_box_child(self.__box.active)
+
+        for child in self.__box.get_layout_children():
+            if child == active_child:
+                child.allocate(x, y, width, height, origin_changed)
+            else:
+                child.allocate(0, 0, 0, 0, origin_changed)
+    
+gobject.type_register(StackLayout)
+
+class Stack(hippo.CanvasBox, hippo.CanvasItem):
+    __gtype_name__ = 'Stack'
+    
+    def __init__(self, *args, **kwargs):
+        hippo.CanvasBox.__init__(self, *args, **kwargs)
+        self.set_layout(StackLayout())
+        self.active = None
+
+    def add(self, child):
+        self.append(child, hippo.PACK_EXPAND)
+        if not self.active:
+            self.set_active(child)
+
+    def set_active(self, child):
+        self.active = child
+        self.emit_request_changed()
+        self.emit_paint_needed(0, 0, -1, -1)        
+
+class StockHolder(ExpandBox):
     """A renderer for stocks."""
     
-    def __init__(self, metainfo, env, pymodule=None, is_notitle=False, panel=None, stylesheet=None):
-        hippo.CanvasBox.__init__(self,  
-                                 orientation=hippo.ORIENTATION_VERTICAL,
-                                 spacing=4)
-        self.__size = None
+    def __init__(self, metainfo, env, pymodule=None, is_notitle=False, panel=None, stylesheet=None, hidden=False):
+        super(StockHolder, self).__init__(orientation=hippo.ORIENTATION_HORIZONTAL,
+                                          classes='stock')
+        
+        self.hidden = hidden
+        self.__mouseover = False
+        self.__appears_hidden = False
+        
         self.__metainfo = metainfo
         self.__env = env
         self.__pymodule = pymodule
@@ -48,41 +149,82 @@
         self.__content = None
         self.__ticker_text = None
         self.__ticker_container = None
-        self.__mini_more_button = None
-        self.__sep = Separator()
-        self.append(self.__sep)
+
+        self.__stack = Stack()
+        self.append(self.__stack)
+        self.__stack.connect('motion-notify-event', self.__on_stack_motion_notify)
+        self.__visible_contents = hippo.CanvasBox(orientation=hippo.ORIENTATION_VERTICAL,
+                                                  box_width=Stock.SIZE_BULL_CONTENT_PX)
+        
+        self.__stack.add(self.__visible_contents)
+        
         self.__expanded = True
         if not is_notitle:
-            self.__ticker_container = Header()
-            self.__ticker_text = hippo.CanvasText(classes='header', text=metainfo.title, xalign=hippo.ALIGNMENT_START)
+            self.__ticker_container = hippo.CanvasBox(orientation=hippo.ORIENTATION_HORIZONTAL)
+            
+            header_left = hippo.CanvasBox(orientation=hippo.ORIENTATION_HORIZONTAL, classes='stock-header-left')
+            self.__ticker_container.append(header_left, hippo.PACK_EXPAND)
+            
+            self.__ticker_text = hippo.CanvasText(text=metainfo.title, xalign=hippo.ALIGNMENT_START)
             self.__ticker_text.set_clickable(True)
             self.__ticker_text.connect("activated", lambda text: self.__toggle_expanded())  
-            self.__ticker_container.append(self.__ticker_text, hippo.PACK_EXPAND)
+            header_left.append(self.__ticker_text, hippo.PACK_EXPAND)
 
             self.__ticker_arrow = Arrow(Arrow.LEFT, padding=4)
             self.__ticker_arrow.connect("activated", lambda text: self.__toggle_expanded())
-            self.__ticker_container.append(self.__ticker_arrow)
+            header_left.append(self.__ticker_arrow)
             
             if pymodule and pymodule.has_more_button():
-                more_button = HeaderButton()
+                more_button = hippo.CanvasBox(classes='stock-header-right')
+                more_button.set_clickable(True)
+                more_button_label = hippo.CanvasText()
+                more_button.append(more_button_label)
+                
+                def update_more_button_text(pymodule, *args):
+                    more_button_label.props.text = pymodule.more_button_text
+
+                pymodule.connect('notify::more-button-text', update_more_button_text)
+                update_more_button_text(pymodule)
+                
                 more_button.connect("activated", lambda l: pymodule.on_more_clicked())
                 self.__ticker_container.append(more_button)
-            
-            self.append(self.__ticker_container)
+
+            self.__visible_contents.append(self.__ticker_container)
 
         self.__theme_mgr = ThemeManager.getInstance()
         self.__theme_mgr.connect('theme-changed', self.__sync_theme)
 
-        self.__stockbox = hippo.CanvasBox()
-        self.append(self.__stockbox)
+        self.__stockbox = hippo.CanvasBox(classes='stock-main')
+        self.__visible_contents.append(self.__stockbox)
         if pymodule:
             pymodule.connect('visible', self.__render_pymodule)
             self.__render_pymodule()
         else:
-            self.__render_google_gadget()    
+            self.__render_google_gadget()
+
+        self.__bottom = hippo.CanvasBox(classes='stock-bottom', orientation=hippo.ORIENTATION_HORIZONTAL, xalign=hippo.ALIGNMENT_CENTER)
+        self.__visible_contents.append(self.__bottom)
+            
+        grippy = hippo.CanvasBox(classes='stock-grippy', box_width=20, box_height=8)
+        self.__bottom.append(grippy)
 
+        self.__hidden_title = hippo.CanvasBox(classes='stock-hidden')
+        self.__stack.add(self.__hidden_title)
+
+        hidden_text = RotatedText(text=metainfo.title, xalign=hippo.ALIGNMENT_START)
+        self.__hidden_title.append(hidden_text)
+
+        self.__update_appears_hidden()
         self.__sync_visibility()
 
+    def __on_stack_motion_notify(self, item, event):
+        if event.detail == hippo.MOTION_DETAIL_ENTER:
+            self.__mouseover = True
+            self.__update_appears_hidden()
+        elif event.detail == hippo.MOTION_DETAIL_LEAVE:
+            self.__mouseover = False
+            self.__update_appears_hidden()
+
     def __sync_theme(self, *args):
         if self.__content:
             if self.__stylesheet:
@@ -90,16 +232,63 @@
                 self.__content.set_theme(theme)
 
     def on_delisted(self):
-        _logger.debug("on_delisted exchange %s" % (str(self)))
+        _logger.debug("on_delisted")
         self.__unrender_pymodule()
 
     def on_popped_out_changed(self, popped_out):
         self.__pymodule.on_popped_out_changed(popped_out)
 
+    def get_hidden_width(self):
+        box_child = self.__hidden_title.get_parent().find_box_child(self.__hidden_title)
+        minimum, natural =  box_child.get_width_request()
+        
+        return natural
+
+    def get_visible_width(self):
+        box_child = self.__visible_contents.get_parent().find_box_child(self.__visible_contents)
+        minimum, natural =  box_child.get_width_request()
+        
+        return natural
+
+    def get_current_size(self):
+        if self.__appears_hidden:
+            return self.__hidden_title.get_allocation()
+        else:
+            width, height = self.__visible_contents.get_allocation()
+            if not self.__expanded:
+                # Bit of a hack ... the box __visible_contents is allocated full-height
+                # but it's not filled up
+                _, h1 = self.__ticker_container.get_allocation()
+                _, h2 = self.__bottom.get_allocation()
+                height = h1 + h2
+            return width, height
+    
+    def __update_appears_hidden(self):
+        appears_hidden = self.hidden and not self.__mouseover and (not self.__pymodule or
+                                                                   not self.__pymodule.active)
+        if appears_hidden == self.__appears_hidden:
+            return
+
+        self.__appears_hidden = appears_hidden
+
+        if self.get_context():
+            self.animate(0.3333)
+
+        if self.__appears_hidden:
+            self.__stack.set_active(self.__hidden_title)
+        else:
+            self.__stack.set_active(self.__visible_contents)
+
+    def set_hidden(self, hidden):
+        self.hidden = hidden
+        self.__update_appears_hidden()
+
     def __sync_visibility(self):
-        self.set_child_visible(self.__stockbox, self.__expanded)
+        if self.get_context():
+            self.animate(0.3333)
+        self.__stockbox.set_visible(self.__expanded)
         if self.__ticker_container:
-            self.__ticker_container.set_child_visible(self.__ticker_arrow, not self.__expanded)
+            self.__ticker_arrow.set_visible(not self.__expanded)
 
     def __toggle_expanded(self):
         self.__expanded = not self.__expanded
@@ -114,25 +303,22 @@
     def __render_google_gadget(self):
         rendered = GoogleGadgetContainer(self.__metainfo, self.__env)
         self.__stockbox.append(rendered)
-    
+
+    def __on_stock_active_changed(self, pymodule):
+        self.__update_appears_hidden()
+        
     def __render_pymodule(self, *args):
-        self.__size = size = Stock.SIZE_BULL
         self.__stockbox.remove_all()
-        self.__pymodule.set_size(size)
+        self.__pymodule.set_size(Stock.SIZE_BULL)
+
+        self.__active_changed_handler = self.__pymodule.connect('active-changed', self.__on_stock_active_changed)
 
-        self.__content = self.__pymodule.get_content(size) 
+        self.__content = self.__pymodule.get_content(Stock.SIZE_BULL) 
         self.__sync_theme()
 
         if self.__ticker_container:
-            self.set_child_visible(self.__ticker_container, not not self.__content)
-        self.set_child_visible(self.__sep,
-                               (not not self.__content) and \
-                               ((self.__ticker_container and size == Stock.SIZE_BEAR) \
-                                or (size == Stock.SIZE_BULL
-                                    and ((not self.__ticker_container) or (self.__pymodule.get_ticker() == "-")))))
-        if self.__mini_more_button:
-            self.set_child_visible(self.__mini_more_button, size == Stock.SIZE_BEAR)
-        self.set_child_visible(self.__stockbox, not not self.__content)
+            self.__ticker_container.set_visible(not not self.__content)
+        self.__stockbox.set_visible(not not self.__content)
         if not self.__content:
             _logger.debug("no content for stock %s", self.__pymodule)
             return
@@ -140,15 +326,15 @@
         padding = 4
         self.__stockbox.set_property("padding_left", padding)
         self.__stockbox.set_property("padding_right", padding)
-        if self.__ticker_text:
-            self.set_child_visible(self.__ticker_container, size == Stock.SIZE_BULL)
 
     def __unrender_pymodule(self):
         if not self.__pymodule:
-            _logger.debug("Not a pymodule exchange")
+            _logger.debug("No pymodule")
             return
+        
+        self.__pymodule.disconnect(self.__active_changed_handler)
 
-        _logger.debug("delisting pymodule %s" % (str(self.__pymodule)))
+        _logger.debug("delisting pymodule %s", self.__pymodule)
         self.__pymodule.on_delisted()
         self.__pymodule = None
 

Added: trunk/bigboard/dock_window.py
==============================================================================
--- (empty file)
+++ trunk/bigboard/dock_window.py	Sat Jun 28 00:15:52 2008
@@ -0,0 +1,231 @@
+import hippo
+import gobject
+import gtk
+
+_SPACING = 5
+
+class RootWindowWatcher(gtk.Invisible):
+    """Class to track properties of the root window.
+
+    The tracking is a distinctly hacky; what we do is set the user data of the root window
+    to point to an GtkInvisible and catch the property-notify events there, since we can't use
+    gdk_window_add_filter() from Python. If someone else uses the same trick in the
+    same process, we'll break.
+
+    """
+    
+    __gsignals__ = {
+        'realize' : 'override',
+        'unrealize' : 'override',
+        'workarea-changed' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ()),
+        }
+
+    @staticmethod
+    def get_for_screen(screen):
+        watcher = screen.get_data("RootWindowWatcher")
+        if watcher == None:
+            watcher = RootWindowWatcher(screen)
+            screen.set_data("RootWindowWatcher", watcher)
+
+        return watcher
+
+    def __init__(self, screen):
+        """Don't call this, call get_for_screen() instead. (Might be possible to make
+           a singleton with __new__, but the GObject interaction could be tricky.)"""
+        
+        super(RootWindowWatcher, self).__init__()
+        self.set_screen(screen)
+
+    def do_realize(self):
+        super(RootWindowWatcher, self).do_realize(self)
+        
+        screen = self.get_screen()
+        rootw = screen.get_root_window()
+        self.__old_events = rootw.get_events()
+
+        rootw.set_events(self.__old_events | gtk.gdk.PROPERTY_CHANGE_MASK)
+        rootw.set_user_data(self)
+
+        self.__compute_workarea()
+
+    def do_unrealize(self):
+        rootw.set_events(self.__old_events)
+        rootw.set_user_data(None)
+        
+        super(RootWindowWatcher, self).do_unrealize(self)
+
+    def do_property_notify_event(self, event):
+        if event.atom == "_NET_WORKAREA":
+            old_workarea = self.__workarea
+            self.__compute_workarea()
+            if (self.__workarea != old_workarea):
+                self.emit("workarea-changed")
+
+    def __compute_workarea(self):
+        screen = self.get_screen()
+        rootw = screen.get_root_window()
+        prop = rootw.property_get("_NET_WORKAREA")
+        (_, _, workarea) = prop
+        self.__workarea = (workarea[0], workarea[1], workarea[2], workarea[3])
+
+    def get_workarea(self):
+        return self.__workarea
+
+class DockWindow(hippo.CanvasWindow):
+    __gsignals__ = {
+        'realize' : 'override',
+        'screen-changed' : 'override',
+        'size-allocate' : 'override',
+        'show' : 'override',
+        }
+
+    def __init__(self, edge_gravity=gtk.gdk.GRAVITY_WEST):
+        hippo.CanvasWindow.__init__(self)
+
+        self.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DOCK)
+        self.set_decorated(False)
+        self.set_resizable(False)
+        
+        self.composited = False
+            
+        self.edge_gravity = edge_gravity
+        self.__strut_size = -1
+        self.__watcher = None
+
+    def set_composited(self, composited):
+        if composited == self.composited:
+            return
+
+        self.composited = composited
+
+        if composited:
+            colormap = self.get_screen().get_rgba_colormap()
+
+        if colormap == None:
+            colormap = self.get_screen().get_rgb_colormap()
+            
+        self.set_colormap(colormap)
+        
+    def do_show(self):
+        self.__update_watcher()
+        super(DockWindow, self).do_show(self)
+
+    def do_screen_changed(self, old_screen):
+        super(DockWindow, self).do_screen_changed(old_screen)
+
+        self.__update_watcher()
+
+    def __set_strut(self):
+        strut_size = self.__strut_size
+
+        if self.__strut_size < 0:
+            if (self.edge_gravity == gtk.gdk.GRAVITY_WEST or 
+                self.edge_gravity == gtk.gdk.GRAVITY_EAST):
+                strut_size = self.allocation.width
+            else:
+                strut_size = self.allocation.height
+
+        strut_size += _SPACING
+                
+        if self.edge_gravity == gtk.gdk.GRAVITY_WEST:
+            # left, right, top, bottom
+            propvals = [strut_size, 0, 0, 0]
+        elif self.edge_gravity == gtk.gdk.GRAVITY_EAST:
+            propvals = [0, strut_size, 0, 0]
+        elif self.edge_gravity == gtk.gdk.GRAVITY_NORTH:
+            propvals = [0, 0, strut_size, 0]
+        elif self.edge_gravity == gtk.gdk.GRAVITY_SOUTH:
+            propvals = [0, 0, 0, strut_size]
+        
+        self.window.property_change("_NET_WM_STRUT",
+                                    "CARDINAL",
+                                    32,
+                                    gtk.gdk.PROP_MODE_REPLACE,
+                                    propvals)
+        
+    def do_size_allocate(self, allocation):
+        super(DockWindow, self).do_size_allocate(self, allocation)
+        if self.__strut_size < 0 and self.flags() & gtk.REALIZED:
+            self.__set_strut()
+
+    def do_realize(self):
+        super(DockWindow, self).do_realize(self)
+        self.__set_strut()
+
+    def __update_watcher(self):
+        if self.__watcher != None:
+            self.__watcher.disconnect(self.__watcher_handler_id)
+        self.__watcher = RootWindowWatcher.get_for_screen(self.get_screen())
+        self.__watcher_handler_id = self.__watcher.connect('workarea-changed', self.__on_workarea_changed)
+        self.__on_workarea_changed(self.__watcher)
+
+    def __on_workarea_changed(self, watcher):
+        (workarea_x,workarea_y,workarea_width,workarea_height) = watcher.get_workarea()
+        
+        if (self.edge_gravity == gtk.gdk.GRAVITY_WEST or
+            self.edge_gravity == gtk.gdk.GRAVITY_NORTH):
+            monitor = self.get_screen().get_monitor_at_point(workarea_x, workarea_y)
+        elif (self.edge_gravity == gtk.gdk.GRAVITY_EAST or
+              self.edge_gravity == gtk.gdk.GRAVITY_SOUTH):
+            monitor = self.get_screen().get_monitor_at_point(workarea_x + workarea_height - 1,
+                                                             workarea_y + workarea_width - 1)
+
+        (monitor_x, monitor_y, monitor_width, monitor_height) = self.get_screen().get_monitor_geometry(monitor)
+        request_width, request_height = self.size_request()
+
+        if (self.edge_gravity == gtk.gdk.GRAVITY_WEST or
+            self.edge_gravity == gtk.gdk.GRAVITY_EAST):
+            y = workarea_y
+#            height = workarea_height
+            height = monitor_y + monitor_height - y
+            
+            if self.edge_gravity == gtk.gdk.GRAVITY_WEST: 
+                x = 0
+            else:
+                x = monitor_x + monitor_width - request_width
+            
+            at_top = y == monitor_y
+            at_bottom = y +  height == monitor_y + monitor_height
+
+            if not at_top:
+                y += _SPACING
+                height -= _SPACING
+
+            if not at_bottom:
+                height -= _SPACING
+        
+            self.set_size_request(-1, height)
+            
+        elif (self.edge_gravity == gtk.gdk.GRAVITY_NORTH or
+              self.edge_gravity == gtk.gdk.GRAVITY_SOUTH):
+            x = workarea_x
+            width = workarea_width
+            
+            at_left = x == monitor_x
+            at_right = x +  width == monitor_x + monitor_width
+            
+            if self.edge_gravity == gtk.gdk.GRAVITY_NORTH: 
+                y = 0
+            else:
+                y = monitor_y + monitor_height - request_height
+            
+            if not at_left:
+                x += _SPACING
+                width -= _SPACING
+
+            if not at_right:
+                width -= _SPACING
+
+            self.set_size_request(width, -1)
+        
+        self.move(x, y)
+
+    def get_strut_size(self):
+        return self.__strut_size
+
+    def set_strut_size(self, size):
+        self.__strut_size = size
+        if self.flags() & gtk.REALIZED:
+            self.__set_strut()
+        
+    strut_size = gobject.property(type=int, getter=get_strut_size, setter=set_strut_size)

Added: trunk/bigboard/expand_box.py
==============================================================================
--- (empty file)
+++ trunk/bigboard/expand_box.py	Sat Jun 28 00:15:52 2008
@@ -0,0 +1,140 @@
+import logging
+
+import cairo
+import gtk
+import gobject
+import hippo
+
+_logger = logging.getLogger("bigboard.ExpandBox")
+
+class _ExpandAnimation(hippo.Animation):
+    __gsignals__ = { 'event': 'override' }
+    
+    def __init__(self, box, duration):
+        super(_ExpandAnimation, self).__init__()
+        
+        self.__box = box
+        self.add_event(0, duration)
+
+    def do_event(self, id, fraction):
+        if fraction == 1.0:
+            self.__box._animation_finished()
+        else:
+            self.__box._animation_step(fraction)
+        
+class ExpandBox(hippo.CanvasBox, hippo.CanvasItem):
+    __gtype_name__ = 'HippoExpandBox'
+
+    def __init__(self, **kwargs):
+        hippo.CanvasBox.__init__(self, **kwargs)
+        self.__animation = None
+        self.__frame_allocate_pending = False
+
+    def do_get_width_request(self):
+        minimum, natural = hippo.CanvasBox.do_get_width_request(self)
+        if self.__animation:
+            old_minimum, old_natural = self.__start_width_request
+            fraction = self.__animation_fraction
+            minimum = int(0.5 + minimum * fraction + old_minimum * (1 - fraction))
+            natural = int(0.5 + natural * fraction + old_natural * (1 - fraction))
+
+        return minimum, natural
+    
+    def do_get_height_request(self, for_width):
+        minimum, natural = hippo.CanvasBox.do_get_height_request(self, for_width)
+        if self.__animation:
+            old_minimum, old_natural = self.__start_height_request
+            fraction = self.__animation_fraction
+            minimum = int(0.5 + minimum * fraction + old_minimum * (1 - fraction))
+            natural = int(0.5 + natural * fraction + old_natural * (1 - fraction))
+
+        return minimum, natural
+
+    def do_paint(self, cr, rect):
+        if self.__animation:
+            new_surface = cr.get_target().create_similar(cairo.CONTENT_COLOR_ALPHA,
+                                                         rect.width, rect.height)
+            new_cr = gtk.gdk.CairoContext(cairo.Context(new_surface))
+            new_cr.save()
+            new_cr.set_operator(cairo.OPERATOR_CLEAR)
+            new_cr.paint()
+            new_cr.restore()
+            new_cr.translate(- rect.x, - rect.y)
+            hippo.CanvasBox.do_paint(self, new_cr, rect)
+
+            tmp_surface = cr.get_target().create_similar(cairo.CONTENT_COLOR_ALPHA,
+                                                         rect.width, rect.height)
+            tmp_cr = gtk.gdk.CairoContext(cairo.Context(tmp_surface))
+            
+            tmp_cr.set_source_surface(self.__animation_surface, - rect.x, - rect.y)
+            tmp_cr.set_operator(cairo.OPERATOR_SOURCE)
+            tmp_cr.paint_with_alpha(1 - self.__animation_fraction)
+
+            tmp_cr.set_source_surface(new_surface, 0, 0)
+            tmp_cr.set_operator(cairo.OPERATOR_ADD)
+            tmp_cr.paint_with_alpha(self.__animation_fraction)
+
+            cr.set_source_surface(tmp_surface, rect.x, rect.y)
+            cr.paint()
+        else:
+            hippo.CanvasBox.do_paint(self, cr, rect)
+
+    def do_allocate(self, new_width, new_height, origin_changed):
+        if self.__frame_allocate_pending:
+            self.__frame_allocate_pending = False
+            if not origin_changed:
+                old_height, old_width = self.get_allocation()
+                self.emit_paint_needed(0, 0,
+                                       max(old_height, new_height),
+                                       max(old_width, new_width))
+            
+        hippo.CanvasBox.do_allocate(self, new_width, new_height, origin_changed)
+
+    def animate(self, duration):
+        # First snapshot the current state (which may be an animated state)
+        
+        width, height = self.get_allocation()
+        start_width_request = self.get_width_request()
+        start_height_request = self.get_height_request(width)
+
+        animation_surface = self.get_context().create_surface(cairo.CONTENT_COLOR_ALPHA,
+                                                              width, height)
+        cr = gtk.gdk.CairoContext(cairo.Context(animation_surface))
+        cr.save()
+        cr.set_operator(cairo.OPERATOR_CLEAR)
+        cr.paint()
+        cr.restore()
+        r = hippo.Rectangle(0, 0, width, height)
+        self.process_paint(cr,
+                           hippo.Rectangle(0, 0, width, height),
+                           0, 0)
+
+        # Then cancel any current animation
+
+        if self.__animation:
+            self.__animation.cancel()
+            self.__animation = None
+            self.__animation_surface = None
+
+        # And start the new animation from the current position
+        
+        self.__start_width_request = start_width_request
+        self.__start_height_request = start_height_request
+
+        self.__animation_surface = animation_surface
+
+        self.__animation = _ExpandAnimation(self, duration)
+        self.__animation_fraction = 0.
+        self.get_animation_manager().add_animation(self.__animation)
+        
+    def _animation_step(self, fraction):
+        self.__animation_fraction = fraction
+        self.__frame_allocate_pending = True
+        self.emit_request_changed()
+    
+    def _animation_finished(self):
+        self.__animation = None
+        self.__animation_surface = None
+        self.__frame_allocate_pending = True
+        self.emit_request_changed()
+

Modified: trunk/bigboard/stock.py
==============================================================================
--- trunk/bigboard/stock.py	(original)
+++ trunk/bigboard/stock.py	Sat Jun 28 00:15:52 2008
@@ -23,7 +23,8 @@
 
 class Stock(gobject.GObject):
     __gsignals__ = {
-        "visible" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_BOOLEAN,))
+        "visible" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_BOOLEAN,)),
+        "active-changed" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ())
     }
     """An item that can be placed on the big board.  Has
     two primary properties: id and ticker.  The id is
@@ -53,8 +54,10 @@
         self._panel = panel
         self._bull_widgets = {}
         self._size = Stock.SIZE_BULL
+        self.active = False
         
         self.__more_button_cb = None
+        self.more_button_text = "More"
         
         # For use in subclasses as well
         self._logger = logging.getLogger('bigboard.stocks.' + self._id)  
@@ -91,12 +94,24 @@
     def get_panel(self):
         return self._panel
 
-    def _add_more_button(self, cb):
+    def _add_more_button(self, cb, text=None):
+        if text != None:
+            self.more_button_text = text
         self.__more_button_cb = cb
+
+    def _set_active(self, active):
+        """Used to set whether the stock is being manipulated at the moment by the user.
+
+        The stock will not be autohidden when active.
+        
+        """
+        if self.active != active:
+            self.active = active
+            self.emit('active-changed')
         
     def has_more_button(self):
         return bool(self.__more_button_cb)
-    
+
     def on_more_clicked(self):
         assert(self.__more_button_cb)
         self._panel.action_taken()
@@ -125,6 +140,8 @@
     def get_content(self, size):
         raise NotImplementedError()
 
+    more_button_text = gobject.property(type=str)
+
 class AbstractMugshotStock(Stock):
     """An abstract class for stocks which use Mugshot.."""
     def __init__(self, *args, **kwargs):

Modified: trunk/bigboard/stocks/files/FilesStock.py
==============================================================================
--- trunk/bigboard/stocks/files/FilesStock.py	(original)
+++ trunk/bigboard/stocks/files/FilesStock.py	Sat Jun 28 00:15:52 2008
@@ -450,24 +450,29 @@
 
     def remove_google_data(self, gobj):
         self.__remove_files_for_key(gobj)
+
+    def __close_slideout(self):
+        self.__slideout.destroy()
+        self.__slideout = None
+        self.__slideout_target = None
+        self._set_active(False)
         
     def on_file_activated(self, fobj, lnk, from_bigboard=True):
         _logger.debug("got file activated: %s", fobj)
         if self.__slideout is not None:
-            self.__slideout.destroy()
-            self.__slideout = None      
+            self.__close_slideout()
         if fobj == self.__slideout_target and \
            self.__last_slideout_event_time == gtk.get_current_event_time():
             self.__slideout_target = None            
             return
-        self.__slideout_target = fobj            
+        self._set_active(True)
+        self.__slideout_target = fobj
         self.__slideout = FileSlideout(fobj, stylesheet=self.get_path('slideout.css'))
         def on_slideout_close(s, action_taken):
             self.__last_slideout_event_time = gtk.get_current_event_time()
             if action_taken:
                 self._panel.action_taken()
-            s.destroy()
-            self.__slideout = None
+            self.__close_slideout()
         self.__slideout.connect('close', on_slideout_close)
         item = lnk.link
         coords = item.get_context().translate_to_screen(item)
@@ -477,9 +482,7 @@
         else: 
             coord_y = coord_y + 20
         if not self.__slideout.slideout_from(coord_x, coord_y):
-            self.__slideout.destroy()
-            self.__slideout = None
-            self.__slideout_target = None
+            self.__close_slideout()
             return
 
     def __on_documents_load(self, document_entries, gobj):

Modified: trunk/bigboard/stocks/mail/MailStock.py
==============================================================================
--- trunk/bigboard/stocks/mail/MailStock.py	(original)
+++ trunk/bigboard/stocks/mail/MailStock.py	Sat Jun 28 00:15:52 2008
@@ -376,18 +376,21 @@
         else:
             self._login_button.set_property('text', google_stock.LOGIN_TO_GOOGLE_STRING) 
             self._box.set_child_visible(self._login_button, True)
-        
+
     def show_slideout(self, widget):
         def on_slideout_close(s, action_taken):
             self.__last_slideout_event_time = gtk.get_current_event_time() 
             if action_taken:
                 self._panel.action_taken()
             s.destroy()
+            self._set_active(False)
+        self._set_active(True)
         self.__slideout.connect('close', on_slideout_close)
         y = widget.get_context().translate_to_screen(widget)[1]
         if not self.__slideout.slideout_from(204, y):
             self.__slideout.destroy()
             self.__slideout = None
+            self._set_active(False)
             return
     
     def create_label_slideout(self, widget, hippo_event, gobj):   

Modified: trunk/bigboard/stocks/people/PeopleStock.py
==============================================================================
--- trunk/bigboard/stocks/people/PeopleStock.py	(original)
+++ trunk/bigboard/stocks/people/PeopleStock.py	Sat Jun 28 00:15:52 2008
@@ -6,7 +6,7 @@
 
 import bigboard
 from bigboard.people_tracker import PeopleTracker, sort_people
-from bigboard.stock import AbstractMugshotStock
+from bigboard.stock import AbstractMugshotStock, Stock
 import bigboard.slideout
 import bigboard.search as search
 import bigboard.libbig as libbig
@@ -131,6 +131,7 @@
                 self._panel.action_taken()
             self.__slideout.destroy()
             self.__slideout = None
+            self._set_active(False)
     
     def __handle_item_pressed(self, item, event):
         self.__in_slideout_close_event = self.__last_slideout_event_time == gtk.get_current_event_time()
@@ -146,6 +147,7 @@
 
         self.__in_slideout_close_event = False
 
+        self._set_active(True)
         self.__slideout = bigboard.slideout.Slideout()
         self.__current_slideout = item
         item_x, item_y = item.get_screen_coords()
@@ -160,7 +162,8 @@
         self.__slideout.connect("close", self.__close_slideout)
         try:
             success = False
-            success = self.__slideout.slideout_from(item_x + item.get_allocation()[0] + 4, item_y + y_fixup)
+            success = self.__slideout.slideout_from(Stock.SIZE_BULL_CONTENT_PX, item_y + y_fixup)
+#            success = self.__slideout.slideout_from(item_x + item.get_allocation()[0] + 4, item_y + y_fixup)
         finally:
             if not success:
                 self.__close_slideout()

Modified: trunk/bigboard/stocks/self.xml
==============================================================================
--- trunk/bigboard/stocks/self.xml	(original)
+++ trunk/bigboard/stocks/self.xml	Sat Jun 28 00:15:52 2008
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Module>
-  <ModulePrefs title="Self"
+  <ModulePrefs title="My Desktop"
                author="Red Hat, Inc."
                author_email="online-desktop-list gnome org"
                author_affiliation="Red Hat, Inc."

Modified: trunk/bigboard/stocks/self/SelfStock.py
==============================================================================
--- trunk/bigboard/stocks/self/SelfStock.py	(original)
+++ trunk/bigboard/stocks/self/SelfStock.py	Sat Jun 28 00:15:52 2008
@@ -16,6 +16,7 @@
 from bigboard.stock import Stock, AbstractMugshotStock
 from bigboard.big_widgets import CanvasMugshotURLImage, PhotoContentItem, CanvasVBox, CanvasHBox
 from bigboard.big_widgets import ActionLink, IconLink, Separator
+from bigboard.core.search_entry import SearchEntry
 import bigboard.google
 
 import portfoliomanager
@@ -254,7 +255,8 @@
 class SelfStock(AbstractMugshotStock):
     """Shows a user's Mugshot personal information."""
     __gsignals__ = {
-        "info-loaded" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [])                  
+        "info-loaded" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, []),
+        "toggle-visible" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [])                  
     }
     def __init__(self, *args, **kwargs):
         super(SelfStock,self).__init__(*args, **kwargs)
@@ -290,6 +292,11 @@
         self._box.append(self._signin)
         self._signin.connect("button-press-event", lambda signin, event: self.__do_account())
 
+        self._search_entry = SearchEntry()
+        self._box.append(hippo.CanvasWidget(widget=self._search_entry))
+
+        self._add_more_button(self.__on_more_button, u"\u00bb")
+
         self.__myself = None
 
         self.info_loaded = False
@@ -360,6 +367,12 @@
         myself.connect(self.__on_self_changed)
         self.__on_self_changed(myself)
         self.__info_now_loaded()
+
+    def set_panel_visible(self, panel_visible):
+        self.more_button_text = u"\u00ab" if panel_visible else u"\u00bb"
+
+    def __on_more_button(self):
+        self.emit("toggle_visible")
         
     def __do_slideout(self, slideout, widget=None):
         widget_src = widget or self._box
@@ -402,12 +415,14 @@
             self.__last_slideout_event_time = gtk.get_current_event_time() 
             self.__slideout.destroy()
             self.__slideout = None
+            self._set_active(False)
             return
 
         if self.__last_slideout_event_time == gtk.get_current_event_time():
             return 
 
         self.__create_fus_proxy()
+        self._set_active(True)
         self.__slideout = SelfSlideout(self, self.__myself, fus=self.__fus_service, logger=_logger)
         self.__slideout.connect('account', lambda s: self.__do_account())        
         self.__slideout.connect('sidebar-controls', lambda s: self.__do_sidebar_controls())
@@ -425,6 +440,9 @@
     def set_size(self, size):
         super(SelfStock, self).set_size(size)
         self._namephoto_box.set_size(size)
+
+    def focus_search(self):
+        self._search_entry.grab_focus()
     
     def __on_self_changed(self, myself):
         _logger.debug("self (%s) changed", myself.resource_id)

Modified: trunk/bigboard/theme_manager.py
==============================================================================
--- trunk/bigboard/theme_manager.py	(original)
+++ trunk/bigboard/theme_manager.py	Sat Jun 28 00:15:52 2008
@@ -1,9 +1,11 @@
 import logging
+import os
 import re
 import weakref
 
 import gconf
 import gobject
+import gtk
 import hippo
 
 from bigboard.globals import GCONF_PREFIX
@@ -18,6 +20,8 @@
     def __init__(self):
         super(ThemeManager, self).__init__()
         self.__class__.instance = weakref.ref(self)
+        screen = gtk.gdk.screen_get_default()
+        self.composited = screen.is_composited() and screen.get_rgba_colormap()
         self.__default_theme = None
         self.__theme = None
         gconf.client_get_default().notify_add(GCONF_PREFIX + 'theme', self.__sync_theme)
@@ -50,7 +54,14 @@
             is_default = True
 
         theme_engine = package.getInstance()
-        stylesheet_name = re.sub(r"__init__.pyc?$", "theme.css", package.__file__)
+
+        if self.composited:
+            stylesheet_name = re.sub(r"__init__.pyc?$", "theme-alpha.css", package.__file__)
+        else:
+            stylesheet_name = re.sub(r"__init__.pyc?$", "theme-solid.css", package.__file__)
+
+        if not os.path.exists(stylesheet_name):
+            stylesheet_name = re.sub(r"__init__.pyc?$", "theme.css", package.__file__)
 
         theme = hippo.CanvasTheme(theme_engine = theme_engine, theme_stylesheet = stylesheet_name)
         if is_default and self.__default_theme == None:

Added: trunk/bigboard/themes/fedora/grippy.png
==============================================================================
Binary file. No diff available.

Added: trunk/bigboard/themes/fedora/stock-bottom-alpha.svg
==============================================================================
--- (empty file)
+++ trunk/bigboard/themes/fedora/stock-bottom-alpha.svg	Sat Jun 28 00:15:52 2008
@@ -0,0 +1,184 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:xlink="http://www.w3.org/1999/xlink";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="50"
+   height="17"
+   id="svg2715"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   version="1.0"
+   sodipodi:docname="bottom.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs2717">
+    <linearGradient
+       id="linearGradient3249">
+      <stop
+         style="stop-color:#577e9a;stop-opacity:1;"
+         offset="0"
+         id="stop3251" />
+      <stop
+         style="stop-color:#416782;stop-opacity:1;"
+         offset="1"
+         id="stop3253" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3225">
+      <stop
+         style="stop-color:#3e6179;stop-opacity:1;"
+         offset="0"
+         id="stop3227" />
+      <stop
+         style="stop-color:#839bab;stop-opacity:1;"
+         offset="1"
+         id="stop3229" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3531">
+      <stop
+         style="stop-color:#bcbcbc;stop-opacity:0.78431374;"
+         offset="0"
+         id="stop3533" />
+      <stop
+         style="stop-color:#0000ff;stop-opacity:0.50196081;"
+         offset="1"
+         id="stop3535" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective2723" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3531"
+       id="linearGradient3537"
+       x1="5"
+       y1="5"
+       x2="45"
+       y2="45"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,1)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3531"
+       id="linearGradient3162"
+       gradientUnits="userSpaceOnUse"
+       x1="5"
+       y1="5"
+       x2="45"
+       y2="45" />
+    <inkscape:perspective
+       id="perspective3204"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3225"
+       id="linearGradient3247"
+       x1="25"
+       y1="20"
+       x2="25"
+       y2="39"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3249"
+       id="linearGradient3255"
+       x1="25"
+       y1="38"
+       x2="25"
+       y2="24"
+       gradientUnits="userSpaceOnUse" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="11.313708"
+     inkscape:cx="33.911162"
+     inkscape:cy="11.066167"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     showborder="true"
+     inkscape:window-width="1400"
+     inkscape:window-height="1000"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     showguides="true"
+     inkscape:guide-bbox="true">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2725"
+       visible="true"
+       enabled="true"
+       spacingx="1px"
+       spacingy="1px" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata2720">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-33)">
+    <path
+       style="fill:url(#linearGradient3255);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 1,24 L 1,35 L 5,39 L 45,39 L 49,35 L 49,24 L 1,24 z"
+       transform="translate(0,10)"
+       id="path3529"
+       sodipodi:nodetypes="ccccccc" />
+    <g
+       id="g2388"
+       style="enable-background:new">
+      <path
+         style="opacity:1;fill:#414d55;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;comp-op:plus"
+         d="M 0,23 L 0,32.5 C 0,36.646351 3.3536486,40 7.5,40 L 42.5,40 C 46.646351,40 50,36.646351 50,32.5 L 50,23 L 49,23 L 49,32.5 C 49,36.109649 46.109649,39 42.5,39 L 7.5,39 C 3.8903514,39 1,36.109649 1,32.5 L 1,23 L 0,23 z"
+         transform="translate(0,10)"
+         id="rect3509"
+         sodipodi:nodetypes="ccccccccccccc" />
+      <path
+         style="opacity:1;fill:url(#linearGradient3247);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;comp-op:plus"
+         d="M 1,23 L 1,32.5 C 1,36.092351 3.9076486,39 7.5,39 L 42.5,39 C 46.092351,39 49,36.092351 49,32.5 L 49,23 L 48,23 L 48,32.5 C 48,35.555649 45.555649,38 42.5,38 L 7.5,38 C 4.4443514,38 2,35.555649 2,32.5 L 2,23 L 1,23 z"
+         transform="translate(0,10)"
+         id="rect3511"
+         sodipodi:nodetypes="ccccccccccccc" />
+    </g>
+    <rect
+       style="opacity:1;fill:#cbd4db;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect3257"
+       width="46"
+       height="1"
+       x="2"
+       y="33" />
+  </g>
+</svg>

Added: trunk/bigboard/themes/fedora/stock-bottom-solid.svg
==============================================================================
--- (empty file)
+++ trunk/bigboard/themes/fedora/stock-bottom-solid.svg	Sat Jun 28 00:15:52 2008
@@ -0,0 +1,180 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:xlink="http://www.w3.org/1999/xlink";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="50"
+   height="17"
+   id="svg2715"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   version="1.0"
+   sodipodi:docname="stock-bottom-solid.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs2717">
+    <linearGradient
+       id="linearGradient3249">
+      <stop
+         style="stop-color:#577e9a;stop-opacity:1;"
+         offset="0"
+         id="stop3251" />
+      <stop
+         style="stop-color:#416782;stop-opacity:1;"
+         offset="1"
+         id="stop3253" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3225">
+      <stop
+         style="stop-color:#3e6179;stop-opacity:1;"
+         offset="0"
+         id="stop3227" />
+      <stop
+         style="stop-color:#839bab;stop-opacity:1;"
+         offset="1"
+         id="stop3229" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3531">
+      <stop
+         style="stop-color:#bcbcbc;stop-opacity:0.78431374;"
+         offset="0"
+         id="stop3533" />
+      <stop
+         style="stop-color:#0000ff;stop-opacity:0.50196081;"
+         offset="1"
+         id="stop3535" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective2723" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3531"
+       id="linearGradient3537"
+       x1="5"
+       y1="5"
+       x2="45"
+       y2="45"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,1)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3531"
+       id="linearGradient3162"
+       gradientUnits="userSpaceOnUse"
+       x1="5"
+       y1="5"
+       x2="45"
+       y2="45" />
+    <inkscape:perspective
+       id="perspective3204"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3225"
+       id="linearGradient3247"
+       x1="25"
+       y1="20"
+       x2="25"
+       y2="39"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3249"
+       id="linearGradient3255"
+       x1="25"
+       y1="38"
+       x2="25"
+       y2="24"
+       gradientUnits="userSpaceOnUse" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.627416"
+     inkscape:cx="28.563667"
+     inkscape:cy="7.8841863"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     showborder="true"
+     inkscape:window-width="1400"
+     inkscape:window-height="1000"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     showguides="true"
+     inkscape:guide-bbox="true">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2725"
+       visible="true"
+       enabled="true"
+       spacingx="1px"
+       spacingy="1px" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata2720">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-33)">
+    <path
+       style="fill:url(#linearGradient3255);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 1,24 L 1,39 L 49,39 L 49,24 L 1,24 z"
+       transform="translate(0,10)"
+       id="path3529"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="opacity:1;fill:url(#linearGradient3247);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 1,23 L 1,32.5 C 1,36.092351 1,39 1,39 L 49,39 L 49,23 L 48,23 C 48,28 48,33 48,38 L 2,38 L 2,23 L 1,23 z"
+       transform="translate(0,10)"
+       id="rect3511"
+       sodipodi:nodetypes="cccccccccc" />
+    <path
+       style="opacity:1;fill:#414d55;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 0,23 C 0,28.666667 0,34.333333 0,40 C 0,40 50,40 50,40 L 50,23 L 49,23 L 49,39 L 1,39 L 1,23 L 0,23 z"
+       transform="translate(0,10)"
+       id="rect3509"
+       sodipodi:nodetypes="ccccccccc" />
+    <rect
+       style="opacity:1;fill:#cbd4db;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect3257"
+       width="46"
+       height="1"
+       x="2"
+       y="33" />
+  </g>
+</svg>

Added: trunk/bigboard/themes/fedora/stock-header-left-alpha.svg
==============================================================================
--- (empty file)
+++ trunk/bigboard/themes/fedora/stock-header-left-alpha.svg	Sat Jun 28 00:15:52 2008
@@ -0,0 +1,176 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:xlink="http://www.w3.org/1999/xlink";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="40"
+   height="20"
+   id="svg2715"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   version="1.0"
+   sodipodi:docname="header.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs2717">
+    <linearGradient
+       id="linearGradient5058">
+      <stop
+         style="stop-color:#426781;stop-opacity:1;"
+         offset="0"
+         id="stop5060" />
+      <stop
+         style="stop-color:#425f74;stop-opacity:1;"
+         offset="1"
+         id="stop5062" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3531">
+      <stop
+         style="stop-color:#476d88;stop-opacity:1;"
+         offset="0"
+         id="stop3533" />
+      <stop
+         style="stop-color:#59809c;stop-opacity:1;"
+         offset="1"
+         id="stop3535" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective2723" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3531"
+       id="linearGradient3537"
+       x1="5"
+       y1="5"
+       x2="45"
+       y2="45"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,1)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3531"
+       id="linearGradient3162"
+       gradientUnits="userSpaceOnUse"
+       x1="25"
+       y1="2"
+       x2="25"
+       y2="19" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3531"
+       id="linearGradient3787"
+       gradientUnits="userSpaceOnUse"
+       x1="25"
+       y1="2"
+       x2="25"
+       y2="19" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3531"
+       id="linearGradient3812"
+       gradientUnits="userSpaceOnUse"
+       x1="25"
+       y1="2"
+       x2="25"
+       y2="19" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5058"
+       id="linearGradient5064"
+       x1="40"
+       y1="2"
+       x2="40"
+       y2="19"
+       gradientUnits="userSpaceOnUse" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="16"
+     inkscape:cx="26.481784"
+     inkscape:cy="1.8001996"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     showborder="true"
+     inkscape:window-width="1400"
+     inkscape:window-height="1000"
+     inkscape:window-x="0"
+     inkscape:window-y="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2725"
+       visible="true"
+       enabled="true"
+       spacingx="1px"
+       spacingy="1px" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata2720">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <path
+       style="fill:url(#linearGradient3812);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 5,1 L 1,5 L 1,20 L 40,20 L 40,1 L 5,1 z"
+       id="path3529"
+       sodipodi:nodetypes="cccccc" />
+    <g
+       id="g2388"
+       style="enable-background:new">
+      <path
+         style="opacity:1;fill:#414d55;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;comp-op:plus"
+         d="M 7.5,0 C 3.3536486,0 0,3.3536486 0,7.5 L 0,20 L 1,20 L 1,7.5 C 1,3.8903514 3.8903514,1 7.5,1 L 40,1 C 40,1 40,0 40,0 L 7.5,0 z"
+         id="rect3509"
+         sodipodi:nodetypes="ccccccccc" />
+      <path
+         style="opacity:1;fill:#849bab;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;comp-op:plus"
+         d="M 7.5,1 C 3.9076486,1 1,3.9076486 1,7.5 L 1,20 L 2,20 L 2,7.5 C 2,4.4443514 4.4443514,2 7.5,2 L 40,2 C 40,2 40,1 40,1 L 7.5,1 z"
+         id="rect3511"
+         sodipodi:nodetypes="ccccccccc" />
+    </g>
+    <rect
+       style="opacity:1;fill:#264356;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect3267"
+       width="38"
+       height="1"
+       x="2"
+       y="19" />
+    <rect
+       style="opacity:1;fill:url(#linearGradient5064);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect5056"
+       width="1"
+       height="17"
+       x="39"
+       y="2" />
+  </g>
+</svg>

Added: trunk/bigboard/themes/fedora/stock-header-left-solid.svg
==============================================================================
--- (empty file)
+++ trunk/bigboard/themes/fedora/stock-header-left-solid.svg	Sat Jun 28 00:15:52 2008
@@ -0,0 +1,172 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:xlink="http://www.w3.org/1999/xlink";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="40"
+   height="20"
+   id="svg2715"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   version="1.0"
+   sodipodi:docname="header-left-solid.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs2717">
+    <linearGradient
+       id="linearGradient5058">
+      <stop
+         style="stop-color:#426781;stop-opacity:1;"
+         offset="0"
+         id="stop5060" />
+      <stop
+         style="stop-color:#425f74;stop-opacity:1;"
+         offset="1"
+         id="stop5062" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3531">
+      <stop
+         style="stop-color:#476d88;stop-opacity:1;"
+         offset="0"
+         id="stop3533" />
+      <stop
+         style="stop-color:#59809c;stop-opacity:1;"
+         offset="1"
+         id="stop3535" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective2723" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3531"
+       id="linearGradient3537"
+       x1="5"
+       y1="5"
+       x2="45"
+       y2="45"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,1)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3531"
+       id="linearGradient3162"
+       gradientUnits="userSpaceOnUse"
+       x1="25"
+       y1="2"
+       x2="25"
+       y2="19" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3531"
+       id="linearGradient3787"
+       gradientUnits="userSpaceOnUse"
+       x1="25"
+       y1="2"
+       x2="25"
+       y2="19" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3531"
+       id="linearGradient3812"
+       gradientUnits="userSpaceOnUse"
+       x1="25"
+       y1="2"
+       x2="25"
+       y2="19" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5058"
+       id="linearGradient5064"
+       x1="40"
+       y1="2"
+       x2="40"
+       y2="19"
+       gradientUnits="userSpaceOnUse" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="16"
+     inkscape:cx="26.481784"
+     inkscape:cy="1.8001996"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     showborder="true"
+     inkscape:window-width="1400"
+     inkscape:window-height="1000"
+     inkscape:window-x="0"
+     inkscape:window-y="25">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2725"
+       visible="true"
+       enabled="true"
+       spacingx="1px"
+       spacingy="1px" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata2720">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <path
+       style="fill:url(#linearGradient3812);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 2,2 L 2,20 L 40,20 L 40,2 L 2,2 z"
+       id="path3529"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="opacity:1;fill:#849bab;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 1,1 L 1,20 L 2,20 C 2,20 2,2 2,2 L 40,2 C 40,2 40,1 40,1 L 1,1 z"
+       id="rect3511"
+       sodipodi:nodetypes="ccccccc" />
+    <path
+       style="opacity:1;fill:#414d55;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 0,0 L 0,20 L 1,20 C 1,20 1,1 1,1 L 40,1 C 40,1 40,0 40,0 L 0,0 z"
+       id="rect3509"
+       sodipodi:nodetypes="ccccccc" />
+    <rect
+       style="opacity:1;fill:#264356;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect3267"
+       width="38"
+       height="1"
+       x="2"
+       y="19" />
+    <rect
+       style="opacity:1;fill:url(#linearGradient5064);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect5056"
+       width="1"
+       height="17"
+       x="39"
+       y="2" />
+  </g>
+</svg>

Added: trunk/bigboard/themes/fedora/stock-header-right-alpha.svg
==============================================================================
--- (empty file)
+++ trunk/bigboard/themes/fedora/stock-header-right-alpha.svg	Sat Jun 28 00:15:52 2008
@@ -0,0 +1,202 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:xlink="http://www.w3.org/1999/xlink";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="40"
+   height="20"
+   id="svg2715"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   version="1.0"
+   sodipodi:docname="header-right.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs2717">
+    <linearGradient
+       id="linearGradient5058">
+      <stop
+         style="stop-color:#b8c8d0;stop-opacity:1;"
+         offset="0"
+         id="stop5060" />
+      <stop
+         style="stop-color:#a3b6c4;stop-opacity:1;"
+         offset="1"
+         id="stop5062" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3531">
+      <stop
+         style="stop-color:#6a8aa0;stop-opacity:1;"
+         offset="0"
+         id="stop3533" />
+      <stop
+         style="stop-color:#8b96ba;stop-opacity:1;"
+         offset="1"
+         id="stop3535" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective2723" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3531"
+       id="linearGradient3537"
+       x1="5"
+       y1="5"
+       x2="45"
+       y2="45"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,1)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3531"
+       id="linearGradient3162"
+       gradientUnits="userSpaceOnUse"
+       x1="25"
+       y1="2"
+       x2="25"
+       y2="19" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3531"
+       id="linearGradient3787"
+       gradientUnits="userSpaceOnUse"
+       x1="25"
+       y1="2"
+       x2="25"
+       y2="19" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3531"
+       id="linearGradient3812"
+       gradientUnits="userSpaceOnUse"
+       x1="25"
+       y1="2"
+       x2="25"
+       y2="19"
+       gradientTransform="matrix(-1,0,0,1,40,0)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5058"
+       id="linearGradient5064"
+       x1="40"
+       y1="2"
+       x2="40"
+       y2="19"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-40,0)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5058"
+       id="linearGradient5090"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-39,0)"
+       x1="40"
+       y1="2"
+       x2="40"
+       y2="19" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5058"
+       id="linearGradient5093"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-39,0)"
+       x1="54"
+       y1="19"
+       x2="54"
+       y2="1" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="16"
+     inkscape:cx="14.231784"
+     inkscape:cy="4.1751996"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     showborder="true"
+     inkscape:window-width="1400"
+     inkscape:window-height="1000"
+     inkscape:window-x="0"
+     inkscape:window-y="24">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2725"
+       visible="true"
+       enabled="true"
+       spacingx="1px"
+       spacingy="1px" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata2720">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <path
+       style="fill:url(#linearGradient3812);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 35,1 L 39,5 L 39,20 L 0,20 L 0,1 L 35,1 z"
+       id="path3529"
+       sodipodi:nodetypes="cccccc" />
+    <g
+       id="g2388"
+       style="enable-background:new"
+       transform="matrix(-1,0,0,1,40,0)">
+      <path
+         style="opacity:1;fill:url(#linearGradient5093);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;comp-op:plus"
+         d="M 0,1 C 0,1 0,2 0,2 L 0,19 L 1,19 L 1,2 L 32.5,2 C 35.555649,2 38,4.4443514 38,7.5 L 38,19 L 39,19 L 39,7.5 C 39,3.9076486 36.092351,1 32.5,1 L 0,1 z"
+         transform="matrix(-1,0,0,1,40,0)"
+         id="rect5056"
+         sodipodi:nodetypes="cccccccccccc" />
+      <path
+         style="opacity:1;fill:#414d55;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;comp-op:plus"
+         d="M 7.5,0 C 3.3536486,0 0,3.3536486 0,7.5 L 0,20 L 1,20 L 1,7.5 C 1,3.8903514 3.8903514,1 7.5,1 L 40,1 C 40,1 40,0 40,0 L 7.5,0 z"
+         id="rect3509"
+         sodipodi:nodetypes="ccccccccc" />
+      <rect
+         style="opacity:1;fill:#8b96ba;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;comp-op:plus"
+         id="rect5099"
+         width="1"
+         height="1"
+         x="38"
+         y="19"
+         transform="matrix(-1,0,0,1,40,0)" />
+    </g>
+    <rect
+       style="opacity:1;fill:#264356;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect3267"
+       width="38"
+       height="1"
+       x="-38"
+       y="19"
+       transform="scale(-1,1)" />
+  </g>
+</svg>

Added: trunk/bigboard/themes/fedora/stock-header-right-prelight-alpha.svg
==============================================================================
--- (empty file)
+++ trunk/bigboard/themes/fedora/stock-header-right-prelight-alpha.svg	Sat Jun 28 00:15:52 2008
@@ -0,0 +1,210 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:xlink="http://www.w3.org/1999/xlink";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="40"
+   height="20"
+   id="svg2715"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   version="1.0"
+   sodipodi:docname="header-right-prelight.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs2717">
+    <linearGradient
+       id="linearGradient5058">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop5060" />
+      <stop
+         style="stop-color:#cbd9e4;stop-opacity:1;"
+         offset="1"
+         id="stop5062" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3531">
+      <stop
+         style="stop-color:#96afc0;stop-opacity:1;"
+         offset="0"
+         id="stop3533" />
+      <stop
+         style="stop-color:#c6c9d2;stop-opacity:1;"
+         offset="1"
+         id="stop3535" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective2723" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3531"
+       id="linearGradient3537"
+       x1="5"
+       y1="5"
+       x2="45"
+       y2="45"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,1)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3531"
+       id="linearGradient3162"
+       gradientUnits="userSpaceOnUse"
+       x1="25"
+       y1="2"
+       x2="25"
+       y2="19" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3531"
+       id="linearGradient3787"
+       gradientUnits="userSpaceOnUse"
+       x1="25"
+       y1="2"
+       x2="25"
+       y2="19" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3531"
+       id="linearGradient3812"
+       gradientUnits="userSpaceOnUse"
+       x1="25"
+       y1="2"
+       x2="25"
+       y2="19"
+       gradientTransform="matrix(-1,0,0,1,40,0)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5058"
+       id="linearGradient5064"
+       x1="40"
+       y1="2"
+       x2="40"
+       y2="19"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-40,0)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5058"
+       id="linearGradient5090"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-39,0)"
+       x1="40"
+       y1="2"
+       x2="40"
+       y2="19" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5058"
+       id="linearGradient5093"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-39,0)"
+       x1="54"
+       y1="19"
+       x2="54"
+       y2="1" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="16"
+     inkscape:cx="1.794284"
+     inkscape:cy="4.1751996"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     showborder="true"
+     inkscape:window-width="1400"
+     inkscape:window-height="1000"
+     inkscape:window-x="0"
+     inkscape:window-y="24">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2725"
+       visible="true"
+       enabled="true"
+       spacingx="1px"
+       spacingy="1px" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata2720">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <path
+       style="fill:url(#linearGradient3812);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 35,1 L 39,5 L 39,20 L 0,20 L 0,1 L 35,1 z"
+       id="path3529"
+       sodipodi:nodetypes="cccccc" />
+    <g
+       id="g2388"
+       style="enable-background:new"
+       transform="matrix(-1,0,0,1,40,0)">
+      <path
+         style="opacity:1;fill:url(#linearGradient5093);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;comp-op:plus"
+         d="M 0,1 C 0,1 0,2 0,2 L 0,19 L 1,19 L 1,2 L 32.5,2 C 35.555649,2 38,4.4443514 38,7.5 L 38,19 L 39,19 L 39,7.5 C 39,3.9076486 36.092351,1 32.5,1 L 0,1 z"
+         transform="matrix(-1,0,0,1,40,0)"
+         id="rect5056"
+         sodipodi:nodetypes="cccccccccccc" />
+      <path
+         style="opacity:1;fill:#414d55;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;comp-op:plus"
+         d="M 7.5,0 C 3.3536486,0 0,3.3536486 0,7.5 L 0,20 L 1,20 L 1,7.5 C 1,3.8903514 3.8903514,1 7.5,1 L 40,1 C 40,1 40,0 40,0 L 7.5,0 z"
+         id="rect3509"
+         sodipodi:nodetypes="ccccccccc" />
+      <rect
+         style="opacity:1;fill:#849bab;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;comp-op:plus"
+         id="rect5097"
+         width="0"
+         height="0"
+         x="33"
+         y="2"
+         transform="matrix(-1,0,0,1,40,0)" />
+      <rect
+         style="opacity:1;fill:#8b96ba;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;comp-op:plus"
+         id="rect5099"
+         width="1"
+         height="1"
+         x="38"
+         y="19"
+         transform="matrix(-1,0,0,1,40,0)" />
+    </g>
+    <rect
+       style="opacity:1;fill:#264356;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect3267"
+       width="38"
+       height="1"
+       x="-38"
+       y="19"
+       transform="scale(-1,1)" />
+  </g>
+</svg>

Added: trunk/bigboard/themes/fedora/stock-header-right-prelight-solid.svg
==============================================================================
--- (empty file)
+++ trunk/bigboard/themes/fedora/stock-header-right-prelight-solid.svg	Sat Jun 28 00:15:52 2008
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:xlink="http://www.w3.org/1999/xlink";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="40"
+   height="20"
+   id="svg2715"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   version="1.0"
+   sodipodi:docname="stock-header-right-prelight-solid.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs2717">
+    <linearGradient
+       id="linearGradient5058">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop5060" />
+      <stop
+         style="stop-color:#cbd9e4;stop-opacity:1;"
+         offset="1"
+         id="stop5062" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3531">
+      <stop
+         style="stop-color:#96afc0;stop-opacity:1;"
+         offset="0"
+         id="stop3533" />
+      <stop
+         style="stop-color:#c6c9d2;stop-opacity:1;"
+         offset="1"
+         id="stop3535" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective2723" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3531"
+       id="linearGradient3537"
+       x1="5"
+       y1="5"
+       x2="45"
+       y2="45"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,1)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3531"
+       id="linearGradient3162"
+       gradientUnits="userSpaceOnUse"
+       x1="25"
+       y1="2"
+       x2="25"
+       y2="19" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3531"
+       id="linearGradient3787"
+       gradientUnits="userSpaceOnUse"
+       x1="25"
+       y1="2"
+       x2="25"
+       y2="19" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3531"
+       id="linearGradient3812"
+       gradientUnits="userSpaceOnUse"
+       x1="25"
+       y1="2"
+       x2="25"
+       y2="19"
+       gradientTransform="matrix(-1,0,0,1,40,0)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5058"
+       id="linearGradient5064"
+       x1="40"
+       y1="2"
+       x2="40"
+       y2="19"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-40,0)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5058"
+       id="linearGradient5090"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-39,0)"
+       x1="40"
+       y1="2"
+       x2="40"
+       y2="19" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5058"
+       id="linearGradient5093"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-39,0)"
+       x1="54"
+       y1="19"
+       x2="54"
+       y2="1" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5058"
+       id="linearGradient2404"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-39,0)"
+       x1="54"
+       y1="19"
+       x2="54"
+       y2="1" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="16"
+     inkscape:cx="21.169284"
+     inkscape:cy="3.9876996"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     showborder="true"
+     inkscape:window-width="1400"
+     inkscape:window-height="1000"
+     inkscape:window-x="0"
+     inkscape:window-y="25">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2725"
+       visible="true"
+       enabled="true"
+       spacingx="1px"
+       spacingy="1px" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata2720">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <path
+       style="fill:url(#linearGradient3812);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 39,1 L 39,20 L 0,20 L 0,1 L 39,1 z"
+       id="path3529"
+       sodipodi:nodetypes="ccccc" />
+    <rect
+       style="opacity:1;fill:#8b96ba;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect5099"
+       width="1"
+       height="1"
+       x="38"
+       y="19"
+       transform="matrix(-1,0,0,1,40,0)" />
+    <rect
+       style="opacity:1;fill:#849bab;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect5097"
+       width="0"
+       height="0"
+       x="33"
+       y="2"
+       transform="matrix(-1,0,0,1,40,0)" />
+    <path
+       style="opacity:1;fill:#414d55;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 40,0 L 40,20 L 39,20 C 39,13.666667 39,7.3333333 39,1 L 0,1 C 0,1 0,0 0,0 L 40,0 z"
+       id="rect3509"
+       sodipodi:nodetypes="ccccccc" />
+    <path
+       style="opacity:1;fill:url(#linearGradient2404);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 0,1 C 0,1 0,2 0,2 L 0,19 L 1,19 L 1,2 L 38,2 L 38,19 L 39,19 C 39,13 39,7 39,1 L 0,1 z"
+       id="rect5056"
+       sodipodi:nodetypes="cccccccccc" />
+    <rect
+       style="opacity:1;fill:#264356;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect3267"
+       width="38"
+       height="1"
+       x="-38"
+       y="19"
+       transform="scale(-1,1)" />
+  </g>
+</svg>

Added: trunk/bigboard/themes/fedora/stock-header-right-solid.svg
==============================================================================
--- (empty file)
+++ trunk/bigboard/themes/fedora/stock-header-right-solid.svg	Sat Jun 28 00:15:52 2008
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:xlink="http://www.w3.org/1999/xlink";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="40"
+   height="20"
+   id="svg2715"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   version="1.0"
+   sodipodi:docname="header-right-solid.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs2717">
+    <linearGradient
+       id="linearGradient5058">
+      <stop
+         style="stop-color:#b8c8d0;stop-opacity:1;"
+         offset="0"
+         id="stop5060" />
+      <stop
+         style="stop-color:#a3b6c4;stop-opacity:1;"
+         offset="1"
+         id="stop5062" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3531">
+      <stop
+         style="stop-color:#6a8aa0;stop-opacity:1;"
+         offset="0"
+         id="stop3533" />
+      <stop
+         style="stop-color:#8b96ba;stop-opacity:1;"
+         offset="1"
+         id="stop3535" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective2723" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3531"
+       id="linearGradient3537"
+       x1="5"
+       y1="5"
+       x2="45"
+       y2="45"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,1)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3531"
+       id="linearGradient3162"
+       gradientUnits="userSpaceOnUse"
+       x1="25"
+       y1="2"
+       x2="25"
+       y2="19" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3531"
+       id="linearGradient3787"
+       gradientUnits="userSpaceOnUse"
+       x1="25"
+       y1="2"
+       x2="25"
+       y2="19" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3531"
+       id="linearGradient3812"
+       gradientUnits="userSpaceOnUse"
+       x1="25"
+       y1="2"
+       x2="25"
+       y2="19"
+       gradientTransform="matrix(-1,0,0,1,40,0)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5058"
+       id="linearGradient5064"
+       x1="40"
+       y1="2"
+       x2="40"
+       y2="19"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-40,0)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5058"
+       id="linearGradient5090"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-39,0)"
+       x1="40"
+       y1="2"
+       x2="40"
+       y2="19" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5058"
+       id="linearGradient5093"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-39,0)"
+       x1="54"
+       y1="19"
+       x2="54"
+       y2="1" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5058"
+       id="linearGradient2405"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-39,0)"
+       x1="54"
+       y1="19"
+       x2="54"
+       y2="1" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="16"
+     inkscape:cx="14.231784"
+     inkscape:cy="4.1751996"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     showborder="true"
+     inkscape:window-width="1400"
+     inkscape:window-height="1000"
+     inkscape:window-x="0"
+     inkscape:window-y="25">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2725"
+       visible="true"
+       enabled="true"
+       spacingx="1px"
+       spacingy="1px" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata2720">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <path
+       style="fill:url(#linearGradient3812);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 35,1 L 39,1 L 39,20 L 0,20 L 0,1 L 35,1 z"
+       id="path3529"
+       sodipodi:nodetypes="cccccc" />
+    <rect
+       style="opacity:1;fill:#8b96ba;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect5099"
+       width="1"
+       height="1"
+       x="38"
+       y="19"
+       transform="matrix(-1,0,0,1,40,0)" />
+    <path
+       style="opacity:1;fill:#414d55;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 40,0 L 40,20 L 39,20 C 39,13.666667 39,7.3333333 39,1 L 0,1 C 0,1 0,0 0,0 L 40,0 z"
+       id="rect3509"
+       sodipodi:nodetypes="ccccccc" />
+    <path
+       style="opacity:1;fill:url(#linearGradient2405);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 0,1 C 0,1 0,2 0,2 L 0,19 L 1,19 L 1,2 L 38,2 L 38,19 L 39,19 C 39,19 39,1 39,1 L 0,1 z"
+       id="rect5056"
+       sodipodi:nodetypes="cccccccccc" />
+    <rect
+       style="opacity:1;fill:#264356;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect3267"
+       width="38"
+       height="1"
+       x="-38"
+       y="19"
+       transform="scale(-1,1)" />
+  </g>
+</svg>

Added: trunk/bigboard/themes/fedora/stock-hidden-alpha.svg
==============================================================================
--- (empty file)
+++ trunk/bigboard/themes/fedora/stock-hidden-alpha.svg	Sat Jun 28 00:15:52 2008
@@ -0,0 +1,169 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:xlink="http://www.w3.org/1999/xlink";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="17"
+   height="50"
+   id="svg2715"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   version="1.0"
+   sodipodi:docname="stock-collapsed.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs2717">
+    <linearGradient
+       id="linearGradient3249">
+      <stop
+         style="stop-color:#577e9a;stop-opacity:1;"
+         offset="0"
+         id="stop3251" />
+      <stop
+         style="stop-color:#416782;stop-opacity:1;"
+         offset="1"
+         id="stop3253" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3225">
+      <stop
+         style="stop-color:#3e6179;stop-opacity:1;"
+         offset="0"
+         id="stop3227" />
+      <stop
+         style="stop-color:#839bab;stop-opacity:1;"
+         offset="1"
+         id="stop3229" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3531">
+      <stop
+         style="stop-color:#bcbcbc;stop-opacity:0.78431374;"
+         offset="0"
+         id="stop3533" />
+      <stop
+         style="stop-color:#0000ff;stop-opacity:0.50196081;"
+         offset="1"
+         id="stop3535" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective2723" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3531"
+       id="linearGradient3537"
+       x1="5"
+       y1="5"
+       x2="45"
+       y2="45"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,1)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3531"
+       id="linearGradient3162"
+       gradientUnits="userSpaceOnUse"
+       x1="5"
+       y1="5"
+       x2="45"
+       y2="45" />
+    <inkscape:perspective
+       id="perspective3204"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3249"
+       id="linearGradient3255"
+       x1="25"
+       y1="38"
+       x2="25"
+       y2="23"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-1,1,0,-8,67)" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="15.999999"
+     inkscape:cx="8.4793382"
+     inkscape:cy="29.353672"
+     inkscape:document-units="px"
+     inkscape:current-layer="g2388"
+     showgrid="true"
+     showborder="true"
+     inkscape:window-width="1400"
+     inkscape:window-height="1000"
+     inkscape:window-x="0"
+     inkscape:window-y="24"
+     showguides="true"
+     inkscape:guide-bbox="true">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2725"
+       visible="true"
+       enabled="true"
+       spacingx="1px"
+       spacingy="1px" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata2720">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-15,-17)">
+    <path
+       style="fill:url(#linearGradient3255);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 15,66 L 27,66 L 31,62 L 31,22 L 27,18 L 15,18 L 15,66 z"
+       id="path3529"
+       sodipodi:nodetypes="ccccccc" />
+    <g
+       id="g2388"
+       style="enable-background:new"
+       transform="matrix(0,-1,1,0,-18,67)">
+      <path
+         style="opacity:1;fill:#414d55;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;comp-op:plus"
+         d="M 0,23 L 0,32.5 C 0,36.646351 3.3536486,40 7.5,40 L 42.5,40 C 46.646351,40 50,36.646351 50,32.5 L 50,23 L 49,23 L 49,32.5 C 49,36.109649 46.109649,39 42.5,39 L 7.5,39 C 3.8903514,39 1,36.109649 1,32.5 L 1,23 L 0,23 z"
+         transform="translate(0,10)"
+         id="rect3509"
+         sodipodi:nodetypes="ccccccccccccc" />
+      <path
+         style="opacity:1;fill:#8099a9;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;comp-op:plus"
+         d="M 1,23 L 1,32.5 C 1,36.092351 3.9076486,39 7.5,39 L 42.5,39 C 46.092351,39 49,36.092351 49,32.5 L 49,23 L 48,23 L 48,32.5 C 48,35.555649 45.555649,38 42.5,38 L 7.5,38 C 4.4443514,38 2,35.555649 2,32.5 L 2,23 L 1,23 z"
+         transform="translate(0,10)"
+         id="rect3511"
+         sodipodi:nodetypes="ccccccccccccc" />
+    </g>
+  </g>
+</svg>

Added: trunk/bigboard/themes/fedora/stock-hidden-solid.svg
==============================================================================
--- (empty file)
+++ trunk/bigboard/themes/fedora/stock-hidden-solid.svg	Sat Jun 28 00:15:52 2008
@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:xlink="http://www.w3.org/1999/xlink";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="17"
+   height="50"
+   id="svg2715"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   version="1.0"
+   sodipodi:docname="stock-hidden-solid.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs2717">
+    <linearGradient
+       id="linearGradient3249">
+      <stop
+         style="stop-color:#577e9a;stop-opacity:1;"
+         offset="0"
+         id="stop3251" />
+      <stop
+         style="stop-color:#416782;stop-opacity:1;"
+         offset="1"
+         id="stop3253" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3225">
+      <stop
+         style="stop-color:#3e6179;stop-opacity:1;"
+         offset="0"
+         id="stop3227" />
+      <stop
+         style="stop-color:#839bab;stop-opacity:1;"
+         offset="1"
+         id="stop3229" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3531">
+      <stop
+         style="stop-color:#bcbcbc;stop-opacity:0.78431374;"
+         offset="0"
+         id="stop3533" />
+      <stop
+         style="stop-color:#0000ff;stop-opacity:0.50196081;"
+         offset="1"
+         id="stop3535" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective2723" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3531"
+       id="linearGradient3537"
+       x1="5"
+       y1="5"
+       x2="45"
+       y2="45"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,1)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3531"
+       id="linearGradient3162"
+       gradientUnits="userSpaceOnUse"
+       x1="5"
+       y1="5"
+       x2="45"
+       y2="45" />
+    <inkscape:perspective
+       id="perspective3204"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3249"
+       id="linearGradient3255"
+       x1="25"
+       y1="38"
+       x2="25"
+       y2="23"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-1,1,0,-8,67)" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="15.999999"
+     inkscape:cx="10.604338"
+     inkscape:cy="19.916171"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     showborder="true"
+     inkscape:window-width="1400"
+     inkscape:window-height="1000"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     showguides="true"
+     inkscape:guide-bbox="true">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2725"
+       visible="true"
+       enabled="true"
+       spacingx="1px"
+       spacingy="1px" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata2720">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-15,-17)">
+    <path
+       style="fill:url(#linearGradient3255);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 15,66 L 30,66 L 30,18 L 15,18 L 15,66 z"
+       id="path3529"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="opacity:1;fill:#8099a9;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 15,66 L 31,66 L 31,18 L 15,18 L 15,19 C 20,19 25,19 30,19 C 30,34.333333 30,49.666667 30,65 L 15,65 L 15,66 z"
+       id="rect3511"
+       sodipodi:nodetypes="ccccccccc" />
+    <path
+       style="opacity:1;fill:#414d55;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 15,67 L 32,67 C 32,50.333333 32,33.666667 32,17 L 15,17 L 15,18 L 31,18 C 31,34 31,50 31,66 L 15,66 L 15,67 z"
+       id="rect3509"
+       sodipodi:nodetypes="ccccccccc" />
+  </g>
+</svg>

Added: trunk/bigboard/themes/fedora/stock-main.svg
==============================================================================
--- (empty file)
+++ trunk/bigboard/themes/fedora/stock-main.svg	Sat Jun 28 00:15:52 2008
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:xlink="http://www.w3.org/1999/xlink";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="50"
+   height="20"
+   id="svg2715"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   version="1.0"
+   sodipodi:docname="main.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs2717">
+    <linearGradient
+       id="linearGradient3929">
+      <stop
+         style="stop-color:#849bab;stop-opacity:1;"
+         offset="0"
+         id="stop3931" />
+      <stop
+         style="stop-color:#3e6179;stop-opacity:1;"
+         offset="1"
+         id="stop3933" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3531">
+      <stop
+         style="stop-color:#bcbcbc;stop-opacity:0.78431374;"
+         offset="0"
+         id="stop3533" />
+      <stop
+         style="stop-color:#0000ff;stop-opacity:0.50196081;"
+         offset="1"
+         id="stop3535" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective2723" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3531"
+       id="linearGradient3537"
+       x1="5"
+       y1="5"
+       x2="45"
+       y2="45"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,1)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3531"
+       id="linearGradient3162"
+       gradientUnits="userSpaceOnUse"
+       x1="5"
+       y1="5"
+       x2="45"
+       y2="45" />
+    <inkscape:perspective
+       id="perspective3403"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3929"
+       id="linearGradient3935"
+       x1="25"
+       y1="0"
+       x2="25"
+       y2="20"
+       gradientUnits="userSpaceOnUse" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="4"
+     inkscape:cx="86.910825"
+     inkscape:cy="24.49684"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     showborder="true"
+     inkscape:window-width="1400"
+     inkscape:window-height="1000"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     showguides="true"
+     inkscape:guide-bbox="true">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2725"
+       visible="true"
+       enabled="true"
+       spacingx="1px"
+       spacingy="1px" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata2720">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-10)">
+    <path
+       style="fill:#345b75;fill-opacity:0.78431374;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 1,0 L 1,20 L 49,20 L 49,0 L 1,0 z"
+       transform="translate(0,10)"
+       id="path3529" />
+    <path
+       style="opacity:1;fill:url(#linearGradient3935);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 1,0 L 1,20 L 2,20 L 2,0 L 1,0 z M 48,0 L 48,20 L 49,20 L 49,0 L 48,0 z"
+       transform="translate(0,10)"
+       id="rect3511" />
+    <path
+       style="opacity:1;fill:#414d55;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 0,0 L 0,20 L 1,20 L 1,0 L 0,0 z M 49,0 L 49,20 L 50,20 L 50,0 L 49,0 z"
+       transform="translate(0,10)"
+       id="rect3509" />
+  </g>
+</svg>

Added: trunk/bigboard/themes/fedora/theme-alpha.css
==============================================================================
--- (empty file)
+++ trunk/bigboard/themes/fedora/theme-alpha.css	Sat Jun 28 00:15:52 2008
@@ -0,0 +1,35 @@
+ import url("theme-common.css");
+
+canvas {
+    background-color: transparent;
+}
+
+.stock-header-left {
+    -hippo-background-image: url("stock-header-left-alpha.svg") 8px 1px 1px 8px;
+    padding: 4px 8px 4px;
+}
+
+.stock-header-right {
+    -hippo-background-image: url("stock-header-right-alpha.svg") 8px 8px 1px 1px;
+    padding: 4px 8px 4px;
+}
+
+.stock-header-right-prelight {
+    -hippo-background-image: url("stock-header-right-prelight-alpha.svg") 8px 8px 1px 1px;
+    padding: 4px 8px 4px;
+}
+
+.stock-main {
+    -hippo-background-image: url("stock-main.svg") 0px 8px 0px;
+    padding: 4px 8px 4px;
+}
+
+.stock-bottom {
+    -hippo-background-image: url("stock-bottom-alpha.svg") 1px 8px 8px;
+    padding: 6px 10px 5px;
+}
+
+.stock-hidden {
+    -hippo-background-image: url("stock-hidden-alpha.svg") 8px 8px 8px 0px;
+    padding: 8px 4px 8px;
+}

Added: trunk/bigboard/themes/fedora/theme-common.css
==============================================================================
--- (empty file)
+++ trunk/bigboard/themes/fedora/theme-common.css	Sat Jun 28 00:15:52 2008
@@ -0,0 +1,37 @@
+* {
+    color: #dddddd;
+}
+
+:link, :visited {
+    color: #ffffcc;
+}
+
+.subforeground {
+   color: #95a9b6;
+}
+
+.stock-header-left * {
+    color: white;
+    font-size: 11pt;
+    font-weight: bold;
+}
+
+.stock-grippy {
+    -hippo-background-image: url("grippy.png");
+}
+
+.stock-hidden * {
+    color: white;
+    font-size: 11pt;
+    font-weight: bold;
+}
+
+.prelighted-box {
+    background-color: #59809c;
+}
+
+.slideout-root {
+    background-color: #345B75;
+    border-color: #a2afb5;
+    border-width: 1px;
+}

Added: trunk/bigboard/themes/fedora/theme-solid.css
==============================================================================
--- (empty file)
+++ trunk/bigboard/themes/fedora/theme-solid.css	Sat Jun 28 00:15:52 2008
@@ -0,0 +1,35 @@
+ import url("theme-common.css");
+
+canvas {
+    background-color: #345B75; 
+}
+
+.stock-header-left {
+    -hippo-background-image: url("stock-header-left-solid.svg") 8px 1px 1px 8px;
+    padding: 4px 8px 4px;
+}
+
+.stock-header-right {
+    -hippo-background-image: url("stock-header-right-solid.svg") 8px 8px 1px 1px;
+    padding: 4px 8px 4px;
+}
+
+.stock-header-right-prelight {
+    -hippo-background-image: url("stock-header-right-prelight-solid.svg") 8px 8px 1px 1px;
+    padding: 4px 8px 4px;
+}
+
+.stock-main {
+    -hippo-background-image: url("stock-main.svg") 0px 8px 0px;
+    padding: 4px 8px 4px;
+}
+
+.stock-bottom {
+    -hippo-background-image: url("stock-bottom-solid.svg") 1px 8px 8px;
+    padding: 6px 10px 5px;
+}
+
+.stock-hidden {
+    -hippo-background-image: url("stock-hidden-solid.svg") 8px 8px 8px 0px;
+    padding: 8px 4px 8px;
+}

Modified: trunk/main.py
==============================================================================
--- trunk/main.py	(original)
+++ trunk/main.py	Sat Jun 28 00:15:52 2008
@@ -14,7 +14,6 @@
 
 import hippo
 
-from bigboard.core.exchange import Exchange
 from bigboard.core.panel import Panel
 
 import bigboard



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]