Skip to content

Commit

Permalink
Finding paths to different program components
Browse files Browse the repository at this point in the history
  • Loading branch information
jszczerbinsky committed Feb 16, 2024
1 parent c08bac5 commit 3fc4a7a
Show file tree
Hide file tree
Showing 9 changed files with 257 additions and 119 deletions.
32 changes: 31 additions & 1 deletion src/common.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
#define MONITOR_NAME_MAX 100
#define WALLPAPER_NAME_MAX 100

#define DEFAULT_LINUX_PREFIX "/usr/local"

typedef struct
{
int x;
Expand Down Expand Up @@ -63,9 +65,37 @@ typedef struct
int targetFps;
} AppConfig;

MonitorInfo *scanMonitors(int *count);
//
// paths.c
//

#define APP_DIR_BIN 0
#define APP_DIR_SHARE 1
#define APP_DIR_USER_SETTINGS 2

void getAppDir(char *buff, int type);

void getMonitorCfgPath(char *buff, const char *name);
void getWlpCfgPath(char *buff, const char *dirPath);
void getAppCfgPath(char *buff);
void getLogPath(char *buff);

//
// monitorScanner.c
//

MonitorInfo *scanMonitors(int *count);

//
// wallpaperScanner.c
//

WallpaperInfo *scanWallpapers(int *count);

//
// config.c
//

void saveMonitorConfig(const char *name, MonitorConfig *mc);
int loadMonitorConfig(const char *name, MonitorConfig *mc);

Expand Down
97 changes: 52 additions & 45 deletions src/common/config.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,21 @@
#include "../common.h"

#define CONFIG_DEFAULT 0
#define CONFIG_USER 1
#define CONFIG_USER 1

