Merge lp:~evfool/software-center/carouseltransition into lp:software-center

Proposed by Robert Roth
Status: Merged
Merged at revision: 1786
Proposed branch: lp:~evfool/software-center/carouseltransition
Merge into: lp:software-center
Diff against target: 93 lines (+20/-15)
1 file modified
softwarecenter/ui/gtk/widgets/carousel.py (+20/-15)
To merge this branch: bzr merge lp:~evfool/software-center/carouseltransition
Reviewer Review Type Date Requested Status
Gary Lasker (community) Approve
Review via email: mp+61561@code.launchpad.net

Description of the change

Added fade-out and -in transitions when the user selects a carousel page by clicking a dot, half as long as the transition used when automatically switching to the next carousel page, as requested in bug #633193.

To post a comment you must log in.
Revision history for this message
Gary Lasker (gary-lasker) wrote :

This is a very nice effect, thanks Robert!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'softwarecenter/ui/gtk/widgets/carousel.py'
2--- softwarecenter/ui/gtk/widgets/carousel.py 2011-05-18 01:53:20 +0000
3+++ softwarecenter/ui/gtk/widgets/carousel.py 2011-05-19 12:55:49 +0000
4@@ -29,6 +29,9 @@
5
6 # spec says the fade duration should be 1 second, these values suffice:
7 FADE_INTERVAL = 25 # msec
8+ # fade interval when user changes page by clicking dot
9+ # this is set to be half as long as the standard transition time, as requested in lp:633193
10+ USER_FADE_INTERVAL = int(FADE_INTERVAL/2) # msec
11 FADE_STEP = 0.075 # value between 0.0 and 1.0
12
13 POSTER_MIN_WIDTH = 15*EM
14@@ -120,10 +123,9 @@
15
16 def _on_page_clicked(self, page_sel, page):
17 self.stop()
18+ self._fader = gobject.timeout_add(CarouselView.USER_FADE_INTERVAL,
19+ self._fade_out, page)
20 self._offset = page*self.n_posters
21- self._update_poster_content()
22- self._alpha = 1.0
23- self.queue_draw()
24 self.start()
25 return
26
27@@ -185,24 +187,25 @@
28 self.queue_draw()
29 return True
30
31- def _fade_out(self):
32+ def _fade_out(self, next_page=-1):
33 self._alpha -= CarouselView.FADE_STEP
34 if self._alpha <= 0.0:
35 self._alpha = 0.0
36 self.queue_draw()
37- self._set_next()
38+ self._set_next(fade_in=True, page=next_page)
39 return False
40 self.queue_draw()
41 return True
42
43- def _update_pagesel(self):
44+ def _update_pagesel(self, page=-1):
45 # set the PageSelector page
46 if self._offset >= len(self.carousel_apps):
47 self._offset = 0
48 # print 'BW:', width, self.page_sel.allocation.width
49 #temporary fix for crash in bug 694836
50 if self.n_posters> 0:
51- page = self._offset / self.n_posters
52+ if page == -1:
53+ page = self._offset / self.n_posters
54 self.page_sel.set_selected_page(int(page))
55 return
56
57@@ -217,12 +220,15 @@
58 self._offset += 1
59 return
60
61- def _set_next(self, fade_in=True):
62- self._update_pagesel()
63+ def _set_next(self, fade_in=True, page=-1):
64+ self._update_pagesel(page)
65 self._update_poster_content()
66
67+ fade_interval = CarouselView.FADE_INTERVAL
68+ if page>=0:
69+ fade_interval = CarouselView.USER_FADE_INTERVAL
70 if fade_in:
71- self._fader = gobject.timeout_add(CarouselView.FADE_INTERVAL,
72+ self._fader = gobject.timeout_add(fade_interval,
73 self._fade_in)
74 else:
75 self._alpha = 1.0
76@@ -627,13 +633,12 @@
77 return self.n_pages
78
79 def set_selected_page(self, page_n):
80+ if self.selected:
81+ self.selected.is_selected = False
82+ self.selected.queue_draw()
83+
84 dot = self.dots[page_n]
85 dot.is_selected = True
86-
87- if self.selected:
88- self.selected.is_selected = False
89- self.selected.queue_draw()
90-
91 self.selected = dot
92 dot.queue_draw()
93 return