static void glw_update_sizes(glw_root_t *gr) { int val; int base_size = gr->gr_height / 35; // 35 is just something val = GLW_CLAMP(base_size + glw_settings.gs_size, 14, 40); if(gr->gr_current_size != val) { gr->gr_current_size = val; prop_set(gr->gr_prop_ui, "size", PROP_SET_INT, val); glw_text_flush(gr); glw_icon_flush(gr); TRACE(TRACE_DEBUG, "GLW", "UI size scale changed to %d", val); } val = GLW_CLAMP(gr->gr_base_underscan_h + glw_settings.gs_underscan_h, 0, 100); if(gr->gr_underscan_h != val) { prop_set(gr->gr_prop_ui, "underscan_h", PROP_SET_INT, val); gr->gr_underscan_h = val; } val = GLW_CLAMP(gr->gr_base_underscan_v + glw_settings.gs_underscan_v, 0, 100); if(gr->gr_underscan_v != val) { prop_set(gr->gr_prop_ui, "underscan_v", PROP_SET_INT, val); gr->gr_underscan_v = val; } }
void glw_scroll_layout(glw_scroll_control_t *gsc, glw_t *w, int height) { const int max_value = MAX(0, gsc->total_size - gsc->page_size + gsc->scroll_threshold_post); if(w->glw_root->gr_pointer_grab == w) { gsc->filtered_pos = gsc->target_pos; gsc->filtered_pos = GLW_CLAMP(gsc->filtered_pos, 0, max_value); } else if(gsc->kinetic_scroll) { gsc->filtered_pos += gsc->kinetic_scroll; gsc->target_pos = gsc->filtered_pos; gsc->kinetic_scroll *= 0.95; gsc->filtered_pos = GLW_CLAMP(gsc->filtered_pos, 0, max_value); } else { gsc->target_pos = GLW_CLAMP(gsc->target_pos, 0, max_value); if(fabsf(gsc->target_pos - gsc->filtered_pos) > height * 2) { gsc->filtered_pos = gsc->target_pos; } else { glw_lp(&gsc->filtered_pos, w->glw_root, gsc->target_pos, 0.25); } } gsc->rounded_pos = gsc->filtered_pos; }
static void set_color2(glw_t *w, const float *rgb) { glw_gradient_t *gg = (glw_gradient_t *)w; gg->gg_col2[0] = GLW_CLAMP(rgb[0], 0, 1); gg->gg_col2[1] = GLW_CLAMP(rgb[1], 0, 1); gg->gg_col2[2] = GLW_CLAMP(rgb[2], 0, 1); gg->gg_repaint = 1; }
void glw_scroll_layout(glw_scroll_control_t *gsc, glw_t *w, int height) { const int max_value = MAX(0, gsc->total_size - gsc->page_size + gsc->scroll_threshold_post); if(w->glw_root->gr_pointer_grab_scroll == w) { gsc->filtered_pos = gsc->target_pos; gsc->filtered_pos = GLW_CLAMP(gsc->filtered_pos, 0, max_value); } else if(fabsf(gsc->kinetic_scroll) > 0.5) { gsc->filtered_pos += gsc->kinetic_scroll; if(gsc->target_pos != gsc->filtered_pos) { gsc->target_pos = gsc->filtered_pos; glw_need_refresh(w->glw_root, 0); } gsc->kinetic_scroll *= 0.95; gsc->bottom_anchored = 0; gsc->filtered_pos = GLW_CLAMP(gsc->filtered_pos, 0, max_value); } else { gsc->kinetic_scroll = 0; if(gsc->bottom_gravity) { if(gsc->target_pos == max_value) { gsc->bottom_anchored = 1; } if(gsc->bottom_anchored) { if(gsc->target_pos != max_value) { w->glw_flags |= GLW_UPDATE_METRICS; } gsc->target_pos = max_value; } } gsc->target_pos = GLW_CLAMP(gsc->target_pos, 0, max_value); if(fabsf(gsc->target_pos - gsc->filtered_pos) > height * 2) { gsc->filtered_pos = gsc->target_pos; } else { glw_lp(&gsc->filtered_pos, w->glw_root, gsc->target_pos, 0.25); } } gsc->rounded_pos = rintf(gsc->filtered_pos * 5.0f) / 5.0f; }
static void set_blur(glw_t *w, float v) { v = GLW_CLAMP(1 - v, 0, 1); if(w->glw_sharpness == v) return; w->glw_sharpness = v; glw_need_refresh(w->glw_root, 0); }
static void glw_change_underscan_v(void *opaque, int v) { glw_root_t *gr = opaque; v += gr->gr_base_underscan_v; v = GLW_CLAMP(v, 0, 100); prop_set_int(gr->gr_prop_underscan_v, v); gr->gr_underscan_v = v; }
static void glw_change_size(void *opaque, int v) { glw_root_t *gr = opaque; v += gr->gr_base_size; v = GLW_CLAMP(v, 14, 40); prop_set_int(gr->gr_prop_size, v); TRACE(TRACE_DEBUG, "GLW", "UI size scale changed to %d", v); glw_font_change_size(gr, v); }
void glw_update_size(glw_root_t *gr) { int v = gr->gr_base_size + gr->gr_user_size; v = GLW_CLAMP(v, 14, 40); if(gr->gr_current_size == v) return; gr->gr_current_size = v; prop_set_int(gr->gr_prop_size, v); glw_text_flush(gr); glw_icon_flush(gr); TRACE(TRACE_DEBUG, "GLW", "UI size scale changed to %d", v); }
static void set_blur(glw_t *w, float v) { w->glw_blur = GLW_CLAMP(1 - v, 0, 1); }
int glw_scroll_handle_pointer_event(glw_scroll_control_t *gs, glw_t *w, const glw_pointer_event_t *gpe) { glw_root_t *gr = w->glw_root; int64_t dt; const int grabbed = gr->gr_pointer_grab_scroll == w; float v; switch(gpe->type) { case GLW_POINTER_SCROLL: gs->bottom_anchored = 0; gs->target_pos += gs->page_size * gpe->delta_y; w->glw_flags |= GLW_UPDATE_METRICS; glw_schedule_refresh(w->glw_root, 0); return 1; case GLW_POINTER_FINE_SCROLL: gs->bottom_anchored = 0; gs->target_pos += gpe->delta_y; w->glw_flags |= GLW_UPDATE_METRICS; glw_schedule_refresh(w->glw_root, 0); return 1; case GLW_POINTER_TOUCH_CANCEL: if(grabbed) gr->gr_pointer_grab_scroll = NULL; return 1; case GLW_POINTER_FOCUS_MOTION: if(!grabbed) return 0; gs->bottom_anchored = 0; gs->target_pos = (gpe->local_y - gs->initial_touch_y) * gs->page_size * 0.5 + gs->initial_pos; const int max_value = MAX(0, gs->total_size - gs->page_size + gs->scroll_threshold_post); gs->target_pos = GLW_CLAMP(gs->target_pos, 0, max_value); if(abs(gs->target_pos - gs->initial_pos) > 15) { if(gr->gr_pointer_press != NULL) { glw_path_modify(gr->gr_pointer_press, 0, GLW_IN_PRESSED_PATH, NULL); gr->gr_pointer_press = NULL; } } dt = gpe->ts - gs->last_touch_time; if(dt > 100) { v = 1000000.0 * (gpe->local_y - gs->last_touch_y) / dt; gs->touch_velocity = v * 10; } gs->last_touch_time = gpe->ts; gs->last_touch_x = gpe->local_x; gs->last_touch_y = gpe->local_y; w->glw_flags |= GLW_UPDATE_METRICS; glw_schedule_refresh(w->glw_root, 0); break; default: return 0; } return 0; }