From 063ef047f4f6f626c5341da333bac5d404bc5921 Mon Sep 17 00:00:00 2001 From: TheMohawkNinja Date: Sun, 20 Nov 2022 19:11:24 -0500 Subject: [PATCH] Removed need for janky xrandr system() calls. --- WallFade.cpp | 205 +++++++++++++++++++-------------------------------- 1 file changed, 77 insertions(+), 128 deletions(-) diff --git a/WallFade.cpp b/WallFade.cpp index 44be395..b6e9701 100644 --- a/WallFade.cpp +++ b/WallFade.cpp @@ -10,9 +10,11 @@ #include #include #include +#include #include #include #include +//#include "setroot.h" using namespace std; using namespace Magick; @@ -20,7 +22,7 @@ using namespace Magick; ifstream readstream; ofstream writestream; struct timeval currentTime; -int confIndex_int, ctr, Rctr, Gctr, Bctr, bgW, bgH, rndHold, rndHoldOld, screens, maxPics; +int confIndex_int, ctr, Rctr, Gctr, Bctr, bgW, bgH, rndHold, rndHoldOld, monitors, maxPics; int milisecond=1000; int second=1000*milisecond; int threshold=100; @@ -31,7 +33,6 @@ const int maxMonitors=8; const int maxTerms=100; int monitorXRes[maxMonitors], monitorYRes[maxMonitors], monitorXOff[maxMonitors], monitorYOff[maxMonitors]; int term[maxTerms], termX[maxTerms], termY[maxTerms]; -long int bgPaintTime; double avgR, avgG, avgB, avgRTrans, avgGTrans, avgBTrans, r, g, b, fadePoint; bool colorForce=false; bool fadeForeground=false; @@ -57,8 +58,10 @@ ColorRGB AVG, oldAVG[maxMonitors]; ColorRGB ColorSample[30][30], oldColorSample[30][30]; Image background, lastbackground; Image A, B, maskA, maskB, compResult; -Display* d=XOpenDisplay(NULL); -Screen* s=DefaultScreenOfDisplay(d); +Display* dpy=XOpenDisplay(NULL); +Screen* screen=DefaultScreenOfDisplay(dpy); +XRRScreenResources* XRRscreen; +XRRCrtcInfo *crtc_info; void output(FILE* stream, const char* format, ...) { @@ -72,24 +75,6 @@ void output(FILE* stream, const char* format, ...) va_end(args); } -string getCmdOut(string cmd) -{ - string data; - FILE* stream; - const int max_buffer = 256; - char buffer[max_buffer]; - cmd.append(" 2>&1"); - stream=popen(cmd.c_str(), "r"); - - if(stream) - { - while (!feof(stream)) - if (fgets(buffer, max_buffer, stream) != NULL) data.append(buffer); - pclose(stream); - } - - return data; -} bool fexists(const char *filename) { ifstream ifile(filename); @@ -211,26 +196,15 @@ void updateTermColors() //Refresh TermColors remove((configpath+"TermColors").c_str()); - for(int s=0; s> "+configpath+"TermColors").c_str()); - system(("echo "+to_string(monitorYRes[s])+" >> "+configpath+"TermColors").c_str()); - system(("echo "+to_string(monitorXOff[s])+" >> "+configpath+"TermColors").c_str()); - system(("echo "+to_string(monitorYOff[s])+" >> "+configpath+"TermColors").c_str()); - system(("echo "+avgRHex[s]+avgGHex[s]+avgBHex[s]+" >> "+configpath+"TermColors").c_str()); + system(("echo "+to_string(monitorXRes[m])+" >> "+configpath+"TermColors").c_str()); + system(("echo "+to_string(monitorYRes[m])+" >> "+configpath+"TermColors").c_str()); + system(("echo "+to_string(monitorXOff[m])+" >> "+configpath+"TermColors").c_str()); + system(("echo "+to_string(monitorYOff[m])+" >> "+configpath+"TermColors").c_str()); + system(("echo "+avgRHex[m]+avgGHex[m]+avgBHex[m]+" >> "+configpath+"TermColors").c_str()); } } -void setBackground(std::string h, std::string p, std::string i) -{ - if(i!="") - { - system(("nitrogen --head="+h+" --set-scaled "+p+".cache/transition"+i+".jpg").c_str()); - } - else - { - system(("nitrogen --head="+h+" --set-scaled "+p).c_str()); - } -} void foregroundColorSet(int s) { //Make 30*30 sample space from image @@ -505,48 +479,35 @@ int main(int argc, char **argv) { InitializeMagick(*argv); + XRRscreen = XRRGetScreenResources (dpy, DefaultRootWindow(dpy)); + for(int i=0; i> screens; + //Get number of monitors + monitors=XRRscreen->ncrtc; //Get monitor info - output(stdout,"Monitor X resolutions\n"); - for(int i=0; i> monitorXRes[i]; - output(stdout,"%d\n",monitorXRes[i]); - } - - output(stdout,"Monitor Y resolutions\n"); - for(int i=0; i> monitorYRes[i]; - output(stdout,"%d\n",monitorYRes[i]); - } - - output(stdout,"Monitor X offsets\n"); - for(int i=0; i> monitorXOff[i]; - output(stdout,"%d\n",monitorXOff[i]); + crtc_info = XRRGetCrtcInfo (dpy, XRRscreen, XRRscreen->crtcs[i]); + if(crtc_info->width||crtc_info->height||crtc_info->x||crtc_info->y) + { + monitorXRes[i]=crtc_info->width; + monitorYRes[i]=crtc_info->height; + monitorXOff[i]=crtc_info->x; + monitorYOff[i]=crtc_info->y; + + output(stdout,"\nMonitor %d\n",i); + output(stdout,"\tWidth: %d\n",monitorXRes[i]); + output(stdout,"\tHeight: %d\n",monitorYRes[i]); + output(stdout,"\tX Offset: %d\n",monitorXOff[i]); + output(stdout,"\tY Offset: %d\n",monitorYOff[i]); + } } - output(stdout,"Monitor Y offsets\n"); - for(int i=0; i> monitorYOff[i]; - output(stdout,"%d\n",monitorYOff[i]); - } - //Check for config file and make one if it does not exist if(!fexists((configpath).c_str())) { @@ -589,8 +550,10 @@ int main(int argc, char **argv) while(true) { - for(int S=0; S0) - { - usleep(subdelay-bgPaintTime); - } + usleep(subdelay); } - //gettimeofday(¤tTime, NULL); - //bgPaintTime=(currentTime.tv_sec*1000)+(currentTime.tv_usec/1000); - //system(("nitrogen --head="+to_string(S)+" --set-scaled "+newpic).c_str()); - std::thread setBackgroundThread(setBackground, to_string(S), newpic, ""); - setBackgroundThread.detach(); - //gettimeofday(¤tTime, NULL); - //bgPaintTime=((currentTime.tv_sec*1000)+(currentTime.tv_usec/1000))-bgPaintTime; + system(("nitrogen --head="+to_string(M)+" --set-scaled "+newpic).c_str()); if(fadeForeground) { @@ -830,43 +779,43 @@ int main(int argc, char **argv) //Convert averages to hex stream<