| Index: resources/slides.lua
|
| diff --git a/resources/slides.lua b/resources/slides.lua
|
| index 2f774e0de266312739b37bd971fd3b7c5e50bd77..bfc4ab4b8350386917f27532f14ad45b81603280 100644
|
| --- a/resources/slides.lua
|
| +++ b/resources/slides.lua
|
| @@ -40,6 +40,35 @@ function drawSlide(canvas, slide, template, paints)
|
| end
|
| end
|
|
|
| +function slide_transition(prev, next, is_forward)
|
| + local rec = {
|
| + proc = function(self, canvas, drawSlideProc)
|
| + if self:isDone() then
|
| + drawSlideProc(canvas)
|
| + return nil
|
| + end
|
| + canvas:drawImage(self.prevImage, self.curr_x, 0)
|
| + canvas:drawImage(self.nextImage, self.curr_x + 640, 0)
|
| + self.curr_x = self.curr_x + self.step_x
|
| + return self
|
| + end
|
| + }
|
| + if is_forward then
|
| + rec.prevImage = prev
|
| + rec.nextImage = next
|
| + rec.curr_x = 0
|
| + rec.step_x = -15
|
| + rec.isDone = function (self) return self.curr_x <= -640 end
|
| + else
|
| + rec.prevImage = next
|
| + rec.nextImage = prev
|
| + rec.curr_x = -640
|
| + rec.step_x = 15
|
| + rec.isDone = function (self) return self.curr_x >= 0 end
|
| + end
|
| + return rec
|
| +end
|
| +
|
| --------------------------------------------------------------------------------------
|
|
|
| gTemplate = {
|
| @@ -65,13 +94,15 @@ gSlides = {
|
| canvas:drawOval({left=300, top=300, right=400, bottom=400}, gRedPaint)
|
| end },
|
| },
|
| + transition = slide_transition
|
| },
|
| { text = "Title2", style="title", color = { a=1, r=0, g=1, b=0 },
|
| children = {
|
| { text = "bullet uno", style = "child" },
|
| { text = "bullet 2", style = "child" },
|
| { text = "bullet tres", style = "child" },
|
| - }
|
| + },
|
| + transition = fade_transition
|
| },
|
| { text = "Title3", style="title",
|
| children = {
|
| @@ -83,30 +114,85 @@ gSlides = {
|
| }
|
|
|
| --------------------------------------------------------------------------------------
|
| +function tostr(t)
|
| + local str = ""
|
| + for k, v in next, t do
|
| + if #str > 0 then
|
| + str = str .. ", "
|
| + end
|
| + if type(k) == "number" then
|
| + str = str .. "[" .. k .. "] = "
|
| + else
|
| + str = str .. tostring(k) .. " = "
|
| + end
|
| + if type(v) == "table" then
|
| + str = str .. "{ " .. tostr(v) .. " }"
|
| + else
|
| + str = str .. tostring(v)
|
| + end
|
| + end
|
| + return str
|
| +end
|
| +
|
| +-- animation.proc is passed the canvas before drawing.
|
| +-- The animation.proc returns itself or another animation (which means keep animating)
|
| +-- or it returns nil, which stops the animation.
|
| +--
|
| +local gCurrAnimation
|
|
|
| gSlideIndex = 1
|
|
|
| function next_slide()
|
| + local prev = gSlides[gSlideIndex]
|
| +
|
| gSlideIndex = gSlideIndex + 1
|
| if gSlideIndex > #gSlides then
|
| gSlideIndex = 1
|
| end
|
| +
|
| + spawn_transition(prev, gSlides[gSlideIndex], true)
|
| end
|
|
|
| function prev_slide()
|
| + local prev = gSlides[gSlideIndex]
|
| +
|
| gSlideIndex = gSlideIndex - 1
|
| if gSlideIndex < 1 then
|
| gSlideIndex = #gSlides
|
| end
|
| +
|
| + spawn_transition(prev, gSlides[gSlideIndex], false)
|
| end
|
|
|
| ---------------------------------------------------------------------------------------
|
| +gSurfaceFactory = function (w, h) return Sk.newRasterSurface(w, h) end
|
|
|
| --- animation.proc is passed the canvas before drawing.
|
| --- The animation.proc returns itself or another animation (which means keep animating)
|
| --- or it returns nil, which stops the animation.
|
| ---
|
| -local gCurrAnimation
|
| +function spawn_transition(prevSlide, nextSlide, is_forward)
|
| + local transition
|
| + if is_forward then
|
| + transition = prevSlide.transition
|
| + else
|
| + transition = nextSlide.transition
|
| + end
|
| +
|
| + if not transition then
|
| + return
|
| + end
|
| +
|
| + local surf = gSurfaceFactory(640, 480)
|
| + local canvas = surf:getCanvas()
|
| +
|
| + canvas:clear()
|
| + drawSlide(canvas, prevSlide, gTemplate, gPaints)
|
| + local prevImage = surf:newImageSnapshot()
|
| +
|
| + canvas:clear()
|
| + drawSlide(canvas, nextSlide, gTemplate, gPaints)
|
| + local nextImage = surf:newImageSnapshot()
|
| +
|
| + gCurrAnimation = transition(prevImage, nextImage, is_forward)
|
| +end
|
| +
|
| +--------------------------------------------------------------------------------------
|
|
|
| function spawn_rotate_animation()
|
| gCurrAnimation = {
|
| @@ -114,16 +200,18 @@ function spawn_rotate_animation()
|
| angle_delta = 5,
|
| pivot_x = 320,
|
| pivot_y = 240,
|
| - proc = function (this, canvas)
|
| - if this.angle >= 360 then
|
| + proc = function (self, canvas, drawSlideProc)
|
| + if self.angle >= 360 then
|
| + drawSlideProc(canvas)
|
| return nil
|
| end
|
| - canvas:translate(this.pivot_x, this.pivot_y)
|
| - canvas:rotate(this.angle)
|
| - canvas:translate(-this.pivot_x, -this.pivot_y)
|
| + canvas:translate(self.pivot_x, self.pivot_y)
|
| + canvas:rotate(self.angle)
|
| + canvas:translate(-self.pivot_x, -self.pivot_y)
|
| + drawSlideProc(canvas)
|
|
|
| - this.angle = this.angle + this.angle_delta
|
| - return this
|
| + self.angle = self.angle + self.angle_delta
|
| + return self
|
| end
|
| }
|
| end
|
| @@ -135,34 +223,36 @@ function spawn_scale_animation()
|
| scale_limit = 0.2,
|
| pivot_x = 320,
|
| pivot_y = 240,
|
| - proc = function (this, canvas)
|
| - if this.scale < this.scale_limit then
|
| - this.scale = this.scale_limit
|
| - this.scale_delta = 1 / this.scale_delta
|
| + proc = function (self, canvas, drawSlideProc)
|
| + if self.scale < self.scale_limit then
|
| + self.scale = self.scale_limit
|
| + self.scale_delta = 1 / self.scale_delta
|
| end
|
| - if this.scale > 1 then
|
| + if self.scale > 1 then
|
| + drawSlideProc(canvas)
|
| return nil
|
| end
|
| - canvas:translate(this.pivot_x, this.pivot_y)
|
| - canvas:scale(this.scale, this.scale)
|
| - canvas:translate(-this.pivot_x, -this.pivot_y)
|
| + canvas:translate(self.pivot_x, self.pivot_y)
|
| + canvas:scale(self.scale, self.scale)
|
| + canvas:translate(-self.pivot_x, -self.pivot_y)
|
| + drawSlideProc(canvas)
|
|
|
| - this.scale = this.scale * this.scale_delta
|
| - return this
|
| + self.scale = self.scale * self.scale_delta
|
| + return self
|
| end
|
| }
|
| end
|
|
|
| function onDrawContent(canvas)
|
| - if gCurrAnimation then
|
| - gCurrAnimation = gCurrAnimation:proc(canvas)
|
| + local drawSlideProc = function(canvas)
|
| + drawSlide(canvas, gSlides[gSlideIndex], gTemplate, gPaints)
|
| end
|
|
|
| - drawSlide(canvas, gSlides[gSlideIndex], gTemplate, gPaints)
|
| -
|
| if gCurrAnimation then
|
| + gCurrAnimation = gCurrAnimation:proc(canvas, drawSlideProc)
|
| return true
|
| else
|
| + drawSlideProc(canvas)
|
| return false
|
| end
|
| end
|
|
|