|
|
1.1 root 1: #include "draw_dag.h"
2: #include "dag.h"
3: #include "parsedag.h"
4: #include "defaults.h"
5:
6: boolean shape_t::is_fixed_aspect_ratio() {
7: switch(shape_id) {
8: case Square:
9: case Circle:
10: case Doublecircle:
11: return true;
12: default:
13: return false;
14: }
15: }
16:
17: DAG_node_t::DAG_node_t() : shape(STRING,"Ellipse") {
18: xsize = Default_node_xsize;
19: ysize = Default_node_ysize;
20: pointsize = Default_node_pointsize;
21: color = Default_node_color;
22: name = "";
23: label.type = 0;
24: sethw();
25: }
26:
27: void DAG_node_t::setname(char *invalue){
28: name = invalue;
29: autosize();
30: }
31:
32: void DAG_node_t::setshape(int intype, char* invalue) {
33: shape = shape_t(intype,invalue);
34: autosize();
35: }
36:
37: void DAG_node_t::setcolor(char *incolor) {
38: color = incolor;
39: }
40:
41: void DAG_node_t::setlabel(int intype, char* invalue) {
42: label.type = intype;
43: label.value = invalue;
44: autosize();
45: }
46:
47: void DAG_node_t::setxsize(int inxsize) {
48: xsize = inxsize;
49: autosize();
50: }
51:
52: void DAG_node_t::setysize(int inysize) {
53: ysize = inysize;
54: autosize();
55: }
56:
57: void DAG_node_t::setpointsize(int inpointsize) {
58: pointsize = inpointsize;
59: autosize();
60: }
61:
62: void DAG_node_t::autosize() {
63: char *printname;
64: int spaceneeded = 0;
65: if (label.type != DESC) {
66: if (label.type == STRING) printname = label.value;
67: else printname = name;
68: if (printname) {
69: if (*printname)
70: spaceneeded = (int)((2 + strlen(printname)) * pointsize * IPP * Resolution);
71: /* would be better if we kept default node size at time of its creation */
72: xsize = max(spaceneeded,xsize);
73: spaceneeded = (int) (pointsize * IPP * 2 * Resolution);
74: ysize = max(spaceneeded,ysize);
75: }
76: }
77: if (shape.is_fixed_aspect_ratio()) ysize = xsize;
78: sethw();
79: }
80:
81: void DAG_node_t::sethw() {
82: if (!User.rotated) {
83: width = xsize;
84: height = ysize;
85: }
86: else {
87: width = ysize;
88: height = xsize;
89: }
90: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.