]> granicus.if.org Git - libass/log
libass
12 years agoUpdate changelog
Grigori Goronzy [Mon, 15 Oct 2012 15:46:37 +0000 (17:46 +0200)]
Update changelog

12 years agoRevert "shaper: add UCDN support"
Grigori Goronzy [Mon, 15 Oct 2012 14:45:23 +0000 (16:45 +0200)]
Revert "shaper: add UCDN support"

This reverts commit 840ce4c2d9381e340c3239d104933fea85fff3e5.

Harfbuzz added UCDN support much quicker than I thought and the latest
release 0.9.5 contains UCDN already, so we don't need it in libass
anymore.

12 years agoshaper: improve skipping of zero-width characters
Grigori Goronzy [Mon, 1 Oct 2012 18:39:02 +0000 (20:39 +0200)]
shaper: improve skipping of zero-width characters

The list was somewhat incomplete. Add what's important and left, and
disable removal if HarfBuzz is used. HarfBuzz removes these characters
now by itself. Refactor a little into a separate function.

12 years agodrawing: scale pbo according to drawing scale
Grigori Goronzy [Mon, 1 Oct 2012 18:08:12 +0000 (20:08 +0200)]
drawing: scale pbo according to drawing scale

Fixes issue #68.

12 years agoFix change detection in a rare case
Grigori Goronzy [Mon, 1 Oct 2012 17:33:36 +0000 (19:33 +0200)]
Fix change detection in a rare case

If an empty track is passed to ass_render_frame, always set the
change detection value to 2 (content and positions changed). This is
acceptable in both the case that the previous call resulted in images
(obviously) and in the case that the previous call resulted in no
images (in that case the change detection result doesn't actually
matter).

12 years agoshaper: add UCDN support
Grigori Goronzy [Mon, 1 Oct 2012 15:37:00 +0000 (17:37 +0200)]
shaper: add UCDN support

Add explicit support for UCDN, without relying on any HarfBuzz
integration. This finally allows easy usage of HarfBuzz without glib,
ICU, or some other big bloated library!

12 years agoUpdate changelog
Grigori Goronzy [Mon, 1 Oct 2012 15:10:29 +0000 (17:10 +0200)]
Update changelog

12 years agoshaper: allow font encoding -1 for neutral base direction
Grigori Goronzy [Mon, 1 Oct 2012 15:05:18 +0000 (17:05 +0200)]
shaper: allow font encoding -1 for neutral base direction

12 years agoshaper: always use LTR base direction by default
Grigori Goronzy [Mon, 1 Oct 2012 13:53:32 +0000 (15:53 +0200)]
shaper: always use LTR base direction by default

Unfortunately, VSFilter always assumes LTR base direction. All existing
Arabic subtitles have been designed with that in mind. This causes
various issues, for instance punctuation placed at the wrong side of
a line.

We have no other choice than to use the same braindead always-LTR
assumption (except if overridden by the font encoding property).

12 years agoFix change detection when cache is cleared
wm4 [Sat, 29 Sep 2012 22:45:59 +0000 (00:45 +0200)]
Fix change detection when cache is cleared

check_cache_limits() clears the image list. If all subtitles disappear
right in the frame the cache has been cleared, ass_detect_change() will
see two empty image lists (old - not empty, but cleared, new - empty),
and signal to the application that there was no change. As result,
media players which rely on the change detection will keep displaying
the last subtitle until the next subtitle event.

This bug was found by uau and has been reported on IRC in February.

12 years agoAdd ass_set_line_position() API function for subtitle position
wm4 [Sat, 29 Sep 2012 20:24:01 +0000 (22:24 +0200)]
Add ass_set_line_position() API function for subtitle position

This allows users to change the vertical position of normal subtitles.
MPlayer has such a feature as -sub-pos option using its internal
subtitle renderer.

Bump LIBASS_VERSION to indicate the API addition.

12 years agoFix \fay when used with multiline subs
wm4 [Sat, 29 Sep 2012 20:12:17 +0000 (22:12 +0200)]
Fix \fay when used with multiline subs

When \fay tag is applied to a multiline sub, it causes subsequent lines
of the sub to be offset vertically as if it was rendered next to the
previous line (not below).

