diff options
author | Akira Kakuto <kakuto@fuk.kindai.ac.jp> | 2020-05-26 13:45:50 +0000 |
---|---|---|
committer | Akira Kakuto <kakuto@fuk.kindai.ac.jp> | 2020-05-26 13:45:50 +0000 |
commit | 95dab9ef64f420895624c06271b979db7921c4bb (patch) | |
tree | 922b9b64b01a45779a2136c4d92cdcd9e5e2ca7a /Build/source/texk/dvipdfm-x/dvi.c | |
parent | 457a90e694e2f34e326a87dbeadec7feac4fad0e (diff) |
dvipdfm-x: introduce rgba_used in order to indicate that rgba_color
for a XeTeX native font is used or not. It enables full range of opacity, 0-255.
git-svn-id: svn://tug.org/texlive/trunk@55284 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/dvipdfm-x/dvi.c')
-rw-r--r-- | Build/source/texk/dvipdfm-x/dvi.c | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/Build/source/texk/dvipdfm-x/dvi.c b/Build/source/texk/dvipdfm-x/dvi.c index 51bc5533d4a..9ddc759bae3 100644 --- a/Build/source/texk/dvipdfm-x/dvi.c +++ b/Build/source/texk/dvipdfm-x/dvi.c @@ -147,6 +147,10 @@ static struct loaded_font spt_t size; int source; /* Source is either DVI or VF */ uint32_t rgba_color; + uint8_t rgba_used; + /* Indicates that rgba_color is used or not. + * It enables full range of opacity: 0-255. + */ int xgs_id; /* Transparency ExtGState */ struct tt_longMetrics *hvmt; int ascent; @@ -180,6 +184,10 @@ static struct font_def int used; int native; /* boolean */ uint32_t rgba_color; /* only used for native fonts in XeTeX */ + uint8_t rgba_used; + /* Indicates that rgba_color is used or not. + * It enables full range of opacity: 0-255. + */ uint32_t face_index; int layout_dir; /* 1 = vertical, 0 = horizontal */ int extend; @@ -554,6 +562,7 @@ read_font_record (int32_t tex_id) def_fonts[num_def_fonts].used = 0; def_fonts[num_def_fonts].native = 0; def_fonts[num_def_fonts].rgba_color = 0xffffffff; + def_fonts[num_def_fonts].rgba_used = 0; def_fonts[num_def_fonts].face_index = 0; def_fonts[num_def_fonts].layout_dir = 0; def_fonts[num_def_fonts].extend = 0x00010000; /* 1.0 */ @@ -599,6 +608,7 @@ read_native_font_record (int32_t tex_id) def_fonts[num_def_fonts].layout_dir = 0; def_fonts[num_def_fonts].rgba_color = 0xffffffff; + def_fonts[num_def_fonts].rgba_used = 0; def_fonts[num_def_fonts].extend = 0x00010000; def_fonts[num_def_fonts].slant = 0; def_fonts[num_def_fonts].embolden = 0; @@ -606,8 +616,10 @@ read_native_font_record (int32_t tex_id) if (flags & XDV_FLAG_VERTICAL) def_fonts[num_def_fonts].layout_dir = 1; - if (flags & XDV_FLAG_COLORED) - def_fonts[num_def_fonts].rgba_color = get_unsigned_quad(dvi_file); + if (flags & XDV_FLAG_COLORED) { + def_fonts[num_def_fonts].rgba_color = get_unsigned_quad(dvi_file); + def_fonts[num_def_fonts].rgba_used = 1; + } if (flags & XDV_FLAG_EXTEND) def_fonts[num_def_fonts].extend = get_signed_quad(dvi_file); @@ -1492,8 +1504,9 @@ do_fnt (int32_t tex_id) def_fonts[i].point_size); } loaded_fonts[font_id].rgba_color = def_fonts[i].rgba_color; - /* Opacity: 0xff is fully opaque. */ - if ((loaded_fonts[font_id].rgba_color & 0xff) == 0xff) { + loaded_fonts[font_id].rgba_used = def_fonts[i].rgba_used; + /* if rgba_used == 0, not a colored font */ + if (loaded_fonts[font_id].rgba_used == 0) { loaded_fonts[font_id].xgs_id = -1; } else { pdf_obj *xgs_dict; @@ -1716,7 +1729,7 @@ do_glyphs (int do_actual_text) yloc[i] = get_buffered_signed_quad(); } - if (font->rgba_color != 0xffffffff) { + if (font->rgba_used == 1) { pdf_color color; pdf_color_rgbcolor(&color, (double)((unsigned char)(font->rgba_color >> 24) & 0xff) / 255, @@ -1787,7 +1800,7 @@ do_glyphs (int do_actual_text) glyph_width, font->font_id, -1); } - if (font->rgba_color != 0xffffffff) { + if (font->rgba_used == 1) { if (font->xgs_id >= 0) { graphics_mode(); pdf_dev_grestore(); |