[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[freetype2-demos] master 4028f9a 3/3: [ftstring] New feature: simple str
From: |
Werner Lemberg |
Subject: |
[freetype2-demos] master 4028f9a 3/3: [ftstring] New feature: simple string editor. |
Date: |
Fri, 27 Jan 2023 23:51:10 -0500 (EST) |
branch: master
commit 4028f9ac6a1e961bc33b55813398a31aca391d7e
Author: Alexei Podtelezhnikov <apodtele@gmail.com>
Commit: Alexei Podtelezhnikov <apodtele@gmail.com>
[ftstring] New feature: simple string editor.
It only handles printable ASCII characters and backspace to erase them.
* src/ftstring.c (Process_Event): Use Enter key to initiate this mode.
(Process_TTY): Intercept and handle relevant keys while editing.
(Render_TTY): Special rendering mode while editing.
(main, event_help): Updated.
---
src/ftstring.c | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----
1 file changed, 70 insertions(+), 4 deletions(-)
diff --git a/src/ftstring.c b/src/ftstring.c
index fed0c62..a876393 100644
--- a/src/ftstring.c
+++ b/src/ftstring.c
@@ -81,7 +81,8 @@
RENDER_MODE_TEXT,
RENDER_MODE_WATERFALL,
RENDER_MODE_KERNCMP,
- N_RENDER_MODES
+ N_RENDER_MODES,
+ RENDER_FLAG_TTY = 8
};
static struct status_
@@ -258,8 +259,7 @@
grWriteln( buf );
grLn();
- grWriteln( "This program is used to display a string of text using" );
- grWriteln( "the new convenience API of the FreeType 2 library." );
+ grWriteln( "This program is used to display a text string." );
grLn();
grWriteln( "Use the following keys :" );
grLn();
@@ -269,6 +269,7 @@
grWriteln( " f : toggle forced auto-hinting" );
grWriteln( " h : toggle outline hinting" );
grWriteln( " H : change hinting engine" );
+ grWriteln( " V : toggle vertical rendering" );
grLn();
grWriteln( " 1-4 : select rendering mode" );
grWriteln( " l : cycle through anti-aliasing modes" );
@@ -276,7 +277,7 @@
grWriteln( " t : cycle through kerning degrees" );
grWriteln( " Space : cycle through color" );
grWriteln( " Tab : cycle through sample strings" );
- grWriteln( " V : toggle vertical rendering" );
+ grWriteln( " Enter : toggle simple string editor" );
grLn();
grWriteln( " g, v : adjust gamma by 0.1" );
grLn();
@@ -467,6 +468,36 @@
}
+ static int
+ Process_TTY( grKey key )
+ {
+ static char buffer[32] = "Edit this text";
+ static int cursor = 14;
+
+
+ if ( key == grKeyReturn )
+ status.render_mode ^= RENDER_FLAG_TTY;
+ else if ( key == grKeyBackSpace )
+ {
+ if ( cursor )
+ buffer[--cursor] = '\0';
+ }
+ else if ( 31 < key && key < 127 )
+ {
+ if ( cursor < 31)
+ buffer[cursor++] = key;
+ }
+ else if ( key != grKeyTab )
+ return 0;
+
+ snprintf( status.header_buffer, sizeof ( status.header_buffer ),
+ "TTY mode [%s%*c]", buffer, cursor - 32, '_' );
+
+ FTDemo_String_Set( handle, buffer );
+ return 1;
+ }
+
+
static int
Process_Event( void )
{
@@ -486,6 +517,10 @@
return ret;
}
+ if ( status.render_mode & RENDER_FLAG_TTY &&
+ Process_TTY( event.key ) )
+ goto String;
+
if ( event.key >= '1' && event.key < '1' + N_RENDER_MODES )
{
status.render_mode = (int)( event.key - '1' );
@@ -501,6 +536,10 @@
ret = 1;
goto Exit;
+ case grKeyReturn:
+ Process_TTY( event.key );
+ goto String;
+
case grKeyF1:
case grKEY( '?' ):
event_help();
@@ -767,6 +806,29 @@
}
+ static void
+ Render_TTY( void )
+ {
+ FT_Size size;
+
+
+ /* check the sizing error */
+ error = FTDemo_Get_Size( handle, &size );
+ if ( error )
+ return;
+
+ FTDemo_String_Draw( handle, display,
+ &status.sc,
+ FT_MulFix( display->bitmap->width, status.sc.center),
+ display->bitmap->rows / 2 );
+
+ /* this was prepared in Process_TTY */
+ status.header = status.header_buffer;
+
+ return;
+ }
+
+
static void
Render_String( void )
{
@@ -1007,6 +1069,10 @@
case RENDER_MODE_KERNCMP:
Render_KernCmp();
break;
+
+ default:
+ Render_TTY();
+ break;
}
write_header( error );
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [freetype2-demos] master 4028f9a 3/3: [ftstring] New feature: simple string editor.,
Werner Lemberg <=