2
/******************************************************************************
3
* MODULE : bitmap_ops.cpp
4
* DESCRIPTION: operation on character bitmaps
5
* COPYRIGHT : (C) 1999 Joris van der Hoeven
6
*******************************************************************************
7
* This software falls under the GNU general public license and comes WITHOUT
8
* ANY WARRANTY WHATSOEVER. See the file $TEXMACS_PATH/LICENSE for more details.
9
* If you don't have this file, write to the Free Software Foundation, Inc.,
10
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
11
******************************************************************************/
13
#include "bitmap_font.hpp"
14
#include "ps_device.hpp"
17
join (bitmap_char bmc1, bitmap_char bmc2) {
18
int x1= min (-bmc1->xoff, -bmc2->xoff);
19
int y1= min (bmc1->yoff- bmc1->height, bmc2->yoff- bmc2->height);
20
int x2= max (bmc1->width- bmc1->xoff, bmc2->width- bmc2->xoff);
21
int y2= max (bmc1->yoff, bmc2->yoff);
22
bitmap_char bmr (x2-x1, y2-y1, -x1, y2, max (bmc1->depth, bmc2->depth));
25
dx= -bmc1->xoff- x1, dy= y2- bmc1->yoff;
26
for (j=0; j<bmc1->height; j++)
27
for (i=0; i<bmc1->width; i++)
28
bmr->set_x (i+dx, j+dy, bmc1->get_x (i, j));
30
dx= -bmc2->xoff- x1; dy= y2- bmc2->yoff;
31
for (j=0; j<bmc2->height; j++)
32
for (i=0; i<bmc2->width; i++)
33
bmr->set_x (i+dx, j+dy,
34
max (bmr->get_x (i+dx, j+dy), bmc2->get_x (i, j)));
40
move (bitmap_char bmc, SI x, SI y) {
41
x += PIXEL/2; y += PIXEL/2; abs_round (x, y);
42
int xx= x/PIXEL, yy= y/PIXEL;
43
int ww= bmc->width, hh= bmc->height;
44
bitmap_char bmr (ww, hh, bmc->xoff- xx, bmc->yoff+ yy, bmc->depth);
49
bmr->set_x (i, j, bmc->get_x (i, j));
50
bmr->lwidth= bmc->lwidth;
55
hor_flip (bitmap_char bmc) {
57
int ww= bmc->width, hh= bmc->height;
58
bitmap_char bmr (ww, hh, bmc->xoff, bmc->yoff, bmc->depth);
61
bmr->set_x (ww-1-i, j, bmc->get_x (i, j));
62
bmr->lwidth= bmc->lwidth;
67
ver_flip (bitmap_char bmc) {
69
int ww= bmc->width, hh= bmc->height;
70
bitmap_char bmr (ww, hh, bmc->xoff, bmc->yoff, bmc->depth);
73
bmr->set_x (i, hh-1-j, bmc->get_x (i, j));
74
bmr->lwidth= bmc->lwidth;
79
pos_rotate (bitmap_char bmc) {
81
int ww= bmc->width, hh= bmc->height;
82
bitmap_char bmr (hh, ww, bmc->yoff, bmc->width- bmc->xoff, bmc->depth);
85
bmr->set_x (j, ww-1-i, bmc->get_x (i, j));
90
hor_extend (bitmap_char bmc, int pos, int by) {
92
int ww= bmc->width, hh= bmc->height;
93
bitmap_char bmr (ww+ by, hh, bmc->xoff, bmc->yoff, bmc->depth);
95
for (i=0; i<(ww+by); i++)
96
bmr->set_x (i, j, bmc->get_x (i<pos? i: (i<pos+by? pos: i-by), j));
101
ver_extend (bitmap_char bmc, int pos, int by) {
103
int ww= bmc->width, hh= bmc->height;
104
bitmap_char bmr (ww, hh+by, bmc->xoff, bmc->yoff, bmc->depth);
105
for (j=0; j<(hh+by); j++)
107
bmr->set_x (i, j, bmc->get_x (i, j<pos? j: (j<pos+by? pos: j-by)));