Age | Commit message (Collapse) | Author |
|
|
|
Try to limit aliasing issues.
|
|
An l2factor of 3 is equivalent to downscaling by a factor of 8.
We can get an l2factor of 3 downscale out of the jpeglib. We can
reasonably downscale by a further l2factor of 3 manually. Any more
than that and we start to completely drop pixels without them
having any effect.
Therefore it's pointless us keeping any tiles around with l2factors
> 6.
Fix the bug (which was that we were using < instead of <=) and
update the value to a more reasonable one anyway.
|
|
In the quest for better mutool draw timings, make fz_outputs going
to /dev/null be represented by a NULL pointer.
Spot this in the output routines and just exit.
|
|
Simple PS wrapped images with flate compression.
|
|
Debian stable still ships with freetype 2.5.2. We normally wouldn't care,
but desktop java builds need to use the system freetype library as that's
what AWT links against.
|
|
|
|
A request for a .pkm file will produce the same as a pamcmyk4 does
on ghostscript. Ghostscripts pkmraw device does a 1bpp cmyk and
then converts to rgb as writing to ppm, but that seems silly.
|
|
|
|
|
|
To avoid having to duplicate a fairly large block of code several
times, use repeated inclusion of a header with some macros to
generate optimised glyph plotters.
|
|
We have optimised plotters for 2 and 4 components (i.e. greyscale
and rgb). Add equivalent ones for CMYK.
|
|
|
|
|
|
Thanks to Marcos for spotting the missing case.
|
|
In the current code, when we hit the fz_try(), we check to see
if we are about to overflow the exception stack. If we are,
we throw. This does NOT throw to the fz_catch following the
try, but rather to the enclosing fz_always/fz_catch blocks.
This can cause leaks, as it's very hard to code correctly.
It would be a far nicer behaviour to have a failure in fz_try()
cause us to throw to the immediately following fz_always/fz_catch.
This commit achieves that.
|
|
|
|
|
|
Neatness.
|
|
|
|
These work with MEMENTO_DETAILS to allow us to store the events where
reference counts change.
|
|
Previously this would overrun buffers in the pathological
case (ABBABBABB...). We now only break from literals to
runs for a run of at least 3 (except at the start).
|
|
Ensure we free buffers if we fail to malloc, and that we drop
the temporary buffer at the end of halftoning a pixmap.
|
|
At the moment we have the output file being opened in several
different places, leading to several different places
having to cope with the '-' handling.
Simplify the code so that files are only opened in 1 place.
|
|
To be moved into a new document writer interface later.
|
|
The loop is exclusive, but the clamp check was as if it were inclusive.
|
|
|
|
|
|
|
|
"Defined but not used" and "Set but not used" as seen with
ndk-build.
|
|
Add code to convert to and from fz_text_language codes from
ISO 639 language strings. No validation is carried out.
|
|
We move to using bidirectional "levels" throughout. This should
give us better behaviour vis-a-vis nested l2r/l2r text. This
also allows us to carry xps levels throughout with no loss of
information.
This also avoids the need to special case numbers.
We accordingly carry more information into fz_text.
As well as wmode, also hold additional details about the text spans.
We now include the directionality of the bidi level text (either as
derived from bidi code, or from the original document (e.g. xps)),
the directionality of text (as specified in the original document
(e.g. html)), and the language of the text (if specified in the
original document).
|
|
|
|
|
|
If built with MEMENTO_DETAILS (on by default), we store the
backtrace on every event that affects a block.
Memento_details(address) will display the events that affected
a block (typically malloc, {realloc}*, free), including the
backtrace at each point.
Windows and linux use different mechanisms for this. Windows
loads a DLL and calls windows specific functions - no extra
libraries are required.
Linux also loads a shared object (libbacktrace.so). This is not
present on all platforms, so on platforms where it is not available
we just get addresses. These can be converted using addr2line
(unless ASLR is enabled).
In order for linux to be able to load libbacktrace.so we link in
libdl. If this is not available, define HAVE_LIBDL=no when building
the memento target.
|
|
Add Memento_info(address) that will show the details of a block
(callstacks when it was allocatd, realloced, freed etc).
This works on MSVC and GNUC using two different methods.
|
|
Avoid searching the linked list of blocks in order to remove a
block by moving to a doubly linked list. This can be done
without increasing the amount of memory in use by making better
use of the 'parent' pointer that is only used when displaying
nested blocks.
Also store magic values in the 'child' and 'sibling' pointers
(again only used when displaying nested blocks) so that we
can quickly verify that a block is real before doing too much
with it.
Those changes drastically reduce the time required for
MEMENTO_LEAKONLY runs (now the same order of magnitude as non
memento runs).
Normal memento runs are still very slow when the numbers of
blocks increase due to the paranoid checking taking time.
To ameliorate this a bit, we try 2 other things.
Firstly, we optimise the searching of blocks by making use of
int aligned tests. This still doesn't make much difference.
Secondly, we introduce a new mechanism for the 'paranoia'
levels. If a negative number is given for the paranoia level
(say -n) then we first perform our overwrite checks after n events.
We next test after 2n events, then 4n, then 8n etc.
The new default paranoia level is set to be -1024.
This makes a huge difference, and brings normal memento runs
down to be comparable with debug runs.
|
|
|
|
Don't bale on the first 'large enough' match.
|
|
Guess paper sizes from bitmap dimensions unless the paper
size has been specified. If unknown, depending on the
properties of the printer, we'll either send a 'custom'
paper size (followed by the page size in decipoints), or
the next size up.
Depending on the capabilities of the printer, we can
optionally send orientation too.
|
|
Make sure all fz_fonts have a ft_buffer available.
|
|
|
|
|
|
|
|
Always ignore a line break immediately after an opening tag and
before a closing tag.
|
|
|
|
|
|
The scissor argument is an optional (potentially NULL) rectangle
that can give hints to devices about the area that can be scissored.
This is used by the draw device and display list device to minimize
the size of temporary clip mask buffers.
The scissor rectangle, if used, must have been transformed by the
current transform matrix.
|
|
|
|
Extraneous explicit type casts can mask errors, especially if a
function prototype or return value changes in the future.
|