SVG viewer

local gfxe = require('plugin.gfxe')

--for k, v in pairs(gfxe) do print (k, type(v))  end


local font
local platform = system.getInfo('platform')

if platform == 'android' then
    local asset_reader = require('plugin.AssetReader')
    font = asset_reader.Read('fonts/Inconsolata-Regular.ttf')
else
    local file = io.open(system.pathForFile('fonts/Inconsolata-Regular.ttf'), 'rb')
    font = file:read('*a')
    file:close()
end

-------------------------------------------------------------------

local sizing = gfxe.newSizing()
sizing.zoom = 2
sizing.crop = gfxe.CROP_TO_BBOX

local svg1 = gfxe.newScalableImage(
    {
        -- filename = 'images/h350.svg'
        filename = 'images/test.svg'
    },
    {
        fontData = font,
        fontFamily = 'Inconsolata'
    }
)
svg1.x, svg1.y = display.contentCenterX, display.contentCenterY

local isShiftDown = false
local function onKey(event)
  print(event.keyName)
    if event.phase == "down" and event.keyName == "leftShift" or event.keyName == "rightShift" then
        isShiftDown = true
    elseif event.phase == "up" and event.keyName == "leftShift" or event.keyName == "rightShift" then
        isShiftDown = false
    end
    return false
end

Runtime:addEventListener("key", onKey)

svg1:modify({
    sizing = sizing:raw()
})
svg1:addEventListener("tap", function(event)
  if isShiftDown then
      sizing.zoom = sizing.zoom - 1
  else
      sizing.zoom = sizing.zoom + 1
  end
  svg1:modify({ sizing = sizing:raw() })
end)

-- Add touch event listener for moving svg1 by mouse/finger
local dragStartX, dragStartY, svgStartX, svgStartY
local function moveSVG(event)
    if event.phase == "began" then
        display.currentStage:setFocus(svg1)
        dragStartX = event.x
        dragStartY = event.y
        svgStartX = svg1.x
        svgStartY = svg1.y
        return true
    elseif event.phase == "moved" then
        local dx = event.x - dragStartX
        local dy = event.y - dragStartY
        svg1.x = svgStartX + dx
        svg1.y = svgStartY + dy
        return true
    elseif event.phase == "ended" or event.phase == "cancelled" then
        display.currentStage:setFocus(nil)
        return true
    end
    return false
end

svg1:addEventListener("touch", moveSVG)