void getMonitorConfigPath(const char *name, char *path) {
/*void getMonitorConfigPath(const char *name, char *path) {
#ifdef __WIN32
sprintf(path, "%s\\lwp\\monitors\\%s.cfg", g_get_user_data_dir(), name);
#else
sprintf(path, "%s/.config/lwp/monitors/%s.cfg", g_get_home_dir(), name);
#endif
}
void getWallpaperConfigPath(const char *dirName, char *path, int type) {
void getWallpaperConfigPath(const char *dirPath, char *path, int type) {
if (type == CONFIG_DEFAULT)
sprintf(path, "%s/wallpaper.cfg", dirName);
sprintf(path, "%s/wallpaper.cfg", dirPath);
else
sprintf(path, "%s/wallpaper.cfg", dirName);
sprintf(path, "%s/wallpaper.cfg", dirPath);
}
void getAppConfigPath(char *path, int type) {
Expand All @@ -34,18 +34,20 @@ void getAppConfigPath(char *path, int type) {
else
sprintf(path, "%s/.config/lwp/lwp.cfg", g_get_home_dir());
#endif
}
}*/

static void generateEmptyMonitorConfig(MonitorConfig *mc) {
static void generateEmptyMonitorConfig(MonitorConfig *mc)
{
sprintf(mc->wlpName, "");
mc->wlpBounds.x = 0;
mc->wlpBounds.y = 0;
mc->wlpBounds.w = 1920;
mc->wlpBounds.h = 1080;
}

void saveMonitorConfig(const char *name, MonitorConfig *mc) {
config_t cfg;
void saveMonitorConfig(const char *name, MonitorConfig *mc)
{
config_t cfg;
config_setting_t *root, *setting;

config_init(&cfg);
Expand All @@ -64,46 +66,48 @@ void saveMonitorConfig(const char *name, MonitorConfig *mc) {
config_setting_set_int(setting, mc->wlpBounds.h);

char path[PATH_MAX];
getMonitorConfigPath(name, path);
getMonitorCfgPath(path, name);

if (!config_write_file(&cfg, path)) {
if (!config_write_file(&cfg, path))
{
fprintf(stderr, "Error while writing file.\n");
config_destroy(&cfg);
}

config_destroy(&cfg);
}

int loadMonitorConfig(const char *name, MonitorConfig *mc) {
int loadMonitorConfig(const char *name, MonitorConfig *mc)
{
mc->loaded = 0;

config_t cfg;
config_t cfg;
config_setting_t *root, *setting;

char path[PATH_MAX];
getMonitorConfigPath(name, path);
getMonitorCfgPath(path, name);

if (!g_file_test(path, G_FILE_TEST_IS_REGULAR | G_FILE_TEST_EXISTS)) {
if (!g_file_test(path, G_FILE_TEST_IS_REGULAR | G_FILE_TEST_EXISTS))
{
generateEmptyMonitorConfig(mc);
saveMonitorConfig(name, mc);
return 1;
}

config_init(&cfg);
if (config_read_file(&cfg, path) == CONFIG_FALSE)
return 0;
if (config_read_file(&cfg, path) == CONFIG_FALSE) return 0;
root = config_root_setting(&cfg);

setting = config_setting_get_member(root, "wlpName");
strcpy(mc->wlpName, config_setting_get_string(setting));

setting = config_setting_get_member(root, "x");
setting = config_setting_get_member(root, "x");
mc->wlpBounds.x = config_setting_get_int(setting);
setting = config_setting_get_member(root, "y");
setting = config_setting_get_member(root, "y");
mc->wlpBounds.y = config_setting_get_int(setting);
setting = config_setting_get_member(root, "w");
setting = config_setting_get_member(root, "w");
mc->wlpBounds.w = config_setting_get_int(setting);
setting = config_setting_get_member(root, "h");
setting = config_setting_get_member(root, "h");
mc->wlpBounds.h = config_setting_get_int(setting);

config_destroy(&cfg);
Expand All @@ -112,66 +116,69 @@ int loadMonitorConfig(const char *name, MonitorConfig *mc) {
return 1;
}

int loadAppConfig(AppConfig *ac) {
config_t cfg;
int loadAppConfig(AppConfig *ac)
{
config_t cfg;
config_setting_t *root, *setting;

char path[PATH_MAX];
getAppConfigPath(path, CONFIG_USER);
getAppCfgPath(path);

config_init(&cfg);
if (config_read_file(&cfg, path) == CONFIG_FALSE) {
getAppConfigPath(path, CONFIG_DEFAULT);
if (config_read_file(&cfg, path) == CONFIG_FALSE)
return 0;
if (config_read_file(&cfg, path) == CONFIG_FALSE)
{
// todo: set default config values
return 0;
}
root = config_root_setting(&cfg);

#ifdef __LINUX
setting = config_setting_get_member(root, "draw_on_rootwindow");
setting = config_setting_get_member(root, "draw_on_rootwindow");
ac->drawOnRootWindow = config_setting_get_int(setting);
#endif
setting = config_setting_get_member(root, "target_fps");
setting = config_setting_get_member(root, "target_fps");
ac->targetFps = config_setting_get_int(setting);

config_destroy(&cfg);

return 1;
}

int loadWallpaperConfig(const char *dirName, WallpaperConfig *wc) {
int loadWallpaperConfig(const char *dirPath, WallpaperConfig *wc)
{
wc->loaded = 0;

config_t cfg;
config_t cfg;
config_setting_t *root, *setting;

config_init(&cfg);

char path[PATH_MAX];
getWallpaperConfigPath(dirName, path, CONFIG_USER);
getWlpCfgPath(path, dirPath);

if (config_read_file(&cfg, path) == CONFIG_FALSE) {
getWallpaperConfigPath(dirName, path, CONFIG_DEFAULT);
if (config_read_file(&cfg, path) == CONFIG_FALSE)
return 0;
if (config_read_file(&cfg, path) == CONFIG_FALSE)
{
getWlpCfgPath(path, dirPath);
if (config_read_file(&cfg, path) == CONFIG_FALSE) return 0;
}
root = config_root_setting(&cfg);

setting = config_setting_get_member(root, "count");
setting = config_setting_get_member(root, "count");
wc->layersCount = config_setting_get_int(setting);
setting = config_setting_get_member(root, "repeat_x");
wc->repeatX = config_setting_get_int(setting);
setting = config_setting_get_member(root, "repeat_y");
wc->repeatY = config_setting_get_int(setting);
setting = config_setting_get_member(root, "repeat_x");
wc->repeatX = config_setting_get_int(setting);
setting = config_setting_get_member(root, "repeat_y");
wc->repeatY = config_setting_get_int(setting);

wc->layerConfigs = malloc(wc->layersCount * sizeof(LayerConfig));

setting = config_setting_get_member(root, "movement_x");
setting = config_setting_get_member(root, "movement_x");
float movX = config_setting_get_float(setting);
setting = config_setting_get_member(root, "movement_y");
setting = config_setting_get_member(root, "movement_y");
float movY = config_setting_get_float(setting);

for (int i = 0; i < wc->layersCount; i++) {
for (int i = 0; i < wc->layersCount; i++)
{
LayerConfig *lc = wc->layerConfigs + i;

lc->sensitivityX = movX * i;
Expand Down
50 changes: 29 additions & 21 deletions src/common/monitorScanner.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,53 +13,61 @@
#ifdef __WIN32
int monitorEnumIndex = 0;

static BOOL monitorenumproc(HMONITOR monitor, HDC hdc, LPRECT rect,
LPARAM param) {
static BOOL monitorenumproc(HMONITOR monitor, HDC hdc, LPRECT rect, LPARAM param)
{
MONITORINFO info;
info.cbSize = sizeof(MONITORINFO);

GetMonitorInfo(monitor, &info);

MonitorInfo *mi = (MonitorInfo *)param + monitorEnumIndex;

snprintf(mi->name, MONITOR_NAME_MAX, "Monitor %d%s", monitorEnumIndex + 1,
info.dwFlags == MONITORINFOF_PRIMARY ? " (main)" : "");
mi->bounds.x = info.rcWork.left;
mi->bounds.y = info.rcWork.top;
mi->bounds.w = info.rcWork.right - info.rcWork.left;
mi->bounds.h = info.rcWork.bottom - info.rcWork.top;
snprintf(
mi->name,
MONITOR_NAME_MAX,
"Monitor %d%s",
monitorEnumIndex + 1,
info.dwFlags == MONITORINFOF_PRIMARY ? " (main)" : ""
);
mi->bounds.x = info.rcWork.left;
mi->bounds.y = info.rcWork.top;
mi->bounds.w = info.rcWork.right - info.rcWork.left;
mi->bounds.h = info.rcWork.bottom - info.rcWork.top;
mi->config.loaded = 0;

monitorEnumIndex++;
return TRUE;
}
#endif

MonitorInfo *scanMonitors(int *count) {
MonitorInfo *scanMonitors(int *count)
{
MonitorInfo *m = NULL;

#ifdef __WIN32
monitorEnumIndex = 0;
*count = GetSystemMetrics(SM_CMONITORS);
m = malloc(sizeof(MonitorInfo) * (*count));
*count = GetSystemMetrics(SM_CMONITORS);
m = malloc(sizeof(MonitorInfo) * (*count));

EnumDisplayMonitors(NULL, NULL, &monitorenumproc, (LPARAM)m);

#else
Display *display = XOpenDisplay((getenv("DISPLAY")));
Window wnd = DefaultRootWindow(display);
XRRMonitorInfo *info = XRRGetMonitors(display, wnd, 0, &monitorCount);
int monitorCount;

Display *display = XOpenDisplay((getenv("DISPLAY")));
Window wnd = DefaultRootWindow(display);
XRRMonitorInfo *info = XRRGetMonitors(display, wnd, 0, &monitorCount);

m = malloc(sizeof(MonitorInfo) * monitorCount);

int i = 0;
while (i < monitorCount) {
snprintf(m[i].name, MONITOR_NAME_MAX, "%s",
XGetAtomName(display, info->name));
m[i].bounds.x = info->x;
m[i].bounds.y = info->y;
m[i].bounds.w = info->width;
m[i].bounds.h = info->height;
while (i < monitorCount)
{
snprintf(m[i].name, MONITOR_NAME_MAX, "%s", XGetAtomName(display, info->name));
m[i].bounds.x = info->x;
m[i].bounds.y = info->y;
m[i].bounds.w = info->width;
m[i].bounds.h = info->height;
m[i].config.loaded = 0;

info++;
Expand Down
Loading

0 comments on commit 3fc4a7a

Please sign in to comment.