aboutsummaryrefslogtreecommitdiff
path: root/fbwarn/src/parseBVG.c
diff options
context:
space:
mode:
authoraxtloss <axtlos@getcryst.al>2024-02-25 14:42:49 +0100
committeraxtloss <axtlos@getcryst.al>2024-02-25 14:42:49 +0100
commit997368fe5f7ae8651982d0ba509bb54051b54e34 (patch)
tree7aa0e232ebf095b26981cc206affe6ed3519818c /fbwarn/src/parseBVG.c
parent507d58d48f3e99f5fd45171cdbadd9c690f47fe1 (diff)
downloadfsverify-997368fe5f7ae8651982d0ba509bb54051b54e34.tar.gz
fsverify-997368fe5f7ae8651982d0ba509bb54051b54e34.tar.bz2
Expand rectangle function with fill arg
Diffstat (limited to 'fbwarn/src/parseBVG.c')
-rw-r--r--fbwarn/src/parseBVG.c78
1 files changed, 61 insertions, 17 deletions
diff --git a/fbwarn/src/parseBVG.c b/fbwarn/src/parseBVG.c
index ff8b248..ead9c83 100644
--- a/fbwarn/src/parseBVG.c
+++ b/fbwarn/src/parseBVG.c
@@ -1,7 +1,19 @@
+#include <stdbool.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
+#include "BVGTypes.h"
#include "raylib.h"
+#include "extString.h"
+
+void BVGDrawRectangle(BVGRectangle *rectangle) {
+ if (rectangle->fill) {
+ DrawRectangleRec(rectangle->rayrectangle, rectangle->color);
+ } else {
+ DrawRectangleLinesEx(rectangle->rayrectangle, rectangle->lineThickness, rectangle->color);
+ }
+ return;
+}
// reads a given file
FILE *readFile(char *path) {
@@ -28,41 +40,73 @@ char *multiToSingle(char *lines) {
return result;
}
-void BVGRectangle(char *argv[5]) {
- printf("Drawing rectangle\n");
- argv[4][strlen(argv[4])-2] = '\0';
- printf("%s, %s\n %s, %s,\n %s\n", argv[0], argv[1], argv[2], argv[3], argv[4]);
- int x, y, width, height, r, g, b;
+/*
+ Converts a given char pointer to a corresponding boolean value
+ expects the char to only contain true/false without any whitespace or similiar
+ case is ignored
+ If no match is found, true is returned by default
+*/
+bool parseBoolValue(char *value) {
+ char *valueLower = strdup(strlwr(value));
+ printf("Matching bool %s --- %s", valueLower, value);
+ if (strcmp(valueLower, "false") == 0) {
+ return false;
+ } else {
+ return true;
+ }
+}
+
+BVGRectangle *BVGParseRectangle(char *argv[7]) {
+ BVGRectangle *result = malloc(sizeof(BVGRectangle));
+ Rectangle *rectangle = malloc(sizeof(Rectangle));
+ argv[4][strlen(argv[4])-1] = '\0';
+ argv[4] = argv[4]+strlen("color=#'");
+ int x, y, width, height, r, g, b, a;
+ float thickness = 1.0;
+ Color *clr = malloc(sizeof(Color));
sscanf(argv[0]+strlen("x="), "%d", &x);
sscanf(argv[1]+strlen("y="), "%d", &y);
sscanf(argv[2]+strlen("width="), "%d", &width);
sscanf(argv[3]+strlen("height="), "%d", &height);
- sscanf(argv[4]+strlen("color='#"), "%02x%02x%02x", &r, &g, &b);
+ if (strlen(argv[4]) == 6) {
+ sscanf(argv[4], "%02x%02x%02x", &r, &g, &b);
+ clr->r=r; clr->g=g; clr->b=b; clr->a=255;
+ } else {
+ sscanf(argv[4], "%02x%02x%02x%02x", &r, &g, &b, &a);
+ clr->r=r; clr->g=g; clr->b=b; clr->a=a;
+ }
+ sscanf(argv[6]+strlen("thickness="), "%fd", &thickness);
printf("X: %d, Y: %d\n", x, y);
printf("Width: %d, Height: %d\n", width, height);
printf("Color: %d, %d, %d\n", r, g, b);
- Color *clr = malloc(sizeof(Color));
- clr->r=r;
- clr->g=g;
- clr->b=b;
- clr->a=255;
- DrawRectangle(x, y, width, height, *clr);
- return;
+ printf("Fill: %d, Thickness: %f\n", parseBoolValue(argv[5]+strlen("fill=")), thickness);
+
+ rectangle->x=x; rectangle->y=y;
+ rectangle->height=height; rectangle->width=width;
+ result->rayrectangle=*rectangle;
+
+ result->color=*clr;
+ result->fill=parseBoolValue(argv[5]+strlen("fill="));
+ result->lineThickness=thickness;
+
+ return result;
}
-void matchFunctionCall(char *call) {
+void matchFunctionCall(char *call, void *ret) {
printf("Matching %s\n", call);
char *funcCall = strdup(call);
char *funcName = strsep(&funcCall, "(");
printf("Got function %s\n", funcName);
if (strcmp(funcName, "rectangle ") == 0) {
- char **arg, *argv[5];
+ char **arg, *argv[7];
call = call+strlen("rectangle (");
for (arg = argv; (*arg = strsep(&call, ",")) != NULL;)
if (**arg != '\0')
- if (++arg >= &argv[5])
+ if (++arg >= &argv[7])
break;
- BVGRectangle(argv);
+ BVGRectangle *rect = malloc(sizeof(BVGRectangle));
+ rect = BVGParseRectangle(argv);
+ BVGDrawRectangle(rect);
}
return;
}