Patch by Hector Martin <hector@marcansoft.com>, with an additional
correction related to libass issue #46.

12 years agoFix issues with shearing in combination with scaling
wm4 [Sat, 29 Sep 2012 19:45:59 +0000 (21:45 +0200)]
Fix issues with shearing in combination with scaling

There are two problems.

First, the shearing tags (\fay and \fax) misbehave when used with
scaling tags (\fscx and \fscy). We have to compensate for the scaling
in either direction when shearing, because the shearing is applied
after scaling. VSFilter, which by definition has the correct behavior,
does it the other way around.

Second, libass doesn't scale smoothly when small font sizes are
involved. These can come either from downscaling (e.g. make the mplayer
window smaller than the video with a video output like gl or vdpau), or
from setting the font size manually. In these cases, the font size
passed to freetype get very low, so that rounding errors or size
adjustments due to hinting or other pixel grid fitting add up. The
result is text rendered in the wrong size, or "pulsating" text if the
font size depends on animated parameters. This is worsened by the
practice found in subtitle scripts to use tag combinations like
"\fscy2500\fs2" to get more precision for controlling font size (needed
because VSFilter doesn't read fractional scale values).

We solve the second issue by always requesting a constant font size
from freetype, and then scaling the resulting glyph to the desired
size. This seems to disable freetype's glyph fitting issue. The caveat
is that it (obviously) also disables hinting, which may result in worse
text quality. However, the combination of applying \fs and \fscx tags,
and animating them, seems to leave no other choice.

This fixes libass issue #46 (hopefully).

12 years agoTerminate drawings immediately on a \p0 tag
wm4 [Sat, 29 Sep 2012 19:31:23 +0000 (21:31 +0200)]
Terminate drawings immediately on a \p0 tag

The parsing code allowed override tags after \p0 to affect the drawing.
This is incorrect. Finish the drawing object as soon as \p0 is
encountered instead.

This requires moving the code executing the style overrides from
get_next_char() in ass_parse.c to the main render loop in
ass_renderer.c, because we have to re-enter the rendering loop
inside of a tag. The old code was simply executing all tags until
a new character could be returned to the renderer loop, mutating up
the state (RenderContext fields) for the drawing after the drawing
was closed, but before it was rendered.

This fixes libass issue #47.

12 years agoFix resetting border style with \rSTYLE
wm4 [Sat, 29 Sep 2012 19:27:55 +0000 (21:27 +0200)]
Fix resetting border style with \rSTYLE

With \rSTYLE, it is possible to change the border style within the same
subtitle event. You can do this by setting a different BorderStyle value
in the newly requested style. VSFilter handles this as expected, while
libass uses a single border style for the whole subtitle event.

This fixes libass issue #56.

12 years agoshaper: fix control character filtering
Grigori Goronzy [Fri, 18 May 2012 23:01:30 +0000 (01:01 +0200)]
shaper: fix control character filtering

Correct off-by-one error and add 0x200c-0x200f range. This range
is compromised of explicit direction and join marks.

Fixes issue 54
Fixes issue 55

12 years agoRefactor and fix border generation
Grigori Goronzy [Sat, 21 Apr 2012 01:52:54 +0000 (03:52 +0200)]
Refactor and fix border generation

Make sure to update the border appropriately in the second pass, after
parsing.

12 years agoSupport \rSTYLENAME syntax
Grigori Goronzy [Sun, 11 Mar 2012 05:04:59 +0000 (06:04 +0100)]
Support \rSTYLENAME syntax

This allows to reset to a certain style, instead of the default style
for the current line. For some reason, this was completely missing.

13 years agoLetter spacing is a per-cluster property
Grigori Goronzy [Sun, 2 Oct 2011 22:41:53 +0000 (00:41 +0200)]
Letter spacing is a per-cluster property

Layout refactoring broke letter spacing and always used the last valid
spacing specified for the whole line, which is of course wrong.
Letter-spacing is an inline property and can be different for each glyph
cluster. Add that property to GlyphInfo and use it to fix this
regression.

13 years agoBump version to 0.10.0 0.10.0
Grigori Goronzy [Sun, 25 Sep 2011 15:56:18 +0000 (17:56 +0200)]
Bump version to 0.10.0

13 years agoRemove unused code for bitmap runs
Grigori Goronzy [Sun, 25 Sep 2011 15:55:50 +0000 (17:55 +0200)]
Remove unused code for bitmap runs

They are going to be reintroduced later.

13 years agoUpdate changelog
Grigori Goronzy [Sun, 25 Sep 2011 15:52:17 +0000 (17:52 +0200)]
Update changelog

13 years agoautoconf: lowercase variables
Grigori Goronzy [Sun, 25 Sep 2011 01:19:39 +0000 (03:19 +0200)]
autoconf: lowercase variables

Use lowercase variable names to avoid bogus "possibly undefined macro"
errors.

13 years agotest: separate linker flags
Grigori Goronzy [Sun, 25 Sep 2011 01:18:29 +0000 (03:18 +0200)]
test: separate linker flags

Use separate linker flags for the test program to avoid unnecessarily
linking the libass library against libpng.

13 years agopkg-config: tailor libass.pc for static-only builds
Grigori Goronzy [Sun, 25 Sep 2011 00:18:20 +0000 (02:18 +0200)]
pkg-config: tailor libass.pc for static-only builds

Add library and package dependencies to the default (non-private)
pkg-config fields for static-only builds. This makes sure the packages
and libraries are always picked up and used, even if the --static option
is not supplied to the pkg-config commandline.

13 years agoharfbuzz: adjust to API change
Grigori Goronzy [Fri, 23 Sep 2011 23:17:16 +0000 (01:17 +0200)]
harfbuzz: adjust to API change

13 years agoFix x coordinates with PAR correction and left border
Grigori Goronzy [Mon, 29 Aug 2011 18:58:14 +0000 (20:58 +0200)]
Fix x coordinates with PAR correction and left border

This is a bit hacky, but I'm planning to rewrite positioning in a
much cleaner way. Addresses GC issue #27.

13 years agoharfbuzz: adjust to hb_buffer_t API change
Grigori Goronzy [Mon, 29 Aug 2011 18:22:37 +0000 (20:22 +0200)]
harfbuzz: adjust to hb_buffer_t API change

13 years agoAdd changelog for 0.10.0
Grigori Goronzy [Mon, 29 Aug 2011 17:26:32 +0000 (19:26 +0200)]
Add changelog for 0.10.0

13 years agoFix off-by-one error in \fad, \fade
Grigori Goronzy [Mon, 29 Aug 2011 17:15:31 +0000 (19:15 +0200)]
Fix off-by-one error in \fad, \fade

Typical greater vs. greater-or-equal case. This especially fixes fades
with zero delays. A zero delay in the two-argument form means no fade at
all, but previously this faded over a single frame, since the code used
"greater" semantics, while "greater or equal" is required here.

Notably, this avoids blinking/flickering in some tightly timed karaoke
scripts.

13 years agoFix drawing leak on cache hit
Grigori Goronzy [Mon, 29 Aug 2011 10:06:29 +0000 (12:06 +0200)]
Fix drawing leak on cache hit

This was introduced by the new cache code.

13 years agovertical: improve glyph positioning
Grigori Goronzy [Thu, 25 Aug 2011 01:48:18 +0000 (03:48 +0200)]
vertical: improve glyph positioning

It is a bit crazy, but for vertical layout the sTypoAscender and
sTypoDescender fields of the OS/2 table are supposed to be used for
determining the size of the ideographic EM box [1], so that glyphs
can be centered on the baseline more neatly.

With this change, vertical layout should be completely equal to
VSFilter.

[1] http://www.microsoft.com/typography/otspec150/os2.htm#sta

13 years agoharfbuzz: fix vertical advance
Grigori Goronzy [Thu, 25 Aug 2011 01:45:54 +0000 (03:45 +0200)]
harfbuzz: fix vertical advance

Make sure to use vertical advance under the right conditions -
vertical font selected, requested glyph is non-latin.

13 years agoNicer initialization messages
Grigori Goronzy [Sun, 21 Aug 2011 22:38:34 +0000 (00:38 +0200)]
Nicer initialization messages

Adjust the renderer initialization messages and get rid of a rather
useless message, FreeType headers version.

13 years agoopaque box: avoid unnecessary outline copy
Grigori Goronzy [Sun, 21 Aug 2011 22:21:50 +0000 (00:21 +0200)]
opaque box: avoid unnecessary outline copy

It's faster and easier to just create a new outline, than to copy it,
free it, and create a new one. The old glyph-based code needed to do
this since it's not possible to create a glyph "from scratch".

13 years agoFix and simplify opaque box border
Grigori Goronzy [Sun, 21 Aug 2011 22:17:45 +0000 (00:17 +0200)]
Fix and simplify opaque box border

Make sure to pass the correct advance and ascender/descender to the
opaque box creation function. We can also simplify this a bit as we
do not need to check if it's a glyph or drawing anymore.

13 years agoDeterministic bitmap loading
Grigori Goronzy [Mon, 15 Aug 2011 15:28:13 +0000 (17:28 +0200)]
Deterministic bitmap loading

This is similar to the earlier change, but for bitmaps.

13 years agoDeterministic outline glyph loading
Grigori Goronzy [Wed, 10 Aug 2011 06:57:02 +0000 (08:57 +0200)]
Deterministic outline glyph loading

Make sure to always load and process outlines the same way, no matter if
cached or not.

13 years agoAdd compile time switch for HarfBuzz support
Grigori Goronzy [Sun, 7 Aug 2011 23:09:24 +0000 (01:09 +0200)]
Add compile time switch for HarfBuzz support

Now that it's possible to switch shapers at runtime, it also becomes a
lot easier to disable them at compile time. Add ifdefs and build system
changes so that HarfBuzz can be safely disabled. It's autodetected now
and enabled if available.

This shuffles a bit of code around, but there are no functional changes.

Note that FriBidi remains mandatory for the time being, but this
shouldn't pose any problems, since it is a small and very portable
library without any special dependencies.

13 years agoRuntime shaper selection
Grigori Goronzy [Sun, 7 Aug 2011 22:22:32 +0000 (00:22 +0200)]
Runtime shaper selection

Add an API call, ass_set_shaper, and infrastructure to make shapers
selectable at runtime. Currently, this allows to switch between two
shapers: a SIMPLE shaper that maps to FriBidi and a COMPLEX shaper that
maps to HarfBuzz.

13 years agoAdjust italic to non-italic style spacing
Grigori Goronzy [Sat, 6 Aug 2011 18:06:54 +0000 (20:06 +0200)]
Adjust italic to non-italic style spacing

Previously, the space added was quite a lot, since it was calculated so
that it would be enough to accommodate a heavily FreeType-slanted glyph
in the worst case. In many cases this was too much spacing, especially
if the italic font was only slightly angled.

The new fix simply ensures that the glyph is inside the bounds of the
advance.

13 years agoRemove a bunch of debug printf calls
Grigori Goronzy [Thu, 4 Aug 2011 21:52:27 +0000 (23:52 +0200)]
Remove a bunch of debug printf calls

Shaping works well now, they aren't needed anymore.

13 years agoSupport language hint in the Script Info section
Grigori Goronzy [Mon, 1 Aug 2011 13:51:27 +0000 (15:51 +0200)]
Support language hint in the Script Info section

Parse a hint in the form "Language: xx" with xx being an ISO 639-1
language code, and pass it to HarfBuzz. This can be useful to render
scripts with language-specific character variants.

13 years agoharfbuzz: cache glyph metrics
Grigori Goronzy [Fri, 29 Jul 2011 02:21:48 +0000 (04:21 +0200)]
harfbuzz: cache glyph metrics

HarfBuzz' FreeType font functions do not cache anything and call
FT_Load_Glyph all the time, which can be slow. Add a cache for metrics
and use it with custom font functions.

13 years agoFix crash in ass_set_style_overrides
Grigori Goronzy [Thu, 28 Jul 2011 21:58:12 +0000 (23:58 +0200)]
Fix crash in ass_set_style_overrides

Set pointer to the style overrides to NULL to make sure a freed buffer
will not be accessed anymore later. Reported by uau.

13 years agoAxe misleading comment, reordering works fine
Grigori Goronzy [Sun, 24 Jul 2011 22:17:18 +0000 (00:17 +0200)]
Axe misleading comment, reordering works fine

13 years agoDisable reordering of non-spacing marks
Grigori Goronzy [Sun, 24 Jul 2011 22:00:53 +0000 (00:00 +0200)]
Disable reordering of non-spacing marks

FriBidi's line reordering algorithm reorders non-spacing marks
(diacritics, etc.) to come after the base character by default. This
doesn't work particularly well with our layout model and leads to
wrongly positioned marks in some cases with HarfBuzz and all cases
with FriBidi shaping.

13 years agoDon't extend face runs as much as possible
Grigori Goronzy [Thu, 21 Jul 2011 23:55:09 +0000 (01:55 +0200)]
Don't extend face runs as much as possible

This leads to fewer shaping runs, but has many unwanted side effects.

13 years agoUpdate HarfBuzz' font metrics
Grigori Goronzy [Thu, 21 Jul 2011 23:54:00 +0000 (01:54 +0200)]
Update HarfBuzz' font metrics

13 years agoHack: return a valid face index even if no glyph is found
Grigori Goronzy [Sun, 17 Jul 2011 16:38:31 +0000 (18:38 +0200)]
Hack: return a valid face index even if no glyph is found

Temporary fix for a crash when a font face doesn't actually contain
the glyph that fontconfig reports. Needs a real solution.

13 years agoFix crash with FreeType's updated stroker
Grigori Goronzy [Sun, 17 Jul 2011 15:43:55 +0000 (17:43 +0200)]
Fix crash with FreeType's updated stroker

The new revision of the stroker in FreeType doesn't like the way
contours are zero-filled to disable them. It's not particularly clean
anyway, so rewrite the whole outline instead.

13 years agoFix line counting and breaking
Grigori Goronzy [Sun, 17 Jul 2011 11:53:29 +0000 (13:53 +0200)]
Fix line counting and breaking

Make sure to increment the line counter only if the offset of the new
line is actually legal and inside the bounds of the text size. Fixes
random crashes in case the last symbol of the line is a break.

git-blame says it's Evgeniys fault, it wasn't caused by the recent
layout changes.

13 years agoSet requested font face correctly
Grigori Goronzy [Sat, 16 Jul 2011 01:13:26 +0000 (03:13 +0200)]
Set requested font face correctly

13 years agoRemove unused variable
Grigori Goronzy [Sat, 16 Jul 2011 01:12:16 +0000 (03:12 +0200)]
Remove unused variable

13 years agoshaper: fix run-specific font size
Grigori Goronzy [Sat, 16 Jul 2011 01:00:41 +0000 (03:00 +0200)]
shaper: fix run-specific font size

Make sure to set the font size for every run, as needed, to get metrics
(advance/offset) for the right size.

13 years agotest: free image
Grigori Goronzy [Thu, 14 Jul 2011 22:52:21 +0000 (00:52 +0200)]
test: free image

Reduces the noise in valgrind output.

13 years agoCache HarfBuzz fonts
Grigori Goronzy [Thu, 14 Jul 2011 22:49:50 +0000 (00:49 +0200)]
Cache HarfBuzz fonts

Add a new opaque data structure to store shaper-specific font data in
an ASS_Font. At the moment, this is used for caching HarfBuzz fonts,
to reduce allocation and font initialization overhead.

13 years agoRevert @font ascender/descender hack
Grigori Goronzy [Thu, 14 Jul 2011 18:49:44 +0000 (20:49 +0200)]
Revert @font ascender/descender hack

This was introduced with commit e051ab.  After re-evaluation, it
seems to be rather wrong. Windows appears to use the same ascender
as horizontal rendering, except for the first line. We don't have this
special handling of the first line, but apart from that, everything is
similar to Windows now. Verified with a couple of popular CJK fonts,
such as MS Mincho, Meiryo, etc.

13 years agoUse the "font encoding" property as a base direction hint
Grigori Goronzy [Wed, 13 Jul 2011 22:01:11 +0000 (00:01 +0200)]
Use the "font encoding" property as a base direction hint

ASS specifies a "font encoding", both in the styles as well as with
the \fe override tag. This font encoding is very Windows-specific
and libass doesn't use it for charmap matching or anything like
that. However, it can be useful for hinting the base direction of
text. Make Hebrew and Arabic encodings switch to RTL base direction,
other languages to LTR and use neutral base direction for the
autodetect setting.

13 years agoRestore italic to non-italic transition layout fix
Grigori Goronzy [Wed, 13 Jul 2011 20:53:31 +0000 (22:53 +0200)]
Restore italic to non-italic transition layout fix

13 years agoDisable currently unused bitmap run code
Grigori Goronzy [Wed, 13 Jul 2011 20:39:36 +0000 (22:39 +0200)]
Disable currently unused bitmap run code

13 years agoAdd kerning toggle for HarfBuzz shaping
Grigori Goronzy [Wed, 13 Jul 2011 20:37:23 +0000 (22:37 +0200)]
Add kerning toggle for HarfBuzz shaping

Make the "Kerning" track property toggle the OpenType feature "kern".
The old TrueType kerning code won't come back.

13 years agoEnable vert/vkna features for @font vertical text
Grigori Goronzy [Wed, 13 Jul 2011 20:32:00 +0000 (22:32 +0200)]
Enable vert/vkna features for @font vertical text

Set up a feature list and toggles these features as needed. The "vert"
feature enables vertical glyph variants in general, while "vkna"
additionally enables vertical variants for Kana.

13 years agoFix layout with fsp/fay features enabled
Grigori Goronzy [Wed, 13 Jul 2011 20:03:57 +0000 (22:03 +0200)]
Fix layout with fsp/fay features enabled

13 years agoIntroduce ASS_Shaper object
Grigori Goronzy [Wed, 13 Jul 2011 19:52:23 +0000 (21:52 +0200)]
Introduce ASS_Shaper object

Encapsulate all data related to shaping into this new object and migrate
all shaping-related code to it. The object is long-living; arrays are
allocated only once and then grown as needed.

13 years agoVarious small fixes to HarfBuzz rendering
Grigori Goronzy [Tue, 12 Jul 2011 13:19:17 +0000 (15:19 +0200)]
Various small fixes to HarfBuzz rendering

Handle advance of clusters correctly, fix drawings, calculate run
direction correctly, fix y offset sign.

13 years agoSupport glyph clusters of multiple glyphs
Grigori Goronzy [Mon, 11 Jul 2011 18:35:16 +0000 (20:35 +0200)]
Support glyph clusters of multiple glyphs

Sometimes a glyph cluster resolves to multiple glyphs, for example when
diacritics are used with Arabic script. This doesn't map well to the
list of glyphs expected by libass.

Extend the glyph list to a list of singly-linked glyph clusters of
glyphs and adapt the renderer to support this.

13 years agoHarfBuzz shaping support
Grigori Goronzy [Mon, 11 Jul 2011 11:00:08 +0000 (13:00 +0200)]
HarfBuzz shaping support

Split up text into runs with the same direction, font face and font
size, shape these runs with HarfBuzz and reorder accordingly.

This noticeably improves Arabic shaping and should make shaping for many
other scripts work. HarfBuzz also does kerning for Latin text.

13 years agoAdd HarfBuzz checks to build system
Grigori Goronzy [Sun, 10 Jul 2011 18:25:35 +0000 (20:25 +0200)]
Add HarfBuzz checks to build system

13 years agoSeparate glyph font face matching and glyph loading
Grigori Goronzy [Sun, 10 Jul 2011 02:08:55 +0000 (04:08 +0200)]
Separate glyph font face matching and glyph loading

Split up ass_font_get_glyph into two functions: one function matches
checks the fonts for support of the requested codepoint and returns
a face_index and glyph_index to later load the glyph, with a second
function.

This approach is very useful for shaping, which needs to be done
on runs with the same font face and font size and changes the
glyph_index.

13 years agoHook up FriBidi's simple Arabic shaper
Grigori Goronzy [Sun, 10 Jul 2011 00:25:24 +0000 (02:25 +0200)]
Hook up FriBidi's simple Arabic shaper

Use FriBidi's shaper not only for mirroring, but also for simplified
Arabic shaping.

13 years agoFix bitmap cache
Grigori Goronzy [Sat, 9 Jul 2011 23:53:09 +0000 (01:53 +0200)]
Fix bitmap cache

Pass the *complete* hash key to the cache handling functions, not
only the outline-specific subkey. This mistake completely stopped
the cache from actually working and resulted in great slowdown!

13 years agoReorder positions for "Banner" effect text
Grigori Goronzy [Sat, 9 Jul 2011 22:38:12 +0000 (00:38 +0200)]
Reorder positions for "Banner" effect text

Events that use the "Banner" effect have different wrapping/breaking
handling (none at all, to be exact) and need special treatment to
make reordering work.

13 years agoRedesign horizontal alignment calculations for bidi
Grigori Goronzy [Sat, 9 Jul 2011 20:04:01 +0000 (22:04 +0200)]
Redesign horizontal alignment calculations for bidi

The line alignment code determined the first and last glyph in a
line and calculated the distance from that. This is rather arcane
and doesn't easily work with bidi. Redesign the algorithm to simply
add together all individual character widths instead.

13 years agoFix coordinates after repositioning
Grigori Goronzy [Fri, 8 Jul 2011 17:05:14 +0000 (19:05 +0200)]
Fix coordinates after repositioning

13 years agoshaper: always use neutral base direction
Grigori Goronzy [Fri, 8 Jul 2011 16:32:16 +0000 (18:32 +0200)]
shaper: always use neutral base direction

13 years agoshaper: print version info string
Grigori Goronzy [Wed, 6 Jul 2011 21:37:01 +0000 (23:37 +0200)]
shaper: print version info string

13 years agoProvisional bidi and shaping support
Grigori Goronzy [Wed, 6 Jul 2011 21:19:54 +0000 (23:19 +0200)]
Provisional bidi and shaping support

Adds fully working bidirectional text and simple shaping support.
The following works:
- bidirectional text according to the Unicode Bidirectional Algorithm
- simple shaper for mirrored forms (brackets, etc.) according to
  rule L4 of the Unicode Bidirectional Algorithm
- reordering into visual order with correct line wrapping

However, the implementation certainly needs efficiency improvements
(caching, less malloc'ing), a proper shaper (HarfBuzz) needs to be
hooked up and various bugs with karaoke and positioning need to be
fixed.

13 years agoFix cache leak
Grigori Goronzy [Wed, 6 Jul 2011 20:47:56 +0000 (22:47 +0200)]
Fix cache leak

Fixes a leak introduced with the new cache functions, caused by wrong
pointer usage.

13 years agoAdd FriBidi checks to build system
Grigori Goronzy [Mon, 4 Jul 2011 13:39:21 +0000 (15:39 +0200)]
Add FriBidi checks to build system

13 years agoSeparate event parsing and layout
Grigori Goronzy [Mon, 4 Jul 2011 13:19:40 +0000 (15:19 +0200)]
Separate event parsing and layout

Split up the combined event parsing and layout loop into two passes.
State information needed for layout are duplicated in GlyphInfo
structures.

13 years agoRemove unused struct member
Grigori Goronzy [Mon, 4 Jul 2011 11:10:58 +0000 (13:10 +0200)]
Remove unused struct member

13 years agoIntroduce bitmap runs
Grigori Goronzy [Mon, 4 Jul 2011 10:59:11 +0000 (12:59 +0200)]
Introduce bitmap runs

Prepare for run-based rendering. In the parser, increment a run id
according to relevant style changes (color, border, shadow, etc.) to
mark the points where a new bitmap needs to be started. Modify the line
wrapper to increment the run ids of each glyph after a break.
Add functions to calculate the render size of runs for rasterization.

13 years agoFix box blur for non-bordered outlines
Grigori Goronzy [Mon, 4 Jul 2011 08:06:02 +0000 (10:06 +0200)]
Fix box blur for non-bordered outlines

This horrible bug was introduced by commit c13cb2.

Pointed out by uau.

13 years agoFix: VSFilter compat: don't render shadow when glyph/border invisible
Grigori Goronzy [Mon, 4 Jul 2011 08:00:33 +0000 (10:00 +0200)]
Fix: VSFilter compat: don't render shadow when glyph/border invisible

Use the alpha channel, not the red channel. Fixes commit f92830.

Original patch by lachs0r.

13 years agoCache ascender/descender
Grigori Goronzy [Fri, 1 Jul 2011 01:13:22 +0000 (03:13 +0200)]
Cache ascender/descender

Cache ascender/descender so they don't have to be queried every frame
for every glyph. This also makes it possible to more uniformly handle
drawings and glyphs.

13 years agoRemove unused hash key item
Grigori Goronzy [Tue, 28 Jun 2011 19:02:09 +0000 (21:02 +0200)]
Remove unused hash key item

13 years agoFix stride support in vector clips
Grigori Goronzy [Mon, 27 Jun 2011 19:07:50 +0000 (21:07 +0200)]
Fix stride support in vector clips

13 years agocache: unified bitmap cache
Grigori Goronzy [Mon, 27 Jun 2011 19:04:12 +0000 (21:04 +0200)]
cache: unified bitmap cache

Similarly to the glyph cache, subclass the bitmap cache to allow both
outline bitmaps and clipping mask bitmaps to coexist in the same cache
in a much cleaner way.

13 years agocache: use outline-bitmap hierarchy to slim down bitmap hash key
Grigori Goronzy [Mon, 27 Jun 2011 18:10:45 +0000 (20:10 +0200)]
cache: use outline-bitmap hierarchy to slim down bitmap hash key

The bitmap hash key duplicated a lot of information the glyph hash
key already saves. The subclassing introduced recently complicates
this even more. Modify the hash key to utilize a pointer to the glyph
hash value instead, which is faster and more flexible. Make sure to
always empty the bitmap cache when the glyph cache is emptied.

13 years agocache: safer ass_cache_stats
Grigori Goronzy [Mon, 27 Jun 2011 17:52:53 +0000 (19:52 +0200)]
cache: safer ass_cache_stats

13 years agocache: fix size tracking and emptying
Grigori Goronzy [Mon, 27 Jun 2011 17:42:56 +0000 (19:42 +0200)]
cache: fix size tracking and emptying

13 years agocache: unified outline cache for glyphs/drawings
Grigori Goronzy [Mon, 27 Jun 2011 00:17:10 +0000 (02:17 +0200)]
cache: unified outline cache for glyphs/drawings

Glyphs and drawings have wildly different hash keys. Subclass the hash
keys of glyphs and drawings in a new, unified outline cache. This also
fixes some issues with drawings in the glyph cache. Now, the textual
description of the drawing is included in the key (the hash value isn't
really good enough, especially not fnv32) and the baseline offset is
saved as well.

13 years agoRemove outdated comment
Grigori Goronzy [Sun, 26 Jun 2011 09:41:06 +0000 (11:41 +0200)]
Remove outdated comment

13 years agobitmap: add stride
Grigori Goronzy [Sun, 26 Jun 2011 03:44:52 +0000 (05:44 +0200)]
bitmap: add stride

Add stride support to the basic bitmap type used for low-level
rasterization.

13 years agoClean up includes
Grigori Goronzy [Tue, 21 Jun 2011 17:13:35 +0000 (19:13 +0200)]
Clean up includes

13 years agoRemove unused function
Grigori Goronzy [Tue, 21 Jun 2011 17:06:55 +0000 (19:06 +0200)]
Remove unused function

13 years agoUse bare outlines for drawings
Grigori Goronzy [Mon, 20 Jun 2011 21:12:22 +0000 (23:12 +0200)]
Use bare outlines for drawings

This finally gets rid of the nasty hack that manipulated a glyph
we somehow got from FreeType. Simplifies drawing handling a bit and
decouples drawing code from all font handling and related (fontconfig,
etc.) code.

13 years agoConvert outline processing and caching from glyphs to bare outlines
Grigori Goronzy [Mon, 20 Jun 2011 20:50:34 +0000 (22:50 +0200)]
Convert outline processing and caching from glyphs to bare outlines

This introduces functions to use and copy pointered outline objects
easily and uses these instead of glyphs everywhere.

Previously the glyph cache was abused for caching vector clipping masks,
but this isn't possible anymore (nor desirable), thus vector clipping
cache has been disabled for the moment.

13 years agoConvert to high-level rasterizer parts to outlines
Grigori Goronzy [Wed, 15 Jun 2011 00:04:18 +0000 (02:04 +0200)]
Convert to high-level rasterizer parts to outlines

This covers rasterization, filtering and blending for one
render item.