Fix improperly prompting about unused local in another modules, fix full recompile, Text editor: restructure
This commit is contained in:
109
examples/text_editor/entry_point/main.lc
Normal file
109
examples/text_editor/entry_point/main.lc
Normal file
@@ -0,0 +1,109 @@
|
||||
/*
|
||||
- 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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user