OLD | NEW |
(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 |
OLD | NEW |