correct node geometry
This commit is contained in:
@@ -479,6 +479,7 @@ static int cyberiada_destroy_node(CyberiadaNode* node)
|
|||||||
cyberiada_destroy_all_nodes(node->children);
|
cyberiada_destroy_all_nodes(node->children);
|
||||||
}
|
}
|
||||||
if (node->actions) cyberiada_destroy_action(node->actions);
|
if (node->actions) cyberiada_destroy_action(node->actions);
|
||||||
|
if (node->geometry_point) free(node->geometry_point);
|
||||||
if (node->geometry_rect) free(node->geometry_rect);
|
if (node->geometry_rect) free(node->geometry_rect);
|
||||||
if (node->color) free(node->color);
|
if (node->color) free(node->color);
|
||||||
if (node->link) {
|
if (node->link) {
|
||||||
@@ -1356,7 +1357,7 @@ static int cyberiada_get_element_text(char* buffer, size_t buffer_len,
|
|||||||
|
|
||||||
static int cyberiada_xml_read_coord(xmlNode* xml_node,
|
static int cyberiada_xml_read_coord(xmlNode* xml_node,
|
||||||
const char* attr_name,
|
const char* attr_name,
|
||||||
double* result)
|
float* result)
|
||||||
{
|
{
|
||||||
char buffer[MAX_STR_LEN];
|
char buffer[MAX_STR_LEN];
|
||||||
size_t buffer_len = sizeof(buffer) - 1;
|
size_t buffer_len = sizeof(buffer) - 1;
|
||||||
@@ -1365,7 +1366,7 @@ static int cyberiada_xml_read_coord(xmlNode* xml_node,
|
|||||||
attr_name) != CYBERIADA_NO_ERROR) {
|
attr_name) != CYBERIADA_NO_ERROR) {
|
||||||
return CYBERIADA_BAD_PARAMETER;
|
return CYBERIADA_BAD_PARAMETER;
|
||||||
}
|
}
|
||||||
*result = atof(buffer);
|
*result = (float)atof(buffer);
|
||||||
return CYBERIADA_NO_ERROR;
|
return CYBERIADA_NO_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1607,24 +1608,27 @@ static GraphProcessorState handle_node_geometry(xmlNode* xml_node,
|
|||||||
{
|
{
|
||||||
CyberiadaNodeType type;
|
CyberiadaNodeType type;
|
||||||
CyberiadaNode* current = node_stack_current_node(stack);
|
CyberiadaNode* current = node_stack_current_node(stack);
|
||||||
|
CyberiadaRect* rect;
|
||||||
if (current == NULL) {
|
if (current == NULL) {
|
||||||
ERROR("current node invalid\n");
|
ERROR("current node invalid\n");
|
||||||
return gpsInvalid;
|
return gpsInvalid;
|
||||||
}
|
}
|
||||||
type = current->type;
|
type = current->type;
|
||||||
if (cyberiada_xml_read_rect(xml_node,
|
if (cyberiada_xml_read_rect(xml_node,
|
||||||
&(current->geometry_rect)) != CYBERIADA_NO_ERROR) {
|
&rect) != CYBERIADA_NO_ERROR) {
|
||||||
return gpsInvalid;
|
return gpsInvalid;
|
||||||
}
|
}
|
||||||
if (type == cybNodeInitial) {
|
if (type == cybNodeInitial) {
|
||||||
current->geometry_rect->x += current->geometry_rect->width / 2.0;
|
current->geometry_point = (CyberiadaPoint*)malloc(sizeof(CyberiadaPoint));
|
||||||
current->geometry_rect->y += current->geometry_rect->height / 2.0;
|
current->geometry_point->x = rect->x + rect->width / 2.0f;
|
||||||
current->geometry_rect->width = PSEUDO_NODE_SIZE;
|
current->geometry_point->y = rect->y + rect->height / 2.0f;
|
||||||
current->geometry_rect->height = PSEUDO_NODE_SIZE;
|
free(rect);
|
||||||
return gpsNodeStart;
|
return gpsNodeStart;
|
||||||
} else if (type == cybNodeComment) {
|
} else if (type == cybNodeComment) {
|
||||||
|
current->geometry_rect = rect;
|
||||||
return gpsNodeAction;
|
return gpsNodeAction;
|
||||||
} else {
|
} else {
|
||||||
|
current->geometry_rect = rect;
|
||||||
return gpsNodeTitle;
|
return gpsNodeTitle;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -70,11 +70,11 @@ typedef enum {
|
|||||||
/* SM node & transitions geometry */
|
/* SM node & transitions geometry */
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
double x, y;
|
float x, y;
|
||||||
} CyberiadaPoint;
|
} CyberiadaPoint;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
double x, y, width, height;
|
float x, y, width, height;
|
||||||
} CyberiadaRect;
|
} CyberiadaRect;
|
||||||
|
|
||||||
typedef struct _CyberiadaPolyline {
|
typedef struct _CyberiadaPolyline {
|
||||||
|
|||||||
Reference in New Issue
Block a user