aboutsummaryrefslogtreecommitdiff
path: root/fbwarn/src
diff options
context:
space:
mode:
authoraxtloss <axtlos@getcryst.al>2024-02-28 21:34:09 +0100
committeraxtloss <axtlos@getcryst.al>2024-02-28 21:34:09 +0100
commit91d58f9ae9e9d9adc2e19a0b56d2b9757f6696d6 (patch)
treec3591c10dc4eb08fa71183f1d1ec2b1336be1ba4 /fbwarn/src
parent78f4dd7fd2fb409639d3c3eee28eaca868fa0e5f (diff)
downloadfsverify-91d58f9ae9e9d9adc2e19a0b56d2b9757f6696d6.tar.gz
fsverify-91d58f9ae9e9d9adc2e19a0b56d2b9757f6696d6.tar.bz2
BVG: add scaling support
Diffstat (limited to '')
-rw-r--r--fbwarn/src/parseBVG.c99
-rw-r--r--fbwarn/src/parseBVG.h2
-rw-r--r--fbwarn/src/warn.c12
3 files changed, 58 insertions, 55 deletions
diff --git a/fbwarn/src/parseBVG.c b/fbwarn/src/parseBVG.c
index 83dda73..a7f6798 100644
--- a/fbwarn/src/parseBVG.c
+++ b/fbwarn/src/parseBVG.c
@@ -7,6 +7,8 @@
#include "raylib.h"
#include "extString.h"
+float scale;
+
void BVGDrawRectangle(BVGRectangle *rectangle) {
if (rectangle->fill) {
DrawRectangleRec(rectangle->rayrectangle, rectangle->color);
@@ -178,31 +180,28 @@ BVGRectangle *BVGParseRectangle(char *argv[7]) {
size_t argN = 7;
char *args[argN];
char *knownArgs[7] = {"x", "y", "width", "height", "color", "fill", "thickness"};
- orderArgs(args, argv, argN, knownArgs);
- printf("119 Parsing...%s \n", args[0]);
int x, y, width, height, r, g, b, a;
float thickness = 1.0;
bool fill = true;
+ Color *clr;
+
+ orderArgs(args, argv, argN, knownArgs);
sscanf(args[0], "%d", &x);
sscanf(args[1], "%d", &y);
sscanf(args[2], "%d", &width);
sscanf(args[3], "%d", &height);
args[4] = args[4]+2;
args[4][strlen(args[4])-1] = '\0';
- Color *clr = parseColorFromHex(args[4]);
+ clr = parseColorFromHex(args[4]);
sscanf(args[6], "%fd", &thickness);
fill = parseBoolValue(args[5]);
- 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);
- printf("Fill: %d, Thickness: %f\n", fill, thickness);
-
- rectangle->x=x; rectangle->y=y;
- rectangle->height=height; rectangle->width=width;
+
+ rectangle->x=x*scale; rectangle->y=y*scale;
+ rectangle->height=height*scale; rectangle->width=width*scale;
result->rayrectangle=*rectangle;
result->color=*clr;
result->fill=fill;
- result->lineThickness=thickness;
+ result->lineThickness=thickness*scale;
free(clr);
free(rectangle);
@@ -219,12 +218,12 @@ BVGRoundedRectangle *BVGParseRoundedRectangle(char *argv[9]) {
size_t argN = 9;
char *args[argN];
char *knownArgs[9] = {"x", "y", "width", "height", "color", "fill", "thickness", "roundness", "segments"};
+ float roundness;
+ int segments;
+
orderArgs(args, argv, argN, knownArgs);
bvgrectangle = BVGParseRectangle(argv);
result->rectangle = *bvgrectangle;
-
- float roundness;
- int segments;
sscanf(args[7], "%fd", &roundness);
sscanf(args[8], "%d", &segments);
@@ -240,23 +239,23 @@ BVGCircle *BVGParseCircle(char *argv[4]) {
size_t argN = 4;
char *args[argN];
char *knownArgs[4] = {"x", "y", "radius", "color"};
- orderArgs(args, argv, argN, knownArgs);
int x, y;
float radius;
Color *clr;
+
+ orderArgs(args, argv, argN, knownArgs);
sscanf(args[0], "%d", &x);
sscanf(args[1], "%d", &y);
sscanf(args[2], "%fd", &radius);
args[3] = args[3]+2;
args[3][strlen(args[3])-1] = '\0';
clr = parseColorFromHex(args[3]);
- printf("X: %d, Y: %d\n", x, y);
- printf("radius: %f, color: %s\n", radius, args[3]);
+
result->drawSector=false;
- result->centerX=x;
- result->centerY=y;
+ result->centerX=x*scale;
+ result->centerY=y*scale;
+ result->radius=radius*scale;
result->color=*clr;
- result->radius=radius;
free(clr);
return result;
@@ -267,10 +266,11 @@ BVGCircle *BVGParseCircleSegment(char *argv[7]) {
size_t argN = 7;
char *args[argN];
char *knownArgs[7] = {"x", "y", "radius", "color", "startangle", "endangle", "segments"};
- orderArgs(args, argv, argN, knownArgs);
int x, y, segments;
float radius, startAngle, endAngle;
Color *clr;
+
+ orderArgs(args, argv, argN, knownArgs);
sscanf(args[0], "%d", &x);
sscanf(args[1], "%d", &y);
sscanf(args[2], "%fd", &radius);
@@ -280,16 +280,13 @@ BVGCircle *BVGParseCircleSegment(char *argv[7]) {
args[3] = args[3]+2;
args[3][strlen(args[3])-1] = '\0';
clr = parseColorFromHex(args[3]);
- printf("X: %d, Y: %d\n", x, y);
- printf("radius: %f, color: %s\n", radius, args[3]);
+
result->drawSector=true;
- result->centerX=x;
- result->centerY=y;
+ result->centerX=x; result->centerY=y*scale;
result->color=*clr;
- result->radius=radius;
+ result->radius=radius*scale;
result->segments=segments;
- result->startAngle=startAngle;
- result->endAngle=endAngle;
+ result->startAngle=startAngle; result->endAngle=endAngle;
free(clr);
return result;
@@ -300,10 +297,11 @@ BVGRing *BVGParseRing(char *argv[8]) {
size_t argN = 8;
char *args[argN];
char *knownArgs[8] = {"x", "y", "innerradius", "outerradius", "startangle", "endangle", "segments", "color"};
- orderArgs(args, argv, argN, knownArgs);
int x, y, segments;
float innerRadius, outerRadius, startAngle, endAngle;
Color *clr;
+
+ orderArgs(args, argv, argN, knownArgs);
sscanf(args[0], "%d", &x);
sscanf(args[1], "%d", &y);
sscanf(args[2], "%f", &innerRadius);
@@ -314,9 +312,8 @@ BVGRing *BVGParseRing(char *argv[8]) {
args[7] = args[7]+2;
args[7][strlen(args[7])-1] = '\0';
clr = parseColorFromHex(args[7]);
- printf("X: %d, Y: %d\n", x, y);
- printf("startAng: %f, endAng: %f\n", startAngle, endAngle);
- result->centerX=x; result->centerY=y;
+
+ result->centerX=x*scale; result->centerY=y*scale;
result->inRadius=innerRadius; result->outRadius=outerRadius;
result->startAngle=startAngle; result->endAngle=endAngle;
result->segmets=segments;
@@ -344,12 +341,10 @@ BVGEllipse *BVGParseEllipse(char *argv[6]) {
args[5] = args[5]+2;
args[5][strlen(args[5])-1] = '\0';
clr = parseColorFromHex(args[5]);
- printf("X: %d, Y: %d", x, y);
- printf("hRad: %f, vRad: %f", horizontalRadius, verticalRadius);
- printf("fill: %d, Color: %s", fill, args[5]);
+
result->centerX=x; result->centerY=y;
- result->horizontalRadius=horizontalRadius;
- result->verticalRadius=verticalRadius;
+ result->horizontalRadius=horizontalRadius*scale;
+ result->verticalRadius=verticalRadius*scale;
result->fill=fill;
result->color=*clr;
@@ -362,11 +357,12 @@ BVGTriangle *BVGParseTriangle(char *argv[8]) {
size_t argN = 8;
char *args[argN];
char *knownArgs[8] = {"x1", "y1", "x2", "y2", "x3", "y3", "fill", "color"};
- orderArgs(args, argv, argN, knownArgs);
int x1, x2, x3;
int y1, y2, y3;
bool fill;
Color *clr;
+
+ orderArgs(args, argv, argN, knownArgs);
sscanf(args[0], "%d", &x1);
sscanf(args[1], "%d", &y1);
sscanf(args[2], "%d", &x2);
@@ -377,9 +373,10 @@ BVGTriangle *BVGParseTriangle(char *argv[8]) {
args[7] = args[7]+2;
args[7][strlen(args[7])-1] = '\0';
clr = parseColorFromHex(args[7]);
- result->corner1 = (Vector2){x1, y1};
- result->corner2 = (Vector2){x2, y2};
- result->corner3 = (Vector2){x3, y3};
+
+ result->corner1 = (Vector2){x1*scale, y1*scale};
+ result->corner2 = (Vector2){x2*scale, y2*scale};
+ result->corner3 = (Vector2){x3*scale, y3*scale};
result->fill = fill;
result->color = *clr;
@@ -392,23 +389,22 @@ BVGText *BVGParseText(char *argv[5]) {
size_t argN = 5;
char *args[argN];
char *knownArgs[5] = {"text", "x", "y", "size", "color"};
- orderArgs(args, argv, argN, knownArgs);
- args[0] = args[0]+1;
- args[0][strlen(args[0])-1] = '\0';
char *text = args[0];
int x, y, size;
Color *clr;
+
+ orderArgs(args, argv, argN, knownArgs);
+ args[0] = args[0]+1;
+ args[0][strlen(args[0])-1] = '\0';
sscanf(args[1], "%d", &x);
sscanf(args[2], "%d", &y);
sscanf(args[3], "%d", &size);
args[4] = args[4]+2;
args[4][strlen(args[4])-1] = '\0';
- printf("Text: %s\n", text);
- printf("X: %d, Y: %d\n", x, y);
- printf("Size: %d, Color: %s\n", size, args[4]);
clr = parseColorFromHex(args[4]);
- result->text=text; result->x=x;
- result->y=y; result->fontSize=size;
+
+ result->text=text; result->fontSize=size;
+ result->x=x*scale; result->y=y*scale;
result->color=*clr;
free(clr);
@@ -418,13 +414,12 @@ BVGText *BVGParseText(char *argv[5]) {
/*
Takes a BVG function call and calls the according C function
*/
-void matchFunctionCall(char *call) {
- printf("Matching %s\n", call);
+void matchFunctionCall(char *call, float locScale) {
+ scale = locScale;
char *funcCall = strdup(call);
char *funcName = strsep(&funcCall, "(");
char *function = trim(strlwr(funcName));
free(funcName);
- printf("Got function %s\n", function);
call[strlen(call)-1]='\0';
if (strcmp(function, "rectangle") == 0) {
char *argv[7];
diff --git a/fbwarn/src/parseBVG.h b/fbwarn/src/parseBVG.h
index bf833cf..1a90c78 100644
--- a/fbwarn/src/parseBVG.h
+++ b/fbwarn/src/parseBVG.h
@@ -6,7 +6,7 @@
FILE *readFile(char *path);
char *multiToSingle(char *s);
-void matchFunctionCall(char *call);
+void matchFunctionCall(char *call, float locScale);
void collectArgs(char *res[], char *call, int n);
void orderArgs(char *res[], char *argv[], int n, char *knownArgs[]);
Color *parseColorFromHex(char *hex);
diff --git a/fbwarn/src/warn.c b/fbwarn/src/warn.c
index 195977c..70e4baf 100644
--- a/fbwarn/src/warn.c
+++ b/fbwarn/src/warn.c
@@ -61,6 +61,14 @@ int getFuncs(char *file, char ***ret) {
int main(int argc, char **argv) {
+ if (argc < 3) {
+ printf("USAGE: %s <bvg file> <scale>\n", argv[0]);
+ exit(1);
+ }
+
+ float scale;
+ sscanf(argv[2], "%f", &scale);
+
char **funcs;
int funcCount = getFuncs(argv[1], &funcs);
@@ -72,7 +80,7 @@ int main(int argc, char **argv) {
collectArgs(args, callTrim, 2);
BVGIMG *imgsize = BVGParseIMG(args);
- InitWindow (imgsize->width, imgsize->height, ":3");
+ InitWindow (imgsize->width*scale, imgsize->height*scale, ":3");
free(imgsize);
free(call-strlen("IMG ("));
@@ -91,7 +99,7 @@ int main(int argc, char **argv) {
// i = 1 since the first item is always IMG
for (int i = 1; i<funcCount; i++) {
char *single = multiToSingle(funcs[i]);
- matchFunctionCall(single);
+ matchFunctionCall(single, scale);
free(single);
free(funcs[i]);
}