Get typing mostly working
This commit is contained in:
parent
9d725d0b2f
commit
6ccf44bef5
43
fide.todo
Normal file
43
fide.todo
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
#-*- mode: org -*-
|
||||||
|
#+TODO: TODO | DONE
|
||||||
|
#+STARTUP: show2levels
|
||||||
|
|
||||||
|
|
||||||
|
* DONE Create SDL hello world
|
||||||
|
* DONE Research which data structure to use (ext/rope.h)
|
||||||
|
* DONE Figure out how to render text in SDL (font texture atlas)
|
||||||
|
* DONE Insert text into rope from keyboard presses
|
||||||
|
* DONE Render rope
|
||||||
|
* DONE Handle colors and font texture blitting
|
||||||
|
* DONE Get backspace working
|
||||||
|
* TODO Scale text with C-+ and C--
|
||||||
|
* TODO Read a file from disk and display it
|
||||||
|
* TODO Create a cursor
|
||||||
|
* TODO Add basic keybinding system
|
||||||
|
* TODO Move cursor with arrow keys
|
||||||
|
* TODO Save file
|
||||||
|
* TODO Render each line in a different color
|
||||||
|
To help figuring out how to color things for syntax highlighting
|
||||||
|
* TODO Install treesitter package
|
||||||
|
* TODO Color different parts of the buffer based on AST
|
||||||
|
* TODO Create vertical/horizontal window splits
|
||||||
|
* TODO Make splits resizable
|
||||||
|
* TODO Buffer lists per pane
|
||||||
|
* TODO Pane owned sub-panes
|
||||||
|
* TODO Promote or demote panes as sub-panes
|
||||||
|
* TODO Pinnable/dedicated buffers
|
||||||
|
Panes and their sub-panes can have buffers pinned to them that require a
|
||||||
|
keybinding to override.
|
||||||
|
* TODO Custom buffer and pane variables
|
||||||
|
* TODO Floating splits
|
||||||
|
* TODO Buffers tags/ids
|
||||||
|
* TODO Pane attributes that modify it's behavior
|
||||||
|
- [ ] Pinnable
|
||||||
|
- [ ] Toggleable
|
||||||
|
- [ ] Overtake?
|
||||||
|
- [ ] Popup
|
||||||
|
* TODO Narrowing/widening
|
||||||
|
* TODO Read-only mode
|
||||||
|
* TODO Implement key chording
|
||||||
|
* TODO Implement modal editing modes
|
||||||
|
* TODO Keymap layering stack
|
52
main.cpp
52
main.cpp
@ -4,7 +4,9 @@
|
|||||||
#include <SDL2/SDL_render.h>
|
#include <SDL2/SDL_render.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <ext/rope>
|
||||||
|
|
||||||
|
using namespace __gnu_cxx;
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
//Screen dimension constants
|
//Screen dimension constants
|
||||||
@ -38,8 +40,8 @@ void render_char(char key, int row, int col, SDL_Renderer* renderer, SDL_Texture
|
|||||||
|
|
||||||
dstrect.x = col;
|
dstrect.x = col;
|
||||||
dstrect.y = row;
|
dstrect.y = row;
|
||||||
dstrect.w = 80;
|
dstrect.w = 30;
|
||||||
dstrect.h = 80;
|
dstrect.h = 30;
|
||||||
|
|
||||||
SDL_Rect srcrect = get_srcrect(key);
|
SDL_Rect srcrect = get_srcrect(key);
|
||||||
SDL_RenderCopy(renderer, font, &srcrect, &dstrect);
|
SDL_RenderCopy(renderer, font, &srcrect, &dstrect);
|
||||||
@ -116,17 +118,35 @@ int main(int argc, char *argv[]) {
|
|||||||
int keyPressed = -1;
|
int keyPressed = -1;
|
||||||
int rowCurr = 0;
|
int rowCurr = 0;
|
||||||
int colCurr = 0;
|
int colCurr = 0;
|
||||||
string text = "Some text";
|
float scale = 50;
|
||||||
|
rope<char> buffer;
|
||||||
while (quit == false) {
|
while (quit == false) {
|
||||||
while (SDL_PollEvent( &e)) {
|
while (SDL_PollEvent( &e)) {
|
||||||
if (e.type == SDL_QUIT) {
|
if (e.type == SDL_QUIT) {
|
||||||
quit = true;
|
quit = true;
|
||||||
}
|
} else if (e.type == SDL_KEYDOWN) {
|
||||||
else if (e.type == SDL_KEYDOWN) {
|
|
||||||
char key = e.key.keysym.sym;
|
char key = e.key.keysym.sym;
|
||||||
if (key >= (char)'!' || key <= (char)'~') {
|
char mod = e.key.keysym.mod;
|
||||||
keyPressed = key;
|
if (key == '\r') {
|
||||||
|
buffer.push_back('\n');
|
||||||
}
|
}
|
||||||
|
if (key == '-' && mod & KMOD_LCTRL) {
|
||||||
|
cout << "Minu" << endl;
|
||||||
|
}
|
||||||
|
if (key == '=' && mod & KMOD_LCTRL) {
|
||||||
|
cout << "Ploos" << endl;
|
||||||
|
}
|
||||||
|
if (key >= (char)'!' || key <= (char)'~') {
|
||||||
|
// keyPressed = key;
|
||||||
|
buffer.push_back(key);
|
||||||
|
}
|
||||||
|
if (key == SDLK_BACKSPACE) {
|
||||||
|
if (buffer.size() >= 2) {
|
||||||
|
buffer.pop_back();
|
||||||
|
buffer.pop_back();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cout << key << endl;
|
||||||
// switch (e.key.keysym.sym) {
|
// switch (e.key.keysym.sym) {
|
||||||
// case SDLK_
|
// case SDLK_
|
||||||
// }
|
// }
|
||||||
@ -134,11 +154,23 @@ int main(int argc, char *argv[]) {
|
|||||||
}
|
}
|
||||||
// SDL_FillRect( screenSurface, NULL, rgbMap);
|
// SDL_FillRect( screenSurface, NULL, rgbMap);
|
||||||
SDL_RenderClear(renderer);
|
SDL_RenderClear(renderer);
|
||||||
SDL_SetTextureColorMod(fontTexture, 0xFF, 0, 0);
|
SDL_SetTextureColorMod(fontTexture, 0x0, 0, 0);
|
||||||
for (int i = 0; i < 10; i++) {
|
rope<char>::iterator it;
|
||||||
render_char(text[i], rowCurr, colCurr++ * 50, renderer, fontTexture);
|
for (it = buffer.mutable_begin(); it != buffer.mutable_end(); it++) {
|
||||||
|
if (*it == '\n') {
|
||||||
|
rowCurr += 1;
|
||||||
|
colCurr = 0;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (*it == '\r') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (*it >= (char)'!' || *it <= (char)'~') {
|
||||||
|
render_char(*it, rowCurr * 70, colCurr++ * 50, renderer, fontTexture);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
colCurr = 0;
|
colCurr = 0;
|
||||||
|
rowCurr = 0;
|
||||||
// Draw(keyPressed, renderer, fontTexture);
|
// Draw(keyPressed, renderer, fontTexture);
|
||||||
SDL_RenderPresent(renderer);
|
SDL_RenderPresent(renderer);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user