~ubuntu-branches/ubuntu/oneiric/ghostscript/oneiric

« back to all changes in this revision

Viewing changes to base/gscolor.c

  • Committer: Bazaar Package Importer
  • Author(s): Till Kamppeter
  • Date: 2011-07-15 16:49:55 UTC
  • mfrom: (1.1.23 upstream)
  • Revision ID: james.westby@ubuntu.com-20110715164955-uga6qibao6kez05c
Tags: 9.04~dfsg~20110715-0ubuntu1
* New upstream release
   - GIT snapshot from Jult, 12 2011.
* debian/patches/020110406~a54df2d.patch,
  debian/patches/020110408~0791cc8.patch,
  debian/patches/020110408~507cbee.patch,
  debian/patches/020110411~4509a49.patch,
  debian/patches/020110412~78bb9a6.patch,
  debian/patches/020110418~a05ab8a.patch,
  debian/patches/020110420~20b6c78.patch,
  debian/patches/020110420~4ddefa2.patch: Removed upstream patches.
* debian/rules: Generate ABI version number (variable "abi") correctly,
  cutting off repackaging and pre-release parts.
* debian/rules: Added ./lcms2/ directory to DEB_UPSTREAM_REPACKAGE_EXCLUDES.
* debian/copyright: Added lcms2/* to the list of excluded files.
* debian/symbols.common: Updated for new upstream source. Applied patch
  which dpkg-gensymbols generated for debian/libgs9.symbols to this file.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/* Copyright (C) 2001-2006 Artifex Software, Inc.
2
2
   All Rights Reserved.
3
 
  
 
3
 
4
4
   This software is provided AS-IS with no warranty, either express or
5
5
   implied.
6
6
 
11
11
   San Rafael, CA  94903, U.S.A., +1(415)492-9861, for further information.
12
12
*/
13
13
 
14
 
/* $Id: gscolor.c 11306 2010-05-24 16:31:58Z mvrhel $ */
 
14
/* $Id$ */
15
15
/* Color and halftone operators for Ghostscript library */
16
16
#include "gx.h"
17
17
#include "gserrors.h"
33
33
public_st_transfer_map();
34
34
 
35
35
/* GC procedures */
36
 
static 
 
36
static
37
37
ENUM_PTRS_WITH(transfer_map_enum_ptrs, gx_transfer_map *mptr) return 0;
38
38
case 0: ENUM_RETURN((mptr->proc == 0 ? mptr->closure.data : 0));
39
39
ENUM_PTRS_END
40
40
static RELOC_PTRS_WITH(transfer_map_reloc_ptrs, gx_transfer_map *mptr)
41
41
{
42
42
    if (mptr->proc == 0)
43
 
        RELOC_PTR(gx_transfer_map, closure.data);
 
43
        RELOC_PTR(gx_transfer_map, closure.data);
44
44
}
45
45
RELOC_PTRS_END
46
46
 
92
92
/* Null reference count adjustment procedure. */
93
93
void
94
94
gx_no_adjust_color_count(const gs_client_color * pcc,
95
 
                         const gs_color_space * pcs, int delta)
 
95
                         const gs_color_space * pcs, int delta)
96
96
{
97
97
}
98
98
 
108
108
 
109
109
    pcs = gs_cspace_new_DeviceGray(pgs->memory);
110
110
    if (pcs == NULL)
111
 
        return_error(gs_error_VMerror);
 
111
        return_error(gs_error_VMerror);
