summaryrefslogtreecommitdiff
path: root/Build/source/texk/dvipdfm-x/dvi.c
diff options
context:
space:
mode:
authorAkira Kakuto <kakuto@fuk.kindai.ac.jp>2020-05-26 13:45:50 +0000
committerAkira Kakuto <kakuto@fuk.kindai.ac.jp>2020-05-26 13:45:50 +0000
commit95dab9ef64f420895624c06271b979db7921c4bb (patch)
tree922b9b64b01a45779a2136c4d92cdcd9e5e2ca7a /Build/source/texk/dvipdfm-x/dvi.c
parent457a90e694e2f34e326a87dbeadec7feac4fad0e (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.c25
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();