xref: /plan9/sys/src/cmd/gs/src/gsrop.c (revision 593dc095aefb2a85c828727bbfa9da139a49bdf4)
1 /* Copyright (C) 1995, 1996, 1998 Aladdin Enterprises.  All rights reserved.
2 
3   This software is provided AS-IS with no warranty, either express or
4   implied.
5 
6   This software is distributed under license and may not be copied,
7   modified or distributed except as expressly authorized under the terms
8   of the license contained in the file LICENSE in this distribution.
9 
10   For more information about licensing, please refer to
11   http://www.ghostscript.com/licensing/. For information on
12   commercial licensing, go to http://www.artifex.com/licensing/ or
13   contact Artifex Software, Inc., 101 Lucas Valley Road #110,
14   San Rafael, CA  94903, U.S.A., +1(415)492-9861.
15 */
16 
17 /* $Id: gsrop.c,v 1.4 2002/02/21 22:24:52 giles Exp $ */
18 /* RasterOp / transparency accessing for library */
19 #include "gx.h"
20 #include "gserrors.h"
21 #include "gzstate.h"
22 #include "gsrop.h"
23 
24 /* setrasterop */
25 int
gs_setrasterop(gs_state * pgs,gs_rop3_t rop)26 gs_setrasterop(gs_state * pgs, gs_rop3_t rop)
27 {
28     if (pgs->in_cachedevice)
29 	return_error(gs_error_undefined);
30     pgs->log_op = (rop & rop3_1) | (pgs->log_op & ~rop3_1);
31     return 0;
32 }
33 
34 /* currentrasterop */
35 gs_rop3_t
gs_currentrasterop(const gs_state * pgs)36 gs_currentrasterop(const gs_state * pgs)
37 {
38     return lop_rop(pgs->log_op);
39 }
40 
41 /* setsourcetransparent */
42 int
gs_setsourcetransparent(gs_state * pgs,bool transparent)43 gs_setsourcetransparent(gs_state * pgs, bool transparent)
44 {
45     if (pgs->in_cachedevice)
46 	return_error(gs_error_undefined);
47     pgs->log_op =
48 	(transparent ? pgs->log_op | lop_S_transparent :
49 	 pgs->log_op & ~lop_S_transparent);
50     return 0;
51 }
52 
53 /* currentsourcetransparent */
54 bool
gs_currentsourcetransparent(const gs_state * pgs)55 gs_currentsourcetransparent(const gs_state * pgs)
56 {
57     return (pgs->log_op & lop_S_transparent) != 0;
58 }
59 
60 /* settexturetransparent */
61 int
gs_settexturetransparent(gs_state * pgs,bool transparent)62 gs_settexturetransparent(gs_state * pgs, bool transparent)
63 {
64     if (pgs->in_cachedevice)
65 	return_error(gs_error_undefined);
66     pgs->log_op =
67 	(transparent ? pgs->log_op | lop_T_transparent :
68 	 pgs->log_op & ~lop_T_transparent);
69     return 0;
70 }
71 
72 /* currenttexturetransparent */
73 bool
gs_currenttexturetransparent(const gs_state * pgs)74 gs_currenttexturetransparent(const gs_state * pgs)
75 {
76     return (pgs->log_op & lop_T_transparent) != 0;
77 }
78 
79 /* Save/restore logical operation.  (For internal use only.) */
80 int
gs_set_logical_op(gs_state * pgs,gs_logical_operation_t lop)81 gs_set_logical_op(gs_state * pgs, gs_logical_operation_t lop)
82 {
83     pgs->log_op = lop;
84     return 0;
85 }
86 gs_logical_operation_t
gs_current_logical_op(const gs_state * pgs)87 gs_current_logical_op(const gs_state * pgs)
88 {
89     return pgs->log_op;
90 }
91