Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(462)

Side by Side Diff: resources/slides_transitions.lua

Issue 692543004: break transitions into separate file (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « resources/slides_content.lua ('k') | resources/slides_utils.lua » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 function scale_text_delta(template, delta)
2 template = template.slide
3 for i = 1, #template do
4 local paint = template[i].paint
5 paint:setTextSize(paint:getTextSize() + delta)
6 end
7 end
8
9 function slide_transition(prev, next, is_forward)
10 local rec = {
11 proc = function(self, canvas, drawSlideProc)
12 if self:isDone() then
13 drawSlideProc(canvas)
14 return nil
15 end
16 self.prevDrawable:draw(canvas, self.curr_x, 0)
17 self.nextDrawable:draw(canvas, self.curr_x + 640, 0)
18 self.curr_x = self.curr_x + self.step_x
19 return self
20 end
21 }
22 if is_forward then
23 rec.prevDrawable = prev
24 rec.nextDrawable = next
25 rec.curr_x = 0
26 rec.step_x = -15
27 rec.isDone = function (self) return self.curr_x <= -640 end
28 else
29 rec.prevDrawable = next
30 rec.nextDrawable = prev
31 rec.curr_x = -640
32 rec.step_x = 15
33 rec.isDone = function (self) return self.curr_x >= 0 end
34 end
35 return rec
36 end
37
38 function sqr(value) return value * value end
39
40 function set_blur(paint, alpha)
41 local sigma = sqr(1 - alpha) * 20
42 -- paint:setImageFilter(Sk.newBlurImageFilter(sigma, sigma))
43 paint:setAlpha(alpha)
44 end
45
46 function fade_slide_transition(prev, next, is_forward)
47 local rec = {
48 paint = Sk.newPaint(),
49 prevDrawable = prev,
50 nextDrawable = next,
51 proc = function(self, canvas, drawSlideProc)
52 if self:isDone() then
53 drawSlideProc(canvas)
54 return nil
55 end
56
57 set_blur(self.paint, self.prev_a)
58 self.prevDrawable:draw(canvas, self.prev_x, 0, self.paint)
59
60 set_blur(self.paint, self.next_a)
61 self.nextDrawable:draw(canvas, self.next_x, 0, self.paint)
62 self:step()
63 return self
64 end
65 }
66 if is_forward then
67 rec.prev_x = 0
68 rec.prev_a = 1
69 rec.next_x = 640
70 rec.next_a = 0
71 rec.isDone = function (self) return self.next_x <= 0 end
72 rec.step = function (self)
73 self.next_x = self.next_x - 20
74 self.next_a = (640 - self.next_x) / 640
75 self.prev_a = 1 - self.next_a
76 end
77 else
78 rec.prev_x = 0
79 rec.prev_a = 1
80 rec.next_x = 0
81 rec.next_a = 0
82 rec.isDone = function (self) return self.prev_x >= 640 end
83 rec.step = function (self)
84 self.prev_x = self.prev_x + 20
85 self.prev_a = (640 - self.prev_x) / 640
86 self.next_a = 1 - self.prev_a
87 end
88 end
89 return rec
90 end
91
92 function fade_transition(prev, next, is_forward)
93 local rec = {
94 paint = Sk.newPaint(),
95 prevDrawable = prev,
96 nextDrawable = next,
97 proc = function(self, canvas, drawSlideProc)
98 if self:isDone() then
99 drawSlideProc(canvas)
100 return nil
101 end
102
103 set_blur(self.paint, self.prev_a)
104 self.prevDrawable:draw(canvas, 0, 0, self.paint)
105
106 set_blur(self.paint, self.next_a)
107 self.nextDrawable:draw(canvas, 0, 0, self.paint)
108 self:step()
109 return self
110 end
111 }
112 rec.prev_a = 1
113 rec.next_a = 0
114 rec.isDone = function (self) return self.next_a >= 1 end
115 rec.step = function (self)
116 self.prev_a = math.max(self.prev_a - 0.025, 0)
117 self.next_a = 1 - self.prev_a
118 end
119
120 return rec
121 end
122
123 function rotate_transition(prev, next, is_forward)
124 local rec = {
125 angle = 0,
126 prevDrawable = prev,
127 nextDrawable = next,
128 activeDrawable = prev,
129 proc = function(self, canvas, drawSlideProc)
130 if self:isDone() then
131 drawSlideProc(canvas)
132 return nil
133 end
134
135 canvas:save()
136 canvas:translate(320, 240)
137 canvas:rotate(self.angle)
138 canvas:translate(-320, -240)
139 self.activeDrawable:draw(canvas, 0, 0)
140 self:step()
141 return self
142 end,
143 isDone = function (self) return self.angle >= 360 or self.angle <= -360 end
144 }
145 if is_forward then
146 rec.step = function (self)
147 self.angle = self.angle + 10
148 if self.angle >= 180 then
149 self.activeDrawable = self.nextDrawable
150 end
151 end
152 else
153 rec.step = function (self)
154 self.angle = self.angle - 10
155 if self.angle <= -180 then
156 self.activeDrawable = self.nextDrawable
157 end
158 end
159 end
160 return rec
161 end
162
163 function zoom_transition(prev, next, is_forward)
164 local rec = {
165 scale = 1,
166 scale_delta = .95,
167 scale_limit = 0.2,
168 pivot_x = 320,
169 pivot_y = 240,
170 prevDrawable = prev,
171 nextDrawable = next,
172 activeDrawable = prev,
173 proc = function(self, canvas, drawSlideProc)
174 if self:isDone() then
175 drawSlideProc(canvas)
176 return nil
177 end
178
179 canvas:translate(self.pivot_x, self.pivot_y)
180 canvas:scale(self.scale, self.scale)
181 canvas:translate(-self.pivot_x, -self.pivot_y)
182 self.activeDrawable:draw(canvas, 0, 0)
183 self:step()
184 return self
185 end,
186 isDone = function (self) return self.scale > 1 end,
187 step = function (self)
188 if self.scale < self.scale_limit then
189 self.scale = self.scale_limit
190 self.scale_delta = 1 / self.scale_delta
191 self.activeDrawable = self.nextDrawable
192 end
193 self.scale = self.scale * self.scale_delta
194 end
195 }
196 return rec
197 end
198
199 gTransitionTable = {
200 fade = fade_transition,
201 slide = slide_transition,
202 fade_slide = fade_slide_transition,
203 rotate = rotate_transition,
204 zoom = zoom_transition,
205 }
206
OLDNEW
« no previous file with comments | « resources/slides_content.lua ('k') | resources/slides_utils.lua » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698