aboutsummaryrefslogtreecommitdiffhomepage
path: root/resources/slides.lua
diff options
context:
space:
mode:
authorGravatar Hal Canary <halcanary@google.com>2017-12-08 10:21:31 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-12-08 17:16:00 +0000
commitc465d13e6fca5e171bde45d35b2dd43117f4702e (patch)
tree588b2b31ffba95ed8eecb5327cb4335f35c8c1bd /resources/slides.lua
parent4bcef3c40ad8d3a16bbca4ab74fa15256fb4b125 (diff)
resources: orgainize directory.
Should make it easier to ask just for images. Change-Id: If821743dc924c4bfbc6b2b2d29b14affde7b3afd Reviewed-on: https://skia-review.googlesource.com/82684 Commit-Queue: Hal Canary <halcanary@google.com> Reviewed-by: Leon Scroggins <scroggo@google.com>
Diffstat (limited to 'resources/slides.lua')
-rw-r--r--resources/slides.lua356
1 files changed, 0 insertions, 356 deletions
diff --git a/resources/slides.lua b/resources/slides.lua
deleted file mode 100644
index 9d61a87273..0000000000
--- a/resources/slides.lua
+++ /dev/null
@@ -1,356 +0,0 @@
-gShowBounds = false
-gUseBlurInTransitions = false
-
-gPath = "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")
-
-gSlides = parse_file(io.open("resources/slides_content2.lua", "r"))
-
-function make_rect(l, t, r, b)
- return { left = l, top = t, right = r, bottom = b }
-end
-
-function make_paint(typefacename, style, size, color)
- local paint = Sk.newPaint();
- paint:setAntiAlias(true)
- paint:setSubpixelText(true)
- paint:setTypeface(Sk.newTypeface(typefacename, style))
- paint:setTextSize(size)
- paint:setColor(color)
- return paint
-end
-
-function draw_bullet(canvas, x, y, paint, indent)
- if 0 == indent then
- return
- end
- local ps = paint:getTextSize()
- local cx = x - ps * .8
- local cy = y - ps * .4
- local radius = ps * .2
- canvas:drawCircle(cx, cy, radius, paint)
-end
-
-function stroke_rect(canvas, rect, color)
- local paint = Sk.newPaint()
- paint:setStroke(true);
- paint:setColor(color)
- canvas:drawRect(rect, paint)
-end
-
-function drawSlide(canvas, slide, master_template)
-
- if #slide == 1 then
- template = master_template.title
- canvas:drawText(slide[1].text, 320, 240, template[1])
- return
- end
-
- template = master_template.slide
-
- local x = template.margin_x
- local y = template.margin_y
- local scale = 1.25
-
- if slide.blockstyle == "code" then
- local paint = master_template.codePaint
- local fm = paint:getFontMetrics()
- local height = #slide * (fm.descent - fm.ascent)
- y = (480 - height) / 2
- for i = 1, #slide do
- local node = slide[i]
- y = y - fm.ascent * scale
- canvas:drawText(node.text, x, y, paint)
- y = y + fm.descent * scale
- end
- return
- end
-
- for i = 1, #slide do
- local node = slide[i]
- local paint = template[node.indent + 1].paint
- local extra_dy = template[node.indent + 1].extra_dy
- local fm = paint:getFontMetrics()
- local x_offset = -fm.ascent * node.indent * 1.25
-
- local bounds = make_rect(x + x_offset, y, 620, 640)
- local blob, newBottom = Sk.newTextBlob(node.text, bounds, paint)
- draw_bullet(canvas, x + x_offset, y - fm.ascent, paint, node.indent)
- canvas:drawTextBlob(blob, 0, 0, paint)
- y = newBottom + paint:getTextSize() * .5 + extra_dy
-
- if gShowBounds then
- bounds.bottom = newBottom
- stroke_rect(canvas, bounds, {a=1,r=0,g=1,b=0})
- stroke_rect(canvas, blob:bounds(), {a=1,r=1,g=0,b=0})
- end
-
- end
-end
-
---------------------------------------------------------------------------------------
-function make_tmpl(paint, extra_dy)
- return { paint = paint, extra_dy = extra_dy }
-end
-
-function SkiaPoint_make_template()
- normal = Sk.newFontStyle()
- bold = Sk.newFontStyle(700)
- local title = {
- margin_x = 30,
- margin_y = 100,
- }
- title[1] = make_paint("Arial", bold, 45, { a=1, r=1, g=1, b=1 })
- title[1]:setTextAlign("center")
- title[2] = make_paint("Arial", bold, 25, { a=1, r=.75, g=.75, b=.75 })
- title[2]:setTextAlign("center")
-
- local slide = {
- margin_x = 20,
- margin_y = 25,
- }
- slide[1] = make_tmpl(make_paint("Arial", bold, 35, { a=1, r=1, g=1, b=1 }), 18)
- slide[2] = make_tmpl(make_paint("Arial", normal, 25, { a=1, r=1, g=1, b=1 }), 10)
- slide[3] = make_tmpl(make_paint("Arial", normal, 20, { a=1, r=.9, g=.9, b=.9 }), 5)
-
- return {
- title = title,
- slide = slide,
- codePaint = make_paint("Courier", normal, 20, { a=1, r=.9, g=.9, b=.9 }),
- }
-end
-
-gTemplate = SkiaPoint_make_template()
-
-gRedPaint = Sk.newPaint()
-gRedPaint:setAntiAlias(true)
-gRedPaint:setColor{a=1, r=1, g=0, b=0 }
-
--- 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 new_drawable_picture(pic)
- return {
- picture = pic,
- width = pic:width(),
- height = pic:height(),
- draw = function (self, canvas, x, y, paint)
- canvas:drawPicture(self.picture, x, y, paint)
- end
- }
-end
-
-function new_drawable_image(img)
- return {
- image = img,
- width = img:width(),
- height = img:height(),
- draw = function (self, canvas, x, y, paint)
- canvas:drawImage(self.image, x, y, paint)
- end
- }
-end
-
-function convert_to_picture_drawable(slide)
- local rec = Sk.newPictureRecorder()
- drawSlide(rec:beginRecording(640, 480), slide, gTemplate)
- return new_drawable_picture(rec:endRecording())
-end
-
-function convert_to_image_drawable(slide)
- local surf = Sk.newRasterSurface(640, 480)
- drawSlide(surf:getCanvas(), slide, gTemplate)
- return new_drawable_image(surf:newImageSnapshot())
-end
-
-function new_drawable_slide(slide)
- return {
- slide = slide,
- draw = function (self, canvas, x, y, paint)
- if (nil == paint or ("number" == type(paint) and (1 == paint))) then
- canvas:save()
- else
- canvas:saveLayer(paint)
- end
- canvas:translate(x, y)
- drawSlide(canvas, self.slide, gTemplate)
- canvas:restore()
- end
- }
-end
-
-gNewDrawableFactory = {
- default = new_drawable_slide,
- picture = convert_to_picture_drawable,
- image = convert_to_image_drawable,
-}
-
------------------------------------------------------------------------------
-
-function next_slide()
- local prev = gSlides[gSlideIndex]
-
- if gSlideIndex < #gSlides then
- gSlideIndex = gSlideIndex + 1
- spawn_transition(prev, gSlides[gSlideIndex], true)
- end
-end
-
-function prev_slide()
- local prev = gSlides[gSlideIndex]
-
- if gSlideIndex > 1 then
- gSlideIndex = gSlideIndex - 1
- spawn_transition(prev, gSlides[gSlideIndex], false)
- end
-end
-
-gDrawableType = "default"
-
-load_file("slides_transitions")
-
-function spawn_transition(prevSlide, nextSlide, is_forward)
- local transition
- if is_forward then
- transition = gTransitionTable[nextSlide.transition]
- else
- transition = gTransitionTable[prevSlide.transition]
- end
-
- if not transition then
- transition = fade_slide_transition
- end
-
- local prevDrawable = gNewDrawableFactory[gDrawableType](prevSlide)
- local nextDrawable = gNewDrawableFactory[gDrawableType](nextSlide)
- gCurrAnimation = transition(prevDrawable, nextDrawable, is_forward)
-end
-
---------------------------------------------------------------------------------------
-
-function spawn_rotate_animation()
- gCurrAnimation = {
- angle = 0,
- angle_delta = 5,
- pivot_x = 320,
- pivot_y = 240,
- proc = function (self, canvas, drawSlideProc)
- if self.angle >= 360 then
- drawSlideProc(canvas)
- return nil
- end
- canvas:translate(self.pivot_x, self.pivot_y)
- canvas:rotate(self.angle)
- canvas:translate(-self.pivot_x, -self.pivot_y)
- drawSlideProc(canvas)
-
- self.angle = self.angle + self.angle_delta
- return self
- end
- }
-end
-
-function spawn_scale_animation()
- gCurrAnimation = {
- scale = 1,
- scale_delta = .95,
- scale_limit = 0.2,
- pivot_x = 320,
- pivot_y = 240,
- 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 self.scale > 1 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)
- drawSlideProc(canvas)
-
- self.scale = self.scale * self.scale_delta
- return self
- end
- }
-end
-
-local bgPaint = nil
-
-function draw_bg(canvas)
- if not bgPaint then
- bgPaint = Sk.newPaint()
- local grad = Sk.newLinearGradient( 0, 0, { a=1, r=0, g=0, b=.3 },
- 640, 480, { a=1, r=0, g=0, b=.8 })
- bgPaint:setShader(grad)
- bgPaint:setDither(true)
- end
-
- canvas:drawPaint(bgPaint)
-end
-
-function onDrawContent(canvas, width, height)
- local matrix = Sk.newMatrix()
- matrix:setRectToRect(make_rect(0, 0, 640, 480), make_rect(0, 0, width, height), "center")
- canvas:concat(matrix)
-
- draw_bg(canvas)
-
- local drawSlideProc = function(canvas)
- drawSlide(canvas, gSlides[gSlideIndex], gTemplate)
- end
-
- if gCurrAnimation then
- gCurrAnimation = gCurrAnimation:proc(canvas, drawSlideProc)
- return true
- else
- drawSlideProc(canvas)
- return false
- end
-end
-
-function onClickHandler(x, y)
- return false
-end
-
-local keyProcs = {
- n = next_slide,
- p = prev_slide,
- r = spawn_rotate_animation,
- s = spawn_scale_animation,
- ["="] = function () scale_text_delta(gTemplate, 1) end,
- ["-"] = function () scale_text_delta(gTemplate, -1) end,
-
- b = function () gShowBounds = not gShowBounds end,
- B = function () gUseBlurInTransitions = not gUseBlurInTransitions end,
-
- ["1"] = function () gDrawableType = "default" end,
- ["2"] = function () gDrawableType = "picture" end,
- ["3"] = function () gDrawableType = "image" end,
-}
-
-function onCharHandler(uni)
- local proc = keyProcs[uni]
- if proc then
- proc()
- return true
- end
- return false
-end