112
112
    if ((code = gs_setcolorspace(pgs, pcs)) >= 0) {
113
113
        gs_client_color *pcc = gs_currentcolor_inline(pgs);
114
114
 
130
130
 
131
131
    pcs = gs_cspace_new_DeviceRGB(pgs->memory);
132
132
    if (pcs == NULL)
133
 
        return_error(gs_error_VMerror);
 
133
        return_error(gs_error_VMerror);
134
134
    if ((code = gs_setcolorspace(pgs, pcs)) >= 0) {
135
135
       gs_client_color *pcc = gs_currentcolor_inline(pgs);
136
136
 
145
145
    return code;
146
146
}
147
147
 
148
 
 
149
148
/* setnullcolor */
150
149
int
151
150
gs_setnullcolor(gs_state * pgs)
152
151
{
153
152
    if (pgs->in_cachedevice)
154
 
        return_error(gs_error_undefined);
 
153
        return_error(gs_error_undefined);
155
154
    gs_setgray(pgs, 0.0);       /* set color space to something harmless */
156
155
    color_set_null(gs_currentdevicecolor_inline(pgs));
157
156
    return 0;
178
177
    rc_decrement(ptran->green, "gs_settransfer");
179
178
    rc_decrement(ptran->blue, "gs_settransfer");
180
179
    rc_unshare_struct(ptran->gray, gx_transfer_map, &st_transfer_map,
181
 
                      pgs->memory, goto fail, "gs_settransfer");
 
180
                      pgs->memory, goto fail, "gs_settransfer");
182
181
    ptran->gray->proc = tproc;
183
182
    ptran->gray->id = gs_next_ids(pgs->memory, 1);
184
183
    ptran->red = 0;
185
184
    ptran->green = 0;
186
185
    ptran->blue = 0;
187
186
    if (remap) {
188
 
        load_transfer_map(pgs, ptran->gray, 0.0);
189
 
        gx_set_effective_transfer(pgs);
190
 
        gx_unset_dev_color(pgs);
 
187
        load_transfer_map(pgs, ptran->gray, 0.0);
 
188
        gx_set_effective_transfer(pgs);
 
189
        gx_unset_dev_color(pgs);
191
190
    } else
192
 
        gx_set_effective_transfer(pgs);
 
191
        gx_set_effective_transfer(pgs);
193
192
    return 0;
194
193
  fail:
195
194
    rc_increment(ptran->red);
218
217
    gs_setoverprintmode(pgs, 0);
219
218
    pcs = gs_cspace_new_DeviceGray(pgs->memory);
220
219
    if (pcs) {
221
 
        gs_setcolorspace(pgs, pcs);
222
 
        rc_decrement_only_cs(pcs, "gx_set_device_color_1");
 
220
        gs_setcolorspace(pgs, pcs);
 
221
        rc_decrement_only_cs(pcs, "gx_set_device_color_1");
223
222
    } else {
224
 
        /* {csrc} really need to signal an error here */
 
223
        /* {csrc} really need to signal an error here */
225
224
    }
226
225
    set_nonclient_dev_color(gs_currentdevicecolor_inline(pgs), 1);
227
226
    pgs->log_op = lop_default;
230
229
     * update the overprint information.
231
230
     */
232
231
    if (pgs->effective_overprint_mode == 1)
233
 
        (void)gs_do_set_overprint(pgs);
 
232
        (void)gs_do_set_overprint(pgs);
234
233
 
235
234
}
236
235
 
242
241
 */
243
242
static float
244
243
transfer_use_proc(floatp value, const gx_transfer_map * pmap,
245
 
                  const void *ignore_proc_data)
 
244
                  const void *ignore_proc_data)
246
245
{
247
246
    return (*pmap->proc) (value, pmap);
248
247
}
256
255
    int i;
257
256
 
258
257
    if (pmap->proc == 0)        /* use closure */
259
 
        proc = pmap->closure.proc, proc_data = pmap->closure.data;
 
258
        proc = pmap->closure.proc, proc_data = pmap->closure.data;
260
259
    else                        /* use proc */
261
 
        proc = transfer_use_proc, proc_data = 0 /* not used */;
 
260
        proc = transfer_use_proc, proc_data = 0 /* not used */;
262
261
    for (i = 0; i < transfer_map_size; i++) {
263
 
        float fval =
264
 
        (*proc) ((float)i / (transfer_map_size - 1), pmap, proc_data);
 
262
        float fval =
 
263
        (*proc) ((float)i / (transfer_map_size - 1), pmap, proc_data);
265
264
 
266
 
        values[i] =
267
 
            (fval < min_value ? fmin :
268
 
             fval >= 1.0 ? frac_1 :
269
 
             float2frac(fval));
 
265
        values[i] =
 
266
            (fval < min_value ? fmin :
 
267
             fval >= 1.0 ? frac_1 :
 
268
             float2frac(fval));
270
269
    }
271
270
}