File: canvas.cpp

package info (click to toggle)
ams 1.8.7-5
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 1,880 kB
  • ctags: 2,171
  • sloc: cpp: 17,793; makefile: 433; sh: 101
file content (96 lines) | stat: -rw-r--r-- 2,422 bytes parent folder | download | duplicates (3)
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <qpainter.h>
#include <qcanvas.h>
#include <qstring.h>
#include <qfont.h>
#include "canvas.h"


Canvas::Canvas(QObject* parent, const char *name)
           : QCanvas(parent, name) {

  zoom = 1.0;
  setDoubleBuffering(TRUE);
}

Canvas::~Canvas() {

}

void Canvas::drawBackground(QPainter & painter, const QRect & clip) {

  int l1;
  QPoint qp_in[2], qp_out[2];
  float zoom_dx, zoom_dy, val;
  QString qs;

  zoom_dx = dx / zoom;     
  zoom_dy = dy / zoom;  
  painter.fillRect(clip, QBrush(QColor(CANVAS_COLOR_BG)));

  for (l1 = 0; l1 <= w / zoom_dx; l1++) {
    val =  ((float)l1 * zoom_dx - (float)w/2.0) / (float)scale;
    if (floor(val) == ceil(val)) {
      painter.setPen(QColor(CANVAS_GRID_COLOR_LIGHT));
    } else {
      painter.setPen(QColor(CANVAS_GRID_COLOR_DARK));
    }
    qp_in[0].setX(l1 * zoom_dx);
    qp_in[0].setY(0);
    qp_in[1].setX(l1 * zoom_dx);
    qp_in[1].setY(h);
    qp_out[0] = matrix.map(qp_in[0]);
    qp_out[1] = matrix.map(qp_in[1]);    
    painter.drawLine(qp_out[0], qp_out[1]);
    if (floor(val) == ceil(val)) {
      qs.sprintf("%6.0f", val);
      painter.setFont(QFont("Helvetica", 10));
      painter.drawText(qp_out[1].x() - 20, qp_out[1].y() + 15, qs);
    }
  }
  for (l1 = 0; l1 <= h / zoom_dy; l1++) {
    val = -((float)l1 * zoom_dy - (float)w/2.0) / (float)scale;
    if (floor(val) == ceil(val)) {
      painter.setPen(QColor(CANVAS_GRID_COLOR_LIGHT));
    } else {
      painter.setPen(QColor(CANVAS_GRID_COLOR_DARK));
    }
    qp_in[0].setY(l1 * zoom_dy);
    qp_in[0].setX(0);
    qp_in[1].setY(l1 * zoom_dy);
    qp_in[1].setX(w);
    qp_out[0] = matrix.map(qp_in[0]);
    qp_out[1] = matrix.map(qp_in[1]);    
    painter.drawLine(qp_out[0], qp_out[1]);
    if (floor(val) == ceil(val)) {
      qs.sprintf("%7.0f", val);
      painter.setFont(QFont("Helvetica", 10));
      painter.drawText(qp_out[0].x() - 44, qp_out[0].y() + 4, qs);
    }
  }
}  

void Canvas::setZoom(float p_zoom) {

  zoom = p_zoom;
}

void Canvas::setMatrix(QWMatrix p_matrix) {

  matrix = p_matrix;
}

void Canvas::setGrid(int p_border_l, int p_border_r, int p_border_b, int p_border_t, int p_scale, int p_w, int p_h, float p_dx, float p_dy) {

  border_l = p_border_l;
  border_r = p_border_r;
  border_b = p_border_b;
  border_t = p_border_t;
  scale = p_scale;
  w = p_w;
  h = p_h;
  dx = p_dx;
  dy = p_dy;
}