Hugo van Kemenade
b64d96d414
Merge pull request #4116 from radarhere/memory
...
Fixed freeing unallocated pointer when resizing with height too large
2019-11-13 20:29:09 +02:00
Hugo van Kemenade
54e57768ab
Merge pull request #4128 from radarhere/info
...
Copy info in Image.transform
2019-11-13 20:27:51 +02:00
Hugo van Kemenade
ce18064b20
Merge pull request #4171 from radarhere/gamma
...
Corrected DdsImagePlugin setting info gamma
2019-11-13 20:26:03 +02:00
Andrew Murray
d79f2bb7dc
Corrected context manager test
2019-11-06 20:12:19 +11:00
Hugo van Kemenade
3663af1967
Merge pull request #4189 from cgohlke/patch-1
...
Report details about Pillow when running tests
2019-11-05 13:01:02 +02:00
Hugo van Kemenade
5006401d0b
Merge branch 'master' into rm-2.7
2019-11-03 22:48:26 +02:00
Christoph Gohlke
5d10f8dff2
Use features.pilinfo to report details about Pillow
2019-11-02 15:12:52 -07:00
Hugo van Kemenade
6060ed3d14
Merge pull request #4091 from nulano/libimagequant-features
...
Add libimagequant to features.py
2019-11-02 21:31:09 +02:00
Andrew Murray
b1ee44a74b
Ignore UserWarnings
2019-11-02 18:10:55 +11:00
Christoph Gohlke
579b6cac60
Report details about Pillow when running tests
2019-11-01 23:06:51 -07:00
Hugo
b4f93cf140
Upgrade Python syntax with pyupgrade --py3-plus
2019-11-01 13:54:19 +02:00
Hugo
cc63f66575
Merge remote-tracking branch 'upstream/master' into rm-2.7
2019-11-01 13:22:56 +02:00
Hugo van Kemenade
2cf510e596
Improve handling of file resources ( #3577 )
...
Improve handling of file resources
2019-11-01 12:07:53 +02:00
Andrew Murray
b65fcb280a
Copy info in transform
2019-10-30 22:14:01 +11:00
Andrew Murray
d716278d20
Corrected DdsImagePlugin setting info gamma
2019-10-30 22:13:06 +11:00
Andrew Murray
511aed922a
Fixed freeing unallocated pointer when resizing with height too large
2019-10-30 22:09:28 +11:00
Andrew Murray
9b20276c45
Allow for arr KeyError
2019-10-30 07:23:08 +11:00
Bei Pang
f53b86b673
Removed TypeError exception check in JpegImagePlugin; Updated comments in test
2019-10-28 09:48:37 -07:00
Bei Pang
bcc766e02d
Use default DPI when exif provides invalid x_resolution
2019-10-27 07:50:30 +11:00
Hugo van Kemenade
40133cfc74
Merge branch 'master' into rm-2.7
2019-10-26 09:07:44 +03:00
Jon Dufresne
cae17eb927
Use more Pythonic super() instead of referencing parent class
...
https://rhettinger.wordpress.com/2011/05/26/super-considered-super/
2019-10-22 06:54:58 -07:00
Hugo van Kemenade
1a9be9ccbd
Simpilify PillowTestCase.delete_tempfile for pytest ( #4139 )
...
Simpilify PillowTestCase.delete_tempfile for pytest
2019-10-22 14:14:20 +03:00
Hugo van Kemenade
28ff798889
Merge branch 'master' into rm-2.7
2019-10-15 12:11:43 +03:00
Jon Dufresne
9981568982
Simpilify PillowTestCase.delete_tempfile for pytest
...
As the test suite always runs with pytest now, self.currentResult is
always None. Using this, can remove unused code.
2019-10-12 11:13:14 -07:00
Jon Dufresne
4cd4adddc3
Improve handling of file resources
...
Follow Python's file object semantics. User code is responsible for
closing resources (usually through a context manager) in a deterministic
way.
To achieve this, remove __del__ functions. These functions used to
closed open file handlers in an attempt to silence Python
ResourceWarnings. However, using __del__ has the following drawbacks:
- __del__ isn't called until the object's reference count reaches 0.
Therefore, resource handlers remain open or in use longer than
necessary.
- The __del__ method isn't guaranteed to execute on system exit. See the
Python documentation:
https://docs.python.org/3/reference/datamodel.html#object.__del__
> It is not guaranteed that __del__() methods are called for objects
> that still exist when the interpreter exits.
- Exceptions that occur inside __del__ are ignored instead of raised.
This has the potential of hiding bugs. This is also in the Python
documentation:
> Warning: Due to the precarious circumstances under which __del__()
> methods are invoked, exceptions that occur during their execution
> are ignored, and a warning is printed to sys.stderr instead.
Instead, always close resource handlers when they are no longer in use.
This will close the file handler at a specified point in the user's code
and not wait until the interpreter chooses to. It is always guaranteed
to run. And, if an exception occurs while closing the file handler, the
bug will not be ignored.
Now, when code receives a ResourceWarning, it will highlight an area
that is mishandling resources. It should not simply be silenced, but
fixed by closing resources with a context manager.
All warnings that were emitted during tests have been cleaned up. To
enable warnings, I passed the `-Wa` CLI option to Python. This exposed
some mishandling of resources in ImageFile.__init__() and
SpiderImagePlugin.loadImageSeries(), they too were fixed.
2019-10-12 08:27:17 -07:00
Jon Dufresne
0affbacd5e
Remove unused arguments from PillowTestCase.skipKnwonBadTest()
2019-10-12 08:17:20 -07:00
nulano
accbe58b5e
add Python version to selftest, rename brief parameter
2019-10-12 15:40:12 +01:00
Andrew Murray
4140cd807b
Merge branch 'master' into rm-2.7
2019-10-12 18:03:58 +11:00
Hugo
3e24c5fea4
Replace isStringType(t) with isinstance(t, str)
...
Co-Authored-By: Jon Dufresne <jon.dufresne@gmail.com>
2019-10-08 17:26:52 +03:00
Hugo
3a34081db5
Simplify temporary directory cleanup
...
Co-Authored-By: Jon Dufresne <jon.dufresne@gmail.com>
2019-10-08 17:25:55 +03:00
Hugo
84e53e3757
Simplify using subprocess.DEVNULL
...
Co-Authored-By: Jon Dufresne <jon.dufresne@gmail.com>
2019-10-08 17:25:42 +03:00
nulano
a0a5601689
Merge branch 'master' into gha-win
2019-10-08 12:56:43 +01:00
Andrew Murray
6cd99fc3cf
Merge branch 'master' into rm-2.7
2019-10-08 18:57:27 +11:00
Jon Dufresne
64032061c0
Move several imports to the top-level of the file
...
This better follows PEP 8 style guide:
https://www.python.org/dev/peps/pep-0008/#imports
> Imports are always put at the top of the file, just after any module
> comments and docstrings, and before module globals and constants.
This also avoids duplicate import code within the same file.
2019-10-07 06:28:36 -07:00
Hugo
4382413bb4
Remove redundant bytearray
2019-10-07 16:23:43 +03:00
Hugo
865b17d5cf
Remove Python 2-compatibility code
2019-10-07 16:23:22 +03:00
Hugo
74d2767c57
Remove duplicate line
2019-10-07 14:30:59 +03:00
Hugo
538d9e2e5d
Upgrade Python syntax with pyupgrade --py3-plus
2019-10-07 14:30:59 +03:00
Hugo
af770a6c55
Drop support for EOL Python 2.7
2019-10-07 14:30:59 +03:00
Jon Dufresne
922f55c265
Use bytes literals instead of bytes(str)
...
Bytes literals are available on all supported Python versions. Rather
than convert strings literals to bytes at runtime, simply use a bytes
literal.
2019-10-06 19:26:55 -07:00
Andrew Murray
e8cf9a6bc1
Merge pull request #4108 from hugovk/rm-deprecated-qt
...
Drop support for EOL PyQt4 and PySide
2019-10-07 12:35:56 +11:00
Jon Dufresne
c50a309a10
Remove duplicate cleanup in test_decompression_bomb.py
...
The same cleanup is done in the teardDown() method. There is no need to
do it a 2nd time.
2019-10-06 10:24:48 -07:00
Andrew Murray
732eb7223f
Merge branch 'master' into rm-deprecated-qt
2019-10-06 13:35:38 +11:00
Andrew Murray
d6ae0a99a7
Removed deprecated setting of TIFF image sizes
2019-10-03 22:12:28 +10:00
Andrew Murray
e487ed7fef
Removed deprecation test
2019-10-02 22:01:31 +10:00
Hugo
f0a87e25a4
Drop support for EOL PyQt4 and PySide
2019-09-30 17:58:31 +03:00
Andrew Murray
cc16025e23
Merge pull request #4104 from radarhere/overrun
...
Catch buffer overruns
2019-09-30 23:33:28 +10:00
Andrew Murray
fb8470187a
Merge pull request #4034 from cgohlke/patch-1
...
Initialize rows_per_strip when RowsPerStrip tag is missing
2019-09-30 22:32:34 +10:00
Andrew Murray
b9693a51c9
Merge pull request #4103 from radarhere/dimension
...
Raise error if TIFF dimension is a string
2019-09-30 21:26:53 +10:00
Andrew Murray
f228d0ccbf
Merge pull request #4102 from radarhere/decompression
...
Added decompression bomb checks
2019-09-30 20:31:05 +10:00
Andrew Murray
9a977b975c
Raise error if dimension is a string
2019-09-30 18:48:10 +10:00
Andrew Murray
ab52630d06
Catch buffer overruns
2019-09-30 18:45:43 +10:00
Andrew Murray
eed2bfc5b4
Added decompression bomb checks
2019-09-30 18:45:13 +10:00
Andrew Murray
87c43b66a5
Corrected negative seeks
2019-09-30 18:31:18 +10:00
Andrew Murray
4de10089f0
Moved libtiff test into libtiff test file
2019-09-29 21:06:11 +10:00
Hugo van Kemenade
d3ae7a1c46
Merge pull request #4088 from radarhere/fit
...
Do not calculate the crop width in Image.fit if it is already known
2019-09-29 12:57:29 +03:00
Andrew Murray
1809f46e0b
Do not calculate the crop width if it is already known
2019-09-29 14:26:32 +10:00
nulano
17d9938ece
spider labrec ceil
2019-09-27 22:10:49 +02:00
Hugo van Kemenade
310d2c9005
Add option to capture all monitors on Windows ( #3950 )
...
Add option to capture all monitors on Windows
2019-09-27 08:47:55 +03:00
nulano
cf1f8b0498
Tests.helper cleanup
2019-09-25 11:58:02 +02:00
nulano
113a72633a
test-windows.yml clean names
2019-09-25 11:28:52 +02:00
nulano
4d35cb9d0a
test-windows.yml pypy3, use actions/setup-python
2019-09-25 09:17:38 +02:00
Andrew Murray
7d502dd410
Cleanup by resetting locale
2019-09-23 20:26:34 +10:00
Andrew Murray
508a2b48f0
Test show method on CIs
2019-09-21 22:28:05 +10:00
Hugo van Kemenade
f5aed1a254
Merge branch 'master' into patch-1
2019-09-20 22:59:29 +03:00
Hugo van Kemenade
736b8436e7
Use TIFF orientation ( #4063 )
...
Use TIFF orientation
2019-09-20 22:57:58 +03:00
Hugo van Kemenade
8e3c4e3658
Merge pull request #3965 from radarhere/truncated
...
Raise the same error if a truncated image is loaded a second time
2019-09-20 22:53:52 +03:00
nulano
6a2d8f8da0
rename parameter, add note to docs
2019-09-20 17:35:08 +02:00
Andrew Murray
19ab3c36e6
Added test
2019-09-18 22:07:17 +10:00
Andrew Murray
1b70a4c6b5
Use TIFF orientation
2019-09-13 22:36:26 +10:00
Andrew Murray
b913fa6a53
Increased tolerance for stroke test comparison
2019-09-11 19:57:45 +10:00
Hugo van Kemenade
e5f6b86413
Merge pull request #4031 from radarhere/exif
...
Lazily use ImageFileDirectory_v1 values from Exif
2019-09-09 20:16:24 +03:00
Andrew Murray
5a668779e9
Added tests
2019-09-08 21:27:55 +10:00
Andrew Murray
14859ce506
Merge pull request #4004 from radarhere/hsv
...
Improved HSV conversion
2019-09-07 00:50:34 +10:00
Andrew Murray
da39d40342
Merge pull request #3978 from radarhere/stroke
...
Added text stroking
2019-09-06 19:14:49 +10:00
Hugo van Kemenade
cb1ebc024b
Merge pull request #4017 from radarhere/floodfill
...
Do not allow floodfill to extend into negative coordinates
2019-09-05 23:00:33 +03:00
Hugo van Kemenade
bd2d7cb247
Merge pull request #4014 from radarhere/arc
...
Fixed arc drawing bug for a non-whole number of degrees
2019-09-05 22:52:05 +03:00
Hugo van Kemenade
572a93c86f
Corrected tag counts ( #4033 )
...
Corrected tag counts
2019-09-05 22:41:16 +03:00
Hugo van Kemenade
3f9d00e4c2
Merge pull request #3967 from radarhere/error
...
Return after error
2019-09-04 16:07:22 +03:00
Konstantin Kopachev
06e34db10b
Merge remote-tracking branch 'upstream/master' into exif-writing-fixes
...
# Conflicts:
# Tests/test_file_tiff_metadata.py
2019-08-29 09:20:09 -07:00
Andrew Murray
ddcfd259cf
Corrected short and long range checks
2019-08-29 19:36:46 +10:00
Andrew Murray
35a7d11f43
Fixed typo [ci skip]
2019-08-29 19:02:19 +10:00
Andrew Murray
24d29bd11d
Merge pull request #4003 from djy0/master
...
Fix bug when merging identical images to GIF with a list of durations
2019-08-25 12:52:41 +10:00
Andrew Murray
2dbfabe6d5
Simplifications
2019-08-24 08:10:45 +10:00
Andrew Murray
d96f657328
Merge pull request #3998 from chadawagner/master
...
Fix bug in TIFF loading of BufferedReader
2019-08-23 06:25:30 +10:00
chadawagner
34330a7aa0
Update Tests/test_file_libtiff.py
...
Co-Authored-By: Andrew Murray <3112309+radarhere@users.noreply.github.com>
2019-08-19 09:46:07 -07:00
Andrew Murray
f08a0966a0
Corrected tag counts
2019-08-19 21:12:16 +10:00
Andrew Murray
5b120164b5
Corrected underline [ci skip]
2019-08-17 20:32:24 +10:00
nulano
fa6b80fddf
add option to capture all monitors on Windows
2019-08-15 20:03:33 +10:00
Konstantin Kopachev
1b626f4d22
Fix RATIONAL and SRATIONAL boundaries when writing IFDs
2019-08-12 19:43:35 +10:00
chadawagner
457a97dde8
added test for reading TIFF from non-disk file obj
2019-08-12 18:56:34 +10:00
djy0
0872cb4377
fix comment
2019-08-12 18:54:29 +10:00
djy0
63c15dc3ba
format
2019-08-12 18:54:29 +10:00
djy0
3c971bec41
format
2019-08-12 18:54:29 +10:00
djy0
8696f06fbe
Update test_file_gif.py
2019-08-12 18:54:29 +10:00
Andrew Murray
23872c0645
Do not allow floodfill to extend into negative coordinates
2019-08-12 06:51:16 +10:00
Andrew Murray
8fff9a2444
Fixed arc drawing bug for a non-whole number of degrees
2019-08-12 06:50:58 +10:00
Andrew Murray
27d6fc7bc5
Improved HSV conversion
2019-08-12 06:50:18 +10:00
Andrew Murray
f93a5d0972
Added text stroking
2019-07-29 06:40:03 +10:00
Andrew Murray
66ad3cb461
Changed overflow check to use PY_SSIZE_T_MAX
2019-07-17 07:07:26 +10:00
Hugo van Kemenade
1ab5670eb1
Introduce isort to automate import ordering and formatting ( #3954 )
...
Introduce isort to automate import ordering and formatting
2019-07-16 23:02:31 +03:00
Andrew Murray
2995fb67c1
Return after error
2019-07-13 13:50:13 +10:00
Andrew Murray
023dcf27c2
Raise the same error if a truncated image is loaded a second time
2019-07-13 08:37:17 +10:00
Jon Dufresne
d50445ff30
Introduce isort to automate import ordering and formatting
...
Similar to the recent adoption of Black. isort is a Python utility to
sort imports alphabetically and automatically separate into sections. By
using isort, contributors can quickly and automatically conform to the
projects style without thinking. Just let the tool do it.
Uses the configuration recommended by the Black to avoid conflicts of
style.
Rewrite TestImageQt.test_deprecated to no rely on import order.
2019-07-06 16:11:35 -07:00
nulano
0b0dc1112e
Merge branch 'master' into revert-3931-update-freetype-epsilon
...
# Conflicts:
# Tests/test_imagefont.py
2019-07-02 22:49:45 +02:00
nulano
d7c69ea2b4
skip test_unicode_extended on Python 2.x
2019-07-02 11:14:09 +02:00
nulano
22ce5cc0c7
Revert "Update epsilon for FreeType 2.10 with eg. Unicode width 16"
2019-07-02 11:08:48 +02:00
nulano
14ddfd30b2
fix lint
2019-07-02 09:31:05 +02:00
nulano
86d4c53d79
revert #3780 for PyPy as it hasn't been updated
2019-07-02 08:52:15 +02:00
Hugo
46535df8f3
Update epsilon for FreeType 2.10 with eg. Unicode width 16
2019-07-01 16:32:22 +03:00
Oliver Tonnhofer
edeb8d69af
Merge branch 'master' into tiff-jpeg-quality
2019-07-01 11:00:06 +02:00
Oliver Tonnhofer
2af4026201
Improve encoding of TIFF tags ( #3861 )
...
* Improve encoding of TIFF tags
- Pass tagtype from v2 directory to libtiff encoder, instead of
autodetecting type.
- Use explicit types. E.g. uint32_t for TIFF_LONG to fix issues on
platforms with 64bit longs.
- Add support for multiple values (arrays). Requires type in v2
directory and values must be passed as a tuple.
- Add support for signed types (e.g. TIFFTypes.TIFF_SIGNED_SHORT).
Co-authored-by: Andrew Murray <radarhere@users.noreply.github.com>
2019-06-30 21:48:19 +03:00
Hugo
8d4bb339a6
Merge pull request #3780 from nulano/update_py_unicode
...
Update Py_UNICODE to Py_UCS4
2019-06-30 13:21:46 +03:00
Hugo
12695b8ca3
Merge pull request #3899 from radarhere/pixelsize
...
Consider I;16 pixel size when drawing
2019-06-30 13:18:46 +03:00
Hugo
f5a89a0e9a
Use unittest asserts for consistency
2019-06-30 11:13:02 +03:00
Andrew Murray
c994b783ec
Merge branch 'master' into tiff-jpeg-quality
2019-06-30 14:03:09 +10:00
Andrew Murray
42588a6493
Skip test if libtiff is not installed
2019-06-30 13:26:58 +10:00
Andrew Murray
cc0d70145b
Lint fixes
2019-06-30 13:26:58 +10:00
Christoph Gohlke
4a69223db9
Add test for sampleformat corruption
2019-06-30 13:26:58 +10:00
Andrew Murray
9074eda608
Merge pull request #3778 from radarhere/all_frames
...
Added ImageSequence all_frames
2019-06-30 07:55:34 +10:00
Andrew Murray
90d3d37164
Do not presume that the background color index is 0
2019-06-29 23:06:45 +10:00
Andrew Murray
97c15a245c
Corrected color table size calculation
2019-06-29 23:02:26 +10:00
Andrew Murray
c3e982e0c6
Merge branch 'master' into master
2019-06-29 22:59:17 +10:00
Hugo
0e7358a046
Updated TIFF tile descriptors to match current decoding functio… ( #3795 )
...
Updated TIFF tile descriptors to match current decoding functionality
2019-06-29 10:27:00 +03:00
Hugo
08c47925d0
Added an image.entropy()
method ( #3608 )
...
Added an `image.entropy()` method
2019-06-29 10:12:34 +03:00
Hugo
372c7c352a
Merge pull request #3703 from jkrshnmenon/master
...
Add an upper limit for blocks_max in _set_blocks_max
2019-06-27 23:03:25 +03:00
Hugo
b584635a8c
Merge pull request #3912 from radarhere/non_font_bytes
...
Fixed crash when loading non-font bytes
2019-06-27 22:40:29 +03:00
Andrew Murray
8b447c4840
Lint fixes
2019-06-26 19:16:36 +10:00
Alexander Böhn
7b815a5f1d
Added an image.entropy()
method
...
This calculates the entropy for the image, based on the histogram.
Because this uses image histogram data directly, the existing C
function underpinning the `image.histogram()` method was abstracted
into a static function to parse extrema tuple arguments, and a new
C function was added to calculate image entropy, making use of the
new static extrema function.
The extrema-parsing function was written by @homm, based on the
macro abstraction I wrote, during the discussion of my first
entropy-method pull request: https://git.io/fhodS
The new `image.entropy()` method is based on `image.histogram()`,
and will accept the same arguments to calculate the histogram data
it will use to assess the entropy of the image.
The algorithm and methodology is based on existing Python code:
* https://git.io/fhmIU
... A test case in the `Tests/` directory, and doctest lines in
`selftest.py`, have both been added and checked.
Changes proposed in this pull request:
* Added “math.h” include to _imaging.c
* The addition of an `image.entropy()` method to the `Image`
Python class,
* The abstraction of the extrema-parsing logic of of the C
function `_histogram` into a static function, and
* The use of that static function in both the `_histogram` and
`_entropy` C functions.
* Minor documentation addenda in the docstrings for both the
`image.entropy()` and `image.histogram()` methods were also
added.
* Removed outdated boilerplate from testing code
* Removed unused “unittest” import
2019-06-26 19:15:47 +10:00
Andrew Murray
f22198e3bc
Lint fixes
2019-06-26 19:09:02 +10:00
Andrew Murray
d591cf8d3f
Error is not raised on 64-bit systems
2019-06-26 19:08:07 +10:00
Jayakrishna Menon
590b5b7f9e
test case for set_blocks_max
2019-06-26 19:08:07 +10:00
Jayakrishna Menon
2acc098cab
adding testcase for overflow
2019-06-26 19:08:07 +10:00
Jayakrishna Menon
494fb25bdb
adding testcase for overflow
2019-06-26 19:08:07 +10:00
Oliver Tonnhofer
2b7d8be536
tiff: add support for JPEG quality
...
Uses JPEGQUALITY pseudo-tag from libtiff.
Also changes the way tags are passed to PyImaging_LibTiffEncoderNew from
dict to list to ensure that COMPRESSION tag is added before JPEGQUALITY.
This is required as the COMPRESSION tag registers the JPEGQUALITY
pseudo-tag.
2019-06-26 06:33:54 +10:00
Oliver Tonnhofer
61add9d6b0
Improve encoding of TIFF tags
...
- Pass tagtype from v2 directory to libtiff encoder, instead of
autodetecting type.
- Use explicit types. E.g. uint32_t for TIFF_LONG to fix issues on
platforms with 64bit longs.
- Add support for multiple values (arrays). Requires type in v2
directory and values must be passed as a tuple.
- Add support for signed types (e.g. TIFFTypes.TIFF_SIGNED_SHORT).
2019-06-26 06:33:19 +10:00
Andrew Murray
25cf1010eb
Lint fixes
2019-06-25 22:20:57 +10:00
nulano
983371d4d8
fix centos, amazon
2019-06-25 22:16:00 +10:00
nulano
be192d8f69
fix lint
2019-06-25 22:16:00 +10:00
nulano
5f65f10191
add test for #3777
2019-06-25 22:16:00 +10:00
Andrew Murray
d00e18b017
Updated test result
2019-06-23 14:01:51 +10:00
David Nisson
ddb61cfbd2
updated tests to match new tile descriptors
2019-06-23 13:59:20 +10:00
Andrew Murray
9c37933bb9
Added CMYK;16B and CMYK;16N unpackers
2019-06-23 11:56:17 +10:00
Andrew Murray
7bb16de81c
Fixed crash when loading non-font bytes
2019-06-23 11:53:01 +10:00
Andrew Murray
db4916849e
Added ImageSequence all_frames
2019-06-23 07:34:39 +10:00
Andrew Murray
e0cbfb2708
Consider I;16 pixel size when drawing
2019-06-23 07:33:55 +10:00
Andrew Murray
68fac40147
Fixed black formatting
2019-06-22 14:47:56 +10:00
Hugo
f5cd8b4b0d
Merge pull request #3909 from hugovk/run-black
...
Format code with Black
2019-06-22 06:46:15 +03:00
Andrew Murray
ea0f1c6b06
Do not presume that the last glyph has the max x value
2019-06-19 22:32:01 +10:00
Andrew Murray
fb38296230
Change direction of y offset in calculating size
2019-06-19 22:30:50 +10:00