added horizontal scroll
added the ability to scroll gorizontally, in two ways: - with a touchpad - holding "alt" and scrolling also made the scroll senitivity configurable for both directions
This commit is contained in:
parent
a7df717cf0
commit
a5e90420e8
4
TODO
4
TODO
@ -16,7 +16,7 @@
|
|||||||
[ ] that command can be what is selected
|
[ ] that command can be what is selected
|
||||||
[ ] console: accept input
|
[ ] console: accept input
|
||||||
[ ] doc: detect file changes with hash
|
[ ] doc: detect file changes with hash
|
||||||
[ ] add horizontal scroll
|
[x] add horizontal scroll
|
||||||
[ ] add a cross to close tab
|
[ ] add a cross to close tab
|
||||||
[ ] add context menu to various things
|
[ ] add context menu to various things
|
||||||
[ ] document and selection context menu
|
[ ] document and selection context menu
|
||||||
@ -55,3 +55,5 @@
|
|||||||
[ ] show hidden files config and binding
|
[ ] show hidden files config and binding
|
||||||
[ ] syntax: highlight FIXME TODO BUG FIX and IMPROVEMENT keywords
|
[ ] syntax: highlight FIXME TODO BUG FIX and IMPROVEMENT keywords
|
||||||
[ ] do not open doc in new tab if current tab has an unchanged document
|
[ ] do not open doc in new tab if current tab has an unchanged document
|
||||||
|
[ ] doc: add auto close brackets and quotes
|
||||||
|
[ ] view: implement get_scrollable_size()
|
||||||
|
@ -4,7 +4,8 @@ config.project_scan_rate = 5
|
|||||||
config.fps = 60
|
config.fps = 60
|
||||||
config.max_log_items = 80
|
config.max_log_items = 80
|
||||||
config.message_timeout = 3
|
config.message_timeout = 3
|
||||||
config.mouse_wheel_scroll = 50 * SCALE
|
config.mouse_wheel_scroll_y = 50 * SCALE
|
||||||
|
config.mouse_wheel_scroll_x = 30 * SCALE
|
||||||
config.file_size_limit = 10
|
config.file_size_limit = 10
|
||||||
config.ignore_files = "^%."
|
config.ignore_files = "^%."
|
||||||
config.symbol_pattern = "[%a_][%w_]*"
|
config.symbol_pattern = "[%a_][%w_]*"
|
||||||
|
@ -473,10 +473,10 @@ function RootView:on_mouse_moved(x, y, dx, dy)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function RootView:on_mouse_wheel(...)
|
function RootView:on_mouse_wheel(dy, dx)
|
||||||
local x, y = self.mouse.x, self.mouse.y
|
local x, y = self.mouse.x, self.mouse.y
|
||||||
local node = self.root_node:get_child_overlapping_point(x, y)
|
local node = self.root_node:get_child_overlapping_point(x, y)
|
||||||
node.active_view:on_mouse_wheel(...)
|
node.active_view:on_mouse_wheel(dy, dx)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@ local config = require "core.config"
|
|||||||
local style = require "core.style"
|
local style = require "core.style"
|
||||||
local common = require "core.common"
|
local common = require "core.common"
|
||||||
local Object = require "core.object"
|
local Object = require "core.object"
|
||||||
|
local keymap = require "core.keymap"
|
||||||
|
|
||||||
|
|
||||||
local View = Object:extend()
|
local View = Object:extend()
|
||||||
@ -44,6 +45,7 @@ function View:get_name()
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
-- TODO: implement this
|
||||||
function View:get_scrollable_size()
|
function View:get_scrollable_size()
|
||||||
return math.huge
|
return math.huge
|
||||||
end
|
end
|
||||||
@ -96,9 +98,14 @@ function View:on_text_input(text)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function View:on_mouse_wheel(y)
|
function View:on_mouse_wheel(y, x)
|
||||||
if self.scrollable then
|
if self.scrollable then
|
||||||
self.scroll.to.y = self.scroll.to.y + y * -config.mouse_wheel_scroll
|
if keymap.modkeys['alt'] then
|
||||||
|
self.scroll.to.x = self.scroll.to.x + y * -config.mouse_wheel_scroll_x
|
||||||
|
else
|
||||||
|
self.scroll.to.y = self.scroll.to.y + y * -config.mouse_wheel_scroll_y
|
||||||
|
self.scroll.to.x = self.scroll.to.x + x * -config.mouse_wheel_scroll_x
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -118,8 +125,10 @@ end
|
|||||||
|
|
||||||
|
|
||||||
function View:clamp_scroll_position()
|
function View:clamp_scroll_position()
|
||||||
local max = self:get_scrollable_size() - self.size.y
|
local max_y = self:get_scrollable_size() - self.size.y
|
||||||
self.scroll.to.y = common.clamp(self.scroll.to.y, 0, max)
|
local max_x = self:get_scrollable_size() - self.size.x
|
||||||
|
self.scroll.to.y = common.clamp(self.scroll.to.y, 0, max_y)
|
||||||
|
self.scroll.to.x = common.clamp(self.scroll.to.x, 0, max_x)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -94,7 +94,7 @@ top:
|
|||||||
return 2;
|
return 2;
|
||||||
|
|
||||||
case SDL_MOUSEBUTTONDOWN:
|
case SDL_MOUSEBUTTONDOWN:
|
||||||
if (e.button.button == 1)
|
if (e.button.button == 1)
|
||||||
SDL_CaptureMouse(1);
|
SDL_CaptureMouse(1);
|
||||||
lua_pushstring(L, "mousepressed");
|
lua_pushstring(L, "mousepressed");
|
||||||
lua_pushstring(L, button_name(e.button.button));
|
lua_pushstring(L, button_name(e.button.button));
|
||||||
@ -104,7 +104,7 @@ top:
|
|||||||
return 5;
|
return 5;
|
||||||
|
|
||||||
case SDL_MOUSEBUTTONUP:
|
case SDL_MOUSEBUTTONUP:
|
||||||
if (e.button.button == 1)
|
if (e.button.button == 1)
|
||||||
SDL_CaptureMouse(0);
|
SDL_CaptureMouse(0);
|
||||||
lua_pushstring(L, "mousereleased");
|
lua_pushstring(L, "mousereleased");
|
||||||
lua_pushstring(L, button_name(e.button.button));
|
lua_pushstring(L, button_name(e.button.button));
|
||||||
@ -123,7 +123,8 @@ top:
|
|||||||
case SDL_MOUSEWHEEL:
|
case SDL_MOUSEWHEEL:
|
||||||
lua_pushstring(L, "mousewheel");
|
lua_pushstring(L, "mousewheel");
|
||||||
lua_pushnumber(L, e.wheel.y);
|
lua_pushnumber(L, e.wheel.y);
|
||||||
return 2;
|
lua_pushnumber(L, e.wheel.x);
|
||||||
|
return 3;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
goto top;
|
goto top;
|
||||||
@ -189,7 +190,7 @@ static int f_set_window_mode(lua_State *L)
|
|||||||
n == WIN_FULLSCREEN ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0);
|
n == WIN_FULLSCREEN ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0);
|
||||||
if (n == WIN_NORMAL)
|
if (n == WIN_NORMAL)
|
||||||
SDL_RestoreWindow(window);
|
SDL_RestoreWindow(window);
|
||||||
if (n == WIN_MAXIMIZED)
|
if (n == WIN_MAXIMIZED)
|
||||||
SDL_MaximizeWindow(window);
|
SDL_MaximizeWindow(window);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -226,7 +227,7 @@ static int f_chdir(lua_State *L)
|
|||||||
{
|
{
|
||||||
const char *path = luaL_checkstring(L, 1);
|
const char *path = luaL_checkstring(L, 1);
|
||||||
int err = chdir(path);
|
int err = chdir(path);
|
||||||
if (err)
|
if (err)
|
||||||
luaL_error(L, "chdir() failed");
|
luaL_error(L, "chdir() failed");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -247,9 +248,9 @@ static int f_list_dir(lua_State *L)
|
|||||||
int i = 1;
|
int i = 1;
|
||||||
struct dirent *entry;
|
struct dirent *entry;
|
||||||
while ( (entry = readdir(dir)) ) {
|
while ( (entry = readdir(dir)) ) {
|
||||||
if (strcmp(entry->d_name, "." ) == 0)
|
if (strcmp(entry->d_name, "." ) == 0)
|
||||||
continue;
|
continue;
|
||||||
if (strcmp(entry->d_name, "..") == 0)
|
if (strcmp(entry->d_name, "..") == 0)
|
||||||
continue;
|
continue;
|
||||||
lua_pushstring(L, entry->d_name);
|
lua_pushstring(L, entry->d_name);
|
||||||
lua_rawseti(L, -2, i);
|
lua_rawseti(L, -2, i);
|
||||||
@ -264,7 +265,7 @@ static int f_absolute_path(lua_State *L)
|
|||||||
{
|
{
|
||||||
const char *path = luaL_checkstring(L, 1);
|
const char *path = luaL_checkstring(L, 1);
|
||||||
char *res = realpath(path, NULL);
|
char *res = realpath(path, NULL);
|
||||||
if (!res)
|
if (!res)
|
||||||
return 0;
|
return 0;
|
||||||
lua_pushstring(L, res);
|
lua_pushstring(L, res);
|
||||||
free(res);
|
free(res);
|
||||||
@ -339,7 +340,7 @@ static int f_exec(lua_State *L)
|
|||||||
size_t len;
|
size_t len;
|
||||||
const char *cmd = luaL_checklstring(L, 1, &len);
|
const char *cmd = luaL_checklstring(L, 1, &len);
|
||||||
char *buf = malloc(len + 32);
|
char *buf = malloc(len + 32);
|
||||||
if (!buf)
|
if (!buf)
|
||||||
luaL_error(L, "buffer allocation failed");
|
luaL_error(L, "buffer allocation failed");
|
||||||
sprintf(buf, "%s &", cmd);
|
sprintf(buf, "%s &", cmd);
|
||||||
int res = system(buf);
|
int res = system(buf);
|
||||||
@ -357,7 +358,7 @@ static int f_fuzzy_match(lua_State *L)
|
|||||||
int run = 0;
|
int run = 0;
|
||||||
|
|
||||||
while (*str && *ptn) {
|
while (*str && *ptn) {
|
||||||
while (*str == ' ')
|
while (*str == ' ')
|
||||||
str++;
|
str++;
|
||||||
while (*ptn == ' ')
|
while (*ptn == ' ')
|
||||||
ptn++;
|
ptn++;
|
||||||
@ -371,7 +372,7 @@ static int f_fuzzy_match(lua_State *L)
|
|||||||
}
|
}
|
||||||
str++;
|
str++;
|
||||||
}
|
}
|
||||||
if (*ptn)
|
if (*ptn)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
lua_pushnumber(L, score - (int) strlen(str));
|
lua_pushnumber(L, score - (int) strlen(str));
|
||||||
|
Loading…
Reference in New Issue
Block a user