aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortlatorre <tlatorre@uchicago.edu>2022-11-12 13:50:22 -0600
committertlatorre <tlatorre@uchicago.edu>2022-11-12 13:50:22 -0600
commit8d22f47339df9018c86dce8f71918f9ab8f014cc (patch)
tree4700d8c8a5d0f1de0f1b6720526a3f6a3a5a1031
parent4230ca4e1d0c70e8abbbf128a31a0dfcaf82ef33 (diff)
downloadmoji-8d22f47339df9018c86dce8f71918f9ab8f014cc.tar.gz
moji-8d22f47339df9018c86dce8f71918f9ab8f014cc.tar.bz2
moji-8d22f47339df9018c86dce8f71918f9ab8f014cc.zip
factor out backspace code into a function
-rw-r--r--vito.c49
1 files changed, 17 insertions, 32 deletions
diff --git a/vito.c b/vito.c
index 0e1bf20..de6e166 100644
--- a/vito.c
+++ b/vito.c
@@ -123,6 +123,21 @@ long released_time_sec = 0;
/* Time the mouse was released (milliseconds) */
long released_time_msec = 0;
+void backspace(void)
+{
+ GtkTextBuffer *text_buffer;
+ GtkTextIter start, end;
+
+ if (current_position > 0) {
+ text_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_widget));
+ gtk_text_buffer_set_text(text_buffer, buf, -1);
+
+ gtk_text_buffer_get_iter_at_offset(text_buffer, &start, 0);
+ gtk_text_buffer_get_iter_at_offset(text_buffer, &end, g_utf8_strlen(buf,-1)-2);
+ current_position = strlen(gtk_text_buffer_get_slice(text_buffer,&start,&end,TRUE));
+ }
+}
+
static int pressed(GtkWidget *widget, gpointer data)
{
aeGetTime(&pressed_time_sec,&pressed_time_msec);
@@ -146,8 +161,6 @@ static void write_buf(void)
static int released(GtkWidget *widget, gpointer data)
{
- GtkTextBuffer *text_buffer;
- GtkTextIter start, end;
const char *current_char;
aeGetTime(&released_time_sec,&released_time_msec);
@@ -159,14 +172,7 @@ static int released(GtkWidget *widget, gpointer data)
} else if (diff > CLICK_TIME) {
current_char = current_chars->characters[current_letter % current_chars->len];
if (!strcmp(current_char,LEFT_ARROW)) {
- if (current_position > 0) {
- text_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_widget));
- gtk_text_buffer_set_text(text_buffer, buf, -1);
-
- gtk_text_buffer_get_iter_at_offset(text_buffer, &start, 0);
- gtk_text_buffer_get_iter_at_offset(text_buffer, &end, g_utf8_strlen(buf,-1)-2);
- current_position = strlen(gtk_text_buffer_get_slice(text_buffer,&start,&end,TRUE));
- }
+ backspace();
} else if (!strcmp(current_char,CLEAR_SCREEN)) {
current_position = 0;
current_letter = 0;
@@ -209,12 +215,9 @@ static int released(GtkWidget *widget, gpointer data)
gboolean on_key_press(GtkEventControllerKey *, guint keyval, guint keycode, GdkModifierType mod, gpointer user_data)
{
- GtkTextBuffer *text_buffer;
- GtkTextIter start, end;
switch (keyval)
{
case GDK_KEY_space:
- printf("switching alphabet");
if (current_chars == &emoji)
current_chars = &alphabet;
else if (current_chars == &alphabet)
@@ -222,25 +225,7 @@ gboolean on_key_press(GtkEventControllerKey *, guint keyval, guint keycode, GdkM
write_buf();
break;
case GDK_KEY_BackSpace:
- case GDK_KEY_Delete:
- if (current_position > 0) {
- text_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_widget));
- gtk_text_buffer_set_text(text_buffer, buf, -1);
-
- gtk_text_buffer_get_iter_at_offset(text_buffer, &start, 0);
- gtk_text_buffer_get_iter_at_offset(text_buffer, &end, g_utf8_strlen(buf,-1)-2);
- current_position = strlen(gtk_text_buffer_get_slice(text_buffer,&start,&end,TRUE));
- }
- if (current_position > LEN(buf) - 1) {
- /* FIXME: better way to do this? */
- current_position = 0;
- }
- /* Uncomment the next line to start over at the beginning of the
- * alphabet after a new letter is entered. But, I think it's better
- * to keep the current letter. The reason is that you might want to
- * delete a whole word and so when you navigate to the backspace you
- * just have to keep entering the same letter. */
- current_letter = 0;
+ backspace();
write_buf();
break;
default: