110 lines
3.6 KiB
Plaintext
110 lines
3.6 KiB
Plaintext
/*
|
|
- Embedded windows
|
|
- Multiple buffers at the same time
|
|
|
|
- Ctrl+C
|
|
- Ctrl+V
|
|
- Ctrl+X
|
|
- Open a document dialog, save document to disk
|
|
- Buffer bound undo,redo
|
|
*/
|
|
import "raylib";
|
|
import "std_types";
|
|
import "libc";
|
|
|
|
import "core";
|
|
import TE "text_editor";
|
|
|
|
InvalidCodepath :: proc() {
|
|
assert(:*char("invalid codepath") == :*char(""));
|
|
}
|
|
|
|
main :: proc(): int {
|
|
InitWindow(800, 600, "TextEditor");
|
|
SetWindowState(FLAG_WINDOW_RESIZABLE | FLAG_WINDOW_MAXIMIZED);
|
|
SetTargetFPS(60);
|
|
|
|
font_size: float = 14;
|
|
font_spacing: float = 1;
|
|
font: Font = LoadFontEx("C:/Windows/Fonts/consola.ttf", :int(font_size), nil, 0);
|
|
|
|
SANDBOX_TEXT_EDITOR :: 1;
|
|
SANDBOX_PROTOTYPE :: 2;
|
|
sandbox_chosen := SANDBOX_TEXT_EDITOR;
|
|
|
|
for !WindowShouldClose() {
|
|
screen_size: Vector2 = {:f32(GetScreenWidth()), :f32(GetScreenHeight())};
|
|
screen_rect := Rect2PSize(0, 0, screen_size.x, screen_size.y);
|
|
top_bar := CutTop(&screen_rect, 30);
|
|
top_bar_original := top_bar;
|
|
|
|
button1_text := "Text Editor";
|
|
button1_text_size := MeasureTextEx(font, button1_text, font_size, font_spacing);
|
|
button1 := CutLeft(&top_bar, :float(button1_text_size.x) * 1.5);
|
|
button1 = Shrink(button1, 4);
|
|
button1_text_pos: Vector2 = {
|
|
x = button1.min.x + (GetRectX(button1) - :float(button1_text_size.x)) * 0.5,
|
|
y = button1.min.y + (GetRectY(button1) - :float(button1_text_size.y)) * 0.7,
|
|
};
|
|
|
|
button1_hover := false;
|
|
button1_click := false;
|
|
if CheckCollisionPointRec(GetMousePosition(), Rect2PToRectangle(button1)) {
|
|
button1_hover = true;
|
|
if IsMouseButtonPressed(MOUSE_BUTTON_LEFT) {
|
|
button1_click = true;
|
|
}
|
|
}
|
|
|
|
button2_text := "Prototype";
|
|
button2_text_size := MeasureTextEx(font, button2_text, font_size, font_spacing);
|
|
button2 := CutLeft(&top_bar, :float(button2_text_size.x) * 1.5);
|
|
button2 = Shrink(button2, 4);
|
|
button2_text_pos: Vector2 = {
|
|
x = button2.min.x + (GetRectX(button2) - :float(button2_text_size.x)) * 0.5,
|
|
y = button2.min.y + (GetRectY(button2) - :float(button2_text_size.y)) * 0.7,
|
|
};
|
|
|
|
button2_hover := false;
|
|
button2_click := false;
|
|
if CheckCollisionPointRec(GetMousePosition(), Rect2PToRectangle(button2)) {
|
|
button2_hover = true;
|
|
if IsMouseButtonPressed(MOUSE_BUTTON_LEFT) {
|
|
button2_click = true;
|
|
}
|
|
}
|
|
|
|
if button1_click {
|
|
sandbox_chosen = SANDBOX_TEXT_EDITOR;
|
|
} else if button2_click {
|
|
sandbox_chosen = SANDBOX_PROTOTYPE;
|
|
}
|
|
|
|
BeginDrawing();
|
|
ClearBackground(RAYWHITE);
|
|
|
|
if sandbox_chosen == SANDBOX_TEXT_EDITOR {
|
|
TE.UpdateTextEditor(screen_rect, font, font_size, font_spacing);
|
|
} else if sandbox_chosen == SANDBOX_PROTOTYPE {
|
|
UpdatePrototype(screen_rect);
|
|
}
|
|
|
|
|
|
TE.DrawRect(top_bar_original, LIGHTGRAY);
|
|
|
|
DrawRectangleRoundedLines(Rect2PToRectangle(button1), 0.3, 12, 2, BLACK);
|
|
if button1_hover DrawRectangleRounded(Rect2PToRectangle(button1), 0.3, 12, WHITE);
|
|
DrawTextEx(font, button1_text, button1_text_pos, font_size, font_spacing, BLACK);
|
|
|
|
DrawRectangleRoundedLines(Rect2PToRectangle(button2), 0.3, 12, 2, BLACK);
|
|
if button2_hover DrawRectangleRounded(Rect2PToRectangle(button2), 0.3, 12, WHITE);
|
|
DrawTextEx(font, button2_text, button2_text_pos, font_size, font_spacing, BLACK);
|
|
|
|
|
|
EndDrawing();
|
|
}
|
|
CloseWindow();
|
|
return 0;
|
|
}
|
|
|