| OLD | NEW |
| 1 function tostr(t) |
| 2 local str = "" |
| 3 for k, v in next, t do |
| 4 if #str > 0 then |
| 5 str = str .. ", " |
| 6 end |
| 7 if type(k) == "number" then |
| 8 str = str .. "[" .. k .. "] = " |
| 9 else |
| 10 str = str .. tostring(k) .. " = " |
| 11 end |
| 12 if type(v) == "table" then |
| 13 str = str .. "{ " .. tostr(v) .. " }" |
| 14 elseif type(v) == "string" then |
| 15 str = str .. '"' .. v .. '"' |
| 16 else |
| 17 str = str .. tostring(v) |
| 18 end |
| 19 end |
| 20 return str |
| 21 end |
| 22 |
| 23 |
| 24 function trim_ws(s) |
| 25 return s:match("^%s*(.*)") |
| 26 end |
| 27 |
| 28 function count_hypens(s) |
| 29 local leftover = s:match("^-*(.*)") |
| 30 return string.len(s) - string.len(leftover) |
| 31 end |
| 32 |
| 33 function parse_file(file) |
| 34 local slides = {} |
| 35 local block = {} |
| 36 |
| 37 for line in file:lines() do |
| 38 local s = trim_ws(line) |
| 39 if #s == 0 then -- done with a block |
| 40 if #block > 0 then |
| 41 slides[#slides + 1] = block |
| 42 block = {} |
| 43 end |
| 44 else |
| 45 local n = count_hypens(s) |
| 46 block[#block + 1] = { |
| 47 indent = n, |
| 48 text = trim_ws(s:sub(n + 1, -1)) |
| 49 } |
| 50 end |
| 51 end |
| 52 return slides |
| 53 end |
| 54 |
| 55 function pretty_print_slide(slide) |
| 56 io.write("{\n") |
| 57 for i = 1, #slide do |
| 58 local node = slide[i] |
| 59 for j = 0, node.indent do |
| 60 io.write(" ") |
| 61 end |
| 62 io.write("{ ") |
| 63 io.write(tostr(node)) |
| 64 io.write(" },\n") |
| 65 end |
| 66 io.write("},\n") |
| 67 end |
| 68 |
| 69 function pretty_print_slides(slides) |
| 70 io.write("gSlides = {\n") |
| 71 for i = 1, #slides do |
| 72 pretty_print_slide(slides[i]) |
| 73 end |
| 74 io.write("}\n") |
| 75 end |
| 76 |
| 77 gSlides = parse_file(io.open("/skia/trunk/resources/slides_content.lua", "r")) |
| 1 | 78 |
| 2 function make_paint(size, color) | 79 function make_paint(size, color) |
| 3 local paint = Sk.newPaint(); | 80 local paint = Sk.newPaint(); |
| 4 paint:setAntiAlias(true) | 81 paint:setAntiAlias(true) |
| 5 paint:setSubpixelText(true) | 82 paint:setSubpixelText(true) |
| 6 paint:setTextSize(size) | 83 paint:setTextSize(size) |
| 7 paint:setColor(color) | 84 paint:setColor(color) |
| 8 return paint | 85 return paint |
| 9 end | 86 end |
| 10 | 87 |
| 11 function find_paint(paints, style) | 88 function drawSlide(canvas, slide, template, paints) |
| 12 if not style then | 89 local scale = 1.15 |
| 13 style = "child" | 90 local y = 0 |
| 14 end | 91 for i = 1, #slide do |
| 15 local paint = paints[style] | 92 local node = slide[i] |
| 16 return paint | 93 local temp = template[node.indent + 1] |
| 17 end | 94 local paint = paints[node.indent + 1] |
| 18 | 95 local fm = paint:getFontMetrics() |
| 19 function draw_node(canvas, node, x, y, paints) | 96 y = y - fm.ascent * scale |
| 20 if node.text then | 97 canvas:drawText(node.text, temp.x, y, paint) |
| 21 local paint = find_paint(paints, node.style) | 98 y = y + fm.descent * scale |
| 22 canvas:drawText(node.text, x, y, paint) | |
| 23 end | |
| 24 if node.draw then | |
| 25 node.draw(canvas) | |
| 26 end | 99 end |
| 27 end | 100 end |
| 28 | 101 |
| 29 function drawSlide(canvas, slide, template, paints) | |
| 30 draw_node(canvas, slide, template.title.x, template.title.y, paints) | |
| 31 | |
| 32 if slide.children then | |
| 33 local x = template.child.x | |
| 34 local y = template.child.y | |
| 35 local dy = template.child.dy | |
| 36 for i = 1, #slide.children do | |
| 37 draw_node(canvas, slide.children[i], x, y, paints) | |
| 38 y = y + dy | |
| 39 end | |
| 40 end | |
| 41 end | |
| 42 | |
| 43 function slide_transition(prev, next, is_forward) | 102 function slide_transition(prev, next, is_forward) |
| 44 local rec = { | 103 local rec = { |
| 45 proc = function(self, canvas, drawSlideProc) | 104 proc = function(self, canvas, drawSlideProc) |
| 46 if self:isDone() then | 105 if self:isDone() then |
| 47 drawSlideProc(canvas) | 106 drawSlideProc(canvas) |
| 48 return nil | 107 return nil |
| 49 end | 108 end |
| 50 self.prevDrawable:draw(canvas, self.curr_x, 0) | 109 self.prevDrawable:draw(canvas, self.curr_x, 0) |
| 51 self.nextDrawable:draw(canvas, self.curr_x + 640, 0) | 110 self.nextDrawable:draw(canvas, self.curr_x + 640, 0) |
| 52 self.curr_x = self.curr_x + self.step_x | 111 self.curr_x = self.curr_x + self.step_x |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 106 self.prev_a = (640 - self.prev_x) / 640 | 165 self.prev_a = (640 - self.prev_x) / 640 |
| 107 self.next_a = 1 - self.prev_a | 166 self.next_a = 1 - self.prev_a |
| 108 end | 167 end |
| 109 end | 168 end |
| 110 return rec | 169 return rec |
| 111 end | 170 end |
| 112 | 171 |
| 113 --------------------------------------------------------------------------------
------ | 172 --------------------------------------------------------------------------------
------ |
| 114 | 173 |
| 115 gTemplate = { | 174 gTemplate = { |
| 116 title = { x = 10, y = 64, textSize = 64 }, | 175 { x = 10, textSize = 40, bullet = "" }, |
| 117 child = { x = 40, y = 120, dy = 50, textSize = 40 }, | 176 { x = 40, textSize = 30, bullet = "\xE2\x80\xA2" }, |
| 177 { x = 70, textSize = 20, bullet = "\xE2\x97\xA6" }, |
| 118 } | 178 } |
| 119 | 179 |
| 120 gPaints = {} | 180 gPaints = { |
| 121 gPaints.title = make_paint(gTemplate.title.textSize, { a=1, r=0, g=0, b=0 } ) | 181 make_paint(gTemplate[1].textSize, { a=1, r=0, g=0, b=0 } ), |
| 122 gPaints.child = make_paint(gTemplate.child.textSize, { a=.75, r=0, g=0, b=0 } ) | 182 make_paint(gTemplate[2].textSize, { a=1, r=1, g=0, b=0 } ), |
| 183 make_paint(gTemplate[3].textSize, { a=1, r=0, g=1, b=0 } ), |
| 184 } |
| 123 | 185 |
| 124 gRedPaint = Sk.newPaint() | 186 gRedPaint = Sk.newPaint() |
| 125 gRedPaint:setAntiAlias(true) | 187 gRedPaint:setAntiAlias(true) |
| 126 gRedPaint:setColor{a=1, r=1, g=0, b=0 } | 188 gRedPaint:setColor{a=1, r=1, g=0, b=0 } |
| 127 | 189 |
| 128 gSlides = { | |
| 129 { text = "Title1", style="title", color = { a=1, r=1, g=0, b=0 }, | |
| 130 children = { | |
| 131 { text = "bullet 1", style = "child" }, | |
| 132 { text = "bullet 2", style = "child" }, | |
| 133 { text = "bullet 3", style = "child" }, | |
| 134 { draw = function (canvas) | |
| 135 canvas:drawOval({left=300, top=300, right=400, bottom=400},
gRedPaint) | |
| 136 end }, | |
| 137 }, | |
| 138 transition = fade_slide_transition | |
| 139 }, | |
| 140 { text = "Title2", style="title", color = { a=1, r=0, g=1, b=0 }, | |
| 141 children = { | |
| 142 { text = "bullet uno", style = "child" }, | |
| 143 { text = "bullet 2", style = "child" }, | |
| 144 { text = "bullet tres", style = "child" }, | |
| 145 }, | |
| 146 transition = slide_transition | |
| 147 }, | |
| 148 { text = "Title3", style="title", | |
| 149 children = { | |
| 150 { text = "bullet 1", style = "child", }, | |
| 151 { text = "bullet 2", style = "child", color = { r=0, g=0, b=1 } }, | |
| 152 { text = "bullet 3", style = "child" }, | |
| 153 } | |
| 154 } | |
| 155 } | |
| 156 | |
| 157 --------------------------------------------------------------------------------
------ | |
| 158 function tostr(t) | |
| 159 local str = "" | |
| 160 for k, v in next, t do | |
| 161 if #str > 0 then | |
| 162 str = str .. ", " | |
| 163 end | |
| 164 if type(k) == "number" then | |
| 165 str = str .. "[" .. k .. "] = " | |
| 166 else | |
| 167 str = str .. tostring(k) .. " = " | |
| 168 end | |
| 169 if type(v) == "table" then | |
| 170 str = str .. "{ " .. tostr(v) .. " }" | |
| 171 else | |
| 172 str = str .. tostring(v) | |
| 173 end | |
| 174 end | |
| 175 return str | |
| 176 end | |
| 177 | |
| 178 -- animation.proc is passed the canvas before drawing. | 190 -- animation.proc is passed the canvas before drawing. |
| 179 -- The animation.proc returns itself or another animation (which means keep anim
ating) | 191 -- The animation.proc returns itself or another animation (which means keep anim
ating) |
| 180 -- or it returns nil, which stops the animation. | 192 -- or it returns nil, which stops the animation. |
| 181 -- | 193 -- |
| 182 local gCurrAnimation | 194 local gCurrAnimation |
| 183 | 195 |
| 184 gSlideIndex = 1 | 196 gSlideIndex = 1 |
| 185 | 197 |
| 186 function next_slide() | 198 function next_slide() |
| 187 local prev = gSlides[gSlideIndex] | 199 local prev = gSlides[gSlideIndex] |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 229 | 241 |
| 230 function spawn_transition(prevSlide, nextSlide, is_forward) | 242 function spawn_transition(prevSlide, nextSlide, is_forward) |
| 231 local transition | 243 local transition |
| 232 if is_forward then | 244 if is_forward then |
| 233 transition = prevSlide.transition | 245 transition = prevSlide.transition |
| 234 else | 246 else |
| 235 transition = nextSlide.transition | 247 transition = nextSlide.transition |
| 236 end | 248 end |
| 237 | 249 |
| 238 if not transition then | 250 if not transition then |
| 239 return | 251 transition = fade_slide_transition |
| 240 end | 252 end |
| 241 | 253 |
| 242 local rec = Sk.newPictureRecorder() | 254 local rec = Sk.newPictureRecorder() |
| 243 | 255 |
| 244 drawSlide(rec:beginRecording(640, 480), prevSlide, gTemplate, gPaints) | 256 drawSlide(rec:beginRecording(640, 480), prevSlide, gTemplate, gPaints) |
| 245 local prevDrawable = new_drawable_picture(rec:endRecording()) | 257 local prevDrawable = new_drawable_picture(rec:endRecording()) |
| 246 | 258 |
| 247 drawSlide(rec:beginRecording(640, 480), nextSlide, gTemplate, gPaints) | 259 drawSlide(rec:beginRecording(640, 480), nextSlide, gTemplate, gPaints) |
| 248 local nextDrawable = new_drawable_picture(rec:endRecording()) | 260 local nextDrawable = new_drawable_picture(rec:endRecording()) |
| 249 | 261 |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 327 } | 339 } |
| 328 | 340 |
| 329 function onCharHandler(uni) | 341 function onCharHandler(uni) |
| 330 local proc = keyProcs[uni] | 342 local proc = keyProcs[uni] |
| 331 if proc then | 343 if proc then |
| 332 proc() | 344 proc() |
| 333 return true | 345 return true |
| 334 end | 346 end |
| 335 return false | 347 return false |
| 336 end | 348 end |
| OLD | NEW |