12
12
* Released under GNU GPL, read the file 'COPYING' for more information
15
#include <libnr/nr-matrix.h>
16
#include <libnr/nr-matrix-div.h>
17
#include <libnr/nr-matrix-ops.h>
18
#include <libnr/nr-point-matrix-ops.h>
19
15
#include "desktop.h"
20
16
#include "document.h"
21
17
#include "sp-root.h"
22
#include "desktop-affine.h"
24
NR::Matrix const sp_desktop_w2dt_affine (SPDesktop const *desktop)
26
g_return_val_if_fail (desktop != NULL, NULL);
31
NR::Matrix const sp_desktop_dt2w_affine (SPDesktop const *desktop)
33
g_return_val_if_fail (desktop != NULL, NULL);
38
NR::Matrix const sp_desktop_dt2doc_affine (SPDesktop const *desktop)
40
g_return_val_if_fail (desktop != NULL, NULL);
42
return desktop->doc2dt.inverse();
45
NR::Matrix const sp_desktop_doc2dt_affine (SPDesktop const *desktop)
47
g_return_val_if_fail (desktop != NULL, NULL);
49
return desktop->doc2dt;
52
NR::Matrix const sp_desktop_w2doc_affine (SPDesktop const *desktop)
54
g_return_val_if_fail (desktop != NULL, NULL);
56
return desktop->w2d / desktop->doc2dt;
59
NR::Matrix const sp_desktop_doc2w_affine(SPDesktop const *desktop)
61
g_return_val_if_fail (desktop != NULL, NULL);
63
return desktop->doc2dt * desktop->d2w;
18
#include "libnr/nr-matrix-ops.h"
66
20
NR::Matrix const sp_desktop_root2dt_affine (SPDesktop const *dt)
68
22
SPRoot const *root = SP_ROOT(SP_DOCUMENT_ROOT(dt->doc()));
69
return root->c2p * dt->doc2dt;
23
return root->c2p * dt->doc2dt();
72
26
NR::Matrix const sp_desktop_dt2root_affine (SPDesktop const *dt)
74
28
return sp_desktop_root2dt_affine(dt).inverse();
79
NR::Point sp_desktop_w2d_xy_point(SPDesktop const *dt, NR::Point const p)
86
NR::Point sp_desktop_d2w_xy_point(SPDesktop const *dt, NR::Point const p)
93
NR::Point sp_desktop_d2doc_xy_point(SPDesktop const *dt, NR::Point const p)
97
return p / dt->doc2dt;
100
NR::Point sp_desktop_doc2d_xy_point(SPDesktop const *dt, NR::Point const p)
104
return p * dt->doc2dt;
107
NR::Point sp_desktop_w2doc_xy_point (SPDesktop const *dt, const NR::Point p)
111
return p * dt->w2d / dt->doc2dt;
114
NR::Point sp_desktop_doc2w_xy_point(SPDesktop const *dt, NR::Point const p)
118
return p * dt->doc2dt * dt->d2w;
121
31
NR::Point sp_desktop_root2dt_xy_point(SPDesktop const *dt, NR::Point const p)
123
33
return p * sp_desktop_root2dt_affine(dt);