|
|
researchv10 Norman
#include "draw_dag.h"
#include "dag.h"
#include "parsedag.h"
#include "defaults.h"
boolean shape_t::is_fixed_aspect_ratio() {
switch(shape_id) {
case Square:
case Circle:
case Doublecircle:
return true;
default:
return false;
}
}
DAG_node_t::DAG_node_t() : shape(STRING,"Ellipse") {
xsize = Default_node_xsize;
ysize = Default_node_ysize;
pointsize = Default_node_pointsize;
color = Default_node_color;
name = "";
label.type = 0;
sethw();
}
void DAG_node_t::setname(char *invalue){
name = invalue;
autosize();
}
void DAG_node_t::setshape(int intype, char* invalue) {
shape = shape_t(intype,invalue);
autosize();
}
void DAG_node_t::setcolor(char *incolor) {
color = incolor;
}
void DAG_node_t::setlabel(int intype, char* invalue) {
label.type = intype;
label.value = invalue;
autosize();
}
void DAG_node_t::setxsize(int inxsize) {
xsize = inxsize;
autosize();
}
void DAG_node_t::setysize(int inysize) {
ysize = inysize;
autosize();
}
void DAG_node_t::setpointsize(int inpointsize) {
pointsize = inpointsize;
autosize();
}
void DAG_node_t::autosize() {
char *printname;
int spaceneeded = 0;
if (label.type != DESC) {
if (label.type == STRING) printname = label.value;
else printname = name;
if (printname) {
if (*printname)
spaceneeded = (int)((2 + strlen(printname)) * pointsize * IPP * Resolution);
/* would be better if we kept default node size at time of its creation */
xsize = max(spaceneeded,xsize);
spaceneeded = (int) (pointsize * IPP * 2 * Resolution);
ysize = max(spaceneeded,ysize);
}
}
if (shape.is_fixed_aspect_ratio()) ysize = xsize;
sethw();
}
void DAG_node_t::sethw() {
if (!User.rotated) {
width = xsize;
height = ysize;
}
else {
width = ysize;
height = xsize;
}
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.