Chromium Code Reviews| Index: resources/slides2.lua |
| diff --git a/resources/slides.lua b/resources/slides2.lua |
| similarity index 73% |
| copy from resources/slides.lua |
| copy to resources/slides2.lua |
| index 43c9b3b32fa307d8f00d5146ed34335965c4a35f..a74a8d5bc6c6972fc786605937d64ef31ba0cdbd 100644 |
| --- a/resources/slides.lua |
| +++ b/resources/slides2.lua |
| @@ -290,42 +290,161 @@ function spawn_scale_animation() |
| } |
| 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 |
| +local bgPaint = Sk.newPaint() |
| +function draw_bg(canvas, w, h) |
| + bgPaint:setShader(Sk.newLinearGradient(0, 0, { a=1, r=0, g=0, b=.3 }, |
| + w, h, { a=1, r=0, g=0, b=.8 })) |
| 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) |
| +function draw_drag(canvas) |
| + local paint = Sk.newPaint() |
| + if gDragPts then |
| + local r = make_rect(gDragPts[1], gDragPts[2], gDragPts[3], gDragPts[4]) |
| + canvas:drawRect(r, paint) |
| + end |
| +end |
| + |
| +function setpt(array, index, x, y) |
| + local i = index * 2 - 1 |
| + array[i + 0] = x |
| + array[i + 1] = y |
| +end |
| + |
| +function make_patch_cubics(minX, minY, maxX, maxY) |
| + local dx = (maxX - minX) / 3 |
| + local dy = (maxY - minY) / 3 |
| + |
| + cubics = {} |
|
robertphillips
2014/11/07 18:02:54
// bottom
|
| + for i = 0, 2 do |
| + setpt(cubics, 1 + i, minX + dx * i, minY) |
| + end |
|
robertphillips
2014/11/07 18:02:54
// right
|
| + for i = 0, 2 do |
| + setpt(cubics, 4 + i, maxX, minY + dy * i) |
| + end |
|
robertphillips
2014/11/07 18:02:54
// top
|
| + for i = 0, 2 do |
| + setpt(cubics, 7 + i, maxX - dx * i, maxY) |
| + end |
|
robertphillips
2014/11/07 18:02:54
// left
|
| + for i = 0, 2 do |
| + setpt(cubics, 10 + i, minX, maxY - dy * i) |
| + end |
| + |
| + return cubics |
| +end |
| + |
| +gCubics = make_patch_cubics(10, 10, 630, 470) |
| + |
|
robertphillips
2014/11/07 18:02:54
There doesn't seem to be any way to change this gu
|
| +gPatchDelta = { x = 0, y = 0 } |
| + |
|
robertphillips
2014/11/07 18:02:54
distSq instead ?
|
| +function dist(x, y, x1, y1) |
| + local dx = x - x1 |
| + local dy = y - y1 |
| + return math.sqrt(dx * dx + dy * dy) |
| +end |
| + |
| +function find_cubics_index(x, y) |
| + x = x - gPatchDelta.x |
| + y = y - gPatchDelta.y |
| + for i = 1, 12 do |
| + local index = i * 2 - 1 |
| + local cx = gCubics[index + 0] |
| + local cy = gCubics[index + 1] |
| + if dist(x, y, cx, cy) <= 5 then |
| + return index |
| + end |
| + end |
| + return nil |
| +end |
| + |
| +function set_cubic_pt(index, x, y) |
| + gCubics[index + 0] = x - gPatchDelta.x |
| + gCubics[index + 1] = y - gPatchDelta.y |
| +end |
| + |
| +function draw_ctrl(canvas, x, y, paint) |
| + local n = 4 |
| + canvas:drawRect(make_rect(x - n, y - n, x + n, y + n), paint) |
| +end |
| + |
| +gBlackPaint = Sk.newPaint() |
| - draw_bg(canvas) |
| +function show_patch(canvas, paint, width, height) |
| + local colors = nil |
| + local texs = nil |
| + if width and height then |
| + texs = { 0, 0, width, 0, width, height, 0, height } |
| + end |
| + |
| + canvas:save() |
| + canvas:translate(gPatchDelta.x, gPatchDelta.y) |
| + canvas:drawPatch(gCubics, colors, texs, paint) |
| + |
| + for i = 1, 12 do |
| + local index = i * 2 - 1 |
| + local x = gCubics[index + 0] |
| + local y = gCubics[index + 1] |
| + draw_ctrl(canvas, x, y, gBlackPaint) |
| + end |
| + |
| + canvas:restore() |
| +end |
| + |
| +gCTM = Sk.newMatrix() |
| + |
| +function drawSlideIntoCanvas(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 |
| +function onDrawContent(canvas, width, height) |
|
robertphillips
2014/11/07 18:02:54
add some comments here ?
// We render the slide c
|
| + gCTM:setRectToRect(make_rect(0, 0, 640, 480), make_rect(0, 0, width, height), "center") |
| + |
| + draw_bg(canvas, width, height) |
| + |
| + local surf = canvas:newSurface(640, 480) |
| + drawSlideIntoCanvas(surf:getCanvas()) |
| + |
| + canvas:concat(gCTM) |
| + |
| + local image = surf:newImageSnapshot() |
| + local paint = Sk.newPaint() |
| + paint:setShader(image:newShader()) |
| + paint:setFilterLevel(1) |
|
robertphillips
2014/11/07 18:02:54
I'm a bit surprised we don't have an option to not
|
| + show_patch(canvas, paint, image:width(), image:height()) |
| + |
| + return not (not gCurrAnimation) |
| +end |
| + |
|
robertphillips
2014/11/07 18:02:54
This and draw_drag don't appear to be used.
|
| +gDragPts = nil |
| + |
| +gDragCubicIndex = nil |
| + |
| +function onClickHandler(x, y, state) |
| + local inv = Sk.newMatrix() |
| + gCTM:invert(inv) |
| + x, y = inv:mapXY(x, y) |
| + |
| + if state == "down" then |
| + gDragCubicIndex = find_cubics_index(x, y) |
| + if gDragCubicIndex == nil then |
| + return false |
| + end |
| + end |
| + |
| + if gDragCubicIndex and (state == "moved") then |
| + set_cubic_pt(gDragCubicIndex, x, y) |
| + end |
| + |
| + return true |
| end |
| local keyProcs = { |