Index: resources/slides.lua |
diff --git a/resources/slides.lua b/resources/slides.lua |
index 29ca8d13add98cdf279ef13ad3c03ca38becbe31..bae5206ac221e3e1406a5c8334df220cc4ec460a 100644 |
--- a/resources/slides.lua |
+++ b/resources/slides.lua |
@@ -1,42 +1,101 @@ |
+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 make_paint(size, color) |
- local paint = Sk.newPaint(); |
- paint:setAntiAlias(true) |
- paint:setSubpixelText(true) |
- paint:setTextSize(size) |
- paint:setColor(color) |
- return paint |
+ |
+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 find_paint(paints, style) |
- if not style then |
- style = "child" |
+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 |
- local paint = paints[style] |
- return paint |
+ return slides |
end |
-function draw_node(canvas, node, x, y, paints) |
- if node.text then |
- local paint = find_paint(paints, node.style) |
- canvas:drawText(node.text, x, y, paint) |
+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 |
- if node.draw then |
- node.draw(canvas) |
+ 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 |
+ |
+gSlides = parse_file(io.open("/skia/trunk/resources/slides_content.lua", "r")) |
+ |
+function make_paint(size, color) |
+ local paint = Sk.newPaint(); |
+ paint:setAntiAlias(true) |
+ paint:setSubpixelText(true) |
+ paint:setTextSize(size) |
+ paint:setColor(color) |
+ return paint |
end |
function drawSlide(canvas, slide, template, paints) |
- draw_node(canvas, slide, template.title.x, template.title.y, paints) |
- |
- if slide.children then |
- local x = template.child.x |
- local y = template.child.y |
- local dy = template.child.dy |
- for i = 1, #slide.children do |
- draw_node(canvas, slide.children[i], x, y, paints) |
- y = y + dy |
- end |
+ local scale = 1.15 |
+ local y = 0 |
+ for i = 1, #slide do |
+ local node = slide[i] |
+ local temp = template[node.indent + 1] |
+ local paint = paints[node.indent + 1] |
+ local fm = paint:getFontMetrics() |
+ y = y - fm.ascent * scale |
+ canvas:drawText(node.text, temp.x, y, paint) |
+ y = y + fm.descent * scale |
end |
end |
@@ -113,68 +172,21 @@ end |
-------------------------------------------------------------------------------------- |
gTemplate = { |
- title = { x = 10, y = 64, textSize = 64 }, |
- child = { x = 40, y = 120, dy = 50, textSize = 40 }, |
+ { x = 10, textSize = 40, bullet = "" }, |
+ { x = 40, textSize = 30, bullet = "\xE2\x80\xA2" }, |
+ { x = 70, textSize = 20, bullet = "\xE2\x97\xA6" }, |
} |
-gPaints = {} |
-gPaints.title = make_paint(gTemplate.title.textSize, { a=1, r=0, g=0, b=0 } ) |
-gPaints.child = make_paint(gTemplate.child.textSize, { a=.75, r=0, g=0, b=0 } ) |
+gPaints = { |
+ make_paint(gTemplate[1].textSize, { a=1, r=0, g=0, b=0 } ), |
+ make_paint(gTemplate[2].textSize, { a=1, r=1, g=0, b=0 } ), |
+ make_paint(gTemplate[3].textSize, { a=1, r=0, g=1, b=0 } ), |
+} |
gRedPaint = Sk.newPaint() |
gRedPaint:setAntiAlias(true) |
gRedPaint:setColor{a=1, r=1, g=0, b=0 } |
-gSlides = { |
- { text = "Title1", style="title", color = { a=1, r=1, g=0, b=0 }, |
- children = { |
- { text = "bullet 1", style = "child" }, |
- { text = "bullet 2", style = "child" }, |
- { text = "bullet 3", style = "child" }, |
- { draw = function (canvas) |
- canvas:drawOval({left=300, top=300, right=400, bottom=400}, gRedPaint) |
- end }, |
- }, |
- transition = fade_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 = slide_transition |
- }, |
- { text = "Title3", style="title", |
- children = { |
- { text = "bullet 1", style = "child", }, |
- { text = "bullet 2", style = "child", color = { r=0, g=0, b=1 } }, |
- { text = "bullet 3", style = "child" }, |
- } |
- } |
-} |
- |
--------------------------------------------------------------------------------------- |
-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. |
@@ -236,7 +248,7 @@ function spawn_transition(prevSlide, nextSlide, is_forward) |
end |
if not transition then |
- return |
+ transition = fade_slide_transition |
end |
local rec = Sk.newPictureRecorder() |