render: implement coordinate-based anchor positioning
Not to be confused with Minecraft coordinates. Signed-off-by: NotAShelf <raf@notashelf.dev> Change-Id: Ifdb90fc92a1565ba1d30b85c91d6e1ab6a6a6964
This commit is contained in:
parent
b6780cc180
commit
dadba853e8
4 changed files with 168 additions and 85 deletions
39
src/core.c
39
src/core.c
|
|
@ -113,20 +113,29 @@ static int assign_wallpaper_to_output(chroma_state_t *state,
|
|||
chroma_scale_mode_t old_scale_mode = output->scale_mode;
|
||||
chroma_filter_quality_t old_filter_quality = output->filter_quality;
|
||||
chroma_anchor_t old_anchor = output->anchor;
|
||||
float old_anchor_x = output->anchor_x;
|
||||
float old_anchor_y = output->anchor_y;
|
||||
bool had_config = output->config_loaded;
|
||||
|
||||
// Load configuration for this output (scale mode, filter quality, anchor)
|
||||
// Load configuration for this output (scale mode, filter quality, anchor,
|
||||
// anchor coords)
|
||||
if (chroma_config_get_mapping_for_output(
|
||||
&state->config, output->name ? output->name : "unknown",
|
||||
&output->scale_mode, &output->filter_quality, &output->anchor) == CHROMA_OK) {
|
||||
&output->scale_mode, &output->filter_quality, &output->anchor,
|
||||
&output->anchor_x, &output->anchor_y) == CHROMA_OK) {
|
||||
output->config_loaded = true;
|
||||
chroma_log("DEBUG", "Loaded config for output %u: scale=%d, filter=%d, anchor=%d",
|
||||
output->id, output->scale_mode, output->filter_quality, output->anchor);
|
||||
chroma_log("DEBUG",
|
||||
"Loaded config for output %u: scale=%d, filter=%d, anchor=%d @ "
|
||||
"%.1f,%.1f",
|
||||
output->id, output->scale_mode, output->filter_quality,
|
||||
output->anchor, output->anchor_x, output->anchor_y);
|
||||
|
||||
// Check if configuration changed and invalidate texture if needed
|
||||
if (had_config && (old_scale_mode != output->scale_mode ||
|
||||
old_filter_quality != output->filter_quality ||
|
||||
old_anchor != output->anchor)) {
|
||||
if (had_config &&
|
||||
(old_scale_mode != output->scale_mode ||
|
||||
old_filter_quality != output->filter_quality ||
|
||||
old_anchor != output->anchor || old_anchor_x != output->anchor_x ||
|
||||
old_anchor_y != output->anchor_y)) {
|
||||
chroma_output_invalidate_texture(output);
|
||||
output->vbo_dirty = true; // VBO needs update for new scale mode
|
||||
chroma_log("DEBUG",
|
||||
|
|
@ -380,14 +389,16 @@ void chroma_log(const char *level, const char *format, ...) {
|
|||
gettimeofday(&tv, NULL);
|
||||
tm_info = localtime(&tv.tv_sec);
|
||||
|
||||
truncation_check = snprintf(timestamp, sizeof(timestamp), "%04d-%02d-%02d %02d:%02d:%02d.%03d",
|
||||
tm_info->tm_year + 1900, tm_info->tm_mon + 1, tm_info->tm_mday,
|
||||
tm_info->tm_hour, tm_info->tm_min, tm_info->tm_sec,
|
||||
(int)(tv.tv_usec / 1000));
|
||||
truncation_check =
|
||||
snprintf(timestamp, sizeof(timestamp),
|
||||
"%04d-%02d-%02d %02d:%02d:%02d.%03d", tm_info->tm_year + 1900,
|
||||
tm_info->tm_mon + 1, tm_info->tm_mday, tm_info->tm_hour,
|
||||
tm_info->tm_min, tm_info->tm_sec, (int)(tv.tv_usec / 1000));
|
||||
|
||||
if(truncation_check > 32 || truncation_check < 0) {
|
||||
// Something went seriously wrong with the snprintf, this is a fairly serious error as
|
||||
// the timestamp may be incomplete or corrupted, so print a warning
|
||||
if (truncation_check > 32 || truncation_check < 0) {
|
||||
// Something went seriously wrong with the snprintf, this is a fairly
|
||||
// serious error as the timestamp may be incomplete or corrupted, so print a
|
||||
// warning
|
||||
printf("Following timestamp may be incomplete, truncated or corrupted!\n");
|
||||
}
|
||||
printf("[%s] %s: ", timestamp, level);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue