aboutsummaryrefslogtreecommitdiffhomepage
path: root/resources
diff options
context:
space:
mode:
authorGravatar reed <reed@chromium.org>2014-10-29 20:36:05 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2014-10-29 20:36:05 -0700
commit07dada770b0af4955031806f0c1b8016fa49b65e (patch)
tree5e22f46bf4c612326222a778763ad91d57ed6497 /resources
parent7a6184fdf717a1da0c6e1e37b942b17fdaa236d3 (diff)
break transitions into separate file
BUG=skia: TBR= NOTRY=True Review URL: https://codereview.chromium.org/692543004
Diffstat (limited to 'resources')
-rw-r--r--resources/slides.lua99
-rw-r--r--resources/slides_content.lua10
-rw-r--r--resources/slides_transitions.lua206
-rw-r--r--resources/slides_utils.lua57
4 files changed, 256 insertions, 116 deletions
diff --git a/resources/slides.lua b/resources/slides.lua
index 30f146d766..06bb81056f 100644
--- a/resources/slides.lua
+++ b/resources/slides.lua
@@ -2,8 +2,10 @@
gPath = "/skia/trunk/resources/"
function load_file(file)
+ local prev_path = package.path
package.path = package.path .. ";" .. gPath .. file .. ".lua"
require(file)
+ package.path = prev_path
end
load_file("slides_utils")
@@ -44,97 +46,6 @@ function drawSlide(canvas, slide, template)
end
end
-function scale_text_delta(template, delta)
- template = template.slide
- for i = 1, #template do
- local paint = template[i].paint
- paint:setTextSize(paint:getTextSize() + delta)
- 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
- self.prevDrawable:draw(canvas, self.curr_x, 0)
- self.nextDrawable:draw(canvas, self.curr_x + 640, 0)
- self.curr_x = self.curr_x + self.step_x
- return self
- end
- }
- if is_forward then
- rec.prevDrawable = prev
- rec.nextDrawable = next
- rec.curr_x = 0
- rec.step_x = -15
- rec.isDone = function (self) return self.curr_x <= -640 end
- else
- rec.prevDrawable = next
- rec.nextDrawable = prev
- rec.curr_x = -640
- rec.step_x = 15
- rec.isDone = function (self) return self.curr_x >= 0 end
- end
- return rec
-end
-
-function sqr(value) return value * value end
-
-function set_blur(paint, alpha)
- local sigma = sqr(1 - alpha) * 20
--- paint:setImageFilter(Sk.newBlurImageFilter(sigma, sigma))
- paint:setAlpha(alpha)
-end
-
-function fade_slide_transition(prev, next, is_forward)
- local rec = {
- paint = Sk.newPaint(),
- prevDrawable = prev,
- nextDrawable = next,
- proc = function(self, canvas, drawSlideProc)
- if self:isDone() then
- drawSlideProc(canvas)
- return nil
- end
-
- set_blur(self.paint, self.prev_a)
- self.prevDrawable:draw(canvas, self.prev_x, 0, self.paint)
-
- set_blur(self.paint, self.next_a)
- self.nextDrawable:draw(canvas, self.next_x, 0, self.paint)
- self:step()
- return self
- end
- }
- if is_forward then
- rec.prev_x = 0
- rec.prev_a = 1
- rec.next_x = 640
- rec.next_a = 0
- rec.isDone = function (self) return self.next_x <= 0 end
- rec.step = function (self)
- self.next_x = self.next_x - 20
- self.next_a = (640 - self.next_x) / 640
- self.prev_a = 1 - self.next_a
- end
- else
- rec.prev_x = 0
- rec.prev_a = 1
- rec.next_x = 0
- rec.next_a = 0
- rec.isDone = function (self) return self.prev_x >= 640 end
- rec.step = function (self)
- self.prev_x = self.prev_x + 20
- self.prev_a = (640 - self.prev_x) / 640
- self.next_a = 1 - self.prev_a
- end
- end
- return rec
-end
-
--------------------------------------------------------------------------------------
function make_tmpl(paint, extra_dy)
return { paint = paint, extra_dy = extra_dy }
@@ -253,12 +164,14 @@ end
-- gMakeDrawable = convert_to_picture_drawable
gMakeDrawable = new_drawable_slide
+load_file("slides_transitions")
+
function spawn_transition(prevSlide, nextSlide, is_forward)
local transition
if is_forward then
- transition = prevSlide.transition
+ transition = gTransitionTable[nextSlide.transition]
else
- transition = nextSlide.transition
+ transition = gTransitionTable[prevSlide.transition]
end
if not transition then
diff --git a/resources/slides_content.lua b/resources/slides_content.lua
index 85f3a26295..a2f376af08 100644
--- a/resources/slides_content.lua
+++ b/resources/slides_content.lua
@@ -1,4 +1,6 @@
-Skia Overview [Fall '13]
+Skia Overview 2014
+
+< transition =slide>
One API -- many backends
- Raster [8888, 565, A8]
@@ -8,6 +10,8 @@ One API -- many backends
- Picture
- Pipe
+<transition= fade>
+
One Team -- many clients
- Chrome
- ChromeOS
@@ -15,11 +19,15 @@ One Team -- many clients
- Android Framework
- 3rd parties (e.g. FireFox)
+<transition= rotate>
+
Optimize for CPU variety
- x86 - 32bit (SSE, SSE2, ...), 64bit
- Arm - thumb, arm, NEON, ... 64bit?
- MIPS (just starting)
+<transition= zoom>
+
Optimize for GPU variety
- Nvidia
- Qualcom
diff --git a/resources/slides_transitions.lua b/resources/slides_transitions.lua
new file mode 100644
index 0000000000..4a838a4717
--- /dev/null
+++ b/resources/slides_transitions.lua
@@ -0,0 +1,206 @@
+function scale_text_delta(template, delta)
+ template = template.slide
+ for i = 1, #template do
+ local paint = template[i].paint
+ paint:setTextSize(paint:getTextSize() + delta)
+ 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
+ self.prevDrawable:draw(canvas, self.curr_x, 0)
+ self.nextDrawable:draw(canvas, self.curr_x + 640, 0)
+ self.curr_x = self.curr_x + self.step_x
+ return self
+ end
+ }
+ if is_forward then
+ rec.prevDrawable = prev
+ rec.nextDrawable = next
+ rec.curr_x = 0
+ rec.step_x = -15
+ rec.isDone = function (self) return self.curr_x <= -640 end
+ else
+ rec.prevDrawable = next
+ rec.nextDrawable = prev
+ rec.curr_x = -640
+ rec.step_x = 15
+ rec.isDone = function (self) return self.curr_x >= 0 end
+ end
+ return rec
+end
+
+function sqr(value) return value * value end
+
+function set_blur(paint, alpha)
+ local sigma = sqr(1 - alpha) * 20
+-- paint:setImageFilter(Sk.newBlurImageFilter(sigma, sigma))
+ paint:setAlpha(alpha)
+end
+
+function fade_slide_transition(prev, next, is_forward)
+ local rec = {
+ paint = Sk.newPaint(),
+ prevDrawable = prev,
+ nextDrawable = next,
+ proc = function(self, canvas, drawSlideProc)
+ if self:isDone() then
+ drawSlideProc(canvas)
+ return nil
+ end
+
+ set_blur(self.paint, self.prev_a)
+ self.prevDrawable:draw(canvas, self.prev_x, 0, self.paint)
+
+ set_blur(self.paint, self.next_a)
+ self.nextDrawable:draw(canvas, self.next_x, 0, self.paint)
+ self:step()
+ return self
+ end
+ }
+ if is_forward then
+ rec.prev_x = 0
+ rec.prev_a = 1
+ rec.next_x = 640
+ rec.next_a = 0
+ rec.isDone = function (self) return self.next_x <= 0 end
+ rec.step = function (self)
+ self.next_x = self.next_x - 20
+ self.next_a = (640 - self.next_x) / 640
+ self.prev_a = 1 - self.next_a
+ end
+ else
+ rec.prev_x = 0
+ rec.prev_a = 1
+ rec.next_x = 0
+ rec.next_a = 0
+ rec.isDone = function (self) return self.prev_x >= 640 end
+ rec.step = function (self)
+ self.prev_x = self.prev_x + 20
+ self.prev_a = (640 - self.prev_x) / 640
+ self.next_a = 1 - self.prev_a
+ end
+ end
+ return rec
+end
+
+function fade_transition(prev, next, is_forward)
+ local rec = {
+ paint = Sk.newPaint(),
+ prevDrawable = prev,
+ nextDrawable = next,
+ proc = function(self, canvas, drawSlideProc)
+ if self:isDone() then
+ drawSlideProc(canvas)
+ return nil
+ end
+
+ set_blur(self.paint, self.prev_a)
+ self.prevDrawable:draw(canvas, 0, 0, self.paint)
+
+ set_blur(self.paint, self.next_a)
+ self.nextDrawable:draw(canvas, 0, 0, self.paint)
+ self:step()
+ return self
+ end
+ }
+ rec.prev_a = 1
+ rec.next_a = 0
+ rec.isDone = function (self) return self.next_a >= 1 end
+ rec.step = function (self)
+ self.prev_a = math.max(self.prev_a - 0.025, 0)
+ self.next_a = 1 - self.prev_a
+ end
+
+ return rec
+end
+
+function rotate_transition(prev, next, is_forward)
+ local rec = {
+ angle = 0,
+ prevDrawable = prev,
+ nextDrawable = next,
+ activeDrawable = prev,
+ proc = function(self, canvas, drawSlideProc)
+ if self:isDone() then
+ drawSlideProc(canvas)
+ return nil
+ end
+
+ canvas:save()
+ canvas:translate(320, 240)
+ canvas:rotate(self.angle)
+ canvas:translate(-320, -240)
+ self.activeDrawable:draw(canvas, 0, 0)
+ self:step()
+ return self
+ end,
+ isDone = function (self) return self.angle >= 360 or self.angle <= -360 end
+ }
+ if is_forward then
+ rec.step = function (self)
+ self.angle = self.angle + 10
+ if self.angle >= 180 then
+ self.activeDrawable = self.nextDrawable
+ end
+ end
+ else
+ rec.step = function (self)
+ self.angle = self.angle - 10
+ if self.angle <= -180 then
+ self.activeDrawable = self.nextDrawable
+ end
+ end
+ end
+ return rec
+end
+
+function zoom_transition(prev, next, is_forward)
+ local rec = {
+ scale = 1,
+ scale_delta = .95,
+ scale_limit = 0.2,
+ pivot_x = 320,
+ pivot_y = 240,
+ prevDrawable = prev,
+ nextDrawable = next,
+ activeDrawable = prev,
+ proc = function(self, canvas, drawSlideProc)
+ if self:isDone() then
+ drawSlideProc(canvas)
+ return nil
+ end
+
+ canvas:translate(self.pivot_x, self.pivot_y)
+ canvas:scale(self.scale, self.scale)
+ canvas:translate(-self.pivot_x, -self.pivot_y)
+ self.activeDrawable:draw(canvas, 0, 0)
+ self:step()
+ return self
+ end,
+ isDone = function (self) return self.scale > 1 end,
+ step = function (self)
+ if self.scale < self.scale_limit then
+ self.scale = self.scale_limit
+ self.scale_delta = 1 / self.scale_delta
+ self.activeDrawable = self.nextDrawable
+ end
+ self.scale = self.scale * self.scale_delta
+ end
+ }
+ return rec
+end
+
+gTransitionTable = {
+ fade = fade_transition,
+ slide = slide_transition,
+ fade_slide = fade_slide_transition,
+ rotate = rotate_transition,
+ zoom = zoom_transition,
+}
+
diff --git a/resources/slides_utils.lua b/resources/slides_utils.lua
index 29c0c7176c..a0b42b4425 100644
--- a/resources/slides_utils.lua
+++ b/resources/slides_utils.lua
@@ -29,30 +29,11 @@ function count_hypens(s)
return string.len(s) - string.len(leftover)
end
-function parse_file(file)
- local slides = {}
- local block = {}
-
- for line in file:lines() do
- local s = trim_ws(line)
- if #s == 0 then -- done with a block
- if #block > 0 then
- slides[#slides + 1] = block
- block = {}
- end
- else
- local n = count_hypens(s)
- block[#block + 1] = {
- indent = n,
- text = trim_ws(s:sub(n + 1, -1))
- }
- end
- end
- return slides
-end
-
function pretty_print_slide(slide)
io.write("{\n")
+ if slide.transition then
+ io.write(" transition = \"", slide.transition, "\",\n")
+ end
for i = 1, #slide do
local node = slide[i]
for j = 0, node.indent do
@@ -73,3 +54,35 @@ function pretty_print_slides(slides)
io.write("}\n")
end
+function parse_transition_type(s)
+ return s:match("^<%s*transition%s*=%s*(%a+)%s*>$")
+end
+
+function parse_file(file)
+ local slides = {}
+ local block = {}
+
+ for line in file:lines() do
+ local s = trim_ws(line)
+ if #s == 0 then -- done with a block
+ if #block > 0 then
+ slides[#slides + 1] = block
+ block = {}
+ end
+ else
+ local transition_type = parse_transition_type(s)
+ if transition_type then
+ block["transition"] = transition_type
+ else
+ local n = count_hypens(s)
+ block[#block + 1] = {
+ indent = n,
+ text = trim_ws(s:sub(n + 1, -1))
+ }
+ end
+ end
+ end
+-- pretty_print_slides(slides)
+ return slides
+end
+