Evince
Evince is a document viewer capable of displaying multiple and single page document formats like PDF and Postscript.
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
color.c File Reference
#include <config.h>
#include "mdvi.h"
#include "color.h"
+ Include dependency graph for color.c:

Go to the source code of this file.

Data Structures

struct  ColorCache
 

Macros

#define CCSIZE   256
 
#define GAMMA_DIFF   0.005
 

Functions

void mdvi_set_color (DviContext *dvi, Ulong fg, Ulong bg)
 
void mdvi_push_color (DviContext *dvi, Ulong fg, Ulong bg)
 
void mdvi_pop_color (DviContext *dvi)
 
void mdvi_reset_color (DviContext *dvi)
 
Ulongget_color_table (DviDevice *dev, int nlevels, Ulong fg, Ulong bg, double gamma, int density)
 

Variables

static ColorCache color_cache [CCSIZE]
 
static int cc_entries
 

Macro Definition Documentation

#define CCSIZE   256

Definition at line 76 of file color.c.

#define GAMMA_DIFF   0.005

Definition at line 80 of file color.c.

Function Documentation

Ulong* get_color_table ( DviDevice dev,
int  nlevels,
Ulong  fg,
Ulong  bg,
double  gamma,
int  density 
)

Definition at line 84 of file color.c.

86 {
87  ColorCache *cc, *tofree;
88  int lohits;
89  Ulong *pixels;
90  int status;
91 
92  lohits = color_cache[0].hits;
93  tofree = &color_cache[0];
94  /* look in the cache and see if we have one that matches this request */
95  for(cc = &color_cache[0]; cc < &color_cache[cc_entries]; cc++) {
96  if(cc->hits < lohits) {
97  lohits = cc->hits;
98  tofree = cc;
99  }
100  if(cc->fg == fg && cc->bg == bg && cc->density == density &&
101  cc->nlevels == nlevels && fabs(cc->gamma - gamma) <= GAMMA_DIFF)
102  break;
103  }
104 
105  if(cc < &color_cache[cc_entries]) {
106  cc->hits++;
107  return cc->pixels;
108  }
109 
110  DEBUG((DBG_DEVICE, "Adding color table to cache (fg=%lu, bg=%lu, n=%d)\n",
111  fg, bg, nlevels));
112 
113  /* no entry was found in the cache, create a new one */
114  if(cc_entries < CCSIZE) {
115  cc = &color_cache[cc_entries++];
116  cc->pixels = NULL;
117  } else {
118  cc = tofree;
119  mdvi_free(cc->pixels);
120  }
121  pixels = xnalloc(Ulong, nlevels);
122  status = dev->alloc_colors(dev->device_data,
123  pixels, nlevels, fg, bg, gamma, density);
124  if(status < 0) {
125  mdvi_free(pixels);
126  return NULL;
127  }
128  cc->fg = fg;
129  cc->bg = bg;
130  cc->gamma = gamma;
131  cc->density = density;
132  cc->nlevels = nlevels;
133  cc->pixels = pixels;
134  cc->hits = 1;
135  return pixels;
136 }

+ Here is the caller graph for this function:

void mdvi_pop_color ( DviContext dvi)

Definition at line 47 of file color.c.

48 {
49  Ulong fg, bg;
50 
51  if(dvi->color_top == 0)
52  return;
53  dvi->color_top--;
54  fg = dvi->color_stack[dvi->color_top].fg;
55  bg = dvi->color_stack[dvi->color_top].bg;
56  mdvi_set_color(dvi, fg, bg);
57 }

+ Here is the caller graph for this function:

void mdvi_push_color ( DviContext dvi,
Ulong  fg,
Ulong  bg 
)

Definition at line 34 of file color.c.

35 {
36  if(dvi->color_top == dvi->color_size) {
37  dvi->color_size += 32;
39  dvi->color_size * sizeof(DviColorPair));
40  }
41  dvi->color_stack[dvi->color_top].fg = dvi->curr_fg;
42  dvi->color_stack[dvi->color_top].bg = dvi->curr_bg;
43  dvi->color_top++;
44  mdvi_set_color(dvi, fg, bg);
45 }

+ Here is the caller graph for this function:

void mdvi_reset_color ( DviContext dvi)

Definition at line 59 of file color.c.

60 {
61  dvi->color_top = 0;
62  mdvi_set_color(dvi, dvi->params.fg, dvi->params.bg);
63 }

+ Here is the caller graph for this function:

void mdvi_set_color ( DviContext dvi,
Ulong  fg,
Ulong  bg 
)

Definition at line 23 of file color.c.

24 {
25  if(dvi->curr_fg != fg || dvi->curr_bg != bg) {
26  DEBUG((DBG_DEVICE, "setting color to (%lu,%lu)\n", fg, bg));
27  if(dvi->device.set_color)
28  dvi->device.set_color(dvi->device.device_data, fg, bg);
29  dvi->curr_fg = fg;
30  dvi->curr_bg = bg;
31  }
32 }

+ Here is the caller graph for this function:

Variable Documentation

int cc_entries
static

Definition at line 78 of file color.c.

ColorCache color_cache[CCSIZE]
static

Definition at line 77 of file color.c.