mirror of
https://github.com/ventoy/Ventoy.git
synced 2024-12-28 08:05:58 -05:00
update for scroll menu text
This commit is contained in:
parent
15b8b1f358
commit
f683bcbd59
@ -426,7 +426,7 @@ grub_fshelp_read_file (grub_disk_t disk, grub_fshelp_node_t node,
|
|||||||
if (grub_errno)
|
if (grub_errno)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
else if (read_hook != (void *)grub_disk_blocklist_read)
|
else if (read_hook != (grub_disk_read_hook_t)grub_disk_blocklist_read)
|
||||||
grub_memset (buf, 0, blockend);
|
grub_memset (buf, 0, blockend);
|
||||||
|
|
||||||
buf += blocksize - skipfirst;
|
buf += blocksize - skipfirst;
|
||||||
|
@ -437,16 +437,21 @@ grub_gfxmenu_scroll_chosen_entry (void *data, int diren)
|
|||||||
grub_gfxmenu_view_t view = data;
|
grub_gfxmenu_view_t view = data;
|
||||||
const char *item_title;
|
const char *item_title;
|
||||||
int off;
|
int off;
|
||||||
|
int max;
|
||||||
|
|
||||||
if (!view->menu->size)
|
if (!view->menu->size)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
item_title = grub_menu_get_entry (view->menu, view->selected)->title;
|
item_title = grub_menu_get_entry (view->menu, view->selected)->title;
|
||||||
off = view->menu_title_offset[view->selected] + diren;
|
off = view->menu_title_offset[view->selected] + diren;
|
||||||
|
max = grub_utf8_get_num_code (item_title, grub_strlen(item_title));
|
||||||
|
|
||||||
if (off < 0
|
if (diren == 1000000)
|
||||||
|| off > grub_utf8_get_num_code (item_title, grub_strlen(item_title)))
|
off = (max >= 20) ? (max - 20) : 0;
|
||||||
return;
|
else if (off < 0)
|
||||||
|
off = 0;
|
||||||
|
else if (off > max)
|
||||||
|
off = max;
|
||||||
|
|
||||||
view->menu_title_offset[view->selected] = off;
|
view->menu_title_offset[view->selected] = off;
|
||||||
grub_gfxmenu_redraw_menu (view);
|
grub_gfxmenu_redraw_menu (view);
|
||||||
|
@ -471,7 +471,7 @@ grub_err_t
|
|||||||
grub_disk_read (grub_disk_t disk, grub_disk_addr_t sector,
|
grub_disk_read (grub_disk_t disk, grub_disk_addr_t sector,
|
||||||
grub_off_t offset, grub_size_t size, void *buf)
|
grub_off_t offset, grub_size_t size, void *buf)
|
||||||
{
|
{
|
||||||
if (disk->read_hook == (void *)grub_disk_blocklist_read)
|
if (disk->read_hook == (grub_disk_read_hook_t)grub_disk_blocklist_read)
|
||||||
{
|
{
|
||||||
return grub_disk_blocklist_read((ventoy_img_chunk_list *)disk->read_hook_data, sector, size, disk->log_sector_size);
|
return grub_disk_blocklist_read((ventoy_img_chunk_list *)disk->read_hook_data, sector, size, disk->log_sector_size);
|
||||||
}
|
}
|
||||||
|
@ -861,6 +861,12 @@ run_menu (grub_menu_t menu, int nested, int *auto_boot)
|
|||||||
case GRUB_TERM_KEY_LEFT:
|
case GRUB_TERM_KEY_LEFT:
|
||||||
menu_scroll_chosen_entry (-1);
|
menu_scroll_chosen_entry (-1);
|
||||||
break;
|
break;
|
||||||
|
case GRUB_TERM_CTRL | GRUB_TERM_KEY_RIGHT:
|
||||||
|
menu_scroll_chosen_entry (1000000);
|
||||||
|
break;
|
||||||
|
case GRUB_TERM_CTRL | GRUB_TERM_KEY_LEFT:
|
||||||
|
menu_scroll_chosen_entry (-1000000);
|
||||||
|
break;
|
||||||
|
|
||||||
case '\n':
|
case '\n':
|
||||||
case '\r':
|
case '\r':
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
#include <grub/command.h>
|
#include <grub/command.h>
|
||||||
#include <grub/i18n.h>
|
#include <grub/i18n.h>
|
||||||
#include <grub/err.h>
|
#include <grub/err.h>
|
||||||
|
#include <grub/env.h>
|
||||||
#include <grub/efi/efi.h>
|
#include <grub/efi/efi.h>
|
||||||
#include <grub/efi/api.h>
|
#include <grub/efi/api.h>
|
||||||
|
|
||||||
@ -159,9 +160,16 @@ grub_mouse_getkey (struct grub_term_input *term)
|
|||||||
grub_efi_mouse_prot_t *mouse = term->data;
|
grub_efi_mouse_prot_t *mouse = term->data;
|
||||||
//int x;
|
//int x;
|
||||||
int y;
|
int y;
|
||||||
|
int delta = 0;
|
||||||
|
const char *env;
|
||||||
grub_efi_uintn_t i;
|
grub_efi_uintn_t i;
|
||||||
if (!mouse)
|
if (!mouse)
|
||||||
return GRUB_TERM_NO_KEY;
|
return GRUB_TERM_NO_KEY;
|
||||||
|
|
||||||
|
env = grub_env_get("mouse_delta");
|
||||||
|
if (env)
|
||||||
|
delta = (int)grub_strtol(env, NULL, 10);
|
||||||
|
|
||||||
for (i = 0; i < mouse->count; i++)
|
for (i = 0; i < mouse->count; i++)
|
||||||
{
|
{
|
||||||
efi_call_2 (mouse->mouse[i]->get_state, mouse->mouse[i], &cur);
|
efi_call_2 (mouse->mouse[i]->get_state, mouse->mouse[i], &cur);
|
||||||
@ -172,9 +180,9 @@ grub_mouse_getkey (struct grub_term_input *term)
|
|||||||
return 0x0d;
|
return 0x0d;
|
||||||
if (cur.right)
|
if (cur.right)
|
||||||
return GRUB_TERM_ESC;
|
return GRUB_TERM_ESC;
|
||||||
if (y > 0)
|
if (y > delta)
|
||||||
return GRUB_TERM_KEY_DOWN;
|
return GRUB_TERM_KEY_DOWN;
|
||||||
if (y < 0)
|
if (y < -delta)
|
||||||
return GRUB_TERM_KEY_UP;
|
return GRUB_TERM_KEY_UP;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3152,7 +3152,7 @@ int ventoy_get_block_list(grub_file_t file, ventoy_img_chunk_list *chunklist, gr
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
file->read_hook = (void *)grub_disk_blocklist_read;
|
file->read_hook = (grub_disk_read_hook_t)grub_disk_blocklist_read;
|
||||||
file->read_hook_data = chunklist;
|
file->read_hook_data = chunklist;
|
||||||
|
|
||||||
for (size = file->size; size > 0; size -= read)
|
for (size = file->size; size > 0; size -= read)
|
||||||
|
Loading…
Reference in New Issue
Block a user