No need for entire screen object when scaling a scroll

This commit is contained in:
Kovid Goyal 2022-06-18 06:55:28 +05:30
parent a89e1b5573
commit 6912d8c086
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -816,9 +816,9 @@ mouse_event(const int button, int modifiers, int action) {
}
static int
scale_scroll(Screen *screen, double offset, bool is_high_resolution, double *pending_scroll_pixels, int cell_size) {
scale_scroll(MouseTrackingMode mouse_tracking_mode, double offset, bool is_high_resolution, double *pending_scroll_pixels, int cell_size) {
// scale the scroll by the multiplier unless the mouse is grabbed. If the mouse is grabbed only change direction.
#define SCALE_SCROLL(which) { double scale = OPT(which); if (screen->modes.mouse_tracking_mode) scale /= fabs(scale); offset *= scale; }
#define SCALE_SCROLL(which) { double scale = OPT(which); if (mouse_tracking_mode) scale /= fabs(scale); offset *= scale; }
int s = 0;
if (is_high_resolution) {
SCALE_SCROLL(touch_scroll_multiplier);
@ -833,7 +833,7 @@ scale_scroll(Screen *screen, double offset, bool is_high_resolution, double *pen
SCALE_SCROLL(wheel_scroll_multiplier);
s = (int) round(offset);
if (offset != 0) {
const int min_lines = screen->modes.mouse_tracking_mode ? 1 : OPT(wheel_scroll_min_lines);
const int min_lines = mouse_tracking_mode ? 1 : OPT(wheel_scroll_min_lines);
if (min_lines > 0 && abs(s) < min_lines) s = offset > 0 ? min_lines : -min_lines;
// Always add the minimum number of lines when it is negative
else if (min_lines < 0) s = offset > 0 ? s - min_lines : s + min_lines;
@ -910,7 +910,7 @@ scroll_event(double xoffset, double yoffset, int flags, int modifiers) {
bool is_high_resolution = flags & 1;
if (yoffset != 0.0) {
s = scale_scroll(screen, yoffset, is_high_resolution, &screen->pending_scroll_pixels_y, global_state.callback_os_window->fonts_data->cell_height);
s = scale_scroll(screen->modes.mouse_tracking_mode, yoffset, is_high_resolution, &screen->pending_scroll_pixels_y, global_state.callback_os_window->fonts_data->cell_height);
if (s) {
bool upwards = s > 0;
if (screen->modes.mouse_tracking_mode) {
@ -928,7 +928,7 @@ scroll_event(double xoffset, double yoffset, int flags, int modifiers) {
}
}
if (xoffset != 0.0) {
s = scale_scroll(screen, xoffset, is_high_resolution, &screen->pending_scroll_pixels_x, global_state.callback_os_window->fonts_data->cell_width);
s = scale_scroll(screen->modes.mouse_tracking_mode, xoffset, is_high_resolution, &screen->pending_scroll_pixels_x, global_state.callback_os_window->fonts_data->cell_width);
if (s) {
if (screen->modes.mouse_tracking_mode) {
int sz = encode_mouse_scroll(w, s > 0 ? 6 : 7, modifiers);