Skip to content

Commit 9d8d92c

Browse files
committed
SDL: Update editor popup appearance
1 parent 5a7e8a3 commit 9d8d92c

File tree

5 files changed

+117
-18
lines changed

5 files changed

+117
-18
lines changed

ChangeLog

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
2020-12-19 (12.20)
2+
SDL: Update editor popup appearance
3+
14
2020-11-19 (12.20)
25
COMMON: Fix to allow multiple modules and units within saem program
36

src/platform/sdl/editor.cpp

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -119,13 +119,25 @@ void onlineHelp(Runtime *runtime, TextEditInput *widget) {
119119
runtime->browseFile(path);
120120
}
121121

122+
void showHelpPopup(TextEditHelpWidget *helpWidget) {
123+
helpWidget->showPopup(-20, -8);
124+
}
125+
126+
void showHelpLineInput(TextEditHelpWidget *helpWidget) {
127+
helpWidget->showPopup(40, 1);
128+
}
129+
130+
void showHelpSideabar(TextEditHelpWidget *helpWidget) {
131+
helpWidget->showSidebar();
132+
}
133+
122134
void showRecentFiles(TextEditHelpWidget *helpWidget, String &loadPath) {
123135
String fileList;
124136
helpWidget->createMessage();
125-
helpWidget->show();
126137
helpWidget->reload(NULL);
127138
getRecentFileList(fileList, loadPath);
128139
helpWidget->setText(fileList);
140+
showHelpPopup(helpWidget);
129141
}
130142

