CAPS Universe documentation  1.0.4
All you need to know to be successful
libcapsraster-local.h
Go to the documentation of this file.
1#pragma once
2
3/*
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 *
6 * (c) 2018 Juergen Borleis <flap@caps-printing.org>
7 *
8 * This library is free software; you can redistribute it and/or modify it under
9 * the terms of the GNU General Public License as published by the Free
10 * Software Foundation; either version 2 of the License, or (at your option)
11 * any later version.
12 */
13#include <math.h>
14
23#include <libcapsbase.h>
24#include <libcapsppcommon.h>
25
27#ifdef DEBUG
28# define caps_print_debug(fmt, ...) caps_print_debug_template(fmt, ##__VA_ARGS__)
29#else
30# define caps_print_debug(fmt, ...)
31#endif
32
33#ifdef DSO_HIDDEN
34# define DSO_VISIBLE __attribute__ ((visibility("default")))
35#else
36# define DSO_VISIBLE
37#endif /* DSO_HIDDEN */
38
39#ifndef ARRAY_SIZE
40# define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
41#endif
42
43#ifdef ENABLE_NLS
44
45# ifndef PACKAGE
46# error "Missing 'PACKAGE' macro: include 'config.h' first"
47# endif /* PACKAGE */
48
49# define _(string) dgettext(PACKAGE, string)
50# include <libintl.h>
51
52#else /* ENABLE_NLS */
53
54# define _(string) (string)
55
56#endif /* ENABLE_NLS */
57
58#define NLS_(string) (string)
59
60#include "libcapsraster-api.h"
61
62struct rasterizer_info;
63struct caps_rasterizer;
65
74};
75
83 const char *name;
95 int (*init)(struct caps_rasterizer *rstr);
99 int (*job_start)(struct caps_rasterizer *rstr, unsigned *pcnt);
103 int (*page_next)(struct caps_rasterizer *rstr);
108 int (*page_render)(struct caps_rasterizer *rstr, const struct caps_rstr_page *page_conf, struct raster_adapt_preparation *raster_conf);
110 int (*page_image_get)(struct caps_rasterizer *rstr, struct caps_rstr_raster *desc);
113 const void *(*line_get)(struct caps_rasterizer *rstr, const struct caps_rstr_raster *desc, unsigned line_no);
119 void (*job_end)(struct caps_rasterizer *rstr);
122 int (*exit)(struct caps_rasterizer *rstr);
124};
125
212 /*
213 * Information about the input format and how the rasterizer should process it
214 * Note: this information reflects the original size and orientation of the document
215 */
216 /* note: source_sz isn't redundant. Think about printing a DIN A3 document on a DIN A4 printer */
226 /*
227 * Information how to convert from #source_sz to #target_sz into the final raster
228 */
229 double scale_x;
230 double scale_y;
236 /*
237 * Information about the real target medium the printer driver provides
238 * Note: this information reflects the size and orientation,
239 * defined by the printer driver
240 */
246 /*
247 * The raster may not fill the whole #target_sz. For example this could happen
248 * if a DIN A5 document should be printed on a DIN A4 print medium.
249 * In this case the raster can be placed somewhere on the print medium. "somewhere" depends on
250 * the alignment printing parameters.
251 */
256};
257
262 /* printer supported features */
263 unsigned hw_copy:1;
265 unsigned front_page_no; /* -> setze duplex_front, wenn diese Seite reingereicht wird */
266 unsigned reverse_page_no; /* -> setzt duplex_reverse, wenn diese Seite reingereicht wird, setzt eject_media wenn damit die Seite fertig ist */
267 unsigned current_page;
269 unsigned cur_page_kept:1;
276};
277
332 unsigned first;
333 unsigned last;
337};
338
341 ssize_t iterator;
342};
343
354 unsigned document_pages;
358};
359
367};
368
374};
375
376#define JOB_ORIENTATION_UNSET 360
377
387 int fh;
389 const char *mime_type;
391 /* Job's print settings, contain all the defaults plus processed job's printing parameters */
392 unsigned copies;
393 unsigned collate:1;
394 /* If both the following variables are '0', print in simplex mode, related to printing parameter 'sides=one-sided' */
395 unsigned duplex_long_edge:1;
397 unsigned duplex_short_edge:1;
399 unsigned fidelity:1;
400 unsigned rotation_auto:1;
402 unsigned fit_auto:1;
403 unsigned fit_to_medium:1;
413
414 /* dynamic info about the job */
418};
419
424 const struct rstr_provider *provider;
427
431};
432
436#define RSTR_ALL_CFORMATS (/*CAPS_CF_MONOCHROME0 | CAPS_CF_MONOCHROME1 |*/ CAPS_CF_GREY | CAPS_CF_RGB | CAPS_CF_CMYK)
437
438/* from libcapsraster-helper.c */
454void handle_initial_page(struct document_desc *job, unsigned pcnt) __nonnull();
461int handle_next_page(struct document_desc *job) __nonnull();
489void page_setup(struct document_desc *job, struct raster_adapt_preparation *setup, const struct caps_rstr_page *page) __nonnull();
490
491/* from doc-print-simplex.c */
498void simplex_next_page(struct document_desc *job) __nonnull();
512
513/* from doc-print-duplex.c */
533void duplex_next_page(struct document_desc *job) __nonnull();
534
535/* from doc-page-iterator.c */
552unsigned job_page_get_next(struct document_desc *job, unsigned cpage) __nonnull();
571unsigned job_page_count_calculate(struct document_desc *job, unsigned pgs) __nonnull();
585struct document_desc *job_create(int fd, struct caps_ppd_options_table *ppd_options, const char *params) __nonnull((2));
592void job_destroy(struct document_desc *job) __nonnull();
600int job_file_seek(struct document_desc *job, off_t offset) __nonnull();
609ssize_t job_file_read(struct document_desc *job, void *buf, size_t count) __nonnull();
616bool job_is_duplex(struct document_desc *job) __nonnull();
623bool job_is_collating(struct document_desc *job) __nonnull();
629unsigned job_copies_get(struct document_desc *job) __nonnull();
630
632#define ptsperinch 72.0
633
634#define RECT_IS_PORTRAIT 1
635#define RECT_IS_LANDSCAPE 0
636
649static inline __nonnull() int rect_orient(const struct caps_rect *rect)
650{
651 if (isgreater(rect->width, rect->length))
652 return RECT_IS_LANDSCAPE;
653
654 return RECT_IS_PORTRAIT;
655}
656
662static inline struct caps_rect rect_tip_over(const struct caps_rect r)
663{
664 struct caps_rect ro;
665
666 ro.width = r.length;
667 ro.length = r.width;
668
669 return ro;
670}
671
678static __const inline unsigned pts_to_pixel(double pts, double resolution)
679{
680 return (unsigned)(((pts * resolution) / ptsperinch) + 0.5);
681}
#define __const
Definition: libcapsbase.h:130
#define __nonnull(params)
Definition: libcapsbase.h:84
caps_colour_format
Dot colour format definition.
Definition: libcapsbase.h:375
Basic API for everything else of the CAPS universe.
static const char * params
Definition: libcapsdriver.c:525
Common definitions used by printing coordinator components (libcapsclient and libcapsprovider)
API declaration to render documents page by page.
ssize_t job_file_read(struct document_desc *job, void *buf, size_t count)
Definition: doc-convinience.c:44
caps_rstr_orientation
Definition: libcapsraster-local.h:369
@ CAPS_RSTR_ORIENT_SEASCAPE
Definition: libcapsraster-local.h:373
@ CAPS_RSTR_ORIENT_HEAD_DOWN
Definition: libcapsraster-local.h:372
@ CAPS_RSTR_ORIENT_LANDSCAPE
Definition: libcapsraster-local.h:371
@ CAPS_RSTR_ORIENT_HEAD_UP
Definition: libcapsraster-local.h:370
bool job_is_collating(struct document_desc *job)
Definition: doc-convinience.c:68
bool job_is_duplex(struct document_desc *job)
Definition: doc-convinience.c:54
void simplex_collating_next_page(struct document_desc *job)
Definition: doc-print-simplex.c:194
static int rect_orient(const struct caps_rect *rect)
Definition: libcapsraster-local.h:649
void handle_initial_page(struct document_desc *job, unsigned pcnt)
Definition: libcapsraster-helper.c:96
void job_destroy(struct document_desc *job)
Definition: doc-parameter-processing.c:1925
int handle_next_page(struct document_desc *job)
Definition: libcapsraster-helper.c:69
void page_setup(struct document_desc *job, struct raster_adapt_preparation *setup, const struct caps_rstr_page *page)
Definition: doc-page-preparation.c:686
int job_file_seek(struct document_desc *job, off_t offset)
Definition: doc-convinience.c:33
unsigned job_copies_get(struct document_desc *job)
Definition: doc-convinience.c:82
unsigned job_page_get_next(struct document_desc *job, unsigned cpage)
Definition: doc-page-iterator.c:150
unsigned job_page_count_calculate(struct document_desc *job, unsigned pgs)
Definition: doc-page-iterator.c:166
static struct caps_rect rect_tip_over(const struct caps_rect r)
Definition: libcapsraster-local.h:662
void duplex_next_page(struct document_desc *job)
Definition: doc-print-duplex.c:331
#define RECT_IS_LANDSCAPE
Definition: libcapsraster-local.h:635
void duplex_collating_next_page(struct document_desc *job)
Definition: doc-print-duplex.c:339
caps_rstr_alignment
Definition: libcapsraster-local.h:361
@ CAPS_RSTR_ALIGN_BOTTOM
Definition: libcapsraster-local.h:364
@ CAPS_RSTR_ALIGN_LEFT
Definition: libcapsraster-local.h:365
@ CAPS_RSTR_ALIGN_CENTER
Definition: libcapsraster-local.h:362
@ CAPS_RSTR_ALIGN_RIGHT
Definition: libcapsraster-local.h:366
@ CAPS_RSTR_ALIGN_TOP
Definition: libcapsraster-local.h:363
static unsigned pts_to_pixel(double pts, double resolution)
Definition: libcapsraster-local.h:678
rstr_tweaks
Rasterizer tweaks.
Definition: libcapsraster-local.h:72
@ RSTRS_INHERIT_FILEDESC
Definition: libcapsraster-local.h:73
void simplex_next_page(struct document_desc *job)
Definition: doc-print-simplex.c:186
#define RECT_IS_PORTRAIT
Definition: libcapsraster-local.h:634
#define ptsperinch
Definition: libcapsraster-local.h:632
static struct caps_job * job_create(void)
Definition: management-printers-and-jobs.c:366
Defines an area by its left bottom and right top coordinates in floating point values.
Definition: libcapsbase.h:361
Information collection for printing progression report.
Definition: libcapsppcommon.h:308
Manage the content of a PPD file.
Definition: libcapsppd-local.h:70
Definition of one supported resolution in Dots Per Inch (DPI).
Definition: libcapsppd.h:233
Declare the externally transparent structure for internal use.
Definition: libcapsraster-local.h:423
struct document_desc * raster_job
Definition: libcapsraster-local.h:426
struct caps_rstr_page_limits limits
Definition: libcapsraster-local.h:425
struct rasterizer_info * info
Definition: libcapsraster-local.h:430
const struct rstr_provider * provider
Definition: libcapsraster-local.h:424
struct raster_adapt_preparation setup
Definition: libcapsraster-local.h:428
Defines a simple rectangle by its width and length in floating point values.
Definition: libcapsbase.h:338
double length
Definition: libcapsbase.h:340
double width
Definition: libcapsbase.h:339
Definition: libcapsraster-api.h:297
Limits the rasterizer has when rasterizing the current document.
Definition: libcapsraster-api.h:320
Physical print medium description.
Definition: libcapsraster-api.h:360
Definition: libcapsraster-api.h:504
Variable table.
Definition: libcapstable.h:105
Definition: libcapsraster-local.h:331
unsigned first
Definition: libcapsraster-local.h:332
unsigned last
Definition: libcapsraster-local.h:333
Definition: libcapsraster-local.h:352
unsigned document_pages
Definition: libcapsraster-local.h:354
struct doc_range_list print_ranges
Definition: libcapsraster-local.h:353
unsigned overall_pages_to_print
Definition: libcapsraster-local.h:355
Definition: libcapsraster-local.h:339
ssize_t iterator
Definition: libcapsraster-local.h:341
struct caps_var_table entries
Definition: libcapsraster-local.h:340
Parameter description for the to be processed print job.
Definition: libcapsraster-local.h:386
unsigned fit_to_imageable_area
Definition: libcapsraster-local.h:404
const char * mime_type
Definition: libcapsraster-local.h:389
struct doc_page_range page_range_info
Definition: libcapsraster-local.h:412
struct caps_ppd_resolution resolution
Definition: libcapsraster-local.h:408
enum caps_rstr_orientation orientation
Definition: libcapsraster-local.h:401
enum caps_rstr_alignment alignment
Definition: libcapsraster-local.h:406
unsigned copies
Definition: libcapsraster-local.h:392
struct rstr_print_state state
Definition: libcapsraster-local.h:415
unsigned fit_to_medium
Definition: libcapsraster-local.h:403
unsigned collate
Definition: libcapsraster-local.h:393
struct caps_job_progression prog_info
Definition: libcapsraster-local.h:417
unsigned duplex_long_edge
Definition: libcapsraster-local.h:395
unsigned rotation_auto
Definition: libcapsraster-local.h:400
unsigned duplex_short_edge
Definition: libcapsraster-local.h:397
struct caps_rstr_page_desc pg_desc
Definition: libcapsraster-local.h:416
int fh
Definition: libcapsraster-local.h:387
unsigned fit_auto
Definition: libcapsraster-local.h:402
struct caps_ppd_options_table * ppd_options
Definition: libcapsraster-local.h:410
unsigned fidelity
Definition: libcapsraster-local.h:399
Required adaptions from the document's content to the raster content.
Definition: libcapsraster-local.h:211
struct caps_area target_area
Definition: libcapsraster-local.h:242
double scale_x
Definition: libcapsraster-local.h:229
int source_area_used
Definition: libcapsraster-local.h:222
double scale_y
Definition: libcapsraster-local.h:230
int print_rotation
Definition: libcapsraster-local.h:231
double raster_resolution_x
Definition: libcapsraster-local.h:232
enum caps_colour_format raster_cf
Definition: libcapsraster-local.h:234
struct caps_area source_area
Definition: libcapsraster-local.h:218
double raster_offset_x
Definition: libcapsraster-local.h:252
double raster_resolution_y
Definition: libcapsraster-local.h:233
double raster_offset_y
Definition: libcapsraster-local.h:254
struct caps_rect target_area_sz
Definition: libcapsraster-local.h:244
struct caps_rect source_sz
Definition: libcapsraster-local.h:217
struct caps_rect source_print_sz
Definition: libcapsraster-local.h:224
struct caps_rect target_sz
Definition: libcapsraster-local.h:241
Definition: backend-cupsraster.c:26
Definition: libcapsraster-local.h:261
unsigned last_medium_reached
Definition: libcapsraster-local.h:274
unsigned cur_page_kept
Definition: libcapsraster-local.h:269
unsigned copies_to_be_done
Definition: libcapsraster-local.h:270
unsigned front_page_no
Definition: libcapsraster-local.h:265
unsigned reverse_page_no
Definition: libcapsraster-local.h:266
unsigned hw_copy
Definition: libcapsraster-local.h:263
unsigned current_page
Definition: libcapsraster-local.h:267
unsigned print_media_amount
Definition: libcapsraster-local.h:272
enum caps_colour_format req_format
Definition: libcapsraster-local.h:275
unsigned print_media_done
Definition: libcapsraster-local.h:273
Callbacks of one rasterizer.
Definition: libcapsraster-local.h:82
int(* page_render)(struct caps_rasterizer *rstr, const struct caps_rstr_page *page_conf, struct raster_adapt_preparation *raster_conf)
Definition: libcapsraster-local.h:108
int(* init)(struct caps_rasterizer *rstr)
Definition: libcapsraster-local.h:95
int(* page_next)(struct caps_rasterizer *rstr)
Definition: libcapsraster-local.h:103
int(* job_start)(struct caps_rasterizer *rstr, unsigned *pcnt)
Definition: libcapsraster-local.h:99
const char * name
Definition: libcapsraster-local.h:83
int(* exit)(struct caps_rasterizer *rstr)
Definition: libcapsraster-local.h:122
enum rstr_tweaks tweaks
Definition: libcapsraster-local.h:85
void(* job_end)(struct caps_rasterizer *rstr)
Definition: libcapsraster-local.h:119
int(* page_image_get)(struct caps_rasterizer *rstr, struct caps_rstr_raster *desc)
Definition: libcapsraster-local.h:110