WIP Adding "Paste" button to On Screen Keyboard
Appears, but does not yet actually invoke a paste event. Does not have an icon.
This commit is contained in:
parent
4de111df25
commit
79bc5b2df4
6 changed files with 50 additions and 15 deletions
|
|
@ -13,7 +13,7 @@ https://tuxpaint.org/
|
|||
into Tux Paint. If text goes beyond the right of the canvas,
|
||||
a new line is created. If text goes beyond the bottom of the
|
||||
canvas, the text is truncated there.
|
||||
- TODO: Add a "paste" button to the On Screen Keyboards
|
||||
- WIP: Add a "paste" button to the On Screen Keyboards
|
||||
- TODO: Improve word-wrapping (word-based, not character)
|
||||
- TODO: Mention the feature in documentation
|
||||
Closes https://sourceforge.net/p/tuxpaint/feature-requests/95/
|
||||
|
|
|
|||
|
|
@ -131,10 +131,14 @@ KEY 133 2.0 Cmp Cmp Cmp Cmp 0
|
|||
KEY 64 2.0 Alt Alt Alt Alt 0
|
||||
|
||||
# Space
|
||||
KEY 65 7.0 SPACE SPACE SPACE SPACE 0
|
||||
KEY 65 5.0 SPACE SPACE SPACE SPACE 0
|
||||
|
||||
# AltGr
|
||||
KEY 108 2.0 AltGr AltGr AltGr AltGr 0
|
||||
|
||||
# Paste
|
||||
KEY 143 2.0 Paste Paste Paste 0
|
||||
|
||||
# Arrow to right will change to the next keyboard
|
||||
# Disabled for now...
|
||||
KEY 1 1.0 -> -> -> -> 0
|
||||
|
|
|
|||
|
|
@ -126,10 +126,14 @@ KEY 133 2.0 Cmp Cmp Cmp Cmp 0
|
|||
KEY 64 2.0 Alt Alt Alt Alt 0
|
||||
|
||||
# Space
|
||||
KEY 65 7.0 SPACE SPACE SPACE SPACE 0
|
||||
KEY 65 5.0 SPACE SPACE SPACE SPACE 0
|
||||
|
||||
# AltGr
|
||||
KEY 108 2.0 AltGr AltGr AltGr AltGr 0
|
||||
|
||||
# Paste
|
||||
KEY 143 2.0 Paste Paste Paste 0
|
||||
|
||||
# Arrow to right will change to the next keyboard
|
||||
KEY 1 1.0 -> -> -> -> 0
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
onscreen_keyboard.c
|
||||
|
||||
Copyright (c) 2011-2023
|
||||
Copyright (c) 2011-2024
|
||||
https://tuxpaint.org/
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
|
|
@ -19,7 +19,7 @@
|
|||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
(See COPYING.txt)
|
||||
|
||||
Last modified: March 23, 2023
|
||||
Last modified: December 19, 2024
|
||||
*/
|
||||
|
||||
#include "debug.h"
|
||||
|
|
@ -90,14 +90,15 @@ struct osk_keyboard *osk_create(char *layout_name, SDL_Surface *canvas,
|
|||
SDL_Surface *BLANK_oskdel,
|
||||
SDL_Surface *BLANK_osktab,
|
||||
SDL_Surface *BLANK_oskenter,
|
||||
SDL_Surface *BLANK_oskcapslock, SDL_Surface *BLANK_oskshift, int disable_change)
|
||||
SDL_Surface *BLANK_oskcapslock, SDL_Surface *BLANK_oskshift,
|
||||
SDL_Surface *BLANK_oskpaste, int disable_change)
|
||||
{
|
||||
SDL_Surface *surface;
|
||||
SDL_Surface *button_up, *button_down;
|
||||
SDL_Surface *button_off, *button_nav;
|
||||
SDL_Surface *button_hold;
|
||||
SDL_Surface *oskdel, *osktab, *oskenter;
|
||||
SDL_Surface *oskcapslock, *oskshift;
|
||||
SDL_Surface *oskcapslock, *oskshift, *oskpaste;
|
||||
osk_layout *layout;
|
||||
on_screen_keyboard *keyboard;
|
||||
int layout_avail_width, layout_avail_height;
|
||||
|
|
@ -171,6 +172,7 @@ struct osk_keyboard *osk_create(char *layout_name, SDL_Surface *canvas,
|
|||
oskenter = zoomSurface(BLANK_oskenter, scale_w, scale_h, 1);
|
||||
oskcapslock = zoomSurface(BLANK_oskcapslock, scale_w, scale_h, 1);
|
||||
oskshift = zoomSurface(BLANK_oskshift, scale_w, scale_h, 1);
|
||||
oskpaste = zoomSurface(BLANK_oskpaste, scale_w, scale_h, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -184,6 +186,7 @@ struct osk_keyboard *osk_create(char *layout_name, SDL_Surface *canvas,
|
|||
oskenter = SDL_DisplayFormatAlpha(BLANK_oskenter);
|
||||
oskcapslock = SDL_DisplayFormatAlpha(BLANK_oskcapslock);
|
||||
oskshift = SDL_DisplayFormatAlpha(BLANK_oskshift);
|
||||
oskpaste = SDL_DisplayFormatAlpha(BLANK_oskpaste);
|
||||
}
|
||||
|
||||
surface = SDL_CreateRGBSurface(canvas->flags,
|
||||
|
|
@ -214,6 +217,7 @@ struct osk_keyboard *osk_create(char *layout_name, SDL_Surface *canvas,
|
|||
keyboard->oskenter = oskenter;
|
||||
keyboard->oskcapslock = oskcapslock;
|
||||
keyboard->oskshift = oskshift;
|
||||
keyboard->oskpaste = oskpaste;
|
||||
keyboard->composing = layout->composemap;
|
||||
keyboard->composed = NULL;
|
||||
keyboard->last_key_pressed = NULL;
|
||||
|
|
@ -241,6 +245,7 @@ struct osk_keyboard *osk_create(char *layout_name, SDL_Surface *canvas,
|
|||
keyboard->BLANK_oskenter = BLANK_oskenter;
|
||||
keyboard->BLANK_oskcapslock = BLANK_oskcapslock;
|
||||
keyboard->BLANK_oskshift = BLANK_oskshift;
|
||||
keyboard->BLANK_oskpaste = BLANK_oskpaste;
|
||||
|
||||
SDL_FillRect(surface, NULL,
|
||||
SDL_MapRGB(surface->format, keyboard->layout->bgcolor.r,
|
||||
|
|
@ -1444,6 +1449,11 @@ static void label_key(osk_key key, on_screen_keyboard *keyboard)
|
|||
apply_surface(key.x, key.y, keyboard->oskshift, keyboard->surface, NULL);
|
||||
}
|
||||
|
||||
else if (strncmp("PASTE", text, 5) == 0)
|
||||
{
|
||||
apply_surface(key.x, key.y, keyboard->oskpaste, keyboard->surface, NULL);
|
||||
}
|
||||
|
||||
else if (strncmp("SPACE", text, 5) != 0 && strncmp("NULL", text, 4) != 0)
|
||||
{
|
||||
messager = TTF_RenderUTF8_Blended(keyboard->osk_fonty, text, keyboard->layout->fgcolor);
|
||||
|
|
@ -1469,6 +1479,7 @@ static osk_key *find_key(on_screen_keyboard *keyboard, int x, int y)
|
|||
keyboard->layout->keys[j][i].x + keyboard->layout->keys[j][i].width * keyboard->button_up->w > x)
|
||||
{
|
||||
key = &keyboard->layout->keys[j][i];
|
||||
printf("find_key() -> key.keycode = %d\n", key->keycode);
|
||||
return key;
|
||||
}
|
||||
}
|
||||
|
|
@ -1590,6 +1601,8 @@ static char *find_keysym(osk_key key, on_screen_keyboard *keyboard)
|
|||
keysym = keysyms.caps;
|
||||
}
|
||||
|
||||
printf("find_keysym() -> keysym = %s\n", keysym); // XF86Paste
|
||||
|
||||
return (keysym);
|
||||
}
|
||||
|
||||
|
|
@ -1811,7 +1824,8 @@ struct osk_keyboard *osk_clicked(on_screen_keyboard *keyboard, int x, int y)
|
|||
keyboard->BLANK_button_hold,
|
||||
keyboard->BLANK_oskdel, keyboard->BLANK_osktab,
|
||||
keyboard->BLANK_oskenter, keyboard->BLANK_oskcapslock,
|
||||
keyboard->BLANK_oskshift, keyboard->disable_change);
|
||||
keyboard->BLANK_oskshift, keyboard->BLANK_oskshift,
|
||||
keyboard->disable_change);
|
||||
|
||||
free(aux_list_ptr);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
/*
|
||||
Header for Tux Paint's on-screen keyboard.
|
||||
Last modified: 2024-12-20
|
||||
*/
|
||||
|
||||
#include "wchar.h"
|
||||
#include "stdio.h"
|
||||
#include "SDL.h"
|
||||
|
|
@ -117,6 +122,7 @@ typedef struct osk_keyboard
|
|||
SDL_Surface *oskenter; /* Return hook/arrow */
|
||||
SDL_Surface *oskcapslock; /* CapsLock */
|
||||
SDL_Surface *oskshift; /* Shift */
|
||||
SDL_Surface *oskpaste; /* paste */
|
||||
int changed; /* If the surface has been modified (painted) */
|
||||
SDL_Rect rect; /* The rectangle that has changed */
|
||||
int recreated; /* If the surface has been deleted and newly created */
|
||||
|
|
@ -145,6 +151,7 @@ typedef struct osk_keyboard
|
|||
SDL_Surface *BLANK_oskenter;
|
||||
SDL_Surface *BLANK_oskcapslock;
|
||||
SDL_Surface *BLANK_oskshift;
|
||||
SDL_Surface *BLANK_oskpaste;
|
||||
} on_screen_keyboard;
|
||||
|
||||
struct osk_keyboard *osk_create(char *layout_name, SDL_Surface * canvas,
|
||||
|
|
@ -156,7 +163,8 @@ struct osk_keyboard *osk_create(char *layout_name, SDL_Surface * canvas,
|
|||
SDL_Surface * BLANK_oskdel,
|
||||
SDL_Surface * BLANK_osktab,
|
||||
SDL_Surface * BLANK_oskenter,
|
||||
SDL_Surface * BLANK_oskcapslock, SDL_Surface * BLANK_oskshift, int disable_change);
|
||||
SDL_Surface * BLANK_oskcapslock, SDL_Surface * BLANK_oskshift,
|
||||
SDL_Surface * BLANK_oskpaste, int disable_change);
|
||||
|
||||
struct osk_layout *osk_load_layout(char *layout_name);
|
||||
|
||||
|
|
|
|||
|
|
@ -1700,7 +1700,7 @@ static SDL_Surface *img_title_on, *img_title_off, *img_title_large_on, *img_titl
|
|||
static SDL_Surface *img_title_names[NUM_TITLES];
|
||||
static SDL_Surface *img_tools[NUM_TOOLS], *img_tool_names[NUM_TOOLS];
|
||||
|
||||
static SDL_Surface *img_oskdel, *img_osktab, *img_oskenter, *img_oskcapslock, *img_oskshift;
|
||||
static SDL_Surface *img_oskdel, *img_osktab, *img_oskenter, *img_oskcapslock, *img_oskshift, *img_oskpaste;
|
||||
static SDL_Surface *thumbnail(SDL_Surface * src, int max_x, int max_y, int keep_aspect);
|
||||
static SDL_Surface *thumbnail2(SDL_Surface * src, int max_x, int max_y, int keep_aspect, int keep_alpha);
|
||||
|
||||
|
|
@ -2823,7 +2823,6 @@ static void mainloop(void)
|
|||
/* handle_keymouse_buttons will move one button at a time */
|
||||
handle_keymouse_buttons(key, &whicht, &whichc, real_r_tools);
|
||||
|
||||
|
||||
if ((key == SDLK_ESCAPE || key == SDLK_AC_BACK) && !disable_quit)
|
||||
{
|
||||
magic_switchout(canvas);
|
||||
|
|
@ -3718,14 +3717,16 @@ static void mainloop(void)
|
|||
img_btn_up, img_btn_down, img_btn_off,
|
||||
img_btn_nav, img_btn_hold,
|
||||
img_oskdel, img_osktab, img_oskenter,
|
||||
img_oskcapslock, img_oskshift, onscreen_keyboard_disable_change);
|
||||
img_oskcapslock, img_oskshift, img_oskpaste,
|
||||
onscreen_keyboard_disable_change);
|
||||
else
|
||||
kbd =
|
||||
osk_create(strdup("default.layout"), canvas,
|
||||
img_btn_up, img_btn_down, img_btn_off,
|
||||
img_btn_nav, img_btn_hold,
|
||||
img_oskdel, img_osktab, img_oskenter,
|
||||
img_oskcapslock, img_oskshift, onscreen_keyboard_disable_change);
|
||||
img_oskcapslock, img_oskshift, img_oskpaste,
|
||||
onscreen_keyboard_disable_change);
|
||||
}
|
||||
|
||||
if (kbd == NULL)
|
||||
|
|
@ -15552,6 +15553,7 @@ static void cleanup(void)
|
|||
free_surface(&img_oskenter);
|
||||
free_surface(&img_oskcapslock);
|
||||
free_surface(&img_oskshift);
|
||||
free_surface(&img_oskpaste);
|
||||
|
||||
if (kbd)
|
||||
osk_free(kbd);
|
||||
|
|
@ -30525,6 +30527,7 @@ static void setup(void)
|
|||
img_oskenter = loadimagerb(DATA_PREFIX "images/ui/osk_enter.png");
|
||||
img_oskcapslock = loadimagerb(DATA_PREFIX "images/ui/osk_capslock.png");
|
||||
img_oskshift = loadimagerb(DATA_PREFIX "images/ui/osk_shift.png");
|
||||
img_oskpaste = loadimagerb(DATA_PREFIX "images/ui/osk_shift.png"); // FIXME
|
||||
|
||||
if (onscreen_keyboard_layout)
|
||||
{
|
||||
|
|
@ -30537,7 +30540,8 @@ static void setup(void)
|
|||
img_btn_up, img_btn_down, img_btn_off,
|
||||
img_btn_nav, img_btn_hold,
|
||||
img_oskdel, img_osktab, img_oskenter,
|
||||
img_oskcapslock, img_oskshift, onscreen_keyboard_disable_change);
|
||||
img_oskcapslock, img_oskshift, img_oskpaste,
|
||||
onscreen_keyboard_disable_change);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -30546,7 +30550,8 @@ static void setup(void)
|
|||
img_btn_up, img_btn_down, img_btn_off,
|
||||
img_btn_nav, img_btn_hold,
|
||||
img_oskdel, img_osktab, img_oskenter,
|
||||
img_oskcapslock, img_oskshift, onscreen_keyboard_disable_change);
|
||||
img_oskcapslock, img_oskshift, img_oskpaste,
|
||||
onscreen_keyboard_disable_change);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue