From 53ddd7be9fd5d21f69cbc9002db9b6a6fbfe742f Mon Sep 17 00:00:00 2001 From: Joseph Ferano Date: Thu, 2 Nov 2023 17:04:40 +0700 Subject: [PATCH] Basic text editing implemented in pygame --- .gitignore | 3 +- Makefile => cpp-version/Makefile | 0 fide.todo => cpp-version/fide.todo | 0 font.png => cpp-version/font.png | Bin cpp-version/main | Bin 0 -> 70664 bytes main.cpp => cpp-version/main.cpp | 0 output.png => cpp-version/output.png | Bin fide.py | 173 +++++++++++++++++++++++++++ requirements.txt | 2 + 9 files changed, 176 insertions(+), 2 deletions(-) rename Makefile => cpp-version/Makefile (100%) rename fide.todo => cpp-version/fide.todo (100%) rename font.png => cpp-version/font.png (100%) create mode 100755 cpp-version/main rename main.cpp => cpp-version/main.cpp (100%) rename output.png => cpp-version/output.png (100%) create mode 100755 fide.py create mode 100644 requirements.txt diff --git a/.gitignore b/.gitignore index 034db26..b545b75 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1 @@ -/rust-version/ -/main +/cosmic-text/ diff --git a/Makefile b/cpp-version/Makefile similarity index 100% rename from Makefile rename to cpp-version/Makefile diff --git a/fide.todo b/cpp-version/fide.todo similarity index 100% rename from fide.todo rename to cpp-version/fide.todo diff --git a/font.png b/cpp-version/font.png similarity index 100% rename from font.png rename to cpp-version/font.png diff --git a/cpp-version/main b/cpp-version/main new file mode 100755 index 0000000000000000000000000000000000000000..0fa768dd477557ecdde676e0236a6279117d85ff GIT binary patch literal 70664 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 rows[cursor.row].length: + if cursor.row < len(rows) - 1: + below_row = rows.pop(cursor.row+1) + row = rows[cursor.row] + row.text.insert(below_row.text.get_text(), row.length) + cursor.want_col = cursor.col + row.length += below_row.length + else: + row.text.delete(cursor.col, 1) + row.length -= 1 + cursor.want_col = cursor.col + elif event.key == pg.K_LEFT: + if cursor.col == 0: + if cursor.row > 0: + cursor.col = rows[cursor.row-1].length + cursor.want_col = cursor.col + cursor.row -= 1 + else: + cursor.col = max(0, cursor.col - 1) + cursor.want_col = cursor.col + elif event.key == pg.K_RIGHT: + if cursor.col == rows[cursor.row].length: + if cursor.row < len(rows): + cursor.col = 0 + cursor.want_col = cursor.col + cursor.row += 1 + else: + cursor.col = min(rows[cursor.row].length, cursor.col + 1) + cursor.want_col = cursor.col + elif event.key == pg.K_UP: + cursor.row = max(0, cursor.row - 1) + cursor.col = min(cursor.want_col, rows[cursor.row].length) + elif event.key == pg.K_DOWN: + cursor.row = min(len(rows) - 1, cursor.row + 1) + cursor.col = min(cursor.want_col, rows[cursor.row].length) + elif event.key == pg.K_SPACE: + row.text.insert(u' ', cursor.col) + row.length += 1 + cursor.col += 1 + cursor.want_col = cursor.col + elif event.key >= 33 and event.key <= 126 and event.mod < 2: + row.text.insert(event.unicode, cursor.col) + row.length += 1 + cursor.col += 1 + cursor.want_col = cursor.col + elif event.mod == 64: # Right Ctrl + if event.key == pg.K_e: + cursor.col = rows[cursor.row].length + cursor.want_col = cursor.col + if event.key == pg.K_a: + cursor.col = 0 + cursor.want_col = cursor.col + + for i,row in enumerate(rows): + render = text_renderer.render(row.text.get_text(), True, 'black') + screen.blit(render, (0, i * line_height)) + + if cursor_on and cursor_flash < 0.5: + draw_cursor() + elif cursor_on: + cursor_on = False + cursor_flash = 0 + elif not cursor_on and cursor_flash > 0.5: + cursor_on = True + cursor_flash = 0 + cursor_flash += dt + + pg.display.flip() diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..0da6859 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +pygame-ce==2.3.2 +pyropes==1.4