131143
void showSelectionCount(AnsiWidget *out, TextEditInput *widget) {
@@ -213,7 +225,7 @@ void System::editSource(String loadPath, bool restoreOnExit) {
213225
helpWidget->setText(gsb_last_errmsg);
214226
helpWidget->createStackTrace(gsb_last_errmsg, gsb_last_line, _stackTrace);
215227
widget = helpWidget;
216-
helpWidget->show();
228+
showHelpPopup(helpWidget);
217229
_output->setStatus("Error. Esc=Close, Up/Down=Caller");
218230
} else {
219231
_output->setStatus(!gsb_last_errmsg[0] ? "Error" : gsb_last_errmsg);
@@ -300,7 +312,7 @@ void System::editSource(String loadPath, bool restoreOnExit) {
300312
_output->setStatus("Keyword Help. F2=online, Esc=Close");
301313
widget = helpWidget;
302314
helpWidget->createKeywordIndex();
303-
helpWidget->show();
315+
showHelpPopup(helpWidget);
304316
break;
305317
case SB_KEY_F(2):
306318
redraw = false;
@@ -316,10 +328,10 @@ void System::editSource(String loadPath, bool restoreOnExit) {
316328
if (editWidget->getTextLength()) {
317329
saveFile(editWidget, loadPath);
318330
saveRecentPosition(loadPath, editWidget->getCursorPos());
319-
_output->setStatus("Export to mobile SmallBASIC. Enter <IP>:<Port>");
331+
_output->setStatus("Export to SmallBASIC. Enter <IP>:<Port> | <sbasic command>");
320332
widget = helpWidget;
321333
helpWidget->createLineEdit(g_exportAddr);
322-
helpWidget->show();
334+
showHelpLineInput(helpWidget);
323335
inputMode = kExportAddr;
324336
}
325337
break;
@@ -329,7 +341,7 @@ void System::editSource(String loadPath, bool restoreOnExit) {
329341
_output->setStatus("Debug. F6=Step, F7=Continue, Esc=Close");
330342
widget = helpWidget;
331343
helpWidget->createMessage();
332-
helpWidget->show();
344+
showHelpSideabar(helpWidget);
333345
((Runtime *)this)->debugStart(editWidget, loadPath.c_str());
334346
statusMessage.resetCursor(editWidget);
335347
break;
@@ -350,46 +362,46 @@ void System::editSource(String loadPath, bool restoreOnExit) {
350362
_output->setStatus("Enter program command line, Esc=Close");
351363
widget = helpWidget;
352364
helpWidget->createLineEdit(opt_command);
353-
helpWidget->show();
365+
showHelpLineInput(helpWidget);
354366
inputMode = kCommand;
355367
break;
356368
case SB_KEY_CTRL('h'):
357369
_output->setStatus("Keystroke help. Esc=Close");
358370
widget = helpWidget;
359371
helpWidget->createHelp();
360-
helpWidget->show();
372+
showHelpSideabar(helpWidget);
361373
break;
362374
case SB_KEY_CTRL('l'):
363375
_output->setStatus("Outline. Esc=Close");
364376
widget = helpWidget;
365377
helpWidget->createOutline();
366-
helpWidget->show();
378+
showHelpSideabar(helpWidget);
367379
break;
368380
case SB_KEY_CTRL('f'):
369381
_output->setStatus("Find in buffer. Esc=Close");
370382
widget = helpWidget;
371383
helpWidget->createSearch(false);
372-
helpWidget->show();
384+
showHelpLineInput(helpWidget);
373385
statusMessage.resetCursor(editWidget);
374386
break;
375387
case SB_KEY_CTRL('n'):
376388
_output->setStatus("Replace string. Esc=Close");
377389
widget = helpWidget;
378390
helpWidget->createSearch(true);
379-
helpWidget->show();
391+
showHelpLineInput(helpWidget);
380392
statusMessage.resetCursor(editWidget);
381393
break;
382394
case SB_KEY_ALT('g'):
383395
_output->setStatus("Goto line. Esc=Close");
384396
widget = helpWidget;
385397
helpWidget->createGotoLine();
386-
helpWidget->show();
398+
showHelpLineInput(helpWidget);
387399
break;
388400
case SB_KEY_CTRL(' '):
389401
_output->setStatus("Auto-complete. Esc=Close");
390402
widget = helpWidget;
391403
helpWidget->createCompletionHelp();
392-
helpWidget->show();
404+
showHelpSideabar(helpWidget);
393405
break;
394406
case SB_KEY_INSERT:
395407
statusMessage.setInsert();
@@ -497,14 +509,14 @@ void System::editSource(String loadPath, bool restoreOnExit) {
497509
break;
498510
}
499511
} else if (helpWidget->closeOnEnter() && helpWidget->isVisible()) {
500-
statusMessage._dirty = !widget->isDirty();
512+
statusMessage._dirty = !editWidget->isDirty();
501513
widget = editWidget;
502514
helpWidget->hide();
503515
helpWidget->cancelMode();
504516
}
505517
redraw = true;
506518
} else if (helpWidget->replaceDoneMode()) {
507-
statusMessage._dirty = !widget->isDirty();
519+
statusMessage._dirty = !editWidget->isDirty();
508520
widget = editWidget;
509521
helpWidget->hide();
510522
helpWidget->cancelMode();

src/ui/textedit.cpp

Lines changed: 82 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,8 @@ int textedit_move_to_word_next(EditBuffer *str, int c) {
7373
#define TWISTY2_CLOSE " < "
7474
#define TWISTY1_LEN 2
7575
#define TWISTY2_LEN 4
76-
#define HELP_BG 0x73c990
77-
#define HELP_FG 0x20242a
76+
#define HELP_BG 0x20242a
77+
#define HELP_FG 0x73c990
7878
#define DOUBLE_CLICK_MS 200
7979

8080
#if defined(_Win32)
@@ -249,6 +249,19 @@ const char *find_str(bool allUpper, const char *haystack, const char *needle) {
249249
return allUpper ? strstr(haystack, needle) : strcasestr(haystack, needle);
250250
}
251251

252+
int shade(int c, float weight) {
253+
uint8_t r = ((uint8_t)(c >> 16));
254+
uint8_t g = ((uint8_t)(c >> 8));
255+
uint8_t b = ((uint8_t)(c));
256+
r = (r * weight);
257+
g = (g * weight);
258+
b = (b * weight);
259+
r = r < 255 ? r : 255;
260+
g = g < 255 ? g : 255;
261+
b = b < 255 ? b : 255;
262+
return (r << 16) + (g << 8) + (b);
263+
}
264+
252265
//
253266
// EditTheme
254267
//
@@ -307,6 +320,28 @@ void EditTheme::selectTheme(const int theme[]) {
307320
_row_marker = theme[16];
308321
}
309322

323+
void EditTheme::contrast(EditTheme *other) {
324+
int fg = shade(other->_color, .65);
325+
int bg = shade(other->_background, .65);
326+
_color = fg;
327+
_background = bg;
328+
_selection_color = bg;
329+
_selection_background = shade(bg, .65);
330+
_number_color = fg;
331+
_number_selection_color = fg;
332+
_number_selection_background = bg;
333+
_cursor_color = bg;
334+
_cursor_background = fg;
335+
_match_background = fg;
336+
_row_cursor = bg;
337+
_syntax_comments = bg;
338+
_syntax_text = fg;
339+
_syntax_command = fg;
340+
_syntax_statement = fg;
341+
_syntax_digit = fg;
342+
_row_marker = fg;
343+
}
344+
310345
//
311346
// EditBuffer
312347
//
@@ -1868,7 +1903,7 @@ TextEditHelpWidget::TextEditHelpWidget(TextEditInput *editor, int chW, int chH,
18681903
_editor(editor),
18691904
_openPackage(nullptr),
18701905
_openKeyword(-1) {
1871-
_theme = new EditTheme(HELP_BG, HELP_FG);
1906+
_theme = new EditTheme(HELP_FG, HELP_BG);
18721907
hide();
18731908
if (overlay) {
18741909
_x = editor->_width - (chW * HELP_WIDTH);
@@ -2332,3 +2367,47 @@ void TextEditHelpWidget::toggleKeyword() {
23322367
}
23332368
free(line);
23342369
}
2370+
2371+
void TextEditHelpWidget::showPopup(int cols, int rows) {
2372+
if (cols < 0 && rows < 0) {
2373+
_width = _editor->_width - (_charWidth * -cols);
2374+
_height = _editor->_height - (_charHeight * -rows);
2375+
} else {
2376+
_width = _charWidth * cols;
2377+
_height = _charHeight * rows;
2378+
}
2379+
if (_width > _editor->_width) {
2380+
_width = _editor->_width;
2381+
}
2382+
if (_height > _editor->_height) {
2383+
_height = _editor->_height;
2384+
}
2385+
_x = (_editor->_width - _width) / 2;
2386+
if (rows == 1) {
2387+
_y = _editor->_height - (_charHeight * 3);
2388+
} else {
2389+
_y = (_editor->_height - _height) / 2;
2390+
}
2391+
_theme->contrast(_editor->getTheme());
2392+
show();
2393+
}
2394+
2395+
void TextEditHelpWidget::showSidebar() {
2396+
int border = _charWidth * 2;
2397+
_width = _charWidth * 30;
2398+
_height = _editor->_height - (border * 2);
2399+
_x = _editor->_width - (_width + border);
2400+
_y = border;
2401+
_theme->contrast(_editor->getTheme());
2402+
show();
2403+
}
2404+
2405+
void TextEditHelpWidget::draw(int x, int y, int w, int h, int chw) {
2406+
TextEditInput::draw(x, y, w, h, chw);
2407+
int shadowW = _charWidth / 3;
2408+
int shadowH = _charWidth / 3;
2409+
2410+
maSetColor(_theme->_selection_background);
2411+
maFillRect(x + _width, y + shadowH, shadowW, _height);
2412+
maFillRect(x + shadowW, y + _height, _width, shadowH);
2413+
}

src/ui/textedit.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ struct TextEditInput : public FormEditInput {
110110
bool replaceNext(const char *text, bool skip);
111111
int getCompletions(StringList *list, int max);
112112
void selectNavigate(bool up);
113+
EditTheme *getTheme() { return _theme; }
113114

114115
protected:
115116
enum SyntaxState {
@@ -203,6 +204,7 @@ struct TextEditHelpWidget : public TextEditInput {
203204
void createOutline();
204205
void createSearch(bool replace);
205206
void createStackTrace(const char *error, int line, StackTrace &trace);
207+
void draw(int x, int y, int w, int h, int chw);
206208
bool edit(int key, int screenWidth, int charWidth);
207209
void paste(const char *text);
208210
bool isDrawTop() { return true; }
@@ -217,6 +219,8 @@ struct TextEditHelpWidget : public TextEditInput {
217219
bool replaceModeWith() const { return _mode == kEnterReplaceWith; }
218220
bool replaceDoneMode() const { return _mode == kReplaceDone; }
219221
bool selected(MAPoint2d pt, int scrollX, int scrollY, bool &redraw);
222+
void showPopup(int cols, int rows);
223+
void showSidebar();
220224
void toggleKeyword();
221225

222226
private:

src/ui/theme.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ struct EditTheme {
2222
EditTheme(int fg, int bg);
2323
void setId(const unsigned themeId);
2424
void selectTheme(const int theme[]);
25+
void contrast(EditTheme *other);
2526

2627
int _color;
2728
int _background;

0 commit comments

Comments
 (0)