Added windows build howto into README
[imgsort.git] / scr.cpp
1 #include "scr.h"
2
3 #include <algorithm> // max, min
4 using std::min;
5 using std::max;
6
7 QString ScaleCropRule::toString() const {
8   QString res;
9   res.sprintf("ScaleCropRule Scale: %dx%d, Crop:%dx%d at %d:%d; rotate=%d", scale_w, scale_h, crop_w, crop_h, crop_x, crop_y, ini_rot);
10   return res;
11 }
12
13 QString ScaleCropRule::toShortString() const {
14   QString crop;
15   if (crop_w > 0 && (scale_w != crop_w || scale_h != crop_h)) {
16     crop = "Crop and ";
17   }
18   QString rot;
19   if (ini_rot != 0) {
20     rot = "Rotate, ";
21   }
22   QString res;
23   res.sprintf("Rescale to %dpx", max(crop_w, crop_h));
24   return rot + crop + res;
25 }
26
27 void ScaleCropRule::rotate_left() {
28   int temp;
29
30   temp = scale_w; scale_w = scale_h; scale_h = temp;
31   temp = crop_w; crop_w = crop_h; crop_h = temp;
32   temp = crop_y;
33   crop_y = scale_h - crop_h - crop_x;
34   crop_x = temp;
35
36   ini_rot = (ini_rot + 5) % 4;
37 }
38 void ScaleCropRule::rotate_right() {
39   int temp;
40
41   temp = scale_w; scale_w = scale_h; scale_h = temp;
42   temp = crop_w; crop_w = crop_h; crop_h = temp;
43   temp = crop_x;
44   crop_x = scale_w - crop_w - crop_y;
45   crop_y = temp;
46
47   ini_rot = (ini_rot + 3) % 4;
48 }
49
50
51
52 ScaleCropRule ScaleCropRule::rezoom(double scale_zoom, int keepx, int keepy) {
53   double new_sw = double(scale_w) * scale_zoom;
54   double new_sh = double(scale_h) * scale_zoom;
55   double new_cx = double(crop_x + keepx) * scale_zoom;
56   double new_cy = double(crop_y + keepy) * scale_zoom;
57   //qDebug() << "Rezoom " << scale_zoom << " : " << double(scale_w) << "x" << double(scale_h) << " => " << new_sw << "x" << new_sh;
58   return ScaleCropRule(int(new_sw), int(new_sh), int(new_cx) - keepx, int(new_cy) - keepy, crop_w, crop_h, ini_rot);
59 }
60
61 QRect ScaleCropRule::cropRect() {
62   return QRect(crop_x, crop_y, min(scale_w - crop_x, crop_w), min(scale_h - crop_y, crop_h));
63
64 }
65
66 ScaleCropRule ScaleCropRule::retarget(const ScaleCropRule & targetSize) {
67   double coef1 = double(targetSize.crop_w) / double(crop_w);
68   double coef2 = double(targetSize.crop_h) / double(crop_h);
69   double coef = min(coef1, coef2);
70
71   return ScaleCropRule(int(coef * double(scale_w)), int(coef * double(scale_h)),
72                        int(coef * double(crop_x)), int(coef * double(crop_y)),
73                        int(coef * double(crop_w)), int(coef * double(crop_h)),
74                        ini_rot);
75 }
76