aboutsummaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.c')
-rwxr-xr-xsrc/main.c103
1 files changed, 87 insertions, 16 deletions
diff --git a/src/main.c b/src/main.c
index 6a0310b..9e7f5f6 100755
--- a/src/main.c
+++ b/src/main.c
@@ -52,6 +52,7 @@ typedef struct{
char *export_name;
bool print;
float brightness;
+ bool printMultiColorVars;
} Pargs;
void arg_interpet(char *argv[], Pargs *pargs){
@@ -70,6 +71,7 @@ void arg_interpet(char *argv[], Pargs *pargs){
printf("-b [size] sets the box size\n");
printf("-o [file.png] exports the image\n");
printf("-B [brightness float] sets brightness\n");
+ printf("-C enables colorvars for ascii output. enable -p and perferable use -c color\n intended to be used for fastfetch\n");
printf("defaults \n none \n N@EW$9876543210?!abc;:+=-,._ \n width 900 \n height 900 \n char size 10 \n box size 10");
exit(0);
}
@@ -83,6 +85,10 @@ void arg_interpet(char *argv[], Pargs *pargs){
pargs->print=true;
}
+ if (strcmp(argv[i],"-C")==0){
+ pargs->printMultiColorVars=true;
+ }
+
if (strcmp(argv[i],"-c")==0){
if(argv[i+2]){}else{
printf("you must specify a color with -C\n\n");
@@ -177,6 +183,78 @@ void arg_interpet(char *argv[], Pargs *pargs){
}
+SDL_Color hexToColor(char *str){
+ int r, g, b;
+ sscanf(str, "%02x%02x%02x", &r, &g, &b);
+ return (SDL_Color){r,g,b};
+}
+
+float magnitude(float x, float y, float z) {
+ return sqrt((pow(x,2) + pow(y,2) + pow(z,2)));
+}
+
+int getMultiColor(SDL_Color *color){
+ int colorCount=8;
+ char **color_hexs=(char**)malloc(sizeof(char*)*colorCount);
+ //for (int i=0; i<16; i++){
+ // color_hexs[i]=(char*)malloc(sizeof(char)*8);
+ //}
+ color_hexs[0]="000000";
+ color_hexs[1]="AA0000";
+ color_hexs[2]="00AA00";
+ color_hexs[3]="AA5500";
+ color_hexs[4]="0000AA";
+ color_hexs[5]="AA00AA";
+ color_hexs[6]="00AAAA";
+ color_hexs[7]="AAAAAA";
+ //color_hexs[8]="555555";
+ //color_hexs[9]="FF5555";
+ //color_hexs[10]="55FF55";
+ //color_hexs[11]="FFFF55";
+ //color_hexs[12]="5555FF";
+ //color_hexs[13]="FF55FF";
+ //color_hexs[14]="55FFFF";
+ //color_hexs[15]="FFFFFF";
+
+ //#000000
+ //#AA0000
+ //#00AA00
+ //#AA5500
+ //#0000AA
+ //#AA00AA
+ //#00AAAA
+ //#AAAAAA
+ //#555555
+ //#FF5555
+ //#55FF55
+ //#FFFF55
+ //#5555FF
+ //#FF55FF
+ //#55FFFF
+ //#FFFFFF
+
+ float colors[colorCount];
+ for (int i=0; i<colorCount; i++){
+ SDL_Color sel_col = hexToColor(color_hexs[i]);
+ colors[i] = magnitude((float)color->r-sel_col.r, (float)color->g-sel_col.g, (float)color->b-sel_col.b);
+ }
+
+ int sel=0;
+ float last_dist=99999;
+ for (int i=0; i<colorCount; i++){
+ if(colors[i] < last_dist){
+ sel=i;
+ last_dist=colors[i];
+ }
+ }
+
+ //for (int i=0; i<16; i++){
+ // free(color_hexs[i]);
+ //}
+ free(color_hexs);
+ return sel+1;
+}
+
void draw(SDL_Renderer* renderer,SDL_Window* window, uint32_t pix_format,TTF_Font *font,Pargs *parsed_args){
SDL_Rect textRect;
@@ -201,7 +279,7 @@ void draw(SDL_Renderer* renderer,SDL_Window* window, uint32_t pix_format,TTF_Fon
int pitch = SDL_CalculatePitch(pix_format, parsed_args->width);
//int a=SDL_RenderReadPixels(renderer, NULL, pix_format, Rpixels, parsed_args->width * sizeof(Uint32));
- int a=SDL_RenderReadPixels(renderer, NULL, pix_format, Rpixels, pitch);
+ SDL_RenderReadPixels(renderer, NULL, pix_format, Rpixels, pitch);
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
@@ -235,7 +313,6 @@ void draw(SDL_Renderer* renderer,SDL_Window* window, uint32_t pix_format,TTF_Fon
int avg = (r2 + g2 + b2) / 3;
- int avg_conv=avg;
float inver=255-(avg)-1;
if (inver>254){ inver=254; }
@@ -261,9 +338,16 @@ void draw(SDL_Renderer* renderer,SDL_Window* window, uint32_t pix_format,TTF_Fon
break;
}
+
sel_char[0]=parsed_args->density[charIndex];
sel_char[1]='\0';
- if(parsed_args->print==true){printf("%s",sel_char);}
+ if(parsed_args->print==true){
+ if(parsed_args->printMultiColorVars && sel_char[0] != ' '){
+ int charcol=getMultiColor(&color);
+ printf("$%d",charcol);
+ }
+ printf("%s",sel_char);
+ }
textllure2=createText(sel_char, renderer, &textRect2, font, color);
SDL_RenderCopy(renderer,textllure2,NULL, &textRect2);
@@ -286,7 +370,6 @@ void draw(SDL_Renderer* renderer,SDL_Window* window, uint32_t pix_format,TTF_Fon
//SDL_RenderReadPixels(renderer, NULL, SDL_GetWindowPixelFormat(window), pScreenShot->pixels, pScreenShot->pitch);
SDL_RenderReadPixels(renderer, NULL, SDL_GetWindowPixelFormat(window), pScreenShot->pixels, pScreenShot->pitch);
- char num[100];
char* name=parsed_args->export_name;
// Create the bmp screenshot file
@@ -337,23 +420,11 @@ int main(int argc, char *argv[])
bool quit = false;
SDL_Event e;
- bool mousedown=false;
- int gmouseX=0;
- int gmouseY=0;
while (!quit) {
while (SDL_PollEvent(&e)) {
if (e.type == SDL_QUIT) {
quit = true;
}
- else if(e.type == SDL_MOUSEBUTTONDOWN){
- } else if(e.type==SDL_MOUSEBUTTONUP){
- }
- gmouseX=e.button.x;
- gmouseY=e.button.y;
- }
- float mouseoutX=gmouseX;
- float mouseoutY=gmouseY;
- if(mousedown==true){
}
SDL_Delay(10);
}