Import of the watch repository from Pebble
21
third_party/pbl/LICENSE
vendored
Normal file
|
@ -0,0 +1,21 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2015 Pebble Technology
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
59
third_party/pbl/pbl/.gitignore
vendored
Normal file
|
@ -0,0 +1,59 @@
|
|||
# Byte-compiled / optimized / DLL files
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
|
||||
# C extensions
|
||||
*.so
|
||||
|
||||
# Distribution / packaging
|
||||
.Python
|
||||
env/
|
||||
build/
|
||||
develop-eggs/
|
||||
dist/
|
||||
downloads/
|
||||
eggs/
|
||||
.eggs/
|
||||
lib/
|
||||
lib64/
|
||||
parts/
|
||||
sdist/
|
||||
var/
|
||||
*.egg-info/
|
||||
.installed.cfg
|
||||
*.egg
|
||||
|
||||
# PyInstaller
|
||||
# Usually these files are written by a python script from a template
|
||||
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
||||
*.manifest
|
||||
*.spec
|
||||
|
||||
# Installer logs
|
||||
pip-log.txt
|
||||
pip-delete-this-directory.txt
|
||||
|
||||
# Unit test / coverage reports
|
||||
htmlcov/
|
||||
.tox/
|
||||
.coverage
|
||||
.coverage.*
|
||||
.cache
|
||||
nosetests.xml
|
||||
coverage.xml
|
||||
*,cover
|
||||
.hypothesis/
|
||||
|
||||
# Translations
|
||||
*.mo
|
||||
*.pot
|
||||
|
||||
# Django stuff:
|
||||
*.log
|
||||
|
||||
# Sphinx documentation
|
||||
docs/_build/
|
||||
|
||||
# PyBuilder
|
||||
target/
|
21
third_party/pbl/pbl/README.md
vendored
Normal file
|
@ -0,0 +1,21 @@
|
|||
# pbl
|
||||
Like pebble-tool, but for internal things.
|
||||
|
||||
Not to be confused with pebble-tool-dev. This repository is for internal tools
|
||||
that don't make sense to ever be public; pebble-tool-dev is for public tools
|
||||
that can't be public yet.
|
||||
|
||||
Not sure where to put something? Ask Katharine!
|
||||
|
||||
## Installation
|
||||
|
||||
pip install git+ssh://git@github.com/pebble/pbl.git
|
||||
|
||||
## Adding commands
|
||||
|
||||
Create a new file in pbl/commands. Add a class inheriting from `BaseCommand`
|
||||
(or `PebbleCommand` if it connects to a pebble). The docstring will be used as
|
||||
help. Include a `command` field that gives the name of the command. The class's
|
||||
`__call__` method will be called when you run the command.
|
||||
|
||||
Many examples can be found [in pebble-tool](https://github.com/pebble/pebble-tool/tree/master/pebble_tool/commands).
|
37
third_party/pbl/pbl/pbl/__init__.py
vendored
Normal file
|
@ -0,0 +1,37 @@
|
|||
import logging
|
||||
|
||||
import pebble_tool
|
||||
from libpebble2.communication.transports.pulse import PULSETransport
|
||||
from libpebble2.exceptions import PebbleError
|
||||
from commands import coredump
|
||||
from commands import install_lang
|
||||
from commands import test
|
||||
|
||||
# TODO: unopened logging ports cause super noisy logs, fix this in the
|
||||
# pulse package then remove this
|
||||
logging.getLogger('pebble.pulse2.transports').setLevel(logging.ERROR)
|
||||
|
||||
class PebbleTransportPULSE(pebble_tool.commands.base.PebbleTransportConfiguration):
|
||||
transport_class = PULSETransport
|
||||
name = 'pulse'
|
||||
|
||||
@classmethod
|
||||
def _connect_args(cls, args):
|
||||
try:
|
||||
from pebble import pulse2
|
||||
except ImportError:
|
||||
raise PebbleError('pulse2 package not installed: it is required for PULSE transport')
|
||||
|
||||
url, = super(PebbleTransportPULSE, cls)._connect_args(args)
|
||||
interface = pulse2.Interface.open_dbgserial(url=url)
|
||||
link = interface.get_link()
|
||||
return (link,)
|
||||
|
||||
@classmethod
|
||||
def add_argument_handler(cls, parser):
|
||||
parser.add_argument('--pulse', type=str,
|
||||
help="Use this option to connect to your Pebble via"
|
||||
" the PULSE transport. Equivalent to PEBBLE_PULSE.")
|
||||
|
||||
def run_tool(args=None):
|
||||
pebble_tool.run_tool(args)
|
0
third_party/pbl/pbl/pbl/commands/__init__.py
vendored
Normal file
58
third_party/pbl/pbl/pbl/commands/coredump.py
vendored
Normal file
|
@ -0,0 +1,58 @@
|
|||
from __future__ import absolute_import, print_function
|
||||
|
||||
import datetime
|
||||
from progressbar import ProgressBar, Bar, FileTransferSpeed, Timer, Percentage
|
||||
|
||||
from libpebble2.protocol.transfers import GetBytesInfoResponse
|
||||
from libpebble2.services.getbytes import GetBytesService
|
||||
from libpebble2.exceptions import GetBytesError
|
||||
|
||||
from pebble_tool.commands.base import PebbleCommand
|
||||
from pebble_tool.exceptions import ToolError
|
||||
|
||||
class CoredumpCommand(PebbleCommand):
|
||||
"""Takes a screenshot from the watch."""
|
||||
command = 'coredump'
|
||||
|
||||
def __init__(self):
|
||||
self.progress_bar = ProgressBar(widgets=[Percentage(), Bar(marker='=', left='[', right=']'), ' ',
|
||||
FileTransferSpeed(), ' ', Timer(format='%s')])
|
||||
self.started = False
|
||||
|
||||
def __call__(self, args):
|
||||
super(CoredumpCommand, self).__call__(args)
|
||||
get_bytes = GetBytesService(self.pebble)
|
||||
get_bytes.register_handler("progress", self._handle_progress)
|
||||
|
||||
self.progress_bar.start()
|
||||
try:
|
||||
core_data = get_bytes.get_coredump(args.fresh)
|
||||
except GetBytesError as ex:
|
||||
if ex.code == GetBytesInfoResponse.ErrorCode.DoesNotExist:
|
||||
raise ToolError('No coredump on device')
|
||||
else:
|
||||
raise
|
||||
|
||||
self.progress_bar.finish()
|
||||
|
||||
filename = self._generate_filename() if args.filename is None else args.filename
|
||||
with open(filename, "w") as core_file:
|
||||
core_file.write(core_data)
|
||||
print("Saved coredump to {}".format(filename))
|
||||
|
||||
def _handle_progress(self, progress, total):
|
||||
if not self.started:
|
||||
self.progress_bar.maxval = total
|
||||
self.started = True
|
||||
self.progress_bar.update(progress)
|
||||
|
||||
@classmethod
|
||||
def _generate_filename(cls):
|
||||
return datetime.datetime.now().strftime("pebble_coredump_%Y-%m-%d_%H-%M-%S.core")
|
||||
|
||||
@classmethod
|
||||
def add_parser(cls, parser):
|
||||
parser = super(CoredumpCommand, cls).add_parser(parser)
|
||||
parser.add_argument('filename', nargs='?', type=str, help="Filename of coredump")
|
||||
parser.add_argument('--fresh', action="store_true", help="Require a fresh coredump")
|
||||
return parser
|
38
third_party/pbl/pbl/pbl/commands/install_lang.py
vendored
Normal file
|
@ -0,0 +1,38 @@
|
|||
from __future__ import absolute_import, print_function
|
||||
from pebble_tool.commands.base import PebbleCommand
|
||||
|
||||
from progressbar import ProgressBar, Bar, FileTransferSpeed, Timer, Percentage
|
||||
|
||||
from libpebble2.services.putbytes import PutBytes, PutBytesType
|
||||
|
||||
class InstallLangCcommand(PebbleCommand):
|
||||
"""Install a language pack on a watch"""
|
||||
|
||||
command = 'install-lang'
|
||||
|
||||
def __call__(self, args):
|
||||
super(InstallLangCcommand, self).__call__(args)
|
||||
|
||||
progress_bar = ProgressBar(widgets=[Percentage(), Bar(marker='=', left='[', right=']'),
|
||||
' ', FileTransferSpeed(), ' ', Timer(format='%s')])
|
||||
|
||||
with open(args.lang_file, 'rb') as f:
|
||||
lang_pack = f.read()
|
||||
|
||||
progress_bar.maxval = len(lang_pack)
|
||||
progress_bar.start()
|
||||
|
||||
def _handle_progress(sent, total_sent, total_length):
|
||||
progress_bar.update(total_sent)
|
||||
|
||||
pb = PutBytes(self.pebble, PutBytesType.File, lang_pack, bank=0, filename="lang")
|
||||
pb.register_handler("progress", _handle_progress)
|
||||
pb.send()
|
||||
|
||||
progress_bar.finish()
|
||||
|
||||
@classmethod
|
||||
def add_parser(cls, parser):
|
||||
parser = super(InstallLangCcommand, cls).add_parser(parser)
|
||||
parser.add_argument('lang_file', help="Language file to install")
|
||||
return parser
|
11
third_party/pbl/pbl/pbl/commands/test.py
vendored
Normal file
|
@ -0,0 +1,11 @@
|
|||
from __future__ import absolute_import, print_function
|
||||
from pebble_tool.commands.base import BaseCommand
|
||||
|
||||
|
||||
class TestCommand(BaseCommand):
|
||||
"""Testing!"""
|
||||
command = 'test'
|
||||
|
||||
def __call__(self, *args):
|
||||
super(TestCommand, self).__call__(*args)
|
||||
print("Hi there!")
|
1
third_party/pbl/pbl/pbl/version.py
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
__version__ = "1.0.1"
|
30
third_party/pbl/pbl/setup.py
vendored
Normal file
|
@ -0,0 +1,30 @@
|
|||
__author__ = 'katharine'
|
||||
|
||||
import sys
|
||||
from setuptools import setup, find_packages
|
||||
|
||||
requires = [
|
||||
'pebble_tool==4.4-dp2',
|
||||
'libpebble2[pulse]>=0.0.23',
|
||||
]
|
||||
|
||||
if sys.version_info < (3, 4, 0):
|
||||
requires.append('enum34==1.0.4')
|
||||
|
||||
__version__ = None # Overwritten by executing version.py.
|
||||
with open('pbl/version.py') as f:
|
||||
exec(f.read())
|
||||
|
||||
setup(name='pbl-tool',
|
||||
version=__version__,
|
||||
description='Internal tool for interacting with pebbles.',
|
||||
url='https://github.com/pebble/pbl',
|
||||
author='Pebble Technology Corporation',
|
||||
author_email='katharine@pebble.com',
|
||||
license='MIT',
|
||||
packages=find_packages(),
|
||||
install_requires=requires,
|
||||
entry_points={
|
||||
'console_scripts': ['pbl=pbl:run_tool'],
|
||||
},
|
||||
zip_safe=False)
|
7
third_party/pbl/pblconvert/.gitignore
vendored
Normal file
|
@ -0,0 +1,7 @@
|
|||
.idea
|
||||
*.pyc
|
||||
tests/examples/internal
|
||||
build
|
||||
dist
|
||||
pblconvert.egg-info
|
||||
.DS_Store
|
28
third_party/pbl/pblconvert/README.rst
vendored
Normal file
|
@ -0,0 +1,28 @@
|
|||
pblconvert
|
||||
==========
|
||||
|
||||
pblconvert is a tool to convert pebble resources.
|
||||
Today, it can be used to convert SVGs to PDCs.
|
||||
|
||||
Installing
|
||||
-----------
|
||||
|
||||
```
|
||||
$ pip install .
|
||||
```
|
||||
|
||||
Running tests
|
||||
-------------
|
||||
|
||||
```
|
||||
$ nosetests tests
|
||||
```
|
||||
|
||||
Usage
|
||||
------
|
||||
|
||||
```
|
||||
pblconvert --infile <input> [--informat --outfile --outformat]
|
||||
```
|
||||
|
||||
One of [outformat|outfile] is required
|
12
third_party/pbl/pblconvert/pblconvert-runner.py
vendored
Executable file
|
@ -0,0 +1,12 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
|
||||
"""Convenience wrapper for running directly from source tree."""
|
||||
|
||||
|
||||
from pblconvert.pblconvert import main
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
0
third_party/pbl/pblconvert/pblconvert/__init__.py
vendored
Normal file
8
third_party/pbl/pblconvert/pblconvert/__main__.py
vendored
Normal file
|
@ -0,0 +1,8 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
|
||||
"""executed when directory is called as script."""
|
||||
|
||||
|
||||
from pblconvert import main
|
||||
main()
|
0
third_party/pbl/pblconvert/pblconvert/bin/__init__.py
vendored
Normal file
31
third_party/pbl/pblconvert/pblconvert/bin/gif2apng
vendored
Executable file
|
@ -0,0 +1,31 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
from __future__ import print_function
|
||||
import os
|
||||
import platform
|
||||
import sys
|
||||
import subprocess
|
||||
|
||||
arguments = sys.argv[1:]
|
||||
|
||||
THIS_PATH = os.path.abspath(__file__)
|
||||
LINUX_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'gif2apng_noprev_linux')
|
||||
OSX_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'gif2apng_noprev_osx')
|
||||
|
||||
if platform.system() == 'Darwin':
|
||||
cmd = [OSX_PATH]
|
||||
elif platform.system() == 'Linux':
|
||||
cmd = [LINUX_PATH]
|
||||
else:
|
||||
raise Exception("Your operating system is not supported")
|
||||
|
||||
# Transform absolute paths into relative paths (they are not supported)
|
||||
arguments = [a if a[0] != '/' else os.path.relpath(a, THIS_PATH) for a in arguments]
|
||||
cmd += arguments
|
||||
|
||||
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
out, err = p.communicate()
|
||||
print(out, file=sys.stdout)
|
||||
print(err, file=sys.stderr)
|
||||
|
||||
sys.exit(p.returncode)
|
BIN
third_party/pbl/pblconvert/pblconvert/bin/gif2apng_noprev_linux
vendored
Executable file
BIN
third_party/pbl/pblconvert/pblconvert/bin/gif2apng_noprev_osx
vendored
Executable file
145
third_party/pbl/pblconvert/pblconvert/bin/pbi2png.py
vendored
Normal file
|
@ -0,0 +1,145 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import os, sys
|
||||
from ctypes import *
|
||||
from PIL import Image
|
||||
|
||||
format_dict = {
|
||||
'GBitmapFormat1Bit': 0,
|
||||
'GBitmapFormat8Bit': 1,
|
||||
'GBitmapFormat1BitPalette': 2,
|
||||
'GBitmapFormat2BitPalette': 3,
|
||||
'GBitmapFormat4BitPalette': 4
|
||||
}
|
||||
|
||||
|
||||
# NOTE: If this changes, please update the GBitmapDump gdb command.
|
||||
class pbi_struct(Structure):
|
||||
_fields_ = [
|
||||
("stride", c_uint16), ("info", c_uint16),
|
||||
("bounds_x", c_uint16), ("bounds_y", c_uint16),
|
||||
("bounds_w", c_uint16), ("bounds_h", c_uint16),
|
||||
]
|
||||
|
||||
def flip_byte(abyte):
|
||||
return int('{:08b}'.format(abyte)[::-1],2)
|
||||
|
||||
#converts from argb8 (2-bits per color channel) to RGBA32 (byte per channel)
|
||||
def argb8_to_rgba32(argb8):
|
||||
return (
|
||||
((argb8 >> 4) & 0x3) * 85, #R
|
||||
((argb8 >> 2) & 0x3) * 85, #G
|
||||
((argb8 ) & 0x3) * 85, #B
|
||||
((argb8 >> 6) & 0x3) * 85) #A
|
||||
|
||||
|
||||
def pbi_format(info):
|
||||
return (info & 0xe) >> 1
|
||||
|
||||
|
||||
def pbi_bitdepth(fmt):
|
||||
bitdepth_list = [1, 8, 1, 2, 4]
|
||||
return bitdepth_list[fmt]
|
||||
|
||||
|
||||
def pbi_is_palettized(fmt):
|
||||
return fmt >= format_dict['GBitmapFormat1BitPalette']
|
||||
|
||||
|
||||
def palette_size(fmt):
|
||||
return 2 ** pbi_bitdepth(fmt)
|
||||
|
||||
|
||||
def pbi_to_png(pbi, pixel_bytearray):
|
||||
gbitmap_version = (pbi.info >> 12) & 0x0F
|
||||
gbitmap_format = pbi_format(pbi.info)
|
||||
# if version is 2 and format is 0x01 (GBitmapFormat8Bit)
|
||||
if gbitmap_version == 1 and gbitmap_format == format_dict['GBitmapFormat8Bit']:
|
||||
print("8-bit ARGB color image")
|
||||
pixel_rgba_array = bytearray()
|
||||
for (idx, abyte) in enumerate(pixel_bytearray):
|
||||
argb8 = pixel_bytearray[idx]
|
||||
pixel_rgba_array.append(((argb8 >> 4) & 0x3) * 85) # r
|
||||
pixel_rgba_array.append(((argb8 >> 2) & 0x3) * 85) # g
|
||||
pixel_rgba_array.append(((argb8 >> 0) & 0x3) * 85) # b
|
||||
pixel_rgba_array.append(((argb8 >> 6) & 0x3) * 85) # a
|
||||
|
||||
png = Image.frombuffer('RGBA', (pbi.bounds_w, pbi.bounds_h),
|
||||
buffer(pixel_rgba_array), 'raw', 'RGBA', pbi.stride * 4, 1)
|
||||
|
||||
elif gbitmap_version == 1 and pbi_is_palettized(gbitmap_format):
|
||||
bitdepth = pbi_bitdepth(gbitmap_format)
|
||||
print("{}-bit palettized color image".format(bitdepth))
|
||||
|
||||
# Create palette colors in format R, G, B, A
|
||||
palette = []
|
||||
palette_offset = pbi.stride * pbi.bounds_h
|
||||
for argb8 in pixel_bytearray[palette_offset:]:
|
||||
palette.append((argb8_to_rgba32(argb8)))
|
||||
|
||||
pixels = []
|
||||
# go through the image data byte by byte, and handle
|
||||
# converting the depth-packed indexes for the palette to an unpacked list
|
||||
idx = 0 # index of actual packed values including padded values
|
||||
for pxl8 in pixel_bytearray[:palette_offset]:
|
||||
for i in xrange(0, 8 / bitdepth):
|
||||
# only append actual pixels, ignoring padding pixels
|
||||
# which is the difference between the width and the stride
|
||||
if (idx % (pbi.stride * (8 / bitdepth)) < pbi.bounds_w):
|
||||
pixels.append(
|
||||
((pxl8 >> (bitdepth * (8 / bitdepth - (i + 1)))) & ~(~0 << bitdepth)))
|
||||
idx = idx + 1
|
||||
|
||||
# Manually convert from paletted to RGBA
|
||||
# as PIL doesn't seem to handle palette with alpha
|
||||
rgba_pixels = []
|
||||
for pal_pxl in pixels:
|
||||
rgba_pixels.append(palette[pal_pxl])
|
||||
|
||||
png = Image.new('RGBA', (pbi.bounds_w, pbi.bounds_h))
|
||||
png.putdata(rgba_pixels)
|
||||
|
||||
# legacy 1-bit format
|
||||
elif gbitmap_version == 0 or \
|
||||
(gbitmap_version == 1 and gbitmap_format == format_dict['GBitmapFormat1Bit']):
|
||||
print("1-bit b&w image")
|
||||
# pbi has bits in bytes reversed, so flip here
|
||||
for (idx, abyte) in enumerate(pixel_bytearray):
|
||||
pixel_bytearray[idx] = flip_byte(pixel_bytearray[idx])
|
||||
|
||||
png = Image.frombuffer('1', (pbi.bounds_w, pbi.bounds_h),
|
||||
buffer(pixel_bytearray), 'raw', '1', pbi.stride, 1)
|
||||
else:
|
||||
print "Bad PBI"
|
||||
png = None
|
||||
|
||||
return png
|
||||
|
||||
|
||||
def main():
|
||||
# arguments, print an example of correct usage.
|
||||
if len(sys.argv) - 1 != 2:
|
||||
print("********************")
|
||||
print("Usage suggestion:")
|
||||
print("python " + sys.argv[0] + " <in_image.pbi> <out_image.png>")
|
||||
print("********************")
|
||||
exit()
|
||||
|
||||
input_filename = sys.argv[1]
|
||||
output_filename = sys.argv[2]
|
||||
|
||||
print("Converting PBI to PNG...")
|
||||
pbi = pbi_struct()
|
||||
pixel_bytearray = bytearray()
|
||||
with open(input_filename, 'rb') as afile:
|
||||
afile.readinto(pbi)
|
||||
print("x:%d y:%d" % (pbi.bounds_x, pbi.bounds_y))
|
||||
print("Width:%d Height:%d" % (pbi.bounds_w, pbi.bounds_h))
|
||||
print("row stride:%d" % (pbi.stride))
|
||||
pixel_bytearray = bytearray(afile.read())
|
||||
|
||||
png = pbi_to_png(pbi, pixel_bytearray)
|
||||
png.save(output_filename)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
27
third_party/pbl/pblconvert/pblconvert/bin/pdc2png
vendored
Executable file
|
@ -0,0 +1,27 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
from __future__ import print_function
|
||||
import os
|
||||
import platform
|
||||
import sys
|
||||
import subprocess
|
||||
|
||||
arguments = sys.argv[1:]
|
||||
|
||||
LINUX_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'pdc2png_linux')
|
||||
OSX_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'pdc2png_osx')
|
||||
|
||||
if platform.system() == 'Darwin':
|
||||
cmd = [OSX_PATH]
|
||||
elif platform.system() == 'Linux':
|
||||
cmd = [LINUX_PATH]
|
||||
else:
|
||||
raise Exception("Your operating system is not supported")
|
||||
|
||||
cmd.extend(arguments)
|
||||
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
out, err = p.communicate()
|
||||
print(out, file=sys.stdout)
|
||||
print(err, file=sys.stderr)
|
||||
|
||||
sys.exit(p.returncode)
|
BIN
third_party/pbl/pblconvert/pblconvert/bin/pdc2png_linux
vendored
Executable file
BIN
third_party/pbl/pblconvert/pblconvert/bin/pdc2png_osx
vendored
Executable file
6
third_party/pbl/pblconvert/pblconvert/exceptions.py
vendored
Normal file
|
@ -0,0 +1,6 @@
|
|||
class PblConvertError(Exception):
|
||||
def __str__(self):
|
||||
return self.__class__.__name__ + ': ' + ' '.join(self.args)
|
||||
|
||||
class PblConvertFormatError(PblConvertError):
|
||||
pass
|
0
third_party/pbl/pblconvert/pblconvert/gif2apng/__init__.py
vendored
Normal file
68
third_party/pbl/pblconvert/pblconvert/gif2apng/colormap.txt
vendored
Normal file
|
@ -0,0 +1,68 @@
|
|||
; The colormap for the Pebble Time family watches
|
||||
; in a format gifsicle understands.
|
||||
; See https://www.lcdf.org/gifsicle/man.html
|
||||
; for more details on the --user-colormap flag
|
||||
0 0 0
|
||||
0 0 85
|
||||
0 0 170
|
||||
0 0 255
|
||||
0 85 0
|
||||
0 85 85
|
||||
0 85 170
|
||||
0 85 255
|
||||
0 170 0
|
||||
0 170 85
|
||||
0 170 170
|
||||
0 170 255
|
||||
0 255 0
|
||||
0 255 85
|
||||
0 255 170
|
||||
0 255 255
|
||||
85 0 0
|
||||
85 0 85
|
||||
85 0 170
|
||||
85 0 255
|
||||
85 85 0
|
||||
85 85 85
|
||||
85 85 170
|
||||
85 85 255
|
||||
85 170 0
|
||||
85 170 85
|
||||
85 170 170
|
||||
85 170 255
|
||||
85 255 0
|
||||
85 255 85
|
||||
85 255 170
|
||||
85 255 255
|
||||
170 0 0
|
||||
170 0 85
|
||||
170 0 170
|
||||
170 0 255
|
||||
170 85 0
|
||||
170 85 85
|
||||
170 85 170
|
||||
170 85 255
|
||||
170 170 0
|
||||
170 170 85
|
||||
170 170 170
|
||||
170 170 255
|
||||
170 255 0
|
||||
170 255 85
|
||||
170 255 170
|
||||
170 255 255
|
||||
255 0 0
|
||||
255 0 85
|
||||
255 0 170
|
||||
255 0 255
|
||||
255 85 0
|
||||
255 85 85
|
||||
255 85 170
|
||||
255 85 255
|
||||
255 170 0
|
||||
255 170 85
|
||||
255 170 170
|
||||
255 170 255
|
||||
255 255 0
|
||||
255 255 85
|
||||
255 255 170
|
||||
255 255 255
|
7
third_party/pbl/pblconvert/pblconvert/gif2apng/exceptions.py
vendored
Normal file
|
@ -0,0 +1,7 @@
|
|||
class Gif2ApngError(Exception):
|
||||
def __str__(self):
|
||||
return self.__class__.__name__ + ': ' + ' '.join(self.args)
|
||||
|
||||
|
||||
class Gif2ApngFormatError(Gif2ApngError):
|
||||
pass
|
69
third_party/pbl/pblconvert/pblconvert/gif2apng/gif.py
vendored
Normal file
|
@ -0,0 +1,69 @@
|
|||
from __future__ import print_function
|
||||
import imghdr
|
||||
import io
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
|
||||
# gif2apng
|
||||
from exceptions import *
|
||||
|
||||
GIF2APNG_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)),
|
||||
'../bin/gif2apng')
|
||||
COLORMAP_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)),
|
||||
'colormap.txt')
|
||||
|
||||
|
||||
def read_gif(obj):
|
||||
data = obj.read()
|
||||
if imghdr.what(None, data) != 'gif':
|
||||
raise Gif2ApngFormatError("{} is not a valid GIF data".format(path))
|
||||
|
||||
return data
|
||||
|
||||
|
||||
def convert_to_apng(gif):
|
||||
# Write data to temporary file
|
||||
gif_file = tempfile.NamedTemporaryFile(delete=False)
|
||||
gif_file.write(gif)
|
||||
gif_file.close()
|
||||
|
||||
# Map onto Pebble colors
|
||||
mod_file = tempfile.NamedTemporaryFile(delete=False)
|
||||
mod_file.close()
|
||||
p = subprocess.Popen(['gifsicle',
|
||||
'--colors', '64',
|
||||
'--use-colormap', COLORMAP_PATH,
|
||||
'-O1',
|
||||
'-o', mod_file.name,
|
||||
gif_file.name],
|
||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
out, err = p.communicate()
|
||||
# Deal with https://github.com/kohler/gifsicle/issues/28
|
||||
# Which still exists in some of the packages out there
|
||||
if p.returncode not in [0, 1]:
|
||||
print(err, file=sys.stderr)
|
||||
raise Gif2ApngError(p.returncode)
|
||||
|
||||
# Convert to APNG
|
||||
apng_file = tempfile.NamedTemporaryFile(delete=False)
|
||||
apng_file.close()
|
||||
p = subprocess.Popen([GIF2APNG_PATH,
|
||||
'-z0',
|
||||
mod_file.name,
|
||||
apng_file.name],
|
||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
out, err = p.communicate()
|
||||
if p.returncode != 0:
|
||||
print(err, file=sys.stderr)
|
||||
raise Gif2ApngError(p.returncode)
|
||||
|
||||
with open(apng_file.name) as f:
|
||||
apng_data = f.read()
|
||||
|
||||
os.unlink(gif_file.name)
|
||||
os.unlink(mod_file.name)
|
||||
os.unlink(apng_file.name)
|
||||
|
||||
return apng_data
|
112
third_party/pbl/pblconvert/pblconvert/handlers.py
vendored
Normal file
|
@ -0,0 +1,112 @@
|
|||
from abc import *
|
||||
|
||||
from exceptions import PblConvertFormatError
|
||||
|
||||
from gif2apng.gif import read_gif, convert_to_apng
|
||||
from gif2apng.exceptions import Gif2ApngFormatError
|
||||
|
||||
from svg2pdc.pdc import serialize_image, convert_to_png
|
||||
from svg2pdc.svg import surface_from_svg
|
||||
from svg2pdc.exceptions import Svg2PdcFormatError
|
||||
|
||||
|
||||
class Handler:
|
||||
__metaclass__ = ABCMeta
|
||||
|
||||
@classmethod
|
||||
def handler_for_format(cls, fmt):
|
||||
if cls is Handler:
|
||||
for C in cls.__subclasses__():
|
||||
if fmt == C.format():
|
||||
return C()
|
||||
return None
|
||||
raise NotImplementedError
|
||||
|
||||
@abstractmethod
|
||||
def read(self, in_obj):
|
||||
return None
|
||||
|
||||
@abstractmethod
|
||||
def format(self):
|
||||
return ""
|
||||
|
||||
@abstractmethod
|
||||
def write_pdc(self, out_obj, data):
|
||||
return None
|
||||
|
||||
@abstractmethod
|
||||
def write_apng(self, out_obj, data):
|
||||
return None
|
||||
|
||||
@abstractmethod
|
||||
def write_png(self, out_obj, data):
|
||||
return None
|
||||
|
||||
@abstractmethod
|
||||
def write_svg(self, out_obj, data):
|
||||
return None
|
||||
|
||||
|
||||
class SvgHandler(Handler):
|
||||
@classmethod
|
||||
def format(cls):
|
||||
return "svg"
|
||||
|
||||
def read(self, in_obj):
|
||||
try:
|
||||
surface = surface_from_svg(bytestring=in_obj.read(),
|
||||
approximate_bezier=True)
|
||||
except Svg2PdcFormatError as e:
|
||||
raise PblConvertFormatError(e.args[0])
|
||||
return surface
|
||||
|
||||
def write_apng(self, out_obj, data):
|
||||
raise NotImplementedError
|
||||
|
||||
def write_pdc(self, out_obj, surface):
|
||||
commands = surface.pdc_commands
|
||||
pdci = serialize_image(commands, surface.size())
|
||||
with out_obj as o:
|
||||
o.write(pdci)
|
||||
|
||||
def write_png(self, out_obj, surface):
|
||||
commands = surface.pdc_commands
|
||||
pdci = serialize_image(commands, surface.size())
|
||||
with out_obj as o:
|
||||
o.write(convert_to_png(pdci))
|
||||
|
||||
def write_svg(self, out_obj, surface):
|
||||
with out_obj as o:
|
||||
et = surface.element_tree()
|
||||
et.write(o, pretty_print=True)
|
||||
|
||||
|
||||
class GifHandler(Handler):
|
||||
@classmethod
|
||||
def format(cls):
|
||||
return "gif"
|
||||
|
||||
def read(self, in_obj):
|
||||
try:
|
||||
gif = read_gif(in_obj)
|
||||
except Gif2ApngFormatError as e:
|
||||
raise PblConvertFormatError(e.args[0])
|
||||
return gif
|
||||
|
||||
def write_pdc(self, out_obj, data):
|
||||
raise NotImplementedError
|
||||
|
||||
def write_svg(self, out_obj, data):
|
||||
raise NotImplementedError
|
||||
|
||||
def write_png(self, out_obj, gif):
|
||||
raise NotImplementedError
|
||||
|
||||
def write_apng(self, out_obj, gif):
|
||||
apng_data = convert_to_apng(gif)
|
||||
with out_obj as o:
|
||||
o.write(apng_data)
|
||||
|
||||
|
||||
Handler.register(GifHandler)
|
||||
Handler.register(SvgHandler)
|
90
third_party/pbl/pblconvert/pblconvert/pblconvert.py
vendored
Normal file
|
@ -0,0 +1,90 @@
|
|||
from handlers import *
|
||||
|
||||
import argparse
|
||||
import os
|
||||
import sys
|
||||
|
||||
SUPPORTED_FORMATS_MAP = {
|
||||
"in": {
|
||||
"gif": ".gif",
|
||||
"svg": ".svg",
|
||||
},
|
||||
"out": {
|
||||
"pdc": ".pdc",
|
||||
"png": ".png",
|
||||
"svg": ".svg",
|
||||
"apng": ".apng",
|
||||
}
|
||||
}
|
||||
|
||||
FORMAT_TO_EXT = dict(SUPPORTED_FORMATS_MAP["in"],
|
||||
**SUPPORTED_FORMATS_MAP["out"])
|
||||
EXT_TO_FORMAT = {v: k for k, v in FORMAT_TO_EXT.items()}
|
||||
|
||||
OUT_FORMATS = SUPPORTED_FORMATS_MAP["out"].keys()
|
||||
IN_FORMATS = SUPPORTED_FORMATS_MAP["in"].keys()
|
||||
|
||||
LIMIT_WHEN_AVOIDING_OVERRIDE = 100
|
||||
|
||||
|
||||
def parse_args(args):
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('-i', '--infile',
|
||||
type=argparse.FileType('r'), required=True)
|
||||
parser.add_argument('-if', '--informat',
|
||||
type=str, choices=IN_FORMATS)
|
||||
parser.add_argument('-o', '--outfile',
|
||||
type=argparse.FileType('w'))
|
||||
parser.add_argument('-of', '--outformat',
|
||||
type=str, choices=OUT_FORMATS)
|
||||
|
||||
parsed = parser.parse_args(args)
|
||||
|
||||
assert parsed.infile is not None
|
||||
assert parsed.outformat is not None or parsed.outfile is not None
|
||||
|
||||
if parsed.informat is None:
|
||||
parsed.informat = EXT_TO_FORMAT.get(
|
||||
os.path.splitext(parsed.infile.name)[1], "svg")
|
||||
|
||||
if parsed.outformat is None:
|
||||
parsed.outformat = "pdc" if parsed.outfile is None else \
|
||||
EXT_TO_FORMAT.get(os.path.splitext(parsed.outfile.name)[1], "pdc")
|
||||
|
||||
if parsed.outfile is None:
|
||||
if parsed.infile == sys.stdin:
|
||||
parsed.outfile = sys.stdout
|
||||
else:
|
||||
# look at format
|
||||
outfile_path = os.path.splitext(parsed.infile.name)[0] + \
|
||||
FORMAT_TO_EXT[parsed.outformat]
|
||||
if os.path.exists(outfile_path):
|
||||
avoiding_path = None
|
||||
# avoid accidental overrides
|
||||
for i in range(2, LIMIT_WHEN_AVOIDING_OVERRIDE):
|
||||
split = os.path.splitext(outfile_path)
|
||||
avoiding_path = "%s_%d%s" % (split[0], i, split[1])
|
||||
if not os.path.exists(avoiding_path):
|
||||
outfile_path = avoiding_path
|
||||
break
|
||||
|
||||
if outfile_path != avoiding_path:
|
||||
raise IOError("File %s and (%d similar alternatives) "
|
||||
"already exists" %
|
||||
(outfile_path, LIMIT_WHEN_AVOIDING_OVERRIDE))
|
||||
|
||||
parsed.outfile = open(outfile_path, "w")
|
||||
|
||||
return parsed
|
||||
|
||||
|
||||
def logic(handler, parsed):
|
||||
data = handler.read(parsed.infile)
|
||||
method = getattr(handler, "write_" + parsed.outformat)
|
||||
method(parsed.outfile, data)
|
||||
|
||||
|
||||
def main():
|
||||
parsed = parse_args(sys.argv[1:])
|
||||
handler = Handler.handler_for_format(parsed.informat)
|
||||
logic(handler, parsed)
|
1
third_party/pbl/pblconvert/pblconvert/svg2pdc/__init__.py
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
|
65
third_party/pbl/pblconvert/pblconvert/svg2pdc/annotation.py
vendored
Normal file
|
@ -0,0 +1,65 @@
|
|||
# coding=utf-8
|
||||
from xml.etree import ElementTree
|
||||
from pdc import extend_bounding_box, bounding_box_around_points
|
||||
|
||||
NS_ANNOTATION = "http://www.pebble.com/2015/pdc"
|
||||
PREFIX_ANNOTATION = "pdc"
|
||||
|
||||
TAG_HIGHLIGHT = "{%s}highlight" % NS_ANNOTATION
|
||||
TAG_ANNOTATION = "{%s}annotation" % NS_ANNOTATION
|
||||
|
||||
def to_str(value):
|
||||
return "%.2f" % float(value)
|
||||
|
||||
class Annotation():
|
||||
def __init__(self, node, text, transformed=False, link=None):
|
||||
self.node = node
|
||||
self.text = text
|
||||
self.href = link
|
||||
self.element = ElementTree.SubElement(self.node.node, TAG_ANNOTATION)
|
||||
if text is not None:
|
||||
self.element.set("description", text)
|
||||
if link is not None:
|
||||
self.element.set("href", link)
|
||||
self.highlights = []
|
||||
self.transformed = transformed
|
||||
self.node.annotations.append(self)
|
||||
|
||||
def add_highlight(self, x, y, width=None, height=None, details=None):
|
||||
highlight = ElementTree.SubElement(self.element, TAG_HIGHLIGHT)
|
||||
self.set_highlight(highlight, x=x, y=y, width=width, height=height, details=details)
|
||||
self.highlights.append(highlight)
|
||||
return highlight
|
||||
|
||||
def set_highlight(self, highlight, **kwargs):
|
||||
for k, v in kwargs.iteritems():
|
||||
if v is None:
|
||||
if k in highlight:
|
||||
highlight.pop(k)
|
||||
else:
|
||||
value = to_str(v) if k in ["x", "y", "width", "height"] else v
|
||||
highlight.set(k, value)
|
||||
|
||||
def transform(self, transformer):
|
||||
if self.transformed:
|
||||
return
|
||||
self.transformed = True
|
||||
|
||||
for highlight in self.highlights:
|
||||
top_left = (float(highlight.get("x")), float(highlight.get("y")))
|
||||
size = (float(highlight.get("width")), float(highlight.get("height")))
|
||||
top_right = (top_left[0] + size[0], top_left[1])
|
||||
bottom_right = (top_left[0] + size[0], top_left[1] + size[1])
|
||||
bottom_left = (top_left[0], top_left[1] + size[1])
|
||||
|
||||
# we needs to transform all four points instead of origin + diagonal
|
||||
# e.g. 45° on a square would otherwise become a line
|
||||
top_left = transformer.transform_point(top_left)
|
||||
top_right = transformer.transform_point(top_right)
|
||||
bottom_right = transformer.transform_point(bottom_right)
|
||||
bottom_left = transformer.transform_point(bottom_left)
|
||||
|
||||
box = bounding_box_around_points([top_left, top_right, bottom_right, bottom_left])
|
||||
self.set_highlight(highlight, x=box[0], y=box[1], width=box[2], height=box[3])
|
||||
|
||||
|
6
third_party/pbl/pblconvert/pblconvert/svg2pdc/exceptions.py
vendored
Normal file
|
@ -0,0 +1,6 @@
|
|||
class Svg2PdcError(Exception):
|
||||
def __str__(self):
|
||||
return self.__class__.__name__ + ': ' + ' '.join(self.args)
|
||||
|
||||
class Svg2PdcFormatError(Svg2PdcError):
|
||||
pass
|
303
third_party/pbl/pblconvert/pblconvert/svg2pdc/pdc.py
vendored
Normal file
|
@ -0,0 +1,303 @@
|
|||
from StringIO import StringIO
|
||||
import os
|
||||
import shutil
|
||||
import tempfile
|
||||
from struct import pack
|
||||
import sys
|
||||
from subprocess import Popen, PIPE
|
||||
from pebble_image_routines import truncate_color_to_pebble64_palette, nearest_color_to_pebble64_palette, \
|
||||
rgba32_triplet_to_argb8
|
||||
|
||||
DRAW_COMMAND_VERSION = 1
|
||||
DRAW_COMMAND_TYPE_PATH = 1
|
||||
DRAW_COMMAND_TYPE_CIRCLE = 2
|
||||
DRAW_COMMAND_TYPE_PRECISE_PATH = 3
|
||||
|
||||
epsilon = sys.float_info.epsilon
|
||||
|
||||
def valid_color(r, g, b, a):
|
||||
return (r <= 0xFF) and (g <= 0xFF) and (b <= 0xFF) and (a <= 0xFF) and \
|
||||
(r >= 0x00) and (g >= 0x00) and (b >= 0x00) and (a >= 0x00)
|
||||
|
||||
|
||||
def convert_color(r, g, b, a, truncate=True):
|
||||
|
||||
valid = valid_color(r, g, b, a)
|
||||
if not valid:
|
||||
print "Invalid color: ({}, {}, {}, {})".format(r, g, b, a)
|
||||
return 0
|
||||
|
||||
if truncate:
|
||||
(r, g, b, a) = truncate_color_to_pebble64_palette(r, g, b, a)
|
||||
else:
|
||||
(r, g, b, a) = nearest_color_to_pebble64_palette(r, g, b, a)
|
||||
|
||||
return rgba32_triplet_to_argb8(r, g, b, a)
|
||||
|
||||
def sum_points(p1, p2):
|
||||
return p1[0] + p2[0], p1[1] + p2[1]
|
||||
|
||||
|
||||
def subtract_points(p1, p2):
|
||||
return p1[0] - p2[0], p1[1] - p2[1]
|
||||
|
||||
|
||||
def round_point(p):
|
||||
return round(p[0] + epsilon), round(p[1] + epsilon) # hack to get around the fact that python rounds negative
|
||||
# numbers downwards
|
||||
|
||||
|
||||
def scale_point(p, factor):
|
||||
return p[0] * factor, p[1] * factor
|
||||
|
||||
|
||||
def find_nearest_valid_point(p):
|
||||
return (round(p[0] * 2.0) / 2.0), (round(p[1] * 2.0) / 2.0)
|
||||
|
||||
|
||||
def find_nearest_valid_precise_point(p):
|
||||
return (round(p[0] * 8.0) / 8.0), (round(p[1] * 8.0) / 8.0)
|
||||
|
||||
|
||||
def convert_to_pebble_coordinates(point, precise=False):
|
||||
# convert from graphic tool coordinate system to pebble coordinate system so that they render the same on
|
||||
# both
|
||||
|
||||
if not precise:
|
||||
nearest = find_nearest_valid_point(point) # used to give feedback to user if the point shifts considerably
|
||||
else:
|
||||
nearest = find_nearest_valid_precise_point(point)
|
||||
|
||||
problem = None if compare_points(point, nearest) else "Invalid point: ({:.2f}, {:.2f}). Used closest supported coordinate: ({}, {})".format(
|
||||
point[0], point[1], nearest[0], nearest[1])
|
||||
|
||||
translated = sum_points(point, (-0.5, -0.5)) # translate point by (-0.5, -0.5)
|
||||
if precise:
|
||||
translated = scale_point(translated, 8) # scale point for precise coordinates
|
||||
rounded = round_point(translated)
|
||||
|
||||
return rounded, problem
|
||||
|
||||
|
||||
def compare_points(p1, p2):
|
||||
return p1[0] == p2[0] and p1[1] == p2[1]
|
||||
|
||||
|
||||
class InvalidPointException(Exception):
|
||||
pass
|
||||
|
||||
|
||||
def bounding_box_around_points(points):
|
||||
result = None
|
||||
for p in points:
|
||||
result = extend_bounding_box(result, p)
|
||||
return result
|
||||
|
||||
|
||||
def extend_bounding_box(rect, point=None, rect2=None):
|
||||
if rect is None:
|
||||
return rect2 if rect2 is not None else (point[0], point[1], 0, 0)
|
||||
|
||||
if rect2 is not None:
|
||||
top_left = (rect2[0], rect2[1])
|
||||
bottom_right = (rect2[0] + rect2[2], rect2[1] + rect2[3])
|
||||
rect = extend_bounding_box(rect, point=top_left)
|
||||
rect = extend_bounding_box(rect, point=bottom_right)
|
||||
return rect
|
||||
|
||||
assert point is not None
|
||||
min_x = min(rect[0], point[0])
|
||||
min_y = min(rect[1], point[1])
|
||||
max_x = max(rect[0] + rect[2], point[0])
|
||||
max_y = max(rect[1] + rect[3], point[1])
|
||||
return (min_x, min_y, max_x - min_x, max_y - min_y)
|
||||
|
||||
|
||||
PDC2PNG = os.path.join(os.path.dirname(os.path.realpath(__file__)), "../bin/pdc2png")
|
||||
|
||||
|
||||
def convert_to_png(pdc_data):
|
||||
tmp_dir = tempfile.mkdtemp()
|
||||
try:
|
||||
pdc_path = os.path.join(tmp_dir, "image.pdc")
|
||||
with open(pdc_path, "wb") as pdc_file:
|
||||
pdc_file.write(pdc_data)
|
||||
|
||||
cmd = '%s %s' % (PDC2PNG, pdc_path)
|
||||
p = Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE)
|
||||
stdout, stderr = p.communicate()
|
||||
if p.returncode != 0:
|
||||
raise IOError(stderr)
|
||||
|
||||
png_path = os.path.join(tmp_dir, "image.png")
|
||||
with open(png_path, "rb") as png_file:
|
||||
return png_file.read()
|
||||
finally:
|
||||
shutil.rmtree(tmp_dir)
|
||||
|
||||
|
||||
class Command:
|
||||
'''
|
||||
Draw command serialized structure:
|
||||
| Bytes | Field
|
||||
| 1 | Draw command type
|
||||
| 1 | Reserved byte
|
||||
| 1 | Stroke color
|
||||
| 1 | Stroke width
|
||||
| 1 | Fill color
|
||||
For Paths:
|
||||
| 1 | Open path
|
||||
| 1 | Unused/Reserved
|
||||
For Circles:
|
||||
| 2 | Radius
|
||||
Common:
|
||||
| 2 | Number of points (should always be 1 for circles)
|
||||
| n * 4 | Array of n points in the format below:
|
||||
Point:
|
||||
| 2 | x
|
||||
| 2 | y
|
||||
'''
|
||||
|
||||
def __init__(self, points, stroke_width=0, stroke_color=0, fill_color=0,
|
||||
raise_error=False):
|
||||
# for i in range(len(points)):
|
||||
# points[i], valid = convert_to_pebble_coordinates(points[i], precise)
|
||||
# if not valid and raise_error:
|
||||
# raise InvalidPointException("Invalid point in command")
|
||||
|
||||
self.points = list(points)
|
||||
self.stroke_width = stroke_width
|
||||
self.stroke_color = stroke_color
|
||||
self.fill_color = fill_color
|
||||
|
||||
def is_precise(self):
|
||||
return False
|
||||
|
||||
def transform(self, transformer):
|
||||
self.points = list([transformer.transform_point(p) for p in self.points])
|
||||
|
||||
def finalize(self, annotator):
|
||||
grid_annotation = None
|
||||
for p in self.points:
|
||||
converted, problem = convert_to_pebble_coordinates(p, self.is_precise())
|
||||
|
||||
if problem is not None:
|
||||
if grid_annotation is None:
|
||||
link = "https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid"
|
||||
grid_annotation = annotator.add_annotation("Element is expressed with unsupported coordinate(s).", link=link)
|
||||
grid_annotation.add_highlight(p[0], p[1], details=problem)
|
||||
|
||||
|
||||
pass
|
||||
|
||||
def bounding_box(self):
|
||||
result = None
|
||||
for p in self.points:
|
||||
result = extend_bounding_box(result, point=p)
|
||||
return result
|
||||
|
||||
def serialize_common(self):
|
||||
return pack('<BBBB',
|
||||
0, #reserved byte
|
||||
self.stroke_color,
|
||||
self.stroke_width,
|
||||
self.fill_color)
|
||||
|
||||
def serialize_points(self):
|
||||
s = pack('H', len(self.points)) # number of points (16-bit)
|
||||
for p in self.points:
|
||||
converted, _ = convert_to_pebble_coordinates(p, self.is_precise())
|
||||
s += pack('<hh',
|
||||
int(converted[0]), # x (16-bit)
|
||||
int(converted[1])) # y (16-bit)
|
||||
return s
|
||||
|
||||
|
||||
class PathCommand(Command):
|
||||
def __init__(self, points, path_open, stroke_width=0, stroke_color=0, fill_color=0, precise=False,
|
||||
raise_error=False):
|
||||
self.open = path_open
|
||||
self.type = DRAW_COMMAND_TYPE_PATH if not precise else DRAW_COMMAND_TYPE_PRECISE_PATH
|
||||
Command.__init__(self, points, stroke_width, stroke_color, fill_color, raise_error)
|
||||
|
||||
def is_precise(self):
|
||||
return self.type == DRAW_COMMAND_TYPE_PRECISE_PATH
|
||||
|
||||
def serialize(self):
|
||||
s = pack('B', self.type) # command type
|
||||
s += self.serialize_common()
|
||||
s += pack('<BB',
|
||||
int(self.open), # open path boolean
|
||||
0) # unused byte in path
|
||||
s += self.serialize_points()
|
||||
return s
|
||||
|
||||
def __str__(self):
|
||||
points = self.points[:]
|
||||
if self.type == DRAW_COMMAND_TYPE_PRECISE_PATH:
|
||||
type = 'P'
|
||||
for i in range(len(points)):
|
||||
points[i] = scale_point(points[i], 0.125)
|
||||
else:
|
||||
type = ''
|
||||
return "Path: [fill color:{}; stroke color:{}; stroke width:{}] {} {} {}".format(self.fill_color,
|
||||
self.stroke_color,
|
||||
self.stroke_width,
|
||||
points,
|
||||
self.open,
|
||||
type)
|
||||
|
||||
|
||||
class CircleCommand(object, Command):
|
||||
def __init__(self, center, radius, stroke_width=0, stroke_color=0, fill_color=0):
|
||||
points = [(center[0], center[1])]
|
||||
Command.__init__(self, points, stroke_width, stroke_color, fill_color)
|
||||
self.radius = radius
|
||||
|
||||
def transform(self, transformer):
|
||||
super(CircleCommand, self).transform(transformer)
|
||||
|
||||
(dx, dy) = transformer.transform_distance(self.radius, self.radius)
|
||||
self.radius = min(dx, dy)
|
||||
if dx != dy:
|
||||
annotation = transformer.add_annotation("Only rigid transformations for circles are supported.",
|
||||
transformed=True)
|
||||
center = self.points[0]
|
||||
annotation.add_highlight(center[0] - dx, center[1] - dy, dx * 2, dy * 2)
|
||||
|
||||
|
||||
|
||||
def serialize(self):
|
||||
s = pack('B', DRAW_COMMAND_TYPE_CIRCLE) # command type
|
||||
s += self.serialize_common()
|
||||
s += pack('H', self.radius) # circle radius (16-bit)
|
||||
s += self.serialize_points()
|
||||
return s
|
||||
|
||||
def __str__(self):
|
||||
return "Circle: [fill color:{}; stroke color:{}; stroke width:{}] {} {}".format(self.fill_color,
|
||||
self.stroke_color,
|
||||
self.stroke_width,
|
||||
self.points[0],
|
||||
self.radius)
|
||||
|
||||
|
||||
def serialize_header(size):
|
||||
return pack('<BBhh', DRAW_COMMAND_VERSION, 0, int(round(size[0])), int(round(size[1])))
|
||||
|
||||
|
||||
def serialize(commands):
|
||||
output = pack('H', len(commands)) # number of commands in list
|
||||
for c in commands:
|
||||
output += c.serialize()
|
||||
|
||||
return output
|
||||
|
||||
def serialize_image(commands, size):
|
||||
s = serialize_header(size)
|
||||
s += serialize(commands)
|
||||
|
||||
output = "PDCI"
|
||||
output += pack('I', len(s))
|
||||
output += s
|
||||
return output
|
123
third_party/pbl/pblconvert/pblconvert/svg2pdc/pebble_image_routines.py
vendored
Normal file
|
@ -0,0 +1,123 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import math
|
||||
|
||||
# This module contains common image and color routines used to convert images
|
||||
# for use with Pebble.
|
||||
#
|
||||
# pebble64 refers to the color palette that is available in color products,
|
||||
# pebble2 refers to the palette available in b&w products
|
||||
|
||||
|
||||
# Create pebble 64 colors-table (r, g, b - 2 bits per channel)
|
||||
def _get_pebble64_palette():
|
||||
pebble_palette = []
|
||||
for i in xrange(0, 64):
|
||||
pebble_palette.append((
|
||||
((i >> 4) & 0x3) * 85, # R
|
||||
((i >> 2) & 0x3) * 85, # G
|
||||
((i ) & 0x3) * 85)) # B
|
||||
return pebble_palette
|
||||
|
||||
|
||||
def nearest_color_to_pebble64_palette(r, g, b, a):
|
||||
"""
|
||||
match each rgba32 pixel to the nearest color in the 8 bit pebble palette
|
||||
returns closest rgba32 color triplet (r, g, b, a)
|
||||
"""
|
||||
|
||||
a = ((a + 42) / 85) * 85 # fast nearest alpha for 2bit color range
|
||||
# clear transparent pixels (makes image more compress-able)
|
||||
# and required for greyscale tests
|
||||
if a == 0:
|
||||
r, g, b = (0, 0, 0)
|
||||
else:
|
||||
r = ((r + 42) / 85) * 85 # nearest for 2bit color range
|
||||
g = ((g + 42) / 85) * 85 # nearest for 2bit color range
|
||||
b = ((b + 42) / 85) * 85 # nearest for 2bit color range
|
||||
|
||||
return r, g, b, a
|
||||
|
||||
|
||||
def nearest_color_to_pebble2_palette(r, g, b, a):
|
||||
"""
|
||||
match each rgba32 pixel to the nearest color in 2 bit pebble palette
|
||||
returns closest rgba32 color triplet (r, g, b, a)
|
||||
"""
|
||||
|
||||
# these constants come from ITU-R recommendation BT.709
|
||||
luma = (r * 0.2126 + g * 0.7152 + b * 0.11)
|
||||
|
||||
def round_to_1_bit(value):
|
||||
""" Round a [0-255] value to either 0 or 255 """
|
||||
if value > (255 / 2):
|
||||
return 255
|
||||
return 0
|
||||
|
||||
rounded_luma = round_to_1_bit(luma)
|
||||
return (rounded_luma, rounded_luma, rounded_luma, round_to_1_bit(a))
|
||||
|
||||
|
||||
def truncate_color_to_pebble64_palette(r, g, b, a):
|
||||
"""
|
||||
converts each rgba32 pixel to the next lower matching color (truncate method)
|
||||
in the pebble palette
|
||||
returns the truncated color as a rgba32 color triplet (r, g, b, a)
|
||||
"""
|
||||
|
||||
a = (a / 85) * 85 # truncate alpha for 2bit color range
|
||||
# clear transparent pixels (makes image more compress-able)
|
||||
# and required for greyscale tests
|
||||
if a == 0:
|
||||
r, g, b = (0, 0, 0)
|
||||
else:
|
||||
r = (r / 85) * 85 # truncate for 2bit color range
|
||||
g = (g / 85) * 85 # truncate for 2bit color range
|
||||
b = (b / 85) * 85 # truncate for 2bit color range
|
||||
|
||||
return r, g, b, a
|
||||
|
||||
|
||||
def truncate_color_to_pebble2_palette(r, g, b, a):
|
||||
"""
|
||||
converts each rgba32 pixel to the next lower matching color (truncate method)
|
||||
returns closest rgba32 color triplet (r, g, b, a)
|
||||
"""
|
||||
|
||||
if a != 255:
|
||||
a = 0
|
||||
|
||||
if r == 255 and g == 255 and b == 255:
|
||||
return r, g, b, a
|
||||
else:
|
||||
return 0, 0, 0, a
|
||||
|
||||
|
||||
def rgba32_triplet_to_argb8(r, g, b, a):
|
||||
"""
|
||||
converts a 32-bit RGBA color by channel to an ARGB8 (1 byte containing all 4 channels)
|
||||
"""
|
||||
a, r, g, b = (a >> 6, r >> 6, g >> 6, b >> 6)
|
||||
argb8 = (a << 6) | (r << 4) | (g << 2) | b
|
||||
return argb8
|
||||
|
||||
|
||||
# convert 32-bit color (r, g, b, a) to 32-bit RGBA word
|
||||
def rgba32_triplet_to_rgba32(r, g, b, a):
|
||||
return (((r & 0xFF) << 24) | ((g & 0xFF) << 16) | ((b & 0xFF) << 8) | (a & 0xFF))
|
||||
|
||||
|
||||
# takes number of colors and outputs PNG & PBI compatible bit depths for paletted images
|
||||
def num_colors_to_bitdepth(num_colors):
|
||||
bitdepth = int(math.ceil(math.log(num_colors, 2)))
|
||||
|
||||
# only bitdepth 1,2,4 and 8 supported by PBI and PNG
|
||||
if bitdepth == 0:
|
||||
# caused when palette has only 1 color
|
||||
bitdepth = 1
|
||||
elif bitdepth == 3:
|
||||
bitdepth = 4
|
||||
elif bitdepth > 4:
|
||||
bitdepth = 8
|
||||
|
||||
return bitdepth
|
485
third_party/pbl/pblconvert/pblconvert/svg2pdc/svg.py
vendored
Normal file
|
@ -0,0 +1,485 @@
|
|||
# coding=utf-8
|
||||
from exceptions import *
|
||||
from StringIO import StringIO
|
||||
from functools import partial
|
||||
from lxml import etree
|
||||
import cairosvg
|
||||
from cairosvg.parser import Tree
|
||||
from cairosvg.surface import size, node_format, normalize, gradient_or_pattern, color
|
||||
from cairosvg.surface.helpers import point, paint
|
||||
import io
|
||||
from pdc import PathCommand, CircleCommand, extend_bounding_box, bounding_box_around_points
|
||||
from annotation import Annotation, NS_ANNOTATION, PREFIX_ANNOTATION, TAG_HIGHLIGHT
|
||||
from pebble_image_routines import truncate_color_to_pebble64_palette, rgba32_triplet_to_argb8
|
||||
|
||||
try:
|
||||
import cairocffi as cairo
|
||||
# OSError means cairocffi is installed,
|
||||
# but could not load a cairo dynamic library.
|
||||
# pycairo may still be available with a statically-linked cairo.
|
||||
except (ImportError, OSError):
|
||||
import cairo # pycairo
|
||||
|
||||
|
||||
def cairo_from_png(path):
|
||||
surface = cairo.ImageSurface.create_from_png(path)
|
||||
return surface, cairo.Context(surface)
|
||||
|
||||
|
||||
class PDCContext(cairo.Context):
|
||||
def line_to(self, x, y):
|
||||
super(PDCContext, self).line_to(x, y)
|
||||
|
||||
|
||||
# http://effbot.org/zone/element-lib.htm#prettyprint
|
||||
def indent(elem, level=0):
|
||||
i = "\n" + level*" "
|
||||
if len(elem):
|
||||
if not elem.text or not elem.text.strip():
|
||||
elem.text = i + " "
|
||||
if not elem.tail or not elem.tail.strip():
|
||||
elem.tail = i
|
||||
for elem in elem:
|
||||
indent(elem, level+1)
|
||||
if not elem.tail or not elem.tail.strip():
|
||||
elem.tail = i
|
||||
else:
|
||||
if level and (not elem.tail or not elem.tail.strip()):
|
||||
elem.tail = i
|
||||
|
||||
|
||||
class PDCSurface(cairosvg.surface.PNGSurface):
|
||||
# noinspection PyMissingConstructor
|
||||
def __init__(self, tree, output, dpi, parent_surface=None, approximate_bezier=False):
|
||||
self.svg_tree = tree
|
||||
self.cairo = None
|
||||
self.cairosvg_tags = []
|
||||
self.pdc_commands = []
|
||||
self.approximate_bezier = approximate_bezier
|
||||
self.stored_size = None
|
||||
self.context_width, self.context_height = None, None
|
||||
self.cursor_position = [0, 0]
|
||||
self.cursor_d_position = [0, 0]
|
||||
self.text_path_width = 0
|
||||
self.tree_cache = {(tree.url, tree["id"]): tree}
|
||||
if parent_surface:
|
||||
self.markers = parent_surface.markers
|
||||
self.gradients = parent_surface.gradients
|
||||
self.patterns = parent_surface.patterns
|
||||
self.masks = parent_surface.masks
|
||||
self.paths = parent_surface.paths
|
||||
self.filters = parent_surface.filters
|
||||
else:
|
||||
self.markers = {}
|
||||
self.gradients = {}
|
||||
self.patterns = {}
|
||||
self.masks = {}
|
||||
self.paths = {}
|
||||
self.filters = {}
|
||||
self.page_sizes = []
|
||||
self._old_parent_node = self.parent_node = None
|
||||
self.output = output
|
||||
self.dpi = dpi
|
||||
self.font_size = size(self, "12pt")
|
||||
self.stroke_and_fill = True
|
||||
# we only support px
|
||||
for unit in ["mm", "cm", "in", "pt", "pc"]:
|
||||
for attr in ["width", "height"]:
|
||||
value = tree.get(attr)
|
||||
if value is not None and unit in value:
|
||||
tree.pop(attr)
|
||||
value = None
|
||||
|
||||
width, height, viewbox = node_format(self, tree)
|
||||
# Actual surface dimensions: may be rounded on raster surfaces types
|
||||
self.cairo, self.width, self.height = self._create_surface(
|
||||
width * self.device_units_per_user_units,
|
||||
height * self.device_units_per_user_units)
|
||||
self.page_sizes.append((self.width, self.height))
|
||||
self.context = PDCContext(self.cairo)
|
||||
# We must scale the context as the surface size is using physical units
|
||||
self.context.scale(
|
||||
self.device_units_per_user_units, self.device_units_per_user_units)
|
||||
|
||||
# SVG spec says "viewbox of size 0 means 'don't render'"
|
||||
if viewbox is not None and viewbox[2] <= 0 and viewbox[3] <= 0:
|
||||
return
|
||||
|
||||
# Initial, non-rounded dimensions
|
||||
self.set_context_size(width, height, viewbox)
|
||||
self.context.move_to(0, 0)
|
||||
|
||||
# register PDC namespace and add temporary fake attribute to propagate prefix
|
||||
etree.register_namespace(PREFIX_ANNOTATION, NS_ANNOTATION)
|
||||
ns_fake_attr = "{%s}foo" % NS_ANNOTATION
|
||||
tree.node.set(ns_fake_attr, "bar")
|
||||
|
||||
# remove all PDC elements (annotations in case we're processing an annotated SVG)
|
||||
def remove_pdc_elements(elem):
|
||||
for child in elem:
|
||||
if isinstance(child.tag, str) and child.tag.startswith("{%s}" % NS_ANNOTATION):
|
||||
elem.remove(child)
|
||||
else:
|
||||
remove_pdc_elements(child)
|
||||
|
||||
remove_pdc_elements(tree.node)
|
||||
self.draw_root(tree)
|
||||
tree.node.attrib.pop(ns_fake_attr)
|
||||
|
||||
def size(self):
|
||||
if self.stored_size is not None:
|
||||
return self.stored_size
|
||||
|
||||
result = None
|
||||
for command in self.pdc_commands:
|
||||
result = extend_bounding_box(result, rect2=command.bounding_box())
|
||||
|
||||
if result is None:
|
||||
return (0, 0)
|
||||
|
||||
# returned size is diagonal from (0, 0) to max_x/max_y
|
||||
return (max(0, result[0] + result[2]), max(0, result[1] + result[3]))
|
||||
|
||||
def cairo_tag_func(self, tag):
|
||||
return self.cairosvg_tags[0][tag]
|
||||
|
||||
def cairo_tags_push_and_wrap(self):
|
||||
self.cairosvg_tags.append(cairosvg.surface.TAGS.copy())
|
||||
custom_impl = {"polyline": polyline, "polygon": polygon, "line": line, "rect": rect, "circle": circle,
|
||||
"path": path, "svg": svg}
|
||||
for k,v in custom_impl.iteritems():
|
||||
original = self.cairo_tag_func(k)
|
||||
cairosvg.surface.TAGS[k] = partial(custom_impl[k], original=original)
|
||||
|
||||
def draw_root(self, node):
|
||||
if node.get("display", "").upper() == 'NONE':
|
||||
node.annotations = []
|
||||
Annotation(node, 'Attribute display="none" for root element will be ignored.')
|
||||
node.pop("display")
|
||||
|
||||
super(PDCSurface, self).draw_root(node)
|
||||
|
||||
def draw(self, node):
|
||||
self.cairo_tags_push_and_wrap()
|
||||
if not hasattr(node, "annotations"):
|
||||
node.annotations = []
|
||||
super(PDCSurface, self).draw(node)
|
||||
cairosvg.surface.TAGS = self.cairosvg_tags.pop()
|
||||
|
||||
def element_tree(self):
|
||||
indent(self.svg_tree.node)
|
||||
# ensure that viewbox is always set
|
||||
view_box = self.svg_tree.node.get("viewBox", "0 0 %d %d" % self.size())
|
||||
self.svg_tree.node.set("viewBox", view_box)
|
||||
|
||||
return etree.ElementTree(self.svg_tree.node)
|
||||
|
||||
def render_annoations_on_top(self, png_path):
|
||||
surface, ctx = cairo_from_png(png_path)
|
||||
|
||||
def iterate(elem):
|
||||
if TAG_HIGHLIGHT == elem.tag:
|
||||
args = [float(elem.get(k, "1")) for k in ["x", "y", "width", "height"]]
|
||||
ctx.rectangle(*args)
|
||||
ctx.set_source_rgb(1, 0, 0)
|
||||
ctx.stroke()
|
||||
|
||||
for child in elem:
|
||||
iterate(child)
|
||||
|
||||
iterate(self.svg_tree.node)
|
||||
result = StringIO()
|
||||
surface.write_to_png(result)
|
||||
return result.getvalue()
|
||||
|
||||
|
||||
def gcolor8_is_visible(color):
|
||||
return (color & 0b11000000) != 0
|
||||
|
||||
|
||||
def svg_color(surface, node, opacity, attribute, default=None):
|
||||
paint_source, paint_color = paint(node.get(attribute, default))
|
||||
if gradient_or_pattern(surface, node, paint_source):
|
||||
return 0
|
||||
(r, g, b, a) = color(paint_color, opacity)
|
||||
color256 = truncate_color_to_pebble64_palette(int(r*255), int(g*255), int(b*255), int(a*255))
|
||||
gcolor8 = rgba32_triplet_to_argb8(*color256)
|
||||
return gcolor8 if gcolor8_is_visible(gcolor8) else 0
|
||||
|
||||
|
||||
def svg(surface, node, original=None):
|
||||
original(surface, node)
|
||||
width, height, viewbox = node_format(surface, node)
|
||||
if not "width" in node:
|
||||
width = None if viewbox is None else viewbox[2]
|
||||
if not "height" in node:
|
||||
height = None if viewbox is None else viewbox[3]
|
||||
if (width is not None) and (height is not None):
|
||||
surface.stored_size = (width, height)
|
||||
|
||||
|
||||
def line(surface, node, original=None):
|
||||
x1, y1, x2, y2 = tuple(
|
||||
size(surface, node.get(position), position[0])
|
||||
for position in ("x1", "y1", "x2", "y2"))
|
||||
points = [(x1, y1), (x2, y2)]
|
||||
command = PathCommand(points, path_open=True, precise=True)
|
||||
handle_command(surface, node, command)
|
||||
|
||||
return original(surface, node)
|
||||
|
||||
def polygon(surface, node, original=None):
|
||||
return poly_element(surface, node, open=False, original=original)
|
||||
|
||||
|
||||
def polyline(surface, node, original=None):
|
||||
return poly_element(surface, node, open=True, original=original)
|
||||
|
||||
|
||||
def poly_element(surface, node, open, original=None):
|
||||
points_attr = normalize(node.get("points"))
|
||||
points = []
|
||||
while points_attr:
|
||||
x, y, points_attr = point(surface, points_attr)
|
||||
points.append((x, y))
|
||||
command = PathCommand(points, path_open=True, precise=True)
|
||||
command.open = open
|
||||
handle_command(surface, node, command)
|
||||
|
||||
return original(surface, node)
|
||||
|
||||
|
||||
def rect(surface, node, original=None):
|
||||
x, y = size(surface, node.get("x"), "x"), size(surface, node.get("y"), "y")
|
||||
width = size(surface, node.get("width"), "x")
|
||||
height = size(surface, node.get("height"), "y")
|
||||
|
||||
rx = node.get("rx")
|
||||
ry = node.get("ry")
|
||||
if rx and (ry is None):
|
||||
ry = rx
|
||||
elif ry and (rx is None):
|
||||
rx = ry
|
||||
rx = size(surface, rx, "x")
|
||||
ry = size(surface, ry, "y")
|
||||
if not (rx == 0 and ry == 0):
|
||||
annotation = Annotation(node, "Rounded rectangles are not supported.")
|
||||
right = x + width - rx
|
||||
bottom = y + height - ry
|
||||
annotation.add_highlight(x, y, rx, ry)
|
||||
annotation.add_highlight(right, y, rx, ry)
|
||||
annotation.add_highlight(right, bottom, rx, ry)
|
||||
annotation.add_highlight(x, bottom, rx, ry)
|
||||
|
||||
points = [(x, y), (x + width, y), (x + width, y + height), (x, y + height)]
|
||||
command = PathCommand(points, path_open=False, precise=True)
|
||||
handle_command(surface, node, command)
|
||||
|
||||
return original(surface, node)
|
||||
|
||||
|
||||
def circle(surface, node, original=None):
|
||||
r = size(surface, node.get("r"))
|
||||
cx = size(surface, node.get("cx"), "x")
|
||||
cy = size(surface, node.get("cy"), "y")
|
||||
|
||||
if r and cx is not None and cy is not None:
|
||||
command = CircleCommand((cx, cy), r)
|
||||
handle_command(surface, node, command)
|
||||
|
||||
return original(surface, node)
|
||||
|
||||
|
||||
def cubicbezier_mid(p0, p1, p2, p3, min_dist, l, r):
|
||||
t = (r[0] + l[0]) / 2
|
||||
a = (1. - t)**3
|
||||
b = 3. * t * (1. - t)**2
|
||||
c = 3.0 * t**2 * (1.0 - t)
|
||||
d = t**3
|
||||
|
||||
p = (a * p0[0] + b * p1[0] + c * p2[0] + d * p3[0],
|
||||
a * p0[1] + b * p1[1] + c * p2[1] + d * p3[1])
|
||||
|
||||
def pt_dist(p1, p2):
|
||||
return ((p1[0]-p2[0])**2 + (p1[1]-p2[1])**2)**0.5
|
||||
|
||||
if pt_dist(l[1], p) <= min_dist or pt_dist(r[1], p) <= min_dist:
|
||||
return []
|
||||
|
||||
left = cubicbezier_mid(p0, p1, p2, p3, min_dist=min_dist, l=l, r=(t, p))
|
||||
right = cubicbezier_mid(p0, p1, p2, p3, min_dist=min_dist, l=(t, p), r=r)
|
||||
|
||||
return left + [p] + right
|
||||
|
||||
def cubicbezier(p0, p1, p2, p3, min_dist):
|
||||
return [p0] + cubicbezier_mid(p0, p1, p2, p3, min_dist, (0.0, p0), (1.0, p3)) + [p3]
|
||||
|
||||
|
||||
class PathSurfaceContext(cairo.Context):
|
||||
def __init__(self, target, node, approximate_bezier):
|
||||
super(PathSurfaceContext, self).__init__(target)
|
||||
self.points = []
|
||||
self.path_open = True
|
||||
self.node = node
|
||||
self.approximate_bezier = approximate_bezier
|
||||
self.grouped_annotations = {}
|
||||
|
||||
def get_grouped_description(self, description, *args, **kwargs):
|
||||
if not description in self.grouped_annotations:
|
||||
self.grouped_annotations[description] = self.add_annotation(description, *args, **kwargs)
|
||||
|
||||
return self.grouped_annotations[description]
|
||||
|
||||
def add_annotation(self, *args, **kwargs):
|
||||
return Annotation(self.node, *args, **kwargs)
|
||||
|
||||
def add_current_point(self):
|
||||
self.points.append(self.get_current_point())
|
||||
|
||||
def create_command(self):
|
||||
return PathCommand(self.points, self.path_open, precise=True)
|
||||
|
||||
def move_to(self, x, y):
|
||||
super(PathSurfaceContext, self).move_to(x, y)
|
||||
self.add_current_point()
|
||||
|
||||
def line_to(self, x, y):
|
||||
super(PathSurfaceContext, self).line_to(x, y)
|
||||
self.add_current_point()
|
||||
|
||||
def rel_line_to(self, dx, dy):
|
||||
super(PathSurfaceContext, self).rel_line_to(dx, dy)
|
||||
self.add_current_point()
|
||||
|
||||
def curve_to(self, x1, y1, x2, y2, x3, y3):
|
||||
first = self.get_current_point()
|
||||
super(PathSurfaceContext, self).curve_to(x1, y1, x2, y2, x3, y3)
|
||||
last = self.get_current_point()
|
||||
|
||||
# approximate bezier curve
|
||||
points = cubicbezier(first, (x1, y1), (x2, y2), last, 5)
|
||||
box = bounding_box_around_points(points)
|
||||
|
||||
if self.approximate_bezier:
|
||||
description = "Curved command(s) were approximated."
|
||||
self.points.extend(points[1:])
|
||||
else:
|
||||
description = "Element contains unsupported curved command(s)."
|
||||
self.add_current_point()
|
||||
|
||||
link = "https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-bezier"
|
||||
self.get_grouped_description("Element contains unsupported curved command(s).", link=link).add_highlight(*box)
|
||||
|
||||
|
||||
def rel_curve_to(self, dx1, dy1, dx2, dy2, dx3, dy3):
|
||||
cur = self.get_current_point()
|
||||
x1 = dx1 + cur[0]
|
||||
y1 = dy1 + cur[1]
|
||||
x2 = dx2 + cur[0]
|
||||
y2 = dy2 + cur[1]
|
||||
x3 = dx3 + cur[0]
|
||||
y3 = dy3 + cur[1]
|
||||
self.curve_to(x1, y1, x2, y2, x3, y3)
|
||||
|
||||
def arc(self, xc, yc, radius, angle1, angle2):
|
||||
self.add_annotation_arc_unsupported(xc, yc, radius)
|
||||
super(PathSurfaceContext, self).arc(xc, yc, radius, angle1, angle2)
|
||||
|
||||
def arc_negative(self, xc, yc, radius, angle1, angle2):
|
||||
self.add_annotation_arc_unsupported(xc, yc, radius)
|
||||
super(PathSurfaceContext, self).arc_negative(xc, yc, radius, angle1, angle2)
|
||||
|
||||
def close_path(self):
|
||||
super(PathSurfaceContext, self).close_path()
|
||||
self.path_open = False
|
||||
|
||||
def add_annotation_arc_unsupported(self, xc, yc, radius):
|
||||
# caller uses context transforms to express arcs
|
||||
points = [
|
||||
(xc-radius, yc-radius), # top-left
|
||||
(xc+radius, yc-radius), # top-right
|
||||
(xc+radius, yc+radius), # bottom-right
|
||||
(xc-radius, yc+radius), # bottom-left
|
||||
]
|
||||
box = bounding_box_around_points([self.user_to_device(*p) for p in points])
|
||||
self.get_grouped_description("Element contains unsupported arc command(s).").add_highlight(*box)
|
||||
|
||||
|
||||
class PathSurface:
|
||||
def __init__(self, target, node, approximate_bezier):
|
||||
self.context = PathSurfaceContext(target, node, approximate_bezier)
|
||||
|
||||
|
||||
def path(surface, node, original=None):
|
||||
# unfortunately, the original implementation has a side-effect on node
|
||||
# but as it's rather complex, we'd rather reuse it and as it doesn't change the surface
|
||||
# it's ok to call it with the fake surface we create here
|
||||
collecting_surface = PathSurface(surface.cairo, node, surface.approximate_bezier)
|
||||
result = original(collecting_surface, node)
|
||||
command = collecting_surface.context.create_command()
|
||||
if len(command.points) > 1:
|
||||
handle_command(surface, node, command)
|
||||
else:
|
||||
Annotation(node, "Path needs at least two points.")
|
||||
|
||||
return result
|
||||
|
||||
|
||||
class Transformer:
|
||||
def __init__(self, cairo, node):
|
||||
self.context = cairo
|
||||
self.node = node
|
||||
|
||||
def transform_point(self, pt):
|
||||
return self.context.user_to_device(pt[0], pt[1])
|
||||
|
||||
def transform_distance(self, dx, dy):
|
||||
return self.context.user_to_device_distance(dx, dy)
|
||||
|
||||
def add_annotation(self, *args, **kwargs):
|
||||
return Annotation(self.node, *args, **kwargs)
|
||||
|
||||
def handle_command(surface, node, command):
|
||||
opacity = float(node.get("opacity", 1))
|
||||
# Get stroke and fill opacity
|
||||
stroke_opacity = float(node.get("stroke-opacity", 1))
|
||||
fill_opacity = float(node.get("fill-opacity", 1))
|
||||
if opacity < 1:
|
||||
stroke_opacity *= opacity
|
||||
fill_opacity *= opacity
|
||||
default_fill = "black" if node.get("fill-rule") == "evenodd" else None
|
||||
command.fill_color = svg_color(surface, node, fill_opacity, "fill", default_fill)
|
||||
command.stroke_color = svg_color(surface, node, stroke_opacity, "stroke")
|
||||
if gcolor8_is_visible(command.stroke_color):
|
||||
command.stroke_width = int(size(surface, node.get("stroke-width")))
|
||||
if command.stroke_width == 0:
|
||||
command.stroke_color = 0
|
||||
|
||||
# transform
|
||||
transformer = Transformer(surface.context, node)
|
||||
command.transform(transformer)
|
||||
if command.stroke_width and node.get("vector-effect") != "non-scaling-stroke":
|
||||
transformed_stroke = transformer.transform_distance(command.stroke_width, 0)
|
||||
transformed_stroke_width = (transformed_stroke[0]**2 + transformed_stroke[1]**2)**0.5
|
||||
command.stroke_width = transformed_stroke_width
|
||||
for annotation in node.annotations:
|
||||
annotation.transform(transformer)
|
||||
|
||||
command.finalize(transformer)
|
||||
|
||||
# Manage display and visibility
|
||||
display = node.get("display", "inline") != "none"
|
||||
visible = display and (node.get("visibility", "visible") != "hidden") and \
|
||||
(gcolor8_is_visible(command.fill_color) or gcolor8_is_visible(command.stroke_color))
|
||||
|
||||
if visible:
|
||||
surface.pdc_commands.append(command)
|
||||
|
||||
|
||||
def surface_from_svg(url=None, bytestring=None, approximate_bezier=False):
|
||||
try:
|
||||
tree = Tree(url=url, bytestring=bytestring)
|
||||
except etree.XMLSyntaxError as e:
|
||||
raise Svg2PdcFormatError(e.args[0])
|
||||
output = io.BytesIO()
|
||||
return PDCSurface(tree, output, 96, approximate_bezier=approximate_bezier)
|
2
third_party/pbl/pblconvert/pblconvert/version.py
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
__version_info__ = (0, 0, 2)
|
||||
__version__ = '.'.join(map(str, __version_info__))
|
3
third_party/pbl/pblconvert/requirements.txt
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
--index-url https://pypi.python.org/simple/
|
||||
|
||||
-e .
|
26
third_party/pbl/pblconvert/setup.py
vendored
Normal file
|
@ -0,0 +1,26 @@
|
|||
from setuptools import setup, find_packages
|
||||
|
||||
__version__= None # Overwritten by executing version.py.
|
||||
with open('pblconvert/version.py') as f:
|
||||
exec(f.read())
|
||||
|
||||
requires = [
|
||||
'lxml==3.4.4',
|
||||
'cairosvg',
|
||||
'mock',
|
||||
'Pillow',
|
||||
]
|
||||
|
||||
setup(name='pblconvert',
|
||||
version=__version__,
|
||||
description='Tools to convert files into valid Pebble resources',
|
||||
long_description=open('README.rst').read(),
|
||||
url='https://github.com/pebble/pblconvert',
|
||||
author='Pebble Technology Corporation',
|
||||
license='MIT',
|
||||
packages=find_packages(exclude=['tests', 'tests.*']),
|
||||
package_data={'': ['bin/*']},
|
||||
entry_points={'console_scripts': ['pblconvert = pblconvert.pblconvert:main']},
|
||||
install_requires=requires,
|
||||
test_suite='nose.collector',
|
||||
)
|
0
third_party/pbl/pblconvert/tests/__init__.py
vendored
Normal file
0
third_party/pbl/pblconvert/tests/svg2pdc/__init__.py
vendored
Normal file
After Width: | Height: | Size: 937 B |
|
@ -0,0 +1,26 @@
|
|||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:pdc="http://www.pebble.com/2015/pdc" width="100%" height="100%" viewBox="0 0 50 50" version="1.1" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.41421;">
|
||||
<g id="Design">
|
||||
<path d="M29,35L29,31" style="fill:white;fill-rule:nonzero;stroke-width:2px;stroke:black;"/>
|
||||
<path d="M9,35L9,31" style="fill:white;fill-rule:nonzero;stroke-width:2px;stroke:black;"/>
|
||||
<path d="M19,41L19,37" style="fill:white;fill-rule:nonzero;stroke-width:2px;stroke:black;"/>
|
||||
<path d="M9,47L9,43" style="fill:white;fill-rule:nonzero;stroke-width:2px;stroke:black;"/>
|
||||
<path d="M30.9307,21.0882L44.6746,21.5L44.6746,15.5L40.9203,11.5L29.6574,11.5L25.9031,7.5L13.7015,7.5L9.00863,12.5L5.25432,12.5L1.5,16.5L1.5,21.5L5.25432,25.5L30.9307,21.0882Z" style="fill:white;fill-rule:nonzero;stroke-width:2.91px;stroke:black;">
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="21.09" x="30.93" details="Invalid point: (30.93, 21.09). Used closest supported coordinate: (30.875, 21.125)"/>
|
||||
<pdc:highlight y="21.50" x="44.68" details="Invalid point: (44.68, 21.50). Used closest supported coordinate: (44.625, 21.5)"/>
|
||||
<pdc:highlight y="15.50" x="44.68" details="Invalid point: (44.68, 15.50). Used closest supported coordinate: (44.625, 15.5)"/>
|
||||
<pdc:highlight y="11.50" x="40.92" details="Invalid point: (40.92, 11.50). Used closest supported coordinate: (40.875, 11.5)"/>
|
||||
<pdc:highlight y="11.50" x="29.66" details="Invalid point: (29.66, 11.50). Used closest supported coordinate: (29.625, 11.5)"/>
|
||||
<pdc:highlight y="7.50" x="25.90" details="Invalid point: (25.90, 7.50). Used closest supported coordinate: (25.875, 7.5)"/>
|
||||
<pdc:highlight y="7.50" x="13.70" details="Invalid point: (13.70, 7.50). Used closest supported coordinate: (13.75, 7.5)"/>
|
||||
<pdc:highlight y="12.50" x="9.01" details="Invalid point: (9.01, 12.50). Used closest supported coordinate: (9.0, 12.5)"/>
|
||||
<pdc:highlight y="12.50" x="5.25" details="Invalid point: (5.25, 12.50). Used closest supported coordinate: (5.25, 12.5)"/>
|
||||
<pdc:highlight y="25.50" x="5.25" details="Invalid point: (5.25, 25.50). Used closest supported coordinate: (5.25, 25.5)"/>
|
||||
<pdc:highlight y="21.09" x="30.93" details="Invalid point: (30.93, 21.09). Used closest supported coordinate: (30.875, 21.125)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<path d="M10,13L16,13L21,16" style="fill:none;stroke-width:2px;stroke:black;"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 493 B |
12
third_party/pbl/pblconvert/tests/svg2pdc/examples/community/freakified_modified_rain.svg
vendored
Normal file
|
@ -0,0 +1,12 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg width="100%" height="100%" viewBox="0 0 50 50" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.41421;">
|
||||
<g id="Design">
|
||||
<path d="M29,35L29,31" style="fill:white;fill-rule:nonzero;stroke-width:2px;stroke:black;"/>
|
||||
<path d="M9,35L9,31" style="fill:white;fill-rule:nonzero;stroke-width:2px;stroke:black;"/>
|
||||
<path d="M19,41L19,37" style="fill:white;fill-rule:nonzero;stroke-width:2px;stroke:black;"/>
|
||||
<path d="M9,47L9,43" style="fill:white;fill-rule:nonzero;stroke-width:2px;stroke:black;"/>
|
||||
<path d="M30.9307,21.0882L44.6746,21.5L44.6746,15.5L40.9203,11.5L29.6574,11.5L25.9031,7.5L13.7015,7.5L9.00863,12.5L5.25432,12.5L1.5,16.5L1.5,21.5L5.25432,25.5L30.9307,21.0882Z" style="fill:white;fill-rule:nonzero;stroke-width:2.91px;stroke:black;"/>
|
||||
<path d="M10,13L16,13L21,16" style="fill:none;stroke-width:2px;stroke:black;"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 2.4 KiB |
|
@ -0,0 +1,109 @@
|
|||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:pdc="http://www.pebble.com/2015/pdc" version="1.1" width="76.380539" height="69.958122" id="svg3936" viewBox="0 0 76 69">
|
||||
<defs id="defs3938"/>
|
||||
<metadata id="metadata3941">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||
<dc:title/>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g transform="translate(35.86042,1.43425)" id="layer1">
|
||||
<path d="m 9.29202,61.21549 c 3.78806,-3.66181 5.68211,-6.06092 5.68211,-6.06092 l 15.9099,-0.12627 5.93464,6.18719 -5.17703,5.80838 -16.92006,-1e-5 z" id="path4041" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
|
||||
<pdc:annotation description="Element contains unsupported curved command(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-bezier">
|
||||
<pdc:highlight y="56.58" x="45.15" height="6.06" width="5.68"/>
|
||||
</pdc:annotation>
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="62.65" x="45.15" details="Invalid point: (45.15, 62.65). Used closest supported coordinate: (45.125, 62.625)"/>
|
||||
<pdc:highlight y="56.59" x="50.84" details="Invalid point: (50.84, 56.59). Used closest supported coordinate: (50.875, 56.625)"/>
|
||||
<pdc:highlight y="56.46" x="66.75" details="Invalid point: (66.75, 56.46). Used closest supported coordinate: (66.75, 56.5)"/>
|
||||
<pdc:highlight y="62.65" x="72.68" details="Invalid point: (72.68, 62.65). Used closest supported coordinate: (72.625, 62.625)"/>
|
||||
<pdc:highlight y="68.46" x="67.50" details="Invalid point: (67.50, 68.46). Used closest supported coordinate: (67.5, 68.5)"/>
|
||||
<pdc:highlight y="68.46" x="50.58" details="Invalid point: (50.58, 68.46). Used closest supported coordinate: (50.625, 68.5)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<path d="M 23.12727,60.28064 7.05584,22.24493 l 0,-13.57143 8.39286,-7.67858 15.71429,0.17857 7.85713,7.85715 0,13.21428 z" id="path4551" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="61.72" x="58.99" details="Invalid point: (58.99, 61.72). Used closest supported coordinate: (59.0, 61.75)"/>
|
||||
<pdc:highlight y="23.68" x="42.92" details="Invalid point: (42.92, 23.68). Used closest supported coordinate: (42.875, 23.625)"/>
|
||||
<pdc:highlight y="10.11" x="42.92" details="Invalid point: (42.92, 10.11). Used closest supported coordinate: (42.875, 10.125)"/>
|
||||
<pdc:highlight y="2.43" x="51.31" details="Invalid point: (51.31, 2.43). Used closest supported coordinate: (51.25, 2.375)"/>
|
||||
<pdc:highlight y="2.61" x="67.02" details="Invalid point: (67.02, 2.61). Used closest supported coordinate: (67.0, 2.625)"/>
|
||||
<pdc:highlight y="10.47" x="74.88" details="Invalid point: (74.88, 10.47). Used closest supported coordinate: (74.875, 10.5)"/>
|
||||
<pdc:highlight y="23.68" x="74.88" details="Invalid point: (74.88, 23.68). Used closest supported coordinate: (74.875, 23.625)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<circle cx="0" cy="0" r="7" transform="translate(23.12727,16.35206)" id="circle20" style="fill:none;stroke:#000000;stroke-width:3;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="17.79" x="58.99" details="Invalid point: (58.99, 17.79). Used closest supported coordinate: (59.0, 18.0)"/>
|
||||
</pdc:annotation>
|
||||
</circle>
|
||||
<path d="m 6.17529,40.24432 -8.75,0 0,0" id="path4571" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="41.68" x="42.04" details="Invalid point: (42.04, 41.68). Used closest supported coordinate: (42.0, 41.625)"/>
|
||||
<pdc:highlight y="41.68" x="33.29" details="Invalid point: (33.29, 41.68). Used closest supported coordinate: (33.25, 41.625)"/>
|
||||
<pdc:highlight y="41.68" x="33.29" details="Invalid point: (33.29, 41.68). Used closest supported coordinate: (33.25, 41.625)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<path d="m -7.21756,40.24432 -8.57143,0 -5.53572,-6.07143" id="path4573" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="41.68" x="28.64" details="Invalid point: (28.64, 41.68). Used closest supported coordinate: (28.625, 41.625)"/>
|
||||
<pdc:highlight y="41.68" x="20.07" details="Invalid point: (20.07, 41.68). Used closest supported coordinate: (20.125, 41.625)"/>
|
||||
<pdc:highlight y="35.61" x="14.54" details="Invalid point: (14.54, 35.61). Used closest supported coordinate: (14.5, 35.625)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<path d="m -23.82471,31.31575 -8.75,-8.21429 0,0 0.17857,0" id="path4575" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="32.75" x="12.04" details="Invalid point: (12.04, 32.75). Used closest supported coordinate: (12.0, 32.75)"/>
|
||||
<pdc:highlight y="24.54" x="3.29" details="Invalid point: (3.29, 24.54). Used closest supported coordinate: (3.25, 24.5)"/>
|
||||
<pdc:highlight y="24.54" x="3.29" details="Invalid point: (3.29, 24.54). Used closest supported coordinate: (3.25, 24.5)"/>
|
||||
<pdc:highlight y="24.54" x="3.47" details="Invalid point: (3.47, 24.54). Used closest supported coordinate: (3.5, 24.5)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<path d="m -34.36042,18.45861 0.17857,-7.85715" id="path4577" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="19.89" x="1.50" details="Invalid point: (1.50, 19.89). Used closest supported coordinate: (1.5, 19.875)"/>
|
||||
<pdc:highlight y="12.04" x="1.68" details="Invalid point: (1.68, 12.04). Used closest supported coordinate: (1.625, 12.0)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<path d="m -32.57471,6.13718 4.64286,-4.10714" id="path4579" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="7.57" x="3.29" details="Invalid point: (3.29, 7.57). Used closest supported coordinate: (3.25, 7.625)"/>
|
||||
<pdc:highlight y="3.47" x="7.93" details="Invalid point: (7.93, 3.47). Used closest supported coordinate: (7.875, 3.5)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<path d="m -23.82471,0.24432 8.57143,-0.17857" id="path4581" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="1.68" x="12.04" details="Invalid point: (12.04, 1.68). Used closest supported coordinate: (12.0, 1.625)"/>
|
||||
<pdc:highlight y="1.50" x="20.61" details="Invalid point: (20.61, 1.50). Used closest supported coordinate: (20.625, 1.5)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<path d="m -11.50328,2.03004 4.64286,4.46428" id="path4583" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="3.47" x="24.36" details="Invalid point: (24.36, 3.47). Used closest supported coordinate: (24.375, 3.5)"/>
|
||||
<pdc:highlight y="7.93" x="29.00" details="Invalid point: (29.00, 7.93). Used closest supported coordinate: (29.0, 7.875)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<path d="m -5.25328,10.78004 0,7.67857" id="path4585" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="12.22" x="30.61" details="Invalid point: (30.61, 12.22). Used closest supported coordinate: (30.625, 12.25)"/>
|
||||
<pdc:highlight y="19.90" x="30.61" details="Invalid point: (30.61, 19.90). Used closest supported coordinate: (30.625, 19.875)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<path d="m -7.21756,23.10146 -8.21429,8.21429" id="path4587" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="24.54" x="28.64" details="Invalid point: (28.64, 24.54). Used closest supported coordinate: (28.625, 24.5)"/>
|
||||
<pdc:highlight y="32.75" x="20.43" details="Invalid point: (20.43, 32.75). Used closest supported coordinate: (20.375, 32.75)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<path d="m -24.18185,39.17289 -7.32143,7.14286" id="path4589" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="40.61" x="11.68" details="Invalid point: (11.68, 40.61). Used closest supported coordinate: (11.625, 40.625)"/>
|
||||
<pdc:highlight y="47.75" x="4.36" details="Invalid point: (4.36, 47.75). Used closest supported coordinate: (4.375, 47.75)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 1.1 KiB |
87
third_party/pbl/pblconvert/tests/svg2pdc/examples/community/gregoire_location_changed.svg
vendored
Normal file
|
@ -0,0 +1,87 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
version="1.1"
|
||||
width="76.380539"
|
||||
height="69.958122"
|
||||
id="svg3936">
|
||||
<defs
|
||||
id="defs3938" />
|
||||
<metadata
|
||||
id="metadata3941">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
transform="translate(35.86042,1.43425)"
|
||||
id="layer1">
|
||||
<path
|
||||
d="m 9.29202,61.21549 c 3.78806,-3.66181 5.68211,-6.06092 5.68211,-6.06092 l 15.9099,-0.12627 5.93464,6.18719 -5.17703,5.80838 -16.92006,-1e-5 z"
|
||||
id="path4041"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
d="M 23.12727,60.28064 7.05584,22.24493 l 0,-13.57143 8.39286,-7.67858 15.71429,0.17857 7.85713,7.85715 0,13.21428 z"
|
||||
id="path4551"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<circle
|
||||
cx="0"
|
||||
cy="0"
|
||||
r="7"
|
||||
transform="translate(23.12727,16.35206)"
|
||||
id="circle20"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
d="m 6.17529,40.24432 -8.75,0 0,0"
|
||||
id="path4571"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
d="m -7.21756,40.24432 -8.57143,0 -5.53572,-6.07143"
|
||||
id="path4573"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
d="m -23.82471,31.31575 -8.75,-8.21429 0,0 0.17857,0"
|
||||
id="path4575"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
d="m -34.36042,18.45861 0.17857,-7.85715"
|
||||
id="path4577"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
d="m -32.57471,6.13718 4.64286,-4.10714"
|
||||
id="path4579"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
d="m -23.82471,0.24432 8.57143,-0.17857"
|
||||
id="path4581"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
d="m -11.50328,2.03004 4.64286,4.46428"
|
||||
id="path4583"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
d="m -5.25328,10.78004 0,7.67857"
|
||||
id="path4585"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
d="m -7.21756,23.10146 -8.21429,8.21429"
|
||||
id="path4587"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
d="m -24.18185,39.17289 -7.32143,7.14286"
|
||||
id="path4589"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 4 KiB |
BIN
third_party/pbl/pblconvert/tests/svg2pdc/examples/community/gregoire_no_ride.expected/annotated.png
vendored
Normal file
After Width: | Height: | Size: 1,013 B |
107
third_party/pbl/pblconvert/tests/svg2pdc/examples/community/gregoire_no_ride.expected/annotated.svg
vendored
Normal file
|
@ -0,0 +1,107 @@
|
|||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:pdc="http://www.pebble.com/2015/pdc" version="1.1" width="46.4375" height="52.9375" id="svg4891" viewBox="0 0 46 52">
|
||||
<defs id="defs4893"/>
|
||||
<metadata id="metadata4896">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||
<dc:title/>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g transform="translate(-462.15625,-751.75)" id="layer1">
|
||||
<path d="m 472.75139,753.35702 -9.09138,10.10153 0,14.14214 8.15038,7.57614 0,18.01069 9,0 0,-17.50561 10,0.25253 0,17.25308 9,0 0,-18.01069 7.28618,-5.3033 0,-20.96067 z" id="path5474" style="fill:#ffaa00;fill-opacity:1;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="1.61" x="10.59" details="Invalid point: (10.59, 1.61). Used closest supported coordinate: (10.625, 1.625)"/>
|
||||
<pdc:highlight y="11.71" x="1.50" details="Invalid point: (1.50, 11.71). Used closest supported coordinate: (1.5, 11.75)"/>
|
||||
<pdc:highlight y="25.85" x="1.50" details="Invalid point: (1.50, 25.85). Used closest supported coordinate: (1.5, 25.875)"/>
|
||||
<pdc:highlight y="33.42" x="9.65" details="Invalid point: (9.65, 33.42). Used closest supported coordinate: (9.625, 33.375)"/>
|
||||
<pdc:highlight y="51.43" x="9.65" details="Invalid point: (9.65, 51.43). Used closest supported coordinate: (9.625, 51.375)"/>
|
||||
<pdc:highlight y="51.43" x="18.65" details="Invalid point: (18.65, 51.43). Used closest supported coordinate: (18.625, 51.375)"/>
|
||||
<pdc:highlight y="33.93" x="18.65" details="Invalid point: (18.65, 33.93). Used closest supported coordinate: (18.625, 33.875)"/>
|
||||
<pdc:highlight y="34.18" x="28.65" details="Invalid point: (28.65, 34.18). Used closest supported coordinate: (28.625, 34.125)"/>
|
||||
<pdc:highlight y="51.44" x="28.65" details="Invalid point: (28.65, 51.44). Used closest supported coordinate: (28.625, 51.5)"/>
|
||||
<pdc:highlight y="51.44" x="37.65" details="Invalid point: (37.65, 51.44). Used closest supported coordinate: (37.625, 51.5)"/>
|
||||
<pdc:highlight y="33.43" x="37.65" details="Invalid point: (37.65, 33.43). Used closest supported coordinate: (37.625, 33.375)"/>
|
||||
<pdc:highlight y="28.12" x="44.94" details="Invalid point: (44.94, 28.12). Used closest supported coordinate: (45.0, 28.125)"/>
|
||||
<pdc:highlight y="7.16" x="44.94" details="Invalid point: (44.94, 7.16). Used closest supported coordinate: (45.0, 7.125)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<path d="m 476.28692,773.68752 20.20305,0 0,-16.03735 -19.95051,-2.77791 z" id="path5476" style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="21.94" x="14.13" details="Invalid point: (14.13, 21.94). Used closest supported coordinate: (14.125, 22.0)"/>
|
||||
<pdc:highlight y="21.94" x="34.33" details="Invalid point: (34.33, 21.94). Used closest supported coordinate: (34.375, 22.0)"/>
|
||||
<pdc:highlight y="5.90" x="34.33" details="Invalid point: (34.33, 5.90). Used closest supported coordinate: (34.375, 5.875)"/>
|
||||
<pdc:highlight y="3.12" x="14.38" details="Invalid point: (14.38, 3.12). Used closest supported coordinate: (14.375, 3.125)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<path d="m 454.82118,773.81261 8.46003,-7.44988" id="path5478" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="22.06" x="-7.34" details="Invalid point: (-7.34, 22.06). Used closest supported coordinate: (-7.375, 22.125)"/>
|
||||
<pdc:highlight y="14.61" x="1.12" details="Invalid point: (1.12, 14.61). Used closest supported coordinate: (1.125, 14.625)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<path d="m 512.90495,727.90625 -10.6066,10.04595 8.83883,12.12183 -4.79822,4.79822 0,25.50636 4.54568,4.79822 12.37438,0 4.04061,-4.54569 0.50507,-25.75889 -5.05076,-5.05076 7.82868,-11.86929 -9.84899,-10.04595 1.26269,21.91524 -9.84898,0 z" id="path5482" style="fill:#ffaa00;fill-opacity:1;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="-23.84" x="50.75" details="Invalid point: (50.75, -23.84). Used closest supported coordinate: (50.75, -23.875)"/>
|
||||
<pdc:highlight y="-13.80" x="40.14" details="Invalid point: (40.14, -13.80). Used closest supported coordinate: (40.125, -13.75)"/>
|
||||
<pdc:highlight y="-1.68" x="48.98" details="Invalid point: (48.98, -1.68). Used closest supported coordinate: (49.0, -1.625)"/>
|
||||
<pdc:highlight y="3.12" x="44.19" details="Invalid point: (44.19, 3.12). Used closest supported coordinate: (44.25, 3.125)"/>
|
||||
<pdc:highlight y="28.63" x="44.19" details="Invalid point: (44.19, 28.63). Used closest supported coordinate: (44.25, 28.625)"/>
|
||||
<pdc:highlight y="33.43" x="48.73" details="Invalid point: (48.73, 33.43). Used closest supported coordinate: (48.75, 33.375)"/>
|
||||
<pdc:highlight y="33.43" x="61.11" details="Invalid point: (61.11, 33.43). Used closest supported coordinate: (61.125, 33.375)"/>
|
||||
<pdc:highlight y="28.88" x="65.15" details="Invalid point: (65.15, 28.88). Used closest supported coordinate: (65.125, 28.875)"/>
|
||||
<pdc:highlight y="3.12" x="65.65" details="Invalid point: (65.65, 3.12). Used closest supported coordinate: (65.625, 3.125)"/>
|
||||
<pdc:highlight y="-1.93" x="60.60" details="Invalid point: (60.60, -1.93). Used closest supported coordinate: (60.625, -1.875)"/>
|
||||
<pdc:highlight y="-13.80" x="68.43" details="Invalid point: (68.43, -13.80). Used closest supported coordinate: (68.375, -13.75)"/>
|
||||
<pdc:highlight y="-23.85" x="58.58" details="Invalid point: (58.58, -23.85). Used closest supported coordinate: (58.625, -23.875)"/>
|
||||
<pdc:highlight y="-1.93" x="59.84" details="Invalid point: (59.84, -1.93). Used closest supported coordinate: (59.875, -1.875)"/>
|
||||
<pdc:highlight y="-1.93" x="50.00" details="Invalid point: (50.00, -1.93). Used closest supported coordinate: (50.0, -1.875)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<path d="m 506.59149,769.40625 4.79823,-5.5 11.36422,0 5.05076,5.5" id="path5484" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="17.66" x="44.43" details="Invalid point: (44.43, 17.66). Used closest supported coordinate: (44.375, 17.625)"/>
|
||||
<pdc:highlight y="12.16" x="49.23" details="Invalid point: (49.23, 12.16). Used closest supported coordinate: (49.25, 12.125)"/>
|
||||
<pdc:highlight y="12.16" x="60.59" details="Invalid point: (60.59, 12.16). Used closest supported coordinate: (60.625, 12.125)"/>
|
||||
<pdc:highlight y="17.66" x="65.64" details="Invalid point: (65.64, 17.66). Used closest supported coordinate: (65.625, 17.625)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<path d="m 512.65241,757.90271 8.5863,0" id="path5486" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="6.15" x="50.50" details="Invalid point: (50.50, 6.15). Used closest supported coordinate: (50.5, 6.125)"/>
|
||||
<pdc:highlight y="6.15" x="59.08" details="Invalid point: (59.08, 6.15). Used closest supported coordinate: (59.125, 6.125)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<rect width="1.767767" height="2.0203052" rx="0.83095455" ry="0.12964669" x="513.15747" y="769.77197" id="rect5488" style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
|
||||
<pdc:annotation description="Rounded rectangles are not supported.">
|
||||
<pdc:highlight y="18.02" x="51.00" height="0.13" width="0.83"/>
|
||||
<pdc:highlight y="18.02" x="51.93" height="0.13" width="0.83"/>
|
||||
<pdc:highlight y="19.91" x="51.93" height="0.13" width="0.83"/>
|
||||
<pdc:highlight y="19.91" x="51.00" height="0.13" width="0.83"/>
|
||||
</pdc:annotation>
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="18.02" x="51.00" details="Invalid point: (51.00, 18.02). Used closest supported coordinate: (51.0, 18.0)"/>
|
||||
<pdc:highlight y="18.02" x="52.77" details="Invalid point: (52.77, 18.02). Used closest supported coordinate: (52.75, 18.0)"/>
|
||||
<pdc:highlight y="20.04" x="52.77" details="Invalid point: (52.77, 20.04). Used closest supported coordinate: (52.75, 20.0)"/>
|
||||
<pdc:highlight y="20.04" x="51.00" details="Invalid point: (51.00, 20.04). Used closest supported coordinate: (51.0, 20.0)"/>
|
||||
</pdc:annotation>
|
||||
</rect>
|
||||
<rect width="1.767767" height="2.0203052" rx="0.83095455" ry="0.12964669" x="520.10223" y="770.02454" id="rect5488-7" style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
|
||||
<pdc:annotation description="Rounded rectangles are not supported.">
|
||||
<pdc:highlight y="18.27" x="57.94" height="0.13" width="0.83"/>
|
||||
<pdc:highlight y="18.27" x="58.88" height="0.13" width="0.83"/>
|
||||
<pdc:highlight y="20.17" x="58.88" height="0.13" width="0.83"/>
|
||||
<pdc:highlight y="20.17" x="57.94" height="0.13" width="0.83"/>
|
||||
</pdc:annotation>
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="18.27" x="57.95" details="Invalid point: (57.95, 18.27). Used closest supported coordinate: (58.0, 18.25)"/>
|
||||
<pdc:highlight y="18.27" x="59.71" details="Invalid point: (59.71, 18.27). Used closest supported coordinate: (59.75, 18.25)"/>
|
||||
<pdc:highlight y="20.29" x="59.71" details="Invalid point: (59.71, 20.29). Used closest supported coordinate: (59.75, 20.25)"/>
|
||||
<pdc:highlight y="20.29" x="57.95" details="Invalid point: (57.95, 20.29). Used closest supported coordinate: (58.0, 20.25)"/>
|
||||
</pdc:annotation>
|
||||
</rect>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 12 KiB |
BIN
third_party/pbl/pblconvert/tests/svg2pdc/examples/community/gregoire_no_ride.expected/image.pdc
vendored
Normal file
BIN
third_party/pbl/pblconvert/tests/svg2pdc/examples/community/gregoire_no_ride.expected/image.png
vendored
Normal file
After Width: | Height: | Size: 524 B |
74
third_party/pbl/pblconvert/tests/svg2pdc/examples/community/gregoire_no_ride.svg
vendored
Normal file
|
@ -0,0 +1,74 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
version="1.1"
|
||||
width="46.4375"
|
||||
height="52.9375"
|
||||
id="svg4891">
|
||||
<defs
|
||||
id="defs4893" />
|
||||
<metadata
|
||||
id="metadata4896">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
transform="translate(-462.15625,-751.75)"
|
||||
id="layer1">
|
||||
<path
|
||||
d="m 472.75139,753.35702 -9.09138,10.10153 0,14.14214 8.15038,7.57614 0,18.01069 9,0 0,-17.50561 10,0.25253 0,17.25308 9,0 0,-18.01069 7.28618,-5.3033 0,-20.96067 z"
|
||||
id="path5474"
|
||||
style="fill:#ffaa00;fill-opacity:1;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
d="m 476.28692,773.68752 20.20305,0 0,-16.03735 -19.95051,-2.77791 z"
|
||||
id="path5476"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
d="m 454.82118,773.81261 8.46003,-7.44988"
|
||||
id="path5478"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
d="m 512.90495,727.90625 -10.6066,10.04595 8.83883,12.12183 -4.79822,4.79822 0,25.50636 4.54568,4.79822 12.37438,0 4.04061,-4.54569 0.50507,-25.75889 -5.05076,-5.05076 7.82868,-11.86929 -9.84899,-10.04595 1.26269,21.91524 -9.84898,0 z"
|
||||
id="path5482"
|
||||
style="fill:#ffaa00;fill-opacity:1;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
d="m 506.59149,769.40625 4.79823,-5.5 11.36422,0 5.05076,5.5"
|
||||
id="path5484"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
d="m 512.65241,757.90271 8.5863,0"
|
||||
id="path5486"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<rect
|
||||
width="1.767767"
|
||||
height="2.0203052"
|
||||
rx="0.83095455"
|
||||
ry="0.12964669"
|
||||
x="513.15747"
|
||||
y="769.77197"
|
||||
id="rect5488"
|
||||
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<rect
|
||||
width="1.767767"
|
||||
height="2.0203052"
|
||||
rx="0.83095455"
|
||||
ry="0.12964669"
|
||||
x="520.10223"
|
||||
y="770.02454"
|
||||
id="rect5488-7"
|
||||
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 2.2 KiB |
|
@ -0,0 +1,113 @@
|
|||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:pdc="http://www.pebble.com/2015/pdc" version="1.1" width="72.05262" height="64.163689" viewBox="0 0 72.05262 64.163688" id="svg3885">
|
||||
<defs id="defs3887"/>
|
||||
<metadata id="metadata3890">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||
<dc:title/>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<path d="m 20.59132,10.341135 -3.6618,-3.9143396 -10.4803403,-0.12627 -4.04061,4.0406096 1e-5,7.57615 3.91434,3.40926 34.8502603,0.12627 3.91434,-3.78807 0,-8.2074896 -4.29315,-4.16688 -10.85914,0.25254 -4.04061,-4.04061 -11.36422,0 -3.53553,4.79822 0,0 0,0" id="path3990" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="10.34" x="20.59" details="Invalid point: (20.59, 10.34). Used closest supported coordinate: (20.625, 10.375)"/>
|
||||
<pdc:highlight y="6.43" x="16.93" details="Invalid point: (16.93, 6.43). Used closest supported coordinate: (16.875, 6.375)"/>
|
||||
<pdc:highlight y="6.30" x="6.45" details="Invalid point: (6.45, 6.30). Used closest supported coordinate: (6.5, 6.25)"/>
|
||||
<pdc:highlight y="10.34" x="2.41" details="Invalid point: (2.41, 10.34). Used closest supported coordinate: (2.375, 10.375)"/>
|
||||
<pdc:highlight y="17.91" x="2.41" details="Invalid point: (2.41, 17.91). Used closest supported coordinate: (2.375, 17.875)"/>
|
||||
<pdc:highlight y="21.32" x="6.32" details="Invalid point: (6.32, 21.32). Used closest supported coordinate: (6.375, 21.375)"/>
|
||||
<pdc:highlight y="21.45" x="41.18" details="Invalid point: (41.18, 21.45). Used closest supported coordinate: (41.125, 21.5)"/>
|
||||
<pdc:highlight y="17.66" x="45.09" details="Invalid point: (45.09, 17.66). Used closest supported coordinate: (45.125, 17.625)"/>
|
||||
<pdc:highlight y="9.45" x="45.09" details="Invalid point: (45.09, 9.45). Used closest supported coordinate: (45.125, 9.5)"/>
|
||||
<pdc:highlight y="5.29" x="40.80" details="Invalid point: (40.80, 5.29). Used closest supported coordinate: (40.75, 5.25)"/>
|
||||
<pdc:highlight y="5.54" x="29.94" details="Invalid point: (29.94, 5.54). Used closest supported coordinate: (30.0, 5.5)"/>
|
||||
<pdc:highlight y="1.50" x="25.90" details="Invalid point: (25.90, 1.50). Used closest supported coordinate: (25.875, 1.5)"/>
|
||||
<pdc:highlight y="1.50" x="14.54" details="Invalid point: (14.54, 1.50). Used closest supported coordinate: (14.5, 1.5)"/>
|
||||
<pdc:highlight y="6.30" x="11.00" details="Invalid point: (11.00, 6.30). Used closest supported coordinate: (11.0, 6.25)"/>
|
||||
<pdc:highlight y="6.30" x="11.00" details="Invalid point: (11.00, 6.30). Used closest supported coordinate: (11.0, 6.25)"/>
|
||||
<pdc:highlight y="6.30" x="11.00" details="Invalid point: (11.00, 6.30). Used closest supported coordinate: (11.0, 6.25)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<path d="M 70.528624,35.468675 61.24996,35.342415 50.359371,42.661793" id="path3992" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="35.47" x="70.53" details="Invalid point: (70.53, 35.47). Used closest supported coordinate: (70.5, 35.5)"/>
|
||||
<pdc:highlight y="35.34" x="61.25" details="Invalid point: (61.25, 35.34). Used closest supported coordinate: (61.25, 35.375)"/>
|
||||
<pdc:highlight y="42.66" x="50.36" details="Invalid point: (50.36, 42.66). Used closest supported coordinate: (50.375, 42.625)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<path d="m 18.31848,42.918555 44.19417,0" id="path3994" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="42.92" x="18.32" details="Invalid point: (18.32, 42.92). Used closest supported coordinate: (18.375, 42.875)"/>
|
||||
<pdc:highlight y="42.92" x="62.52" details="Invalid point: (62.52, 42.92). Used closest supported coordinate: (62.5, 42.875)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<path d="m 31.703,35.594945 14.14213,0" id="path3996" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="35.59" x="31.70" details="Invalid point: (31.70, 35.59). Used closest supported coordinate: (31.75, 35.625)"/>
|
||||
<pdc:highlight y="35.59" x="45.84" details="Invalid point: (45.84, 35.59). Used closest supported coordinate: (45.875, 35.625)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<path d="m 6.4491797,49.737085 38.6383403,0" id="path3998" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="49.74" x="6.45" details="Invalid point: (6.45, 49.74). Used closest supported coordinate: (6.5, 49.75)"/>
|
||||
<pdc:highlight y="49.74" x="45.09" details="Invalid point: (45.09, 49.74). Used closest supported coordinate: (45.125, 49.75)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<path d="m 18.884574,56.747131 16.859036,0.06102" id="path4000" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="56.75" x="18.88" details="Invalid point: (18.88, 56.75). Used closest supported coordinate: (18.875, 56.75)"/>
|
||||
<pdc:highlight y="56.81" x="35.74" details="Invalid point: (35.74, 56.81). Used closest supported coordinate: (35.75, 56.75)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<path d="m 4.4288697,32.438225 1.01016,-5.42957" id="path4002" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="32.44" x="4.43" details="Invalid point: (4.43, 32.44). Used closest supported coordinate: (4.375, 32.5)"/>
|
||||
<pdc:highlight y="27.01" x="5.44" details="Invalid point: (5.44, 27.01). Used closest supported coordinate: (5.5, 27.0)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<path d="m 41.80452,52.893815 -0.12627,3.78806 7.57615,1e-5" id="path4012" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="52.89" x="41.80" details="Invalid point: (41.80, 52.89). Used closest supported coordinate: (41.75, 52.875)"/>
|
||||
<pdc:highlight y="56.68" x="41.68" details="Invalid point: (41.68, 56.68). Used closest supported coordinate: (41.625, 56.625)"/>
|
||||
<pdc:highlight y="56.68" x="49.25" details="Invalid point: (49.25, 56.68). Used closest supported coordinate: (49.25, 56.625)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<path d="m 62.26011,56.934425 6.31345,-0.12627" id="path4014" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="56.93" x="62.26" details="Invalid point: (62.26, 56.93). Used closest supported coordinate: (62.25, 56.875)"/>
|
||||
<pdc:highlight y="56.81" x="68.57" details="Invalid point: (68.57, 56.81). Used closest supported coordinate: (68.625, 56.75)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<path d="m 16.04563,32.375085 1.01016,-5.42957" id="path4002-7" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="32.38" x="16.05" details="Invalid point: (16.05, 32.38). Used closest supported coordinate: (16.0, 32.375)"/>
|
||||
<pdc:highlight y="26.95" x="17.06" details="Invalid point: (17.06, 26.95). Used closest supported coordinate: (17.0, 27.0)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<path d="m 27.15731,32.501355 1.01016,-5.42957" id="path4002-0" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="32.50" x="27.16" details="Invalid point: (27.16, 32.50). Used closest supported coordinate: (27.125, 32.5)"/>
|
||||
<pdc:highlight y="27.07" x="28.17" details="Invalid point: (28.17, 27.07). Used closest supported coordinate: (28.125, 27.125)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<path d="m 1.5246897,58.133985 1.01016,-5.42957" id="path4002-6" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="58.13" x="1.52" details="Invalid point: (1.52, 58.13). Used closest supported coordinate: (1.5, 58.125)"/>
|
||||
<pdc:highlight y="52.70" x="2.54" details="Invalid point: (2.54, 52.70). Used closest supported coordinate: (2.5, 52.75)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<path d="M 9.6059097,42.855425 10.61607,37.425855" id="path4002-03" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="42.86" x="9.61" details="Invalid point: (9.61, 42.86). Used closest supported coordinate: (9.625, 42.875)"/>
|
||||
<pdc:highlight y="37.43" x="10.62" details="Invalid point: (10.62, 37.43). Used closest supported coordinate: (10.625, 37.375)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<circle cx="0" cy="0" r="6" transform="translate(55.53965,56.49723)" id="circle20" style="fill:none;stroke:#000000;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none">
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="56.50" x="55.54" details="Invalid point: (55.54, 56.50). Used closest supported coordinate: (55.5, 56.5)"/>
|
||||
</pdc:annotation>
|
||||
</circle>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 13 KiB |
BIN
third_party/pbl/pblconvert/tests/svg2pdc/examples/community/gregoire_no_ride~bw.expected/image.pdc
vendored
Normal file
BIN
third_party/pbl/pblconvert/tests/svg2pdc/examples/community/gregoire_no_ride~bw.expected/image.png
vendored
Normal file
After Width: | Height: | Size: 826 B |
88
third_party/pbl/pblconvert/tests/svg2pdc/examples/community/gregoire_no_ride~bw.svg
vendored
Normal file
|
@ -0,0 +1,88 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
version="1.1"
|
||||
width="72.05262"
|
||||
height="64.163689"
|
||||
viewBox="0 0 72.05262 64.163688"
|
||||
id="svg3885">
|
||||
<defs
|
||||
id="defs3887" />
|
||||
<metadata
|
||||
id="metadata3890">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<path
|
||||
d="m 20.59132,10.341135 -3.6618,-3.9143396 -10.4803403,-0.12627 -4.04061,4.0406096 1e-5,7.57615 3.91434,3.40926 34.8502603,0.12627 3.91434,-3.78807 0,-8.2074896 -4.29315,-4.16688 -10.85914,0.25254 -4.04061,-4.04061 -11.36422,0 -3.53553,4.79822 0,0 0,0"
|
||||
id="path3990"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
d="M 70.528624,35.468675 61.24996,35.342415 50.359371,42.661793"
|
||||
id="path3992"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
d="m 18.31848,42.918555 44.19417,0"
|
||||
id="path3994"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
d="m 31.703,35.594945 14.14213,0"
|
||||
id="path3996"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
d="m 6.4491797,49.737085 38.6383403,0"
|
||||
id="path3998"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
d="m 18.884574,56.747131 16.859036,0.06102"
|
||||
id="path4000"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
d="m 4.4288697,32.438225 1.01016,-5.42957"
|
||||
id="path4002"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
d="m 41.80452,52.893815 -0.12627,3.78806 7.57615,1e-5"
|
||||
id="path4012"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
d="m 62.26011,56.934425 6.31345,-0.12627"
|
||||
id="path4014"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
d="m 16.04563,32.375085 1.01016,-5.42957"
|
||||
id="path4002-7"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
d="m 27.15731,32.501355 1.01016,-5.42957"
|
||||
id="path4002-0"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
d="m 1.5246897,58.133985 1.01016,-5.42957"
|
||||
id="path4002-6"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
d="M 9.6059097,42.855425 10.61607,37.425855"
|
||||
id="path4002-03"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<circle
|
||||
cx="0"
|
||||
cy="0"
|
||||
r="6"
|
||||
transform="translate(55.53965,56.49723)"
|
||||
id="circle20"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
</svg>
|
After Width: | Height: | Size: 4.2 KiB |
BIN
third_party/pbl/pblconvert/tests/svg2pdc/examples/community/sumardi_1.expected/annotated.png
vendored
Normal file
After Width: | Height: | Size: 728 B |
86
third_party/pbl/pblconvert/tests/svg2pdc/examples/community/sumardi_1.expected/annotated.svg
vendored
Normal file
|
@ -0,0 +1,86 @@
|
|||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:pdc="http://www.pebble.com/2015/pdc" version="1.1" id="Layer_1" x="0px" y="0px" width="23.3px" height="18.6px" viewBox="0 0 23.3 18.6" enable-background="new 0 0 23.3 18.6" xml:space="preserve">
|
||||
<path fill="#FFFF00" d="M21.05,8.499c-0.5,0.5-1.4,0.5-1.9,0s-0.5-1.399,0-1.899l1.9-1.9c0.5-0.5,1.4-0.5,1.9,0s0.5,1.4,0,1.9 L21.05,8.499z">
|
||||
<pdc:annotation description="Element contains unsupported curved command(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-bezier">
|
||||
<pdc:highlight y="8.50" x="19.15" height="0.00" width="1.90"/>
|
||||
<pdc:highlight y="6.60" x="19.15" height="1.90" width="0.00"/>
|
||||
<pdc:highlight y="4.70" x="21.05" height="0.00" width="1.90"/>
|
||||
<pdc:highlight y="4.70" x="22.95" height="1.90" width="0.00"/>
|
||||
</pdc:annotation>
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="8.50" x="21.05" details="Invalid point: (21.05, 8.50). Used closest supported coordinate: (21.0, 8.5)"/>
|
||||
<pdc:highlight y="8.50" x="19.15" details="Invalid point: (19.15, 8.50). Used closest supported coordinate: (19.125, 8.5)"/>
|
||||
<pdc:highlight y="6.60" x="19.15" details="Invalid point: (19.15, 6.60). Used closest supported coordinate: (19.125, 6.625)"/>
|
||||
<pdc:highlight y="4.70" x="21.05" details="Invalid point: (21.05, 4.70). Used closest supported coordinate: (21.0, 4.75)"/>
|
||||
<pdc:highlight y="4.70" x="22.95" details="Invalid point: (22.95, 4.70). Used closest supported coordinate: (23.0, 4.75)"/>
|
||||
<pdc:highlight y="6.60" x="22.95" details="Invalid point: (22.95, 6.60). Used closest supported coordinate: (23.0, 6.625)"/>
|
||||
<pdc:highlight y="8.50" x="21.05" details="Invalid point: (21.05, 8.50). Used closest supported coordinate: (21.0, 8.5)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<path fill="#FFAA00" d="M16.25,13.4c-0.899-1.6-2.6-2.7-4.6-2.7s-3.699,1.101-4.6,2.7h-2.9c1.1-3.1,4-5.3,7.5-5.3s6.4,2.2,7.5,5.3 H16.25z">
|
||||
<pdc:annotation description="Element contains unsupported curved command(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-bezier">
|
||||
<pdc:highlight y="10.70" x="11.65" height="2.70" width="4.60"/>
|
||||
<pdc:highlight y="10.70" x="7.05" height="2.70" width="4.60"/>
|
||||
<pdc:highlight y="8.10" x="4.15" height="5.30" width="7.50"/>
|
||||
<pdc:highlight y="8.10" x="11.65" height="5.30" width="7.50"/>
|
||||
</pdc:annotation>
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="13.40" x="16.25" details="Invalid point: (16.25, 13.40). Used closest supported coordinate: (16.25, 13.375)"/>
|
||||
<pdc:highlight y="10.70" x="11.65" details="Invalid point: (11.65, 10.70). Used closest supported coordinate: (11.625, 10.75)"/>
|
||||
<pdc:highlight y="13.40" x="7.05" details="Invalid point: (7.05, 13.40). Used closest supported coordinate: (7.0, 13.375)"/>
|
||||
<pdc:highlight y="13.40" x="4.15" details="Invalid point: (4.15, 13.40). Used closest supported coordinate: (4.125, 13.375)"/>
|
||||
<pdc:highlight y="8.10" x="11.65" details="Invalid point: (11.65, 8.10). Used closest supported coordinate: (11.625, 8.125)"/>
|
||||
<pdc:highlight y="13.40" x="19.15" details="Invalid point: (19.15, 13.40). Used closest supported coordinate: (19.125, 13.375)"/>
|
||||
<pdc:highlight y="13.40" x="16.25" details="Invalid point: (16.25, 13.40). Used closest supported coordinate: (16.25, 13.375)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<path fill="#FFFF00" d="M11.65,5.4c-0.699,0-1.3-0.6-1.3-1.3V1.4c0-0.7,0.601-1.3,1.3-1.3c0.7,0,1.301,0.6,1.301,1.3v2.7 C12.951,4.8,12.35,5.4,11.65,5.4z">
|
||||
<pdc:annotation description="Element contains unsupported curved command(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-bezier">
|
||||
<pdc:highlight y="4.10" x="10.35" height="1.30" width="1.30"/>
|
||||
<pdc:highlight y="0.10" x="10.35" height="1.30" width="1.30"/>
|
||||
<pdc:highlight y="0.10" x="11.65" height="1.30" width="1.30"/>
|
||||
<pdc:highlight y="4.10" x="11.65" height="1.30" width="1.30"/>
|
||||
</pdc:annotation>
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="5.40" x="11.65" details="Invalid point: (11.65, 5.40). Used closest supported coordinate: (11.625, 5.375)"/>
|
||||
<pdc:highlight y="4.10" x="10.35" details="Invalid point: (10.35, 4.10). Used closest supported coordinate: (10.375, 4.125)"/>
|
||||
<pdc:highlight y="1.40" x="10.35" details="Invalid point: (10.35, 1.40). Used closest supported coordinate: (10.375, 1.375)"/>
|
||||
<pdc:highlight y="0.10" x="11.65" details="Invalid point: (11.65, 0.10). Used closest supported coordinate: (11.625, 0.125)"/>
|
||||
<pdc:highlight y="1.40" x="12.95" details="Invalid point: (12.95, 1.40). Used closest supported coordinate: (13.0, 1.375)"/>
|
||||
<pdc:highlight y="4.10" x="12.95" details="Invalid point: (12.95, 4.10). Used closest supported coordinate: (13.0, 4.125)"/>
|
||||
<pdc:highlight y="5.40" x="11.65" details="Invalid point: (11.65, 5.40). Used closest supported coordinate: (11.625, 5.375)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<path fill="#FFFF00" d="M2.25,8.499L0.35,6.6c-0.5-0.5-0.5-1.4,0-1.9s1.399-0.5,1.899,0l1.9,1.9c0.5,0.5,0.5,1.399,0,1.899 C3.55,8.999,2.75,8.999,2.25,8.499z">
|
||||
<pdc:annotation description="Element contains unsupported curved command(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-bezier">
|
||||
<pdc:highlight y="4.70" x="0.35" height="1.90" width="0.00"/>
|
||||
<pdc:highlight y="4.70" x="0.35" height="0.00" width="1.90"/>
|
||||
<pdc:highlight y="6.60" x="4.15" height="1.90" width="0.00"/>
|
||||
<pdc:highlight y="8.50" x="2.25" height="0.00" width="1.90"/>
|
||||
</pdc:annotation>
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="6.60" x="0.35" details="Invalid point: (0.35, 6.60). Used closest supported coordinate: (0.375, 6.625)"/>
|
||||
<pdc:highlight y="4.70" x="0.35" details="Invalid point: (0.35, 4.70). Used closest supported coordinate: (0.375, 4.75)"/>
|
||||
<pdc:highlight y="4.70" x="2.25" details="Invalid point: (2.25, 4.70). Used closest supported coordinate: (2.25, 4.75)"/>
|
||||
<pdc:highlight y="6.60" x="4.15" details="Invalid point: (4.15, 6.60). Used closest supported coordinate: (4.125, 6.625)"/>
|
||||
<pdc:highlight y="8.50" x="4.15" details="Invalid point: (4.15, 8.50). Used closest supported coordinate: (4.125, 8.5)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<path fill="#FFAA00" d="M4.951,15.999H18.25c0.701,0,1.301,0.601,1.301,1.301c0,0.699-0.6,1.3-1.301,1.3H4.951 c-0.701,0-1.301-0.601-1.301-1.3C3.65,16.6,4.25,15.999,4.951,15.999z">
|
||||
<pdc:annotation description="Element contains unsupported curved command(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-bezier">
|
||||
<pdc:highlight y="16.00" x="18.25" height="1.30" width="1.30"/>
|
||||
<pdc:highlight y="17.30" x="18.25" height="1.30" width="1.30"/>
|
||||
<pdc:highlight y="17.30" x="3.65" height="1.30" width="1.30"/>
|
||||
<pdc:highlight y="16.00" x="3.65" height="1.30" width="1.30"/>
|
||||
</pdc:annotation>
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="16.00" x="4.95" details="Invalid point: (4.95, 16.00). Used closest supported coordinate: (5.0, 16.0)"/>
|
||||
<pdc:highlight y="17.30" x="19.55" details="Invalid point: (19.55, 17.30). Used closest supported coordinate: (19.5, 17.25)"/>
|
||||
<pdc:highlight y="18.60" x="18.25" details="Invalid point: (18.25, 18.60). Used closest supported coordinate: (18.25, 18.625)"/>
|
||||
<pdc:highlight y="18.60" x="4.95" details="Invalid point: (4.95, 18.60). Used closest supported coordinate: (5.0, 18.625)"/>
|
||||
<pdc:highlight y="17.30" x="3.65" details="Invalid point: (3.65, 17.30). Used closest supported coordinate: (3.625, 17.25)"/>
|
||||
<pdc:highlight y="16.00" x="4.95" details="Invalid point: (4.95, 16.00). Used closest supported coordinate: (5.0, 16.0)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.8 KiB |
BIN
third_party/pbl/pblconvert/tests/svg2pdc/examples/community/sumardi_1.expected/image.pdc
vendored
Normal file
BIN
third_party/pbl/pblconvert/tests/svg2pdc/examples/community/sumardi_1.expected/image.png
vendored
Normal file
After Width: | Height: | Size: 229 B |
16
third_party/pbl/pblconvert/tests/svg2pdc/examples/community/sumardi_1.svg
vendored
Normal file
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="23.3px" height="18.6px" viewBox="0 0 23.3 18.6" enable-background="new 0 0 23.3 18.6" xml:space="preserve">
|
||||
<path fill="#FFFF00" d="M21.05,8.499c-0.5,0.5-1.4,0.5-1.9,0s-0.5-1.399,0-1.899l1.9-1.9c0.5-0.5,1.4-0.5,1.9,0s0.5,1.4,0,1.9
|
||||
L21.05,8.499z"/>
|
||||
<path fill="#FFAA00" d="M16.25,13.4c-0.899-1.6-2.6-2.7-4.6-2.7s-3.699,1.101-4.6,2.7h-2.9c1.1-3.1,4-5.3,7.5-5.3s6.4,2.2,7.5,5.3
|
||||
H16.25z"/>
|
||||
<path fill="#FFFF00" d="M11.65,5.4c-0.699,0-1.3-0.6-1.3-1.3V1.4c0-0.7,0.601-1.3,1.3-1.3c0.7,0,1.301,0.6,1.301,1.3v2.7
|
||||
C12.951,4.8,12.35,5.4,11.65,5.4z"/>
|
||||
<path fill="#FFFF00" d="M2.25,8.499L0.35,6.6c-0.5-0.5-0.5-1.4,0-1.9s1.399-0.5,1.899,0l1.9,1.9c0.5,0.5,0.5,1.399,0,1.899
|
||||
C3.55,8.999,2.75,8.999,2.25,8.499z"/>
|
||||
<path fill="#FFAA00" d="M4.951,15.999H18.25c0.701,0,1.301,0.601,1.301,1.301c0,0.699-0.6,1.3-1.301,1.3H4.951
|
||||
c-0.701,0-1.301-0.601-1.301-1.3C3.65,16.6,4.25,15.999,4.951,15.999z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
BIN
third_party/pbl/pblconvert/tests/svg2pdc/examples/community/sumardi_2.expected/annotated.png
vendored
Normal file
After Width: | Height: | Size: 231 B |
15
third_party/pbl/pblconvert/tests/svg2pdc/examples/community/sumardi_2.expected/annotated.svg
vendored
Normal file
|
@ -0,0 +1,15 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns" xmlns:pdc="http://www.pebble.com/2015/pdc" width="21px" height="20px" viewBox="0 0 21 20" version="1.1">
|
||||
<!-- Generator: Sketch 3.4 (15575) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>Artboard 1</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
|
||||
<g id="Artboard-1" sketch:type="MSArtboardGroup" stroke="#979797" stroke-linecap="square">
|
||||
<path d="M10.5,2.5 L10.5,4.5" id="Line" stroke="#979797" stroke-width="3" sketch:type="MSShapeGroup"/>
|
||||
<path d="M18,13.5 L13,10 L8,10 L4,13.5" id="Line-Copy-3" stroke="#979797" stroke-width="2" sketch:type="MSShapeGroup"/>
|
||||
<path d="M19,6 L17,8" id="Line-Copy" stroke="#979797" stroke-width="2" sketch:type="MSShapeGroup"/>
|
||||
<path d="M2,6 L4,8" id="Line-Copy-2" stroke="#979797" stroke-width="2" sketch:type="MSShapeGroup"/>
|
||||
<path d="M3,18 L19,18" id="Line" stroke="#979797" stroke-width="2" sketch:type="MSShapeGroup"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
BIN
third_party/pbl/pblconvert/tests/svg2pdc/examples/community/sumardi_2.expected/image.pdc
vendored
Normal file
BIN
third_party/pbl/pblconvert/tests/svg2pdc/examples/community/sumardi_2.expected/image.png
vendored
Normal file
After Width: | Height: | Size: 222 B |
15
third_party/pbl/pblconvert/tests/svg2pdc/examples/community/sumardi_2.svg
vendored
Normal file
|
@ -0,0 +1,15 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="21px" height="20px" viewBox="0 0 21 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
|
||||
<!-- Generator: Sketch 3.4 (15575) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>Artboard 1</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
|
||||
<g id="Artboard-1" sketch:type="MSArtboardGroup" stroke="#979797" stroke-linecap="square">
|
||||
<path d="M10.5,2.5 L10.5,4.5" id="Line" stroke="#979797" stroke-width="3" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M18,13.5 L13,10 L8,10 L4,13.5" id="Line-Copy-3" stroke="#979797" stroke-width="2" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M19,6 L17,8" id="Line-Copy" stroke="#979797" stroke-width="2" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M2,6 L4,8" id="Line-Copy-2" stroke="#979797" stroke-width="2" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M3,18 L19,18" id="Line" stroke="#979797" stroke-width="2" sketch:type="MSShapeGroup"></path>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
73
third_party/pbl/pblconvert/tests/svg2pdc/examples/internal/PBL-28769_1.annotated.svg
vendored
Normal file
|
@ -0,0 +1,73 @@
|
|||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:pdc="http://www.pebble.com/2015/pdc" version="1.1" id="Design" x="0px" y="0px" viewBox="0 0 82 102" enable-background="new 0 0 82 102" xml:space="preserve">
|
||||
<rect x="2" y="26" fill="#FFFFFF" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" width="42" height="74"/>
|
||||
<line fill="#FFFFFF" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="2.5" y1="89.5" x2="43.5" y2="89.5"/>
|
||||
<line fill="#FFFFFF" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="43.5" y1="32.5" x2="2.5" y2="32.5"/>
|
||||
<line fill="#FFFFFF" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="25.5" y1="94.5" x2="20.5" y2="94.5"/>
|
||||
<line fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="16.5" y1="1.5" x2="22.5" y2="7.5"/>
|
||||
<line fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="16.5" y1="17.5" x2="8.5" y2="15.5"/>
|
||||
<line fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="69.5" y1="1.5" x2="63.5" y2="7.5"/>
|
||||
<line fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="69.5" y1="17.5" x2="77.5" y2="15.5"/>
|
||||
<rect x="58" y="30" fill="#FFFFFF" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" width="14" height="70"/>
|
||||
<path fill="#FFFFFF" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d=" M65.3,79h-0.6C57.1,79,51,72.9,51,65.3v-0.6C51,57.1,57.1,51,64.7,51h0.6C72.9,51,79,57.1,79,64.7v0.6C79,72.9,72.9,79,65.3,79z">
|
||||
<pdc:annotation description="Element contains unsupported curved command(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-bezier">
|
||||
<pdc:highlight y="65.30" x="51.00" height="13.70" width="13.70"/>
|
||||
<pdc:highlight y="51.00" x="51.00" height="13.70" width="13.70"/>
|
||||
<pdc:highlight y="51.00" x="65.30" height="13.70" width="13.70"/>
|
||||
<pdc:highlight y="65.30" x="65.30" height="13.70" width="13.70"/>
|
||||
</pdc:annotation>
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="79.00" x="65.30" details="Invalid point: (65.30, 79.00). Used closest supported coordinate: (65.25, 79.0)"/>
|
||||
<pdc:highlight y="79.00" x="64.70" details="Invalid point: (64.70, 79.00). Used closest supported coordinate: (64.75, 79.0)"/>
|
||||
<pdc:highlight y="77.93" x="59.35" details="Invalid point: (59.35, 77.93). Used closest supported coordinate: (59.375, 77.875)"/>
|
||||
<pdc:highlight y="75.00" x="55.00" details="Invalid point: (55.00, 75.00). Used closest supported coordinate: (55.0, 75.0)"/>
|
||||
<pdc:highlight y="70.65" x="52.07" details="Invalid point: (52.07, 70.65). Used closest supported coordinate: (52.125, 70.625)"/>
|
||||
<pdc:highlight y="65.30" x="51.00" details="Invalid point: (51.00, 65.30). Used closest supported coordinate: (51.0, 65.25)"/>
|
||||
<pdc:highlight y="64.70" x="51.00" details="Invalid point: (51.00, 64.70). Used closest supported coordinate: (51.0, 64.75)"/>
|
||||
<pdc:highlight y="59.35" x="52.07" details="Invalid point: (52.07, 59.35). Used closest supported coordinate: (52.125, 59.375)"/>
|
||||
<pdc:highlight y="55.00" x="55.00" details="Invalid point: (55.00, 55.00). Used closest supported coordinate: (55.0, 55.0)"/>
|
||||
<pdc:highlight y="52.07" x="59.35" details="Invalid point: (59.35, 52.07). Used closest supported coordinate: (59.375, 52.125)"/>
|
||||
<pdc:highlight y="51.00" x="64.70" details="Invalid point: (64.70, 51.00). Used closest supported coordinate: (64.75, 51.0)"/>
|
||||
<pdc:highlight y="51.00" x="65.30" details="Invalid point: (65.30, 51.00). Used closest supported coordinate: (65.25, 51.0)"/>
|
||||
<pdc:highlight y="52.07" x="70.65" details="Invalid point: (70.65, 52.07). Used closest supported coordinate: (70.625, 52.125)"/>
|
||||
<pdc:highlight y="55.00" x="75.00" details="Invalid point: (75.00, 55.00). Used closest supported coordinate: (75.0, 55.0)"/>
|
||||
<pdc:highlight y="59.35" x="77.93" details="Invalid point: (77.93, 59.35). Used closest supported coordinate: (77.875, 59.375)"/>
|
||||
<pdc:highlight y="64.70" x="79.00" details="Invalid point: (79.00, 64.70). Used closest supported coordinate: (79.0, 64.75)"/>
|
||||
<pdc:highlight y="65.30" x="79.00" details="Invalid point: (79.00, 65.30). Used closest supported coordinate: (79.0, 65.25)"/>
|
||||
<pdc:highlight y="70.65" x="77.93" details="Invalid point: (77.93, 70.65). Used closest supported coordinate: (77.875, 70.625)"/>
|
||||
<pdc:highlight y="75.00" x="75.00" details="Invalid point: (75.00, 75.00). Used closest supported coordinate: (75.0, 75.0)"/>
|
||||
<pdc:highlight y="77.93" x="70.65" details="Invalid point: (70.65, 77.93). Used closest supported coordinate: (70.625, 77.875)"/>
|
||||
<pdc:highlight y="79.00" x="65.30" details="Invalid point: (65.30, 79.00). Used closest supported coordinate: (65.25, 79.0)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<line fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="58.5" y1="42.5" x2="72.5" y2="42.5"/>
|
||||
<path fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d=" M65.3,72.5h-0.6c-4,0-7.2-3.2-7.2-7.2v-0.6c0-4,3.2-7.2,7.2-7.2h0.6c4,0,7.2,3.2,7.2,7.2v0.6C72.5,69.3,69.3,72.5,65.3,72.5z">
|
||||
<pdc:annotation description="Element contains unsupported curved command(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-bezier">
|
||||
<pdc:highlight y="65.30" x="57.50" height="7.20" width="7.20"/>
|
||||
<pdc:highlight y="57.50" x="57.50" height="7.20" width="7.20"/>
|
||||
<pdc:highlight y="57.50" x="65.30" height="7.20" width="7.20"/>
|
||||
<pdc:highlight y="65.30" x="65.30" height="7.20" width="7.20"/>
|
||||
</pdc:annotation>
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="72.50" x="65.30" details="Invalid point: (65.30, 72.50). Used closest supported coordinate: (65.25, 72.5)"/>
|
||||
<pdc:highlight y="72.50" x="64.70" details="Invalid point: (64.70, 72.50). Used closest supported coordinate: (64.75, 72.5)"/>
|
||||
<pdc:highlight y="70.40" x="59.60" details="Invalid point: (59.60, 70.40). Used closest supported coordinate: (59.625, 70.375)"/>
|
||||
<pdc:highlight y="65.30" x="57.50" details="Invalid point: (57.50, 65.30). Used closest supported coordinate: (57.5, 65.25)"/>
|
||||
<pdc:highlight y="64.70" x="57.50" details="Invalid point: (57.50, 64.70). Used closest supported coordinate: (57.5, 64.75)"/>
|
||||
<pdc:highlight y="59.60" x="59.60" details="Invalid point: (59.60, 59.60). Used closest supported coordinate: (59.625, 59.625)"/>
|
||||
<pdc:highlight y="57.50" x="64.70" details="Invalid point: (64.70, 57.50). Used closest supported coordinate: (64.75, 57.5)"/>
|
||||
<pdc:highlight y="57.50" x="65.30" details="Invalid point: (65.30, 57.50). Used closest supported coordinate: (65.25, 57.5)"/>
|
||||
<pdc:highlight y="59.60" x="70.40" details="Invalid point: (70.40, 59.60). Used closest supported coordinate: (70.375, 59.625)"/>
|
||||
<pdc:highlight y="64.70" x="72.50" details="Invalid point: (72.50, 64.70). Used closest supported coordinate: (72.5, 64.75)"/>
|
||||
<pdc:highlight y="65.30" x="72.50" details="Invalid point: (72.50, 65.30). Used closest supported coordinate: (72.5, 65.25)"/>
|
||||
<pdc:highlight y="70.40" x="70.40" details="Invalid point: (70.40, 70.40). Used closest supported coordinate: (70.375, 70.375)"/>
|
||||
<pdc:highlight y="72.50" x="65.30" details="Invalid point: (65.30, 72.50). Used closest supported coordinate: (65.25, 72.5)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<g>
|
||||
<polygon fill="#FF0000" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points=" 34,53 22,41 22,22 34,10 53,10 65,22 65,41 53,53 "/>
|
||||
<line fill="none" stroke="#FFFFFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="35" y1="23" x2="52" y2="40"/>
|
||||
<line fill="none" stroke="#FFFFFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="35" y1="40" x2="52" y2="23"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.9 KiB |
BIN
third_party/pbl/pblconvert/tests/svg2pdc/examples/internal/PBL-28769_1.expected/annotated.png
vendored
Normal file
After Width: | Height: | Size: 1.9 KiB |
73
third_party/pbl/pblconvert/tests/svg2pdc/examples/internal/PBL-28769_1.expected/annotated.svg
vendored
Normal file
|
@ -0,0 +1,73 @@
|
|||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:pdc="http://www.pebble.com/2015/pdc" version="1.1" id="Design" x="0px" y="0px" viewBox="0 0 82 102" enable-background="new 0 0 82 102" xml:space="preserve">
|
||||
<rect x="2" y="26" fill="#FFFFFF" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" width="42" height="74"/>
|
||||
<line fill="#FFFFFF" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="2.5" y1="89.5" x2="43.5" y2="89.5"/>
|
||||
<line fill="#FFFFFF" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="43.5" y1="32.5" x2="2.5" y2="32.5"/>
|
||||
<line fill="#FFFFFF" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="25.5" y1="94.5" x2="20.5" y2="94.5"/>
|
||||
<line fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="16.5" y1="1.5" x2="22.5" y2="7.5"/>
|
||||
<line fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="16.5" y1="17.5" x2="8.5" y2="15.5"/>
|
||||
<line fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="69.5" y1="1.5" x2="63.5" y2="7.5"/>
|
||||
<line fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="69.5" y1="17.5" x2="77.5" y2="15.5"/>
|
||||
<rect x="58" y="30" fill="#FFFFFF" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" width="14" height="70"/>
|
||||
<path fill="#FFFFFF" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d=" M65.3,79h-0.6C57.1,79,51,72.9,51,65.3v-0.6C51,57.1,57.1,51,64.7,51h0.6C72.9,51,79,57.1,79,64.7v0.6C79,72.9,72.9,79,65.3,79z">
|
||||
<pdc:annotation description="Element contains unsupported curved command(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-bezier">
|
||||
<pdc:highlight y="65.30" x="51.00" height="13.70" width="13.70"/>
|
||||
<pdc:highlight y="51.00" x="51.00" height="13.70" width="13.70"/>
|
||||
<pdc:highlight y="51.00" x="65.30" height="13.70" width="13.70"/>
|
||||
<pdc:highlight y="65.30" x="65.30" height="13.70" width="13.70"/>
|
||||
</pdc:annotation>
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="79.00" x="65.30" details="Invalid point: (65.30, 79.00). Used closest supported coordinate: (65.25, 79.0)"/>
|
||||
<pdc:highlight y="79.00" x="64.70" details="Invalid point: (64.70, 79.00). Used closest supported coordinate: (64.75, 79.0)"/>
|
||||
<pdc:highlight y="77.93" x="59.35" details="Invalid point: (59.35, 77.93). Used closest supported coordinate: (59.375, 77.875)"/>
|
||||
<pdc:highlight y="75.00" x="55.00" details="Invalid point: (55.00, 75.00). Used closest supported coordinate: (55.0, 75.0)"/>
|
||||
<pdc:highlight y="70.65" x="52.07" details="Invalid point: (52.07, 70.65). Used closest supported coordinate: (52.125, 70.625)"/>
|
||||
<pdc:highlight y="65.30" x="51.00" details="Invalid point: (51.00, 65.30). Used closest supported coordinate: (51.0, 65.25)"/>
|
||||
<pdc:highlight y="64.70" x="51.00" details="Invalid point: (51.00, 64.70). Used closest supported coordinate: (51.0, 64.75)"/>
|
||||
<pdc:highlight y="59.35" x="52.07" details="Invalid point: (52.07, 59.35). Used closest supported coordinate: (52.125, 59.375)"/>
|
||||
<pdc:highlight y="55.00" x="55.00" details="Invalid point: (55.00, 55.00). Used closest supported coordinate: (55.0, 55.0)"/>
|
||||
<pdc:highlight y="52.07" x="59.35" details="Invalid point: (59.35, 52.07). Used closest supported coordinate: (59.375, 52.125)"/>
|
||||
<pdc:highlight y="51.00" x="64.70" details="Invalid point: (64.70, 51.00). Used closest supported coordinate: (64.75, 51.0)"/>
|
||||
<pdc:highlight y="51.00" x="65.30" details="Invalid point: (65.30, 51.00). Used closest supported coordinate: (65.25, 51.0)"/>
|
||||
<pdc:highlight y="52.07" x="70.65" details="Invalid point: (70.65, 52.07). Used closest supported coordinate: (70.625, 52.125)"/>
|
||||
<pdc:highlight y="55.00" x="75.00" details="Invalid point: (75.00, 55.00). Used closest supported coordinate: (75.0, 55.0)"/>
|
||||
<pdc:highlight y="59.35" x="77.93" details="Invalid point: (77.93, 59.35). Used closest supported coordinate: (77.875, 59.375)"/>
|
||||
<pdc:highlight y="64.70" x="79.00" details="Invalid point: (79.00, 64.70). Used closest supported coordinate: (79.0, 64.75)"/>
|
||||
<pdc:highlight y="65.30" x="79.00" details="Invalid point: (79.00, 65.30). Used closest supported coordinate: (79.0, 65.25)"/>
|
||||
<pdc:highlight y="70.65" x="77.93" details="Invalid point: (77.93, 70.65). Used closest supported coordinate: (77.875, 70.625)"/>
|
||||
<pdc:highlight y="75.00" x="75.00" details="Invalid point: (75.00, 75.00). Used closest supported coordinate: (75.0, 75.0)"/>
|
||||
<pdc:highlight y="77.93" x="70.65" details="Invalid point: (70.65, 77.93). Used closest supported coordinate: (70.625, 77.875)"/>
|
||||
<pdc:highlight y="79.00" x="65.30" details="Invalid point: (65.30, 79.00). Used closest supported coordinate: (65.25, 79.0)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<line fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="58.5" y1="42.5" x2="72.5" y2="42.5"/>
|
||||
<path fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d=" M65.3,72.5h-0.6c-4,0-7.2-3.2-7.2-7.2v-0.6c0-4,3.2-7.2,7.2-7.2h0.6c4,0,7.2,3.2,7.2,7.2v0.6C72.5,69.3,69.3,72.5,65.3,72.5z">
|
||||
<pdc:annotation description="Element contains unsupported curved command(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-bezier">
|
||||
<pdc:highlight y="65.30" x="57.50" height="7.20" width="7.20"/>
|
||||
<pdc:highlight y="57.50" x="57.50" height="7.20" width="7.20"/>
|
||||
<pdc:highlight y="57.50" x="65.30" height="7.20" width="7.20"/>
|
||||
<pdc:highlight y="65.30" x="65.30" height="7.20" width="7.20"/>
|
||||
</pdc:annotation>
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="72.50" x="65.30" details="Invalid point: (65.30, 72.50). Used closest supported coordinate: (65.25, 72.5)"/>
|
||||
<pdc:highlight y="72.50" x="64.70" details="Invalid point: (64.70, 72.50). Used closest supported coordinate: (64.75, 72.5)"/>
|
||||
<pdc:highlight y="70.40" x="59.60" details="Invalid point: (59.60, 70.40). Used closest supported coordinate: (59.625, 70.375)"/>
|
||||
<pdc:highlight y="65.30" x="57.50" details="Invalid point: (57.50, 65.30). Used closest supported coordinate: (57.5, 65.25)"/>
|
||||
<pdc:highlight y="64.70" x="57.50" details="Invalid point: (57.50, 64.70). Used closest supported coordinate: (57.5, 64.75)"/>
|
||||
<pdc:highlight y="59.60" x="59.60" details="Invalid point: (59.60, 59.60). Used closest supported coordinate: (59.625, 59.625)"/>
|
||||
<pdc:highlight y="57.50" x="64.70" details="Invalid point: (64.70, 57.50). Used closest supported coordinate: (64.75, 57.5)"/>
|
||||
<pdc:highlight y="57.50" x="65.30" details="Invalid point: (65.30, 57.50). Used closest supported coordinate: (65.25, 57.5)"/>
|
||||
<pdc:highlight y="59.60" x="70.40" details="Invalid point: (70.40, 59.60). Used closest supported coordinate: (70.375, 59.625)"/>
|
||||
<pdc:highlight y="64.70" x="72.50" details="Invalid point: (72.50, 64.70). Used closest supported coordinate: (72.5, 64.75)"/>
|
||||
<pdc:highlight y="65.30" x="72.50" details="Invalid point: (72.50, 65.30). Used closest supported coordinate: (72.5, 65.25)"/>
|
||||
<pdc:highlight y="70.40" x="70.40" details="Invalid point: (70.40, 70.40). Used closest supported coordinate: (70.375, 70.375)"/>
|
||||
<pdc:highlight y="72.50" x="65.30" details="Invalid point: (65.30, 72.50). Used closest supported coordinate: (65.25, 72.5)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<g>
|
||||
<polygon fill="#FF0000" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points=" 34,53 22,41 22,22 34,10 53,10 65,22 65,41 53,53 "/>
|
||||
<line fill="none" stroke="#FFFFFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="35" y1="23" x2="52" y2="40"/>
|
||||
<line fill="none" stroke="#FFFFFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="35" y1="40" x2="52" y2="23"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.9 KiB |
BIN
third_party/pbl/pblconvert/tests/svg2pdc/examples/internal/PBL-28769_1.expected/image.pdc
vendored
Normal file
BIN
third_party/pbl/pblconvert/tests/svg2pdc/examples/internal/PBL-28769_1.expected/image.png
vendored
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
third_party/pbl/pblconvert/tests/svg2pdc/examples/internal/PBL-28769_1.highlights.png
vendored
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
third_party/pbl/pblconvert/tests/svg2pdc/examples/internal/PBL-28769_1.pbi
vendored
Normal file
BIN
third_party/pbl/pblconvert/tests/svg2pdc/examples/internal/PBL-28769_1.pdc
vendored
Normal file
BIN
third_party/pbl/pblconvert/tests/svg2pdc/examples/internal/PBL-28769_1.png
vendored
Normal file
After Width: | Height: | Size: 1.3 KiB |
29
third_party/pbl/pblconvert/tests/svg2pdc/examples/internal/PBL-28769_1.svg
vendored
Normal file
|
@ -0,0 +1,29 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Design" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 82 102" enable-background="new 0 0 82 102" xml:space="preserve">
|
||||
<rect x="2" y="26" fill="#FFFFFF" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" width="42" height="74"/>
|
||||
<line fill="#FFFFFF" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="2.5" y1="89.5" x2="43.5" y2="89.5"/>
|
||||
<line fill="#FFFFFF" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="43.5" y1="32.5" x2="2.5" y2="32.5"/>
|
||||
<line fill="#FFFFFF" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="25.5" y1="94.5" x2="20.5" y2="94.5"/>
|
||||
<line fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="16.5" y1="1.5" x2="22.5" y2="7.5"/>
|
||||
<line fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="16.5" y1="17.5" x2="8.5" y2="15.5"/>
|
||||
<line fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="69.5" y1="1.5" x2="63.5" y2="7.5"/>
|
||||
<line fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="69.5" y1="17.5" x2="77.5" y2="15.5"/>
|
||||
<rect x="58" y="30" fill="#FFFFFF" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" width="14" height="70"/>
|
||||
<path fill="#FFFFFF" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
|
||||
M65.3,79h-0.6C57.1,79,51,72.9,51,65.3v-0.6C51,57.1,57.1,51,64.7,51h0.6C72.9,51,79,57.1,79,64.7v0.6C79,72.9,72.9,79,65.3,79z"/>
|
||||
<line fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="58.5" y1="42.5" x2="72.5" y2="42.5"/>
|
||||
<path fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
|
||||
M65.3,72.5h-0.6c-4,0-7.2-3.2-7.2-7.2v-0.6c0-4,3.2-7.2,7.2-7.2h0.6c4,0,7.2,3.2,7.2,7.2v0.6C72.5,69.3,69.3,72.5,65.3,72.5z"/>
|
||||
<g>
|
||||
|
||||
<polygon fill="#FF0000" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
|
||||
34,53 22,41 22,22 34,10 53,10 65,22 65,41 53,53 "/>
|
||||
|
||||
<line fill="none" stroke="#FFFFFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="35" y1="23" x2="52" y2="40"/>
|
||||
|
||||
<line fill="none" stroke="#FFFFFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="35" y1="40" x2="52" y2="23"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.1 KiB |
69
third_party/pbl/pblconvert/tests/svg2pdc/examples/internal/PBL-28769_2.annotated.svg
vendored
Normal file
|
@ -0,0 +1,69 @@
|
|||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:pdc="http://www.pebble.com/2015/pdc" version="1.1" id="Design" x="0px" y="0px" viewBox="0 0 99 78" enable-background="new 0 0 99 78" xml:space="preserve">
|
||||
<g>
|
||||
<rect x="2" y="2" fill="#FFFFFF" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" width="42" height="74"/>
|
||||
<line fill="#FFFFFF" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="2.5" y1="65.5" x2="43.5" y2="65.5"/>
|
||||
<line fill="#FFFFFF" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="43.5" y1="8.5" x2="2.5" y2="8.5"/>
|
||||
<line fill="#FFFFFF" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="25.5" y1="70.5" x2="20.5" y2="70.5"/>
|
||||
</g>
|
||||
<rect x="75" y="2" fill="#FFFFFF" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" width="14" height="74"/>
|
||||
<path fill="#FFFFFF" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d=" M82.3,55h-0.6C74.1,55,68,48.9,68,41.3v-0.6C68,33.1,74.1,27,81.7,27h0.6C89.9,27,96,33.1,96,40.7v0.6C96,48.9,89.9,55,82.3,55z">
|
||||
<pdc:annotation description="Element contains unsupported curved command(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-bezier">
|
||||
<pdc:highlight y="41.30" x="68.00" height="13.70" width="13.70"/>
|
||||
<pdc:highlight y="27.00" x="68.00" height="13.70" width="13.70"/>
|
||||
<pdc:highlight y="27.00" x="82.30" height="13.70" width="13.70"/>
|
||||
<pdc:highlight y="41.30" x="82.30" height="13.70" width="13.70"/>
|
||||
</pdc:annotation>
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="55.00" x="82.30" details="Invalid point: (82.30, 55.00). Used closest supported coordinate: (82.25, 55.0)"/>
|
||||
<pdc:highlight y="55.00" x="81.70" details="Invalid point: (81.70, 55.00). Used closest supported coordinate: (81.75, 55.0)"/>
|
||||
<pdc:highlight y="53.93" x="76.35" details="Invalid point: (76.35, 53.93). Used closest supported coordinate: (76.375, 53.875)"/>
|
||||
<pdc:highlight y="51.00" x="72.00" details="Invalid point: (72.00, 51.00). Used closest supported coordinate: (72.0, 51.0)"/>
|
||||
<pdc:highlight y="46.65" x="69.07" details="Invalid point: (69.07, 46.65). Used closest supported coordinate: (69.125, 46.625)"/>
|
||||
<pdc:highlight y="41.30" x="68.00" details="Invalid point: (68.00, 41.30). Used closest supported coordinate: (68.0, 41.25)"/>
|
||||
<pdc:highlight y="40.70" x="68.00" details="Invalid point: (68.00, 40.70). Used closest supported coordinate: (68.0, 40.75)"/>
|
||||
<pdc:highlight y="35.35" x="69.07" details="Invalid point: (69.07, 35.35). Used closest supported coordinate: (69.125, 35.375)"/>
|
||||
<pdc:highlight y="31.00" x="72.00" details="Invalid point: (72.00, 31.00). Used closest supported coordinate: (72.0, 31.0)"/>
|
||||
<pdc:highlight y="28.07" x="76.35" details="Invalid point: (76.35, 28.07). Used closest supported coordinate: (76.375, 28.125)"/>
|
||||
<pdc:highlight y="27.00" x="81.70" details="Invalid point: (81.70, 27.00). Used closest supported coordinate: (81.75, 27.0)"/>
|
||||
<pdc:highlight y="27.00" x="82.30" details="Invalid point: (82.30, 27.00). Used closest supported coordinate: (82.25, 27.0)"/>
|
||||
<pdc:highlight y="28.07" x="87.65" details="Invalid point: (87.65, 28.07). Used closest supported coordinate: (87.625, 28.125)"/>
|
||||
<pdc:highlight y="31.00" x="92.00" details="Invalid point: (92.00, 31.00). Used closest supported coordinate: (92.0, 31.0)"/>
|
||||
<pdc:highlight y="35.35" x="94.93" details="Invalid point: (94.93, 35.35). Used closest supported coordinate: (94.875, 35.375)"/>
|
||||
<pdc:highlight y="40.70" x="96.00" details="Invalid point: (96.00, 40.70). Used closest supported coordinate: (96.0, 40.75)"/>
|
||||
<pdc:highlight y="41.30" x="96.00" details="Invalid point: (96.00, 41.30). Used closest supported coordinate: (96.0, 41.25)"/>
|
||||
<pdc:highlight y="46.65" x="94.93" details="Invalid point: (94.93, 46.65). Used closest supported coordinate: (94.875, 46.625)"/>
|
||||
<pdc:highlight y="51.00" x="92.00" details="Invalid point: (92.00, 51.00). Used closest supported coordinate: (92.0, 51.0)"/>
|
||||
<pdc:highlight y="53.93" x="87.65" details="Invalid point: (87.65, 53.93). Used closest supported coordinate: (87.625, 53.875)"/>
|
||||
<pdc:highlight y="55.00" x="82.30" details="Invalid point: (82.30, 55.00). Used closest supported coordinate: (82.25, 55.0)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<line fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="75.5" y1="14.5" x2="89.5" y2="14.5"/>
|
||||
<line fill="none" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="82" y1="14.5" x2="82" y2="9.5"/>
|
||||
<path fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d=" M82.3,48.5h-0.6c-4,0-7.2-3.2-7.2-7.2v-0.6c0-4,3.2-7.2,7.2-7.2h0.6c4,0,7.2,3.2,7.2,7.2v0.6C89.5,45.3,86.3,48.5,82.3,48.5z">
|
||||
<pdc:annotation description="Element contains unsupported curved command(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-bezier">
|
||||
<pdc:highlight y="41.30" x="74.50" height="7.20" width="7.20"/>
|
||||
<pdc:highlight y="33.50" x="74.50" height="7.20" width="7.20"/>
|
||||
<pdc:highlight y="33.50" x="82.30" height="7.20" width="7.20"/>
|
||||
<pdc:highlight y="41.30" x="82.30" height="7.20" width="7.20"/>
|
||||
</pdc:annotation>
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="48.50" x="82.30" details="Invalid point: (82.30, 48.50). Used closest supported coordinate: (82.25, 48.5)"/>
|
||||
<pdc:highlight y="48.50" x="81.70" details="Invalid point: (81.70, 48.50). Used closest supported coordinate: (81.75, 48.5)"/>
|
||||
<pdc:highlight y="46.40" x="76.60" details="Invalid point: (76.60, 46.40). Used closest supported coordinate: (76.625, 46.375)"/>
|
||||
<pdc:highlight y="41.30" x="74.50" details="Invalid point: (74.50, 41.30). Used closest supported coordinate: (74.5, 41.25)"/>
|
||||
<pdc:highlight y="40.70" x="74.50" details="Invalid point: (74.50, 40.70). Used closest supported coordinate: (74.5, 40.75)"/>
|
||||
<pdc:highlight y="35.60" x="76.60" details="Invalid point: (76.60, 35.60). Used closest supported coordinate: (76.625, 35.625)"/>
|
||||
<pdc:highlight y="33.50" x="81.70" details="Invalid point: (81.70, 33.50). Used closest supported coordinate: (81.75, 33.5)"/>
|
||||
<pdc:highlight y="33.50" x="82.30" details="Invalid point: (82.30, 33.50). Used closest supported coordinate: (82.25, 33.5)"/>
|
||||
<pdc:highlight y="35.60" x="87.40" details="Invalid point: (87.40, 35.60). Used closest supported coordinate: (87.375, 35.625)"/>
|
||||
<pdc:highlight y="40.70" x="89.50" details="Invalid point: (89.50, 40.70). Used closest supported coordinate: (89.5, 40.75)"/>
|
||||
<pdc:highlight y="41.30" x="89.50" details="Invalid point: (89.50, 41.30). Used closest supported coordinate: (89.5, 41.25)"/>
|
||||
<pdc:highlight y="46.40" x="87.40" details="Invalid point: (87.40, 46.40). Used closest supported coordinate: (87.375, 46.375)"/>
|
||||
<pdc:highlight y="48.50" x="82.30" details="Invalid point: (82.30, 48.50). Used closest supported coordinate: (82.25, 48.5)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<polyline fill="none" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points=" 55,49 61,43 55,37 "/>
|
||||
<line fill="none" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="61" y1="43" x2="25" y2="43"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.2 KiB |
BIN
third_party/pbl/pblconvert/tests/svg2pdc/examples/internal/PBL-28769_2.expected/annotated.png
vendored
Normal file
After Width: | Height: | Size: 1.5 KiB |
69
third_party/pbl/pblconvert/tests/svg2pdc/examples/internal/PBL-28769_2.expected/annotated.svg
vendored
Normal file
|
@ -0,0 +1,69 @@
|
|||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:pdc="http://www.pebble.com/2015/pdc" version="1.1" id="Design" x="0px" y="0px" viewBox="0 0 99 78" enable-background="new 0 0 99 78" xml:space="preserve">
|
||||
<g>
|
||||
<rect x="2" y="2" fill="#FFFFFF" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" width="42" height="74"/>
|
||||
<line fill="#FFFFFF" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="2.5" y1="65.5" x2="43.5" y2="65.5"/>
|
||||
<line fill="#FFFFFF" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="43.5" y1="8.5" x2="2.5" y2="8.5"/>
|
||||
<line fill="#FFFFFF" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="25.5" y1="70.5" x2="20.5" y2="70.5"/>
|
||||
</g>
|
||||
<rect x="75" y="2" fill="#FFFFFF" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" width="14" height="74"/>
|
||||
<path fill="#FFFFFF" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d=" M82.3,55h-0.6C74.1,55,68,48.9,68,41.3v-0.6C68,33.1,74.1,27,81.7,27h0.6C89.9,27,96,33.1,96,40.7v0.6C96,48.9,89.9,55,82.3,55z">
|
||||
<pdc:annotation description="Element contains unsupported curved command(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-bezier">
|
||||
<pdc:highlight y="41.30" x="68.00" height="13.70" width="13.70"/>
|
||||
<pdc:highlight y="27.00" x="68.00" height="13.70" width="13.70"/>
|
||||
<pdc:highlight y="27.00" x="82.30" height="13.70" width="13.70"/>
|
||||
<pdc:highlight y="41.30" x="82.30" height="13.70" width="13.70"/>
|
||||
</pdc:annotation>
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="55.00" x="82.30" details="Invalid point: (82.30, 55.00). Used closest supported coordinate: (82.25, 55.0)"/>
|
||||
<pdc:highlight y="55.00" x="81.70" details="Invalid point: (81.70, 55.00). Used closest supported coordinate: (81.75, 55.0)"/>
|
||||
<pdc:highlight y="53.93" x="76.35" details="Invalid point: (76.35, 53.93). Used closest supported coordinate: (76.375, 53.875)"/>
|
||||
<pdc:highlight y="51.00" x="72.00" details="Invalid point: (72.00, 51.00). Used closest supported coordinate: (72.0, 51.0)"/>
|
||||
<pdc:highlight y="46.65" x="69.07" details="Invalid point: (69.07, 46.65). Used closest supported coordinate: (69.125, 46.625)"/>
|
||||
<pdc:highlight y="41.30" x="68.00" details="Invalid point: (68.00, 41.30). Used closest supported coordinate: (68.0, 41.25)"/>
|
||||
<pdc:highlight y="40.70" x="68.00" details="Invalid point: (68.00, 40.70). Used closest supported coordinate: (68.0, 40.75)"/>
|
||||
<pdc:highlight y="35.35" x="69.07" details="Invalid point: (69.07, 35.35). Used closest supported coordinate: (69.125, 35.375)"/>
|
||||
<pdc:highlight y="31.00" x="72.00" details="Invalid point: (72.00, 31.00). Used closest supported coordinate: (72.0, 31.0)"/>
|
||||
<pdc:highlight y="28.07" x="76.35" details="Invalid point: (76.35, 28.07). Used closest supported coordinate: (76.375, 28.125)"/>
|
||||
<pdc:highlight y="27.00" x="81.70" details="Invalid point: (81.70, 27.00). Used closest supported coordinate: (81.75, 27.0)"/>
|
||||
<pdc:highlight y="27.00" x="82.30" details="Invalid point: (82.30, 27.00). Used closest supported coordinate: (82.25, 27.0)"/>
|
||||
<pdc:highlight y="28.07" x="87.65" details="Invalid point: (87.65, 28.07). Used closest supported coordinate: (87.625, 28.125)"/>
|
||||
<pdc:highlight y="31.00" x="92.00" details="Invalid point: (92.00, 31.00). Used closest supported coordinate: (92.0, 31.0)"/>
|
||||
<pdc:highlight y="35.35" x="94.93" details="Invalid point: (94.93, 35.35). Used closest supported coordinate: (94.875, 35.375)"/>
|
||||
<pdc:highlight y="40.70" x="96.00" details="Invalid point: (96.00, 40.70). Used closest supported coordinate: (96.0, 40.75)"/>
|
||||
<pdc:highlight y="41.30" x="96.00" details="Invalid point: (96.00, 41.30). Used closest supported coordinate: (96.0, 41.25)"/>
|
||||
<pdc:highlight y="46.65" x="94.93" details="Invalid point: (94.93, 46.65). Used closest supported coordinate: (94.875, 46.625)"/>
|
||||
<pdc:highlight y="51.00" x="92.00" details="Invalid point: (92.00, 51.00). Used closest supported coordinate: (92.0, 51.0)"/>
|
||||
<pdc:highlight y="53.93" x="87.65" details="Invalid point: (87.65, 53.93). Used closest supported coordinate: (87.625, 53.875)"/>
|
||||
<pdc:highlight y="55.00" x="82.30" details="Invalid point: (82.30, 55.00). Used closest supported coordinate: (82.25, 55.0)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<line fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="75.5" y1="14.5" x2="89.5" y2="14.5"/>
|
||||
<line fill="none" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="82" y1="14.5" x2="82" y2="9.5"/>
|
||||
<path fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d=" M82.3,48.5h-0.6c-4,0-7.2-3.2-7.2-7.2v-0.6c0-4,3.2-7.2,7.2-7.2h0.6c4,0,7.2,3.2,7.2,7.2v0.6C89.5,45.3,86.3,48.5,82.3,48.5z">
|
||||
<pdc:annotation description="Element contains unsupported curved command(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-bezier">
|
||||
<pdc:highlight y="41.30" x="74.50" height="7.20" width="7.20"/>
|
||||
<pdc:highlight y="33.50" x="74.50" height="7.20" width="7.20"/>
|
||||
<pdc:highlight y="33.50" x="82.30" height="7.20" width="7.20"/>
|
||||
<pdc:highlight y="41.30" x="82.30" height="7.20" width="7.20"/>
|
||||
</pdc:annotation>
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="48.50" x="82.30" details="Invalid point: (82.30, 48.50). Used closest supported coordinate: (82.25, 48.5)"/>
|
||||
<pdc:highlight y="48.50" x="81.70" details="Invalid point: (81.70, 48.50). Used closest supported coordinate: (81.75, 48.5)"/>
|
||||
<pdc:highlight y="46.40" x="76.60" details="Invalid point: (76.60, 46.40). Used closest supported coordinate: (76.625, 46.375)"/>
|
||||
<pdc:highlight y="41.30" x="74.50" details="Invalid point: (74.50, 41.30). Used closest supported coordinate: (74.5, 41.25)"/>
|
||||
<pdc:highlight y="40.70" x="74.50" details="Invalid point: (74.50, 40.70). Used closest supported coordinate: (74.5, 40.75)"/>
|
||||
<pdc:highlight y="35.60" x="76.60" details="Invalid point: (76.60, 35.60). Used closest supported coordinate: (76.625, 35.625)"/>
|
||||
<pdc:highlight y="33.50" x="81.70" details="Invalid point: (81.70, 33.50). Used closest supported coordinate: (81.75, 33.5)"/>
|
||||
<pdc:highlight y="33.50" x="82.30" details="Invalid point: (82.30, 33.50). Used closest supported coordinate: (82.25, 33.5)"/>
|
||||
<pdc:highlight y="35.60" x="87.40" details="Invalid point: (87.40, 35.60). Used closest supported coordinate: (87.375, 35.625)"/>
|
||||
<pdc:highlight y="40.70" x="89.50" details="Invalid point: (89.50, 40.70). Used closest supported coordinate: (89.5, 40.75)"/>
|
||||
<pdc:highlight y="41.30" x="89.50" details="Invalid point: (89.50, 41.30). Used closest supported coordinate: (89.5, 41.25)"/>
|
||||
<pdc:highlight y="46.40" x="87.40" details="Invalid point: (87.40, 46.40). Used closest supported coordinate: (87.375, 46.375)"/>
|
||||
<pdc:highlight y="48.50" x="82.30" details="Invalid point: (82.30, 48.50). Used closest supported coordinate: (82.25, 48.5)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<polyline fill="none" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points=" 55,49 61,43 55,37 "/>
|
||||
<line fill="none" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="61" y1="43" x2="25" y2="43"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.2 KiB |
BIN
third_party/pbl/pblconvert/tests/svg2pdc/examples/internal/PBL-28769_2.expected/image.pdc
vendored
Normal file
BIN
third_party/pbl/pblconvert/tests/svg2pdc/examples/internal/PBL-28769_2.expected/image.png
vendored
Normal file
After Width: | Height: | Size: 931 B |
BIN
third_party/pbl/pblconvert/tests/svg2pdc/examples/internal/PBL-28769_2.highlights.png
vendored
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
third_party/pbl/pblconvert/tests/svg2pdc/examples/internal/PBL-28769_2.pbi
vendored
Normal file
BIN
third_party/pbl/pblconvert/tests/svg2pdc/examples/internal/PBL-28769_2.pdc
vendored
Normal file
BIN
third_party/pbl/pblconvert/tests/svg2pdc/examples/internal/PBL-28769_2.png
vendored
Normal file
After Width: | Height: | Size: 931 B |
26
third_party/pbl/pblconvert/tests/svg2pdc/examples/internal/PBL-28769_2.svg
vendored
Normal file
|
@ -0,0 +1,26 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Design" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 99 78" enable-background="new 0 0 99 78" xml:space="preserve">
|
||||
<g>
|
||||
|
||||
<rect x="2" y="2" fill="#FFFFFF" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" width="42" height="74"/>
|
||||
|
||||
<line fill="#FFFFFF" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="2.5" y1="65.5" x2="43.5" y2="65.5"/>
|
||||
|
||||
<line fill="#FFFFFF" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="43.5" y1="8.5" x2="2.5" y2="8.5"/>
|
||||
|
||||
<line fill="#FFFFFF" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="25.5" y1="70.5" x2="20.5" y2="70.5"/>
|
||||
</g>
|
||||
<rect x="75" y="2" fill="#FFFFFF" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" width="14" height="74"/>
|
||||
<path fill="#FFFFFF" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
|
||||
M82.3,55h-0.6C74.1,55,68,48.9,68,41.3v-0.6C68,33.1,74.1,27,81.7,27h0.6C89.9,27,96,33.1,96,40.7v0.6C96,48.9,89.9,55,82.3,55z"/>
|
||||
<line fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="75.5" y1="14.5" x2="89.5" y2="14.5"/>
|
||||
<line fill="none" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="82" y1="14.5" x2="82" y2="9.5"/>
|
||||
<path fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
|
||||
M82.3,48.5h-0.6c-4,0-7.2-3.2-7.2-7.2v-0.6c0-4,3.2-7.2,7.2-7.2h0.6c4,0,7.2,3.2,7.2,7.2v0.6C89.5,45.3,86.3,48.5,82.3,48.5z"/>
|
||||
<polyline fill="none" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
|
||||
55,49 61,43 55,37 "/>
|
||||
<line fill="none" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="61" y1="43" x2="25" y2="43"/>
|
||||
</svg>
|
After Width: | Height: | Size: 2.4 KiB |
66
third_party/pbl/pblconvert/tests/svg2pdc/examples/internal/PBL-28769_3.annotated.svg
vendored
Normal file
|
@ -0,0 +1,66 @@
|
|||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:pdc="http://www.pebble.com/2015/pdc" version="1.1" id="Design" x="0px" y="0px" viewBox="0 0 64 74" enable-background="new 0 0 64 74" xml:space="preserve">
|
||||
<rect x="9" y="2" fill="#FFFFFF" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" width="14" height="70"/>
|
||||
<path fill="#FFFFFF" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d=" M16.3,51h-0.6C8.1,51,2,44.9,2,37.3v-0.6C2,29.1,8.1,23,15.7,23h0.6C23.9,23,30,29.1,30,36.7v0.6C30,44.9,23.9,51,16.3,51z">
|
||||
<pdc:annotation description="Element contains unsupported curved command(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-bezier">
|
||||
<pdc:highlight y="37.30" x="2.00" height="13.70" width="13.70"/>
|
||||
<pdc:highlight y="23.00" x="2.00" height="13.70" width="13.70"/>
|
||||
<pdc:highlight y="23.00" x="16.30" height="13.70" width="13.70"/>
|
||||
<pdc:highlight y="37.30" x="16.30" height="13.70" width="13.70"/>
|
||||
</pdc:annotation>
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="51.00" x="16.30" details="Invalid point: (16.30, 51.00). Used closest supported coordinate: (16.25, 51.0)"/>
|
||||
<pdc:highlight y="51.00" x="15.70" details="Invalid point: (15.70, 51.00). Used closest supported coordinate: (15.75, 51.0)"/>
|
||||
<pdc:highlight y="49.93" x="10.35" details="Invalid point: (10.35, 49.93). Used closest supported coordinate: (10.375, 49.875)"/>
|
||||
<pdc:highlight y="47.00" x="6.00" details="Invalid point: (6.00, 47.00). Used closest supported coordinate: (6.0, 47.0)"/>
|
||||
<pdc:highlight y="42.65" x="3.07" details="Invalid point: (3.07, 42.65). Used closest supported coordinate: (3.125, 42.625)"/>
|
||||
<pdc:highlight y="37.30" x="2.00" details="Invalid point: (2.00, 37.30). Used closest supported coordinate: (2.0, 37.25)"/>
|
||||
<pdc:highlight y="36.70" x="2.00" details="Invalid point: (2.00, 36.70). Used closest supported coordinate: (2.0, 36.75)"/>
|
||||
<pdc:highlight y="31.35" x="3.07" details="Invalid point: (3.07, 31.35). Used closest supported coordinate: (3.125, 31.375)"/>
|
||||
<pdc:highlight y="27.00" x="6.00" details="Invalid point: (6.00, 27.00). Used closest supported coordinate: (6.0, 27.0)"/>
|
||||
<pdc:highlight y="24.07" x="10.35" details="Invalid point: (10.35, 24.07). Used closest supported coordinate: (10.375, 24.125)"/>
|
||||
<pdc:highlight y="23.00" x="15.70" details="Invalid point: (15.70, 23.00). Used closest supported coordinate: (15.75, 23.0)"/>
|
||||
<pdc:highlight y="23.00" x="16.30" details="Invalid point: (16.30, 23.00). Used closest supported coordinate: (16.25, 23.0)"/>
|
||||
<pdc:highlight y="24.07" x="21.65" details="Invalid point: (21.65, 24.07). Used closest supported coordinate: (21.625, 24.125)"/>
|
||||
<pdc:highlight y="27.00" x="26.00" details="Invalid point: (26.00, 27.00). Used closest supported coordinate: (26.0, 27.0)"/>
|
||||
<pdc:highlight y="31.35" x="28.93" details="Invalid point: (28.93, 31.35). Used closest supported coordinate: (28.875, 31.375)"/>
|
||||
<pdc:highlight y="36.70" x="30.00" details="Invalid point: (30.00, 36.70). Used closest supported coordinate: (30.0, 36.75)"/>
|
||||
<pdc:highlight y="37.30" x="30.00" details="Invalid point: (30.00, 37.30). Used closest supported coordinate: (30.0, 37.25)"/>
|
||||
<pdc:highlight y="42.65" x="28.93" details="Invalid point: (28.93, 42.65). Used closest supported coordinate: (28.875, 42.625)"/>
|
||||
<pdc:highlight y="47.00" x="26.00" details="Invalid point: (26.00, 47.00). Used closest supported coordinate: (26.0, 47.0)"/>
|
||||
<pdc:highlight y="49.93" x="21.65" details="Invalid point: (21.65, 49.93). Used closest supported coordinate: (21.625, 49.875)"/>
|
||||
<pdc:highlight y="51.00" x="16.30" details="Invalid point: (16.30, 51.00). Used closest supported coordinate: (16.25, 51.0)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<line fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="9.5" y1="14.5" x2="23.5" y2="14.5"/>
|
||||
<line fill="none" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="16" y1="14.5" x2="16" y2="9"/>
|
||||
<path fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d=" M16.3,44.5h-0.6c-4,0-7.2-3.2-7.2-7.2v-0.6c0-4,3.2-7.2,7.2-7.2h0.6c4,0,7.2,3.2,7.2,7.2v0.6C23.5,41.3,20.3,44.5,16.3,44.5z">
|
||||
<pdc:annotation description="Element contains unsupported curved command(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-bezier">
|
||||
<pdc:highlight y="37.30" x="8.50" height="7.20" width="7.20"/>
|
||||
<pdc:highlight y="29.50" x="8.50" height="7.20" width="7.20"/>
|
||||
<pdc:highlight y="29.50" x="16.30" height="7.20" width="7.20"/>
|
||||
<pdc:highlight y="37.30" x="16.30" height="7.20" width="7.20"/>
|
||||
</pdc:annotation>
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="44.50" x="16.30" details="Invalid point: (16.30, 44.50). Used closest supported coordinate: (16.25, 44.5)"/>
|
||||
<pdc:highlight y="44.50" x="15.70" details="Invalid point: (15.70, 44.50). Used closest supported coordinate: (15.75, 44.5)"/>
|
||||
<pdc:highlight y="42.40" x="10.60" details="Invalid point: (10.60, 42.40). Used closest supported coordinate: (10.625, 42.375)"/>
|
||||
<pdc:highlight y="37.30" x="8.50" details="Invalid point: (8.50, 37.30). Used closest supported coordinate: (8.5, 37.25)"/>
|
||||
<pdc:highlight y="36.70" x="8.50" details="Invalid point: (8.50, 36.70). Used closest supported coordinate: (8.5, 36.75)"/>
|
||||
<pdc:highlight y="31.60" x="10.60" details="Invalid point: (10.60, 31.60). Used closest supported coordinate: (10.625, 31.625)"/>
|
||||
<pdc:highlight y="29.50" x="15.70" details="Invalid point: (15.70, 29.50). Used closest supported coordinate: (15.75, 29.5)"/>
|
||||
<pdc:highlight y="29.50" x="16.30" details="Invalid point: (16.30, 29.50). Used closest supported coordinate: (16.25, 29.5)"/>
|
||||
<pdc:highlight y="31.60" x="21.40" details="Invalid point: (21.40, 31.60). Used closest supported coordinate: (21.375, 31.625)"/>
|
||||
<pdc:highlight y="36.70" x="23.50" details="Invalid point: (23.50, 36.70). Used closest supported coordinate: (23.5, 36.75)"/>
|
||||
<pdc:highlight y="37.30" x="23.50" details="Invalid point: (23.50, 37.30). Used closest supported coordinate: (23.5, 37.25)"/>
|
||||
<pdc:highlight y="42.40" x="21.40" details="Invalid point: (21.40, 42.40). Used closest supported coordinate: (21.375, 42.375)"/>
|
||||
<pdc:highlight y="44.50" x="16.30" details="Invalid point: (16.30, 44.50). Used closest supported coordinate: (16.25, 44.5)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<polygon fill="#FFFFFF" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points=" 39,70 62,38 54,32 62,4 39.9,33 48,39 ">
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="33.00" x="39.90" details="Invalid point: (39.90, 33.00). Used closest supported coordinate: (39.875, 33.0)"/>
|
||||
</pdc:annotation>
|
||||
</polygon>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.7 KiB |
BIN
third_party/pbl/pblconvert/tests/svg2pdc/examples/internal/PBL-28769_3.expected/annotated.png
vendored
Normal file
After Width: | Height: | Size: 1.7 KiB |
66
third_party/pbl/pblconvert/tests/svg2pdc/examples/internal/PBL-28769_3.expected/annotated.svg
vendored
Normal file
|
@ -0,0 +1,66 @@
|
|||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:pdc="http://www.pebble.com/2015/pdc" version="1.1" id="Design" x="0px" y="0px" viewBox="0 0 64 74" enable-background="new 0 0 64 74" xml:space="preserve">
|
||||
<rect x="9" y="2" fill="#FFFFFF" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" width="14" height="70"/>
|
||||
<path fill="#FFFFFF" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d=" M16.3,51h-0.6C8.1,51,2,44.9,2,37.3v-0.6C2,29.1,8.1,23,15.7,23h0.6C23.9,23,30,29.1,30,36.7v0.6C30,44.9,23.9,51,16.3,51z">
|
||||
<pdc:annotation description="Element contains unsupported curved command(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-bezier">
|
||||
<pdc:highlight y="37.30" x="2.00" height="13.70" width="13.70"/>
|
||||
<pdc:highlight y="23.00" x="2.00" height="13.70" width="13.70"/>
|
||||
<pdc:highlight y="23.00" x="16.30" height="13.70" width="13.70"/>
|
||||
<pdc:highlight y="37.30" x="16.30" height="13.70" width="13.70"/>
|
||||
</pdc:annotation>
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="51.00" x="16.30" details="Invalid point: (16.30, 51.00). Used closest supported coordinate: (16.25, 51.0)"/>
|
||||
<pdc:highlight y="51.00" x="15.70" details="Invalid point: (15.70, 51.00). Used closest supported coordinate: (15.75, 51.0)"/>
|
||||
<pdc:highlight y="49.93" x="10.35" details="Invalid point: (10.35, 49.93). Used closest supported coordinate: (10.375, 49.875)"/>
|
||||
<pdc:highlight y="47.00" x="6.00" details="Invalid point: (6.00, 47.00). Used closest supported coordinate: (6.0, 47.0)"/>
|
||||
<pdc:highlight y="42.65" x="3.07" details="Invalid point: (3.07, 42.65). Used closest supported coordinate: (3.125, 42.625)"/>
|
||||
<pdc:highlight y="37.30" x="2.00" details="Invalid point: (2.00, 37.30). Used closest supported coordinate: (2.0, 37.25)"/>
|
||||
<pdc:highlight y="36.70" x="2.00" details="Invalid point: (2.00, 36.70). Used closest supported coordinate: (2.0, 36.75)"/>
|
||||
<pdc:highlight y="31.35" x="3.07" details="Invalid point: (3.07, 31.35). Used closest supported coordinate: (3.125, 31.375)"/>
|
||||
<pdc:highlight y="27.00" x="6.00" details="Invalid point: (6.00, 27.00). Used closest supported coordinate: (6.0, 27.0)"/>
|
||||
<pdc:highlight y="24.07" x="10.35" details="Invalid point: (10.35, 24.07). Used closest supported coordinate: (10.375, 24.125)"/>
|
||||
<pdc:highlight y="23.00" x="15.70" details="Invalid point: (15.70, 23.00). Used closest supported coordinate: (15.75, 23.0)"/>
|
||||
<pdc:highlight y="23.00" x="16.30" details="Invalid point: (16.30, 23.00). Used closest supported coordinate: (16.25, 23.0)"/>
|
||||
<pdc:highlight y="24.07" x="21.65" details="Invalid point: (21.65, 24.07). Used closest supported coordinate: (21.625, 24.125)"/>
|
||||
<pdc:highlight y="27.00" x="26.00" details="Invalid point: (26.00, 27.00). Used closest supported coordinate: (26.0, 27.0)"/>
|
||||
<pdc:highlight y="31.35" x="28.93" details="Invalid point: (28.93, 31.35). Used closest supported coordinate: (28.875, 31.375)"/>
|
||||
<pdc:highlight y="36.70" x="30.00" details="Invalid point: (30.00, 36.70). Used closest supported coordinate: (30.0, 36.75)"/>
|
||||
<pdc:highlight y="37.30" x="30.00" details="Invalid point: (30.00, 37.30). Used closest supported coordinate: (30.0, 37.25)"/>
|
||||
<pdc:highlight y="42.65" x="28.93" details="Invalid point: (28.93, 42.65). Used closest supported coordinate: (28.875, 42.625)"/>
|
||||
<pdc:highlight y="47.00" x="26.00" details="Invalid point: (26.00, 47.00). Used closest supported coordinate: (26.0, 47.0)"/>
|
||||
<pdc:highlight y="49.93" x="21.65" details="Invalid point: (21.65, 49.93). Used closest supported coordinate: (21.625, 49.875)"/>
|
||||
<pdc:highlight y="51.00" x="16.30" details="Invalid point: (16.30, 51.00). Used closest supported coordinate: (16.25, 51.0)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<line fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="9.5" y1="14.5" x2="23.5" y2="14.5"/>
|
||||
<line fill="none" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="16" y1="14.5" x2="16" y2="9"/>
|
||||
<path fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d=" M16.3,44.5h-0.6c-4,0-7.2-3.2-7.2-7.2v-0.6c0-4,3.2-7.2,7.2-7.2h0.6c4,0,7.2,3.2,7.2,7.2v0.6C23.5,41.3,20.3,44.5,16.3,44.5z">
|
||||
<pdc:annotation description="Element contains unsupported curved command(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-bezier">
|
||||
<pdc:highlight y="37.30" x="8.50" height="7.20" width="7.20"/>
|
||||
<pdc:highlight y="29.50" x="8.50" height="7.20" width="7.20"/>
|
||||
<pdc:highlight y="29.50" x="16.30" height="7.20" width="7.20"/>
|
||||
<pdc:highlight y="37.30" x="16.30" height="7.20" width="7.20"/>
|
||||
</pdc:annotation>
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="44.50" x="16.30" details="Invalid point: (16.30, 44.50). Used closest supported coordinate: (16.25, 44.5)"/>
|
||||
<pdc:highlight y="44.50" x="15.70" details="Invalid point: (15.70, 44.50). Used closest supported coordinate: (15.75, 44.5)"/>
|
||||
<pdc:highlight y="42.40" x="10.60" details="Invalid point: (10.60, 42.40). Used closest supported coordinate: (10.625, 42.375)"/>
|
||||
<pdc:highlight y="37.30" x="8.50" details="Invalid point: (8.50, 37.30). Used closest supported coordinate: (8.5, 37.25)"/>
|
||||
<pdc:highlight y="36.70" x="8.50" details="Invalid point: (8.50, 36.70). Used closest supported coordinate: (8.5, 36.75)"/>
|
||||
<pdc:highlight y="31.60" x="10.60" details="Invalid point: (10.60, 31.60). Used closest supported coordinate: (10.625, 31.625)"/>
|
||||
<pdc:highlight y="29.50" x="15.70" details="Invalid point: (15.70, 29.50). Used closest supported coordinate: (15.75, 29.5)"/>
|
||||
<pdc:highlight y="29.50" x="16.30" details="Invalid point: (16.30, 29.50). Used closest supported coordinate: (16.25, 29.5)"/>
|
||||
<pdc:highlight y="31.60" x="21.40" details="Invalid point: (21.40, 31.60). Used closest supported coordinate: (21.375, 31.625)"/>
|
||||
<pdc:highlight y="36.70" x="23.50" details="Invalid point: (23.50, 36.70). Used closest supported coordinate: (23.5, 36.75)"/>
|
||||
<pdc:highlight y="37.30" x="23.50" details="Invalid point: (23.50, 37.30). Used closest supported coordinate: (23.5, 37.25)"/>
|
||||
<pdc:highlight y="42.40" x="21.40" details="Invalid point: (21.40, 42.40). Used closest supported coordinate: (21.375, 42.375)"/>
|
||||
<pdc:highlight y="44.50" x="16.30" details="Invalid point: (16.30, 44.50). Used closest supported coordinate: (16.25, 44.5)"/>
|
||||
</pdc:annotation>
|
||||
</path>
|
||||
<polygon fill="#FFFFFF" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points=" 39,70 62,38 54,32 62,4 39.9,33 48,39 ">
|
||||
<pdc:annotation description="Element is expressed with unsupported coordinate(s)." href="https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+Draw+Commands#PebbleDrawCommands-issue-pixelgrid">
|
||||
<pdc:highlight y="33.00" x="39.90" details="Invalid point: (39.90, 33.00). Used closest supported coordinate: (39.875, 33.0)"/>
|
||||
</pdc:annotation>
|
||||
</polygon>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.7 KiB |
BIN
third_party/pbl/pblconvert/tests/svg2pdc/examples/internal/PBL-28769_3.expected/image.pdc
vendored
Normal file
BIN
third_party/pbl/pblconvert/tests/svg2pdc/examples/internal/PBL-28769_3.expected/image.png
vendored
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
third_party/pbl/pblconvert/tests/svg2pdc/examples/internal/PBL-28769_3.highlights.png
vendored
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
third_party/pbl/pblconvert/tests/svg2pdc/examples/internal/PBL-28769_3.pbi
vendored
Normal file
BIN
third_party/pbl/pblconvert/tests/svg2pdc/examples/internal/PBL-28769_3.pdc
vendored
Normal file
BIN
third_party/pbl/pblconvert/tests/svg2pdc/examples/internal/PBL-28769_3.png
vendored
Normal file
After Width: | Height: | Size: 1.2 KiB |