Even never mouse design
This commit is contained in:
@@ -287,10 +287,36 @@ bool GlobalCommand(Event event) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event.ctrl && Mouse(RIGHT)) {
|
if (event.ctrl && event.shift && Mouse(RIGHT)) {
|
||||||
MouseExecWord(event);
|
MouseExecWord(event);
|
||||||
|
} else if (event.ctrl && Mouse(RIGHT)) {
|
||||||
|
MouseLoadWord(event);
|
||||||
} else if (event.alt && Mouse(RIGHT)) {
|
} else if (event.alt && Mouse(RIGHT)) {
|
||||||
GoBackToLastCrumb();
|
GoBackToLastCrumb();
|
||||||
|
} else if (Mouse(RIGHT)) {
|
||||||
|
Vec2I mouse = MouseVec2I();
|
||||||
|
Window *window = GetActiveWindow();
|
||||||
|
bool mouse_in_document = CheckCollisionPointRec(mouse, window->document_rect);
|
||||||
|
if (mouse_in_document) {
|
||||||
|
View *view = GetView(window->active_view);
|
||||||
|
Buffer *buffer = GetBuffer(view->active_buffer);
|
||||||
|
|
||||||
|
Int p = ScreenSpaceToBufferPos(window, view, buffer, mouse);
|
||||||
|
Int saved_front = 0;
|
||||||
|
|
||||||
|
IterRemove(view->carets) {
|
||||||
|
IterRemovePrepare(view->carets);
|
||||||
|
if (InBounds(it.range, p)) {
|
||||||
|
String16 string = GetString(*buffer, it.range);
|
||||||
|
string = Copy(GetSystemAllocator(), string);
|
||||||
|
MakeSureToUseSystemAllocator_SaveInClipboard(string);
|
||||||
|
|
||||||
|
remove_item = true;
|
||||||
|
saved_front = GetFront(it);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (view->carets.len == 0) Add(&view->carets, MakeCaret(saved_front));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// @todo: maybe move some of this stuff to window command ???
|
// @todo: maybe move some of this stuff to window command ???
|
||||||
@@ -298,7 +324,6 @@ bool GlobalCommand(Event event) {
|
|||||||
// - maybe just do the check if active window is matching the DocumentSelected window
|
// - maybe just do the check if active window is matching the DocumentSelected window
|
||||||
// - if scrollbar selected then don't invoke window command
|
// - if scrollbar selected then don't invoke window command
|
||||||
if (event.alt && Mouse(LEFT)) {
|
if (event.alt && Mouse(LEFT)) {
|
||||||
MouseLoadWord(event);
|
|
||||||
} else if (Mouse(LEFT)) { // CTRL SHIFT
|
} else if (Mouse(LEFT)) { // CTRL SHIFT
|
||||||
Vec2I mouse = MouseVec2I();
|
Vec2I mouse = MouseVec2I();
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,14 +1,13 @@
|
|||||||
String16 SavedClipboardString;
|
String16 SavedClipboardString;
|
||||||
Array<String16> SavedClipboardCursors;
|
Array<String16> SavedClipboardCarets;
|
||||||
|
|
||||||
void Command_Copy(View *view) {
|
void MakeSureToUseSystemAllocator_SaveInClipboard(String16 string, Array<String16> caret_strings = {}) {
|
||||||
Allocator sys_allocator = GetSystemAllocator();
|
Allocator sys_allocator = GetSystemAllocator();
|
||||||
Buffer *buffer = GetBuffer(view->active_buffer);
|
|
||||||
|
|
||||||
SavedClipboardCursors.allocator = sys_allocator;
|
if (SavedClipboardCarets.data) {
|
||||||
if (SavedClipboardCursors.data) {
|
For(SavedClipboardCarets) Dealloc(sys_allocator, &it.data);
|
||||||
For(SavedClipboardCursors) Dealloc(sys_allocator, &it.data);
|
Dealloc(sys_allocator, &SavedClipboardCarets.data);
|
||||||
SavedClipboardCursors.len = 0;
|
SavedClipboardCarets.len = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SavedClipboardString.data) {
|
if (SavedClipboardString.data) {
|
||||||
@@ -16,6 +15,17 @@ void Command_Copy(View *view) {
|
|||||||
SavedClipboardString = {};
|
SavedClipboardString = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SavedClipboardString = string;
|
||||||
|
SavedClipboardCarets = caret_strings;
|
||||||
|
|
||||||
|
Scratch scratch;
|
||||||
|
SDL_SetClipboardText(ToString(scratch, SavedClipboardString).data);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Command_Copy(View *view) {
|
||||||
|
Allocator sys_allocator = GetSystemAllocator();
|
||||||
|
Buffer *buffer = GetBuffer(view->active_buffer);
|
||||||
|
|
||||||
// First, if there is no selection - select the entire line
|
// First, if there is no selection - select the entire line
|
||||||
For(view->carets) {
|
For(view->carets) {
|
||||||
if (GetSize(it.range) == 0) {
|
if (GetSize(it.range) == 0) {
|
||||||
@@ -25,16 +35,16 @@ void Command_Copy(View *view) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Array<String16> caret_strings = {sys_allocator};
|
||||||
For(view->carets) {
|
For(view->carets) {
|
||||||
String16 string = GetString(*buffer, it.range);
|
String16 string = GetString(*buffer, it.range);
|
||||||
String16 copy = Copy(sys_allocator, string);
|
String16 copy = Copy(sys_allocator, string);
|
||||||
Add(&SavedClipboardCursors, copy);
|
Add(&SavedClipboardCarets, copy);
|
||||||
}
|
}
|
||||||
|
|
||||||
// @todo: maybe only add new line if there is no new line at the end, experiment with it
|
// @todo: maybe only add new line if there is no new line at the end, experiment with it
|
||||||
SavedClipboardString = Merge(sys_allocator, SavedClipboardCursors, L"\n");
|
String16 final_string = Merge(sys_allocator, SavedClipboardCarets, L"\n");
|
||||||
Scratch scratch;
|
MakeSureToUseSystemAllocator_SaveInClipboard(final_string, caret_strings);
|
||||||
SDL_SetClipboardText(ToString(scratch, SavedClipboardString).data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Command_Paste(View *view) {
|
void Command_Paste(View *view) {
|
||||||
@@ -50,7 +60,7 @@ void Command_Paste(View *view) {
|
|||||||
String16 string = {string16_buffer, len};
|
String16 string = {string16_buffer, len};
|
||||||
|
|
||||||
// Regular paste
|
// Regular paste
|
||||||
if (string != SavedClipboardString || SavedClipboardCursors.len != view->carets.len) {
|
if (string != SavedClipboardString || SavedClipboardCarets.len != view->carets.len) {
|
||||||
Array<Edit> edits = BeginEdit(scratch, buffer, view->carets);
|
Array<Edit> edits = BeginEdit(scratch, buffer, view->carets);
|
||||||
MergeCarets(view);
|
MergeCarets(view);
|
||||||
For(view->carets) AddEdit(&edits, it.range, string);
|
For(view->carets) AddEdit(&edits, it.range, string);
|
||||||
@@ -62,7 +72,7 @@ void Command_Paste(View *view) {
|
|||||||
Array<Edit> edits = BeginEdit(scratch, buffer, view->carets);
|
Array<Edit> edits = BeginEdit(scratch, buffer, view->carets);
|
||||||
MergeCarets(view);
|
MergeCarets(view);
|
||||||
for (int64_t i = 0; i < view->carets.len; i += 1) {
|
for (int64_t i = 0; i < view->carets.len; i += 1) {
|
||||||
String16 string = SavedClipboardCursors[i];
|
String16 string = SavedClipboardCarets[i];
|
||||||
Caret &it = view->carets[i];
|
Caret &it = view->carets[i];
|
||||||
AddEdit(&edits, it.range, string);
|
AddEdit(&edits, it.range, string);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -887,7 +887,7 @@ void WindowCommand(Event event, Window *window, View *view) {
|
|||||||
SetActiveWindow(titlebar->id);
|
SetActiveWindow(titlebar->id);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Ctrl(SDLK_Q)) {
|
if (CtrlShift(SDLK_Q)) {
|
||||||
Caret caret = view->carets[0];
|
Caret caret = view->carets[0];
|
||||||
Range range = caret.range;
|
Range range = caret.range;
|
||||||
if (GetSize(caret.range) == 0) {
|
if (GetSize(caret.range) == 0) {
|
||||||
@@ -896,17 +896,14 @@ void WindowCommand(Event event, Window *window, View *view) {
|
|||||||
String16 string = GetString(*buffer, range);
|
String16 string = GetString(*buffer, range);
|
||||||
|
|
||||||
Command_EvalLua(view, string);
|
Command_EvalLua(view, string);
|
||||||
} else if (Alt(SDLK_Q)) {
|
} else if (Ctrl(SDLK_Q)) {
|
||||||
Caret caret = view->carets[0];
|
Caret caret = view->carets[0];
|
||||||
Range range = caret.range;
|
Range range = caret.range;
|
||||||
if (GetSize(caret.range) == 0) range = EncloseLoadWord(buffer, GetFront(caret));
|
if (GetSize(caret.range) == 0) range = EncloseLoadWord(buffer, GetFront(caret));
|
||||||
String16 string = GetString(*buffer, range);
|
String16 string = GetString(*buffer, range);
|
||||||
|
|
||||||
Open(string);
|
Open(string);
|
||||||
}
|
} else if (Alt(SDLK_Q)) {
|
||||||
|
|
||||||
if (Ctrl(SDLK_W)) {
|
|
||||||
} else if (Alt(SDLK_W)) {
|
|
||||||
GoBackToLastCrumb();
|
GoBackToLastCrumb();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,17 @@
|
|||||||
left_mouse :: ctrl add cursor, selections work, alt load word
|
left_mouse :: ctrl add cursor, selections work, alt load word
|
||||||
right_mouse :: ctrl exec word,alt go back
|
right_mouse :: ctrl exec word,alt go back
|
||||||
ctrl+q exec alt+q load
|
ctrl+q exec alt+q load
|
||||||
alt+w go back
|
alt+w go back
|
||||||
|
|
||||||
|
|
||||||
|
ctrl mleft - add cursor
|
||||||
|
ctrl shift mleft - add cursor + set selection
|
||||||
|
alt mleft -
|
||||||
|
alt ctrl mleft -
|
||||||
|
alt shift mleft -
|
||||||
|
alt mright - go back
|
||||||
|
mright - @todo: destroy pointed at selection and copy
|
||||||
|
ctrl mright - load word
|
||||||
|
shift mright -
|
||||||
|
ctrl shift mright - exec word
|
||||||
|
mmiddle -
|
||||||
|
|||||||
@@ -35,8 +35,8 @@ int FullScreenPositionX, FullScreenPositionY;
|
|||||||
#include "management.cpp"
|
#include "management.cpp"
|
||||||
#include "window.cpp"
|
#include "window.cpp"
|
||||||
#include "process.cpp"
|
#include "process.cpp"
|
||||||
#include "commands.cpp"
|
|
||||||
#include "commands_clipboard.cpp"
|
#include "commands_clipboard.cpp"
|
||||||
|
#include "commands.cpp"
|
||||||
#include "commands_window.cpp"
|
#include "commands_window.cpp"
|
||||||
#include "title_bar.cpp"
|
#include "title_bar.cpp"
|
||||||
|
|
||||||
|
|||||||
@@ -184,8 +184,8 @@ void DrawWindow(Window *window, Event &event) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Underline word under mouse cursor
|
// Underline word under mouse cursor
|
||||||
if (event.ctrl || event.alt) {
|
if (event.ctrl) {
|
||||||
auto enclose_proc = event.ctrl ? EncloseExecWord : EncloseLoadWord;
|
auto enclose_proc = event.shift ? EncloseExecWord : EncloseLoadWord;
|
||||||
|
|
||||||
Caret caret = view->carets[0];
|
Caret caret = view->carets[0];
|
||||||
Vec2I mouse = MouseVec2I();
|
Vec2I mouse = MouseVec2I();
|
||||||
|
|||||||
Reference in New Issue
Block a user