Rename gstate->ppm to gstate->pixels_per_inch. Add new pixels_per_inch to the surface backend.

This commit is contained in:
Carl Worth 2003-10-28 12:18:29 +00:00
parent 8bb3f7664d
commit 859bfd03a6
8 changed files with 62 additions and 22 deletions

View file

@ -1,3 +1,15 @@
2003-10-28 Carl Worth <cworth@isi.edu>
* src/cairo_xlib_surface.c (_cairo_xlib_surface_pixels_per_inch):
Implement new backend function.
* src/cairo_surface.c (_cairo_surface_pixels_per_inch): Add new
function to query surface pixels_per_inch.
* src/cairo_gstate.c (_cairo_gstate_init): Rename gstate->ppm to
gstate->pixels_per_inch. Swithc from default 3780 pixels per meter
to 96.0 pixels per inch which is slightly different.
2003-10-28 Carl Worth <cworth@isi.edu>
* src/cairo_gstate.c (_cairo_gstate_ensure_source):

View file

@ -89,8 +89,7 @@ _cairo_gstate_init (cairo_gstate_t *gstate)
gstate->alpha = 1.0;
_cairo_color_init (&gstate->color);
/* 3780 PPM (~96DPI) is a good enough assumption until we get a surface */
gstate->ppm = 3780;
gstate->pixels_per_inch = CAIRO_GSTATE_PIXELS_PER_INCH_DEFAULT;
_cairo_gstate_default_matrix (gstate);
_cairo_path_init (&gstate->path);
@ -322,9 +321,9 @@ _cairo_gstate_set_target_surface (cairo_gstate_t *gstate, cairo_surface_t *surfa
gstate->surface = surface;
cairo_surface_reference (gstate->surface);
scale = surface->ppm / gstate->ppm;
scale = _cairo_surface_pixels_per_inch (surface) / gstate->pixels_per_inch;
_cairo_gstate_scale (gstate, scale, scale);
gstate->ppm = surface->ppm;
gstate->pixels_per_inch = _cairo_surface_pixels_per_inch (surface);
return CAIRO_STATUS_SUCCESS;
}
@ -609,9 +608,7 @@ _cairo_gstate_set_matrix (cairo_gstate_t *gstate,
cairo_status_t
_cairo_gstate_default_matrix (cairo_gstate_t *gstate)
{
#define CAIRO_GSTATE_DEFAULT_PPM 3780.0
int scale = gstate->ppm / CAIRO_GSTATE_DEFAULT_PPM + 0.5;
int scale = gstate->pixels_per_inch / CAIRO_GSTATE_PIXELS_PER_INCH_DEFAULT + 0.5;
if (scale == 0)
scale = 1;

View file

@ -70,9 +70,6 @@ _cairo_surface_init (cairo_surface_t *surface,
surface->image_data = NULL;
/* XXX: We should really get this value from somewhere like Xft.dpy */
/* Assume a default until the user lets us know otherwise */
surface->ppm = 3780;
surface->ref_count = 1;
surface->repeat = 0;
@ -215,6 +212,15 @@ cairo_surface_destroy (cairo_surface_t *surface)
}
slim_hidden_def(cairo_surface_destroy);
#define CAIRO_SURFACE_PIXELS_PER_INCH_DEFAULT 96.0
double
_cairo_surface_pixels_per_inch (cairo_surface_t *surface)
{
if (surface->backend->pixels_per_inch)
return surface->backend->pixels_per_inch (surface);
return CAIRO_SURFACE_PIXELS_PER_INCH_DEFAULT;
}
void
_cairo_surface_pull_image (cairo_surface_t *surface)
{

View file

@ -152,6 +152,13 @@ _cairo_xlib_surface_destroy (void *abstract_surface)
surface->dpy = 0;
}
static double
_cairo_xlib_surface_pixels_per_inch (void *abstract_surface)
{
/* XXX: We should really get this value from somewhere like Xft.dpy */
return 96.0;
}
static void
_cairo_xlib_surface_pull_image (void *abstract_surface)
{
@ -468,6 +475,7 @@ _cairo_xlib_surface_composite_trapezoids (cairo_operator_t operator,
static const struct cairo_surface_backend cairo_xlib_surface_backend = {
_cairo_xlib_surface_create_similar,
_cairo_xlib_surface_destroy,
_cairo_xlib_surface_pixels_per_inch,
_cairo_xlib_surface_pull_image,
_cairo_xlib_surface_push_image,
_cairo_xlib_surface_set_matrix,

View file

@ -89,8 +89,7 @@ _cairo_gstate_init (cairo_gstate_t *gstate)
gstate->alpha = 1.0;
_cairo_color_init (&gstate->color);
/* 3780 PPM (~96DPI) is a good enough assumption until we get a surface */
gstate->ppm = 3780;
gstate->pixels_per_inch = CAIRO_GSTATE_PIXELS_PER_INCH_DEFAULT;
_cairo_gstate_default_matrix (gstate);
_cairo_path_init (&gstate->path);
@ -322,9 +321,9 @@ _cairo_gstate_set_target_surface (cairo_gstate_t *gstate, cairo_surface_t *surfa
gstate->surface = surface;
cairo_surface_reference (gstate->surface);
scale = surface->ppm / gstate->ppm;
scale = _cairo_surface_pixels_per_inch (surface) / gstate->pixels_per_inch;
_cairo_gstate_scale (gstate, scale, scale);
gstate->ppm = surface->ppm;
gstate->pixels_per_inch = _cairo_surface_pixels_per_inch (surface);
return CAIRO_STATUS_SUCCESS;
}
@ -609,9 +608,7 @@ _cairo_gstate_set_matrix (cairo_gstate_t *gstate,
cairo_status_t
_cairo_gstate_default_matrix (cairo_gstate_t *gstate)
{
#define CAIRO_GSTATE_DEFAULT_PPM 3780.0
int scale = gstate->ppm / CAIRO_GSTATE_DEFAULT_PPM + 0.5;
int scale = gstate->pixels_per_inch / CAIRO_GSTATE_PIXELS_PER_INCH_DEFAULT + 0.5;
if (scale == 0)
scale = 1;

View file

@ -70,9 +70,6 @@ _cairo_surface_init (cairo_surface_t *surface,
surface->image_data = NULL;
/* XXX: We should really get this value from somewhere like Xft.dpy */
/* Assume a default until the user lets us know otherwise */
surface->ppm = 3780;
surface->ref_count = 1;
surface->repeat = 0;
@ -215,6 +212,15 @@ cairo_surface_destroy (cairo_surface_t *surface)
}
slim_hidden_def(cairo_surface_destroy);
#define CAIRO_SURFACE_PIXELS_PER_INCH_DEFAULT 96.0
double
_cairo_surface_pixels_per_inch (cairo_surface_t *surface)
{
if (surface->backend->pixels_per_inch)
return surface->backend->pixels_per_inch (surface);
return CAIRO_SURFACE_PIXELS_PER_INCH_DEFAULT;
}
void
_cairo_surface_pull_image (cairo_surface_t *surface)
{

View file

@ -152,6 +152,13 @@ _cairo_xlib_surface_destroy (void *abstract_surface)
surface->dpy = 0;
}
static double
_cairo_xlib_surface_pixels_per_inch (void *abstract_surface)
{
/* XXX: We should really get this value from somewhere like Xft.dpy */
return 96.0;
}
static void
_cairo_xlib_surface_pull_image (void *abstract_surface)
{
@ -468,6 +475,7 @@ _cairo_xlib_surface_composite_trapezoids (cairo_operator_t operator,
static const struct cairo_surface_backend cairo_xlib_surface_backend = {
_cairo_xlib_surface_create_similar,
_cairo_xlib_surface_destroy,
_cairo_xlib_surface_pixels_per_inch,
_cairo_xlib_surface_pull_image,
_cairo_xlib_surface_push_image,
_cairo_xlib_surface_set_matrix,

View file

@ -292,6 +292,9 @@ struct cairo_surface_backend {
void
(*destroy) (void *surface);
double
(*pixels_per_inch) (void *surface);
void
(*pull_image) (void *surface);
@ -348,7 +351,6 @@ struct cairo_surface {
char *image_data;
double ppm;
unsigned int ref_count;
int repeat;
@ -411,6 +413,7 @@ struct cairo_font {
#define CAIRO_GSTATE_LINE_CAP_DEFAULT CAIRO_LINE_CAP_BUTT
#define CAIRO_GSTATE_LINE_JOIN_DEFAULT CAIRO_LINE_JOIN_MITER
#define CAIRO_GSTATE_MITER_LIMIT_DEFAULT 10.0
#define CAIRO_GSTATE_PIXELS_PER_INCH_DEFAULT 96.0
/* Need a name distinct from the cairo_clip function */
typedef struct cairo_clip_rec {
@ -451,7 +454,7 @@ typedef struct cairo_gstate {
double alpha;
cairo_color_t color;
double ppm;
double pixels_per_inch;
cairo_matrix_t ctm;
cairo_matrix_t ctm_inverse;
@ -943,6 +946,9 @@ _cairo_surface_composite_trapezoids (cairo_operator_t operator,
cairo_trapezoid_t *traps,
int ntraps);
extern double __internal_linkage
_cairo_surface_pixels_per_inch (cairo_surface_t *surface);
extern void __internal_linkage
_cairo_surface_pull_image (cairo_surface_t *surface);