summaryrefslogtreecommitdiff
path: root/dviware/dvi2bitmap/DviFilePosition.h
blob: a9822034442e352151970f3862bdaf805849bc81 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/* This file is part of dvi2bitmap; see README for copyrights and licence */

#ifndef DVIFILEPOSITION_HEADER_READ
#define DVIFILEPOSITION_HEADER_READ 1

#include "DviFile.h"
#include "verbosity.h"

/**
 * Represents a location within the DviFile.  Coordinates
 * <code>x</code> and <code>y</code> are relative to the top-left
 * corner of the `page', with the pixel in the top-left corner
 * having coordinates (0,0).  Note that this is different from DVI
 * coordinates, which have their origin at a point one inch in and one
 * inch down from the top-left of the `paper'.
 *
 */
class DviFilePosition {
 private:
    int x, y;                   /* position in scaled points */
    DviFile* dvif;
    static enum verbosities verbosity_;
 public:
    DviFilePosition(DviFile*, double x, double y, DviFile::DviUnits);
    DviFilePosition(DviFilePosition*, double x, double y, DviFile::DviUnits);
    double getX(const DviFile::DviUnits u);
    double getY(const DviFile::DviUnits u);
    void shift(double dx, double dy, DviFile::DviUnits u);
    void scale(double factor);
    //void scale(double factor, DviFilePosition& fixed_point);
    // make a static copy
    DviFilePosition* copy();
    static verbosities verbosity(const verbosities level) {
        enum verbosities oldv = verbosity_;
        verbosity_ = level;
        return oldv;
    }
};

#endif /* DVIFILEPOSITION_HEADER_READ */