freetype-commit
[Top][All Lists]
Advanced

[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 );



reply via email to

[Prev in Thread] Current Thread [Next in Thread]