From 86217d831d70949f9dde6a60f821d3f357558bdf Mon Sep 17 00:00:00 2001 From: reed Date: Sat, 25 Oct 2014 20:44:40 -0700 Subject: add saveLayer to lua BUG=skia: TBR= Review URL: https://codereview.chromium.org/679903002 --- resources/slides.lua | 141 +++++++++++++++------------------------------ resources/slides_utils.lua | 75 ++++++++++++++++++++++++ 2 files changed, 121 insertions(+), 95 deletions(-) create mode 100644 resources/slides_utils.lua (limited to 'resources') diff --git a/resources/slides.lua b/resources/slides.lua index 419e812cfd..30f146d766 100644 --- a/resources/slides.lua +++ b/resources/slides.lua @@ -1,78 +1,12 @@ -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) .. " }" - elseif type(v) == "string" then - str = str .. '"' .. v .. '"' - else - str = str .. tostring(v) - end - end - return str -end +gPath = "/skia/trunk/resources/" -function trim_ws(s) - return s:match("^%s*(.*)") +function load_file(file) + package.path = package.path .. ";" .. gPath .. file .. ".lua" + require(file) end -function count_hypens(s) - local leftover = s:match("^-*(.*)") - 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") - for i = 1, #slide do - local node = slide[i] - for j = 0, node.indent do - io.write(" ") - end - io.write("{ ") - io.write(tostr(node)) - io.write(" },\n") - end - io.write("},\n") -end - -function pretty_print_slides(slides) - io.write("gSlides = {\n") - for i = 1, #slides do - pretty_print_slide(slides[i]) - end - io.write("}\n") -end +load_file("slides_utils") gSlides = parse_file(io.open("/skia/trunk/resources/slides_content.lua", "r")) @@ -151,7 +85,7 @@ 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:setImageFilter(Sk.newBlurImageFilter(sigma, sigma)) paint:setAlpha(alpha) end @@ -244,28 +178,6 @@ 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 - function new_drawable_picture(pic) return { picture = pic, @@ -288,6 +200,44 @@ function new_drawable_image(img) } 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 + +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 + function convert_to_picture_drawable(slide) local rec = Sk.newPictureRecorder() drawSlide(rec:beginRecording(640, 480), slide, gTemplate) @@ -300,7 +250,8 @@ function convert_to_image_drawable(slide) return new_drawable_image(surf:newImageSnapshot()) end -gMakeDrawable = convert_to_picture_drawable +-- gMakeDrawable = convert_to_picture_drawable +gMakeDrawable = new_drawable_slide function spawn_transition(prevSlide, nextSlide, is_forward) local transition diff --git a/resources/slides_utils.lua b/resources/slides_utils.lua new file mode 100644 index 0000000000..29c0c7176c --- /dev/null +++ b/resources/slides_utils.lua @@ -0,0 +1,75 @@ +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) .. " }" + elseif type(v) == "string" then + str = str .. '"' .. v .. '"' + else + str = str .. tostring(v) + end + end + return str +end + +function trim_ws(s) + return s:match("^%s*(.*)") +end + +function count_hypens(s) + local leftover = s:match("^-*(.*)") + 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") + for i = 1, #slide do + local node = slide[i] + for j = 0, node.indent do + io.write(" ") + end + io.write("{ ") + io.write(tostr(node)) + io.write(" },\n") + end + io.write("},\n") +end + +function pretty_print_slides(slides) + io.write("gSlides = {\n") + for i = 1, #slides do + pretty_print_slide(slides[i]) + end + io.write("}\n") +end + -- cgit v1.2.3