Commit graph

715 commits

Author SHA1 Message Date
Robert Müller e51fe4a86e Use font icon for editor proof mode selection button 2023-06-14 23:14:24 +02:00
Robert Müller d172d63815 Fix alignment of font icon buttons in editor 2023-06-14 23:14:23 +02:00
Robert Müller 34c2e5649b Improve editor color picker popup
By replacing the editor specific color picker popup with the generic UI color picker popup.

Improve layout of the editor color picker button. Improve spacing and ensure that the button is square. Slightly enlarge button on mouse hover.
2023-06-14 20:36:06 +02:00
Robert Müller 090433bc5e Don't remove the .map suffix in editor file dialog
This otherwise breaks file loading because the file extension is expected in this input buffer even when the input is not rendered.

Regression from #6736.
2023-06-14 00:43:35 +02:00
bors[bot] 183086700f
Merge #6737
6737: Refactor `str_copy` usages and buffer sizes in editor r=def- a=Robyt3

Use templated `str_copy` function in most cases to specify the correct buffer size.

Fixes two cases where the buffer size was hard-coded to a number.

Fix buffer size not being checked when copying auto mapper configuration name. Loading an auto mapper configuration with a name longer than 128 bytes could cause an out-of-bounds write.

Increase sizes of some text buffers that were potentially too small.

## Checklist

- [X] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2023-06-13 20:50:34 +00:00
Robert Müller bbe9f23a9c Refactor str_copy usages and buffer sizes in editor
Use templated `str_copy` function in most cases to specify the correct buffer size.

Fixes two cases where the buffer size was hard-coded to a number.

Fix buffer size not being checked when copying auto mapper configuration name. Loading an auto mapper configuration with a name longer than 128 bytes could cause an out-of-bounds write.

Increase sizes of some text buffers that were potentially too small.
2023-06-13 20:45:51 +02:00
Robert Müller b13e8076dc Fix editor save dialog entries not selectable with mouse anymore
Regression from #6530.
2023-06-13 19:51:54 +02:00
Robert Müller f0bb4a45d0 Allow adjusting popup border/background color
Add `SPopupMenuProperties` parameter object for `DoPopupMenu`.
2023-06-09 14:02:47 +02:00
Robert Müller 55726e8da3 Simplify list box activation handling
Store the list box active state inside `CListBox` instead of tracking it separately with a pointer.

Allow activating list boxes by clicking the scrollbar. Previously it was only possible to activate list boxes by selecting an item.

Fix country selection list box in players settings not being deactivated properly when name/clan edit boxes are active, because wrong UI element IDs were being used.
2023-06-07 20:46:10 +02:00
Robert Müller 938c57e03a Support mouse position locking in menus UI
Support locking mouse position when dragging value selectors also in menus (color pickers), which improves usability of value selectors.

Previously this was only supported in the editor.

When enabling locked mouse a UI element ID must be specified. The mouse lock is stopped when this element is no longer active. This ensures that the mouse doesn't gets stuck in this state when the value selector isn't active anymore.
2023-06-05 22:37:26 +02:00
Robert Müller ef217b69c9 Track updated mouse position in UI instead of menus
Simplify the UI usage for the menu by keeping the calculated mouse position variable together with the other mouse handling in `CUI`.
2023-06-05 22:37:26 +02:00
Robert Müller 90ae59a666 Make server settings editor height adjustable by dragging
Same as for the envelope editor. Extract `RenderExtraEditorDragBar` function to reduce duplicate code.

Fix height being changed by repeated clicking on the draggable element by also resetting `s_Operation` when `Clicked` is `true`.
2023-05-29 12:26:04 +02:00
Tarun Samanta fcaab778ca modified some files as asked 2023-05-22 23:50:45 +05:30
Tarun Samanta ef78e36c6f replaced second enum 2023-05-22 18:16:25 +05:30
Tarun Samanta 79d8928a03 made requested changes 2023-05-22 01:51:13 +05:30
Tarun Samanta e74c60d9a5 Modified some files 2023-05-22 00:56:23 +05:30
Tarun Samanta 61ef6210d1 Modifications in three files 2023-05-21 21:30:41 +05:30
Tarun Samanta 523a3c4450 fix- Replaced usage of m_ProofBorders and m_MenuProofBorders with enum EProofBorder 2023-05-21 14:47:27 +05:30
bors[bot] 20032b5a24
Merge #6546
6546: move some editor buttons into menus r=Robyt3 a=Marmare314

The entities and unused buttons are now in a new "Settings" menu.
![menu_settings](https://user-images.githubusercontent.com/49279081/235301689-a1375024-9233-432b-9ab3-4545f982711f.png)

The border and goto buttons got moved to the "Tools" menu.
![tools_menu](https://user-images.githubusercontent.com/49279081/235301690-6883e6a7-0afe-4b2f-826c-3fb48694f7f4.png)


## Checklist

- [x] Tested the change ingame
- [x] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [x] Considered possible null pointers and out of bounds array indexing
- [x] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: marmare314 <49279081+Marmare314@users.noreply.github.com>
2023-05-17 15:59:42 +00:00
Robert Müller dd7cf38be5 Fix uninitialized field causing assertion error with MSVC
The modified time was uninitialized for the editor file browser entry corresponding to the downloadedmaps-link. The time is never rendered for links, but the uninitialized time value was still passed to `str_timestamp_ex`, which results in an assertion error due to an incorrect time value being used when compiling with MSVC.

This is fixed by properly initializing the field and also by only calling `str_timestamp_ex` when the time value will be rendered.

Closes #6579.
2023-05-15 22:07:37 +02:00
Robert Müller d9307ca756 Use FileExists/fs_is_file instead of opening file
This is more concise and works more reliable e.g. on Windows.

See: https://devblogs.microsoft.com/oldnewthing/20071023-00/?p=24713
2023-05-10 21:04:02 +02:00
marmare314 7a0d566ddb combine proof mode buttons 2023-05-01 23:07:58 +02:00
marmare314 02429288f1 move coloring and info to settings 2023-05-01 22:44:03 +02:00
marmare314 ab20e897a8 add spacing and group unused selector code 2023-04-29 15:07:25 +02:00
marmare314 ae63ea5f9e move unused, entities, goto, border to menu 2023-04-29 14:05:01 +02:00
bors[bot] ab5531f5cb
Merge #6543
6543: adjust corners of Button_Env r=def- a=Marmare314

Before:
![buttons-old](https://user-images.githubusercontent.com/49279081/235272933-a40e8255-67b0-4d11-8e54-bf62f4bc1a76.png)

After:
![buttons-adjusted](https://user-images.githubusercontent.com/49279081/235272940-854fe87e-3916-4e6d-aee4-9a2e1a07667f.png)


## Checklist

- [x] Tested the change ingame
- [x] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [x] Considered possible null pointers and out of bounds array indexing
- [x] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: marmare314 <49279081+Marmare314@users.noreply.github.com>
2023-04-29 10:51:30 +00:00
marmare314 68bbb613c5 adjust corners of Button_Env 2023-04-29 12:10:15 +02:00
Robert Müller 996353a8e4 Use IsEntitiesLayer to reduce duplicate code 2023-04-29 11:43:33 +02:00
bors[bot] dc804f88ac
Merge #6544
6544: make envelope editor resizeable by dragging r=def- a=Marmare314


![resizeable-editor](https://user-images.githubusercontent.com/49279081/235273201-5ee620c3-3784-49d1-ac0c-3bc3d5aca440.gif)


## Checklist

- [x] Tested the change ingame
- [x] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [x] Considered possible null pointers and out of bounds array indexing
- [x] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: marmare314 <49279081+Marmare314@users.noreply.github.com>
2023-04-29 09:05:05 +00:00
marmare314 c9bc524878 make envelope editor resizeable by dragging 2023-04-29 02:26:10 +02:00
marmare314 61ff658cc7 potential fix for #6529 2023-04-29 01:20:51 +02:00
Robert Müller ebb2e4253d Port line input and IME support from 0.7
Port the line input (UI edit boxes, chat, console) and Input Method Editor (IME) support from upstream. Closes #4397.

General
------------------------------

Fix issues with the text input. Closes #4346. Closes #4524.

Word skipping (when holding Ctrl) is overhauled to be consistent with the Windows / Firefox experience that I took as reference.

Improve usability by not blinking (i.e. always rendering) the caret shortly after is has been moved.

UI text input
------------------------------

Fix inconsistent mouse-based left and right scrolling (closes #4347).

Support smooth left and right scrolling.

Chat
------------------------------

Support keyboard-based text selection of the chat input.

Mouse-based selection could be support in the future when we decide to add something like an ingame UI cursor.

Support smooth up and down scrolling of the chat input, removing the old hack that offsets the input string to simulate scrolling.

Console
------------------------------

Also support mouse-based text selection of the command input.

Only text from either the command input or the console log can be selected at the same time. This ensures that Ctrl+C will always copy the text that is currently visually selected in the console.

Check for Ctrl+C input event in event handler instead of in render function, to hopefully fix the issue that copying does not work sometimes (closes #5974 until further notice).

When Ctrl+C is used to copy text from the console log, the selection is cleared. This should make it more clear when text was copied from the log.

Fix an issue that was preventing the console log selection from being cleared, when all log lines are selected.

Remove Ctrl+A/E hotkeys that move cursor to beginning/end respectively. Ctrl+A now selectes all text like for all other inputs. Home and End keys can still be used to go the beginning and end.

Remove Ctrl+U/K hotkeys that clear everything before/after the cursor respectively. Hold shift and use Home/End to select everything instead.

IME support
------------------------------

Render list of IME candidates in the client on Windows, so the candidate list can also be viewed in fullscreen mode. There is no API available to retrieve a candidate list on the other operating systems.

Improve composition rendering by underlining the composition text instead of putting it in square brackets.

Track active input globally to properly activate and deactivate IME through the SDL functions.

Closes #1030. Closes #1008.

Password rendering
------------------------------

Fix rendering of passwords containing unicode. Instead of rendering one star character for each UTF-8 `char`, render on star for every unicode codepoint.

Show the composition text also for passwords. Without seeing the composition text it's hard to type a password containing those characters. The candidate window exposes the composition anyway. If you don't want to expose your password this way, e.g. while streaming, you could:

1. Use a latin password and switch off the IME for the password input with the IME hotkey.
2. Blank your screen with an external program while you are streaming and entering passwords.
3. Use binds to authenticate in rcon or to set the server browser password.

Refactoring
------------------------------

Move all text input logic and general rendering to `CLineInput`.

A `CLineInput` is associated with a particular `char` buffer given as a pointer either in the constructor or with `SetBuffer`. The maximum byte size of the buffer must also be specified. The maximum length in unicode codepoints can also be specified separately (e.g. on upstream, name are limited by the number of unicode codepoints instead).

Add `CLineInputBuffered`, which is a `CLineInput` that own a `char` buffer of a fixed size, which is specified as a template argument. As `CLineInput` does not own a buffer anymore, this reduces duplicate code for line inputs that need their own buffer.

Add `CLineInputNumber` which has additional convenience functions to consider the text as an `int` or `float`, to reduce duplicate code in those cases. In the future we could also add an input filter function so that only numbers can be entered in the number input.

Add `CLineInput::SetClipboardLineCallback` to handle the case that multiple lines of text are pasted into a lineinput. This reduces duplicate code, as this behavior was previously implemented separately for chat and console. The behavior is also fixed to be consistent with the console on Windows, so the first line being pasted edits the current input text and then sends it instead of being sent on its own without the existing input text.

Add `CalcFontSizeAndBoundingBox` to UI to reduce duplicate code. Expose `CalcAlignedCursorPos` as static member function to reuse it for line input.

Dispatch input events to UI inputs through the event handler instead of storing them in a duplicate buffer.

Use `size_t` for line input cursor position, length etc. and for `str_utf8_stats`.

Add `IButtonColorFunction` to UI to describe a functions that defines colors for the Default, Active and Hovered states of UI elements. Add some default button color functions. Use button color function to reduce duplicate code in scrollbar rendering.

Use `vec2` instead of two `floats` to represent the mouse positions in the text renderer.

Remove `CaretPosition` again, as it does not calculate the correct Y position near line breaks due to the wrapping being different when not rendering the entire string. Instead, calculate the exact caret position when rending a text container and store the caret position in the text cursor for later use.

IME usage guide (Windows)
------------------------------

1. Install the respective language and the Microsoft-IME keyboard (e.g. for Chinese, Japanese or Korean).
2. Launch the game (or a text editor to first try out the IME). Note that Windows may track the input language separately for every application. You can change this in the Windows input settings so the input language is changed globally.
2. Switch the input language using the hotkey Windows+Space or another hotkey that you configured in the Windows input settings (Alt+Shift is the default, but you should consider disabling it, to avoid accidentally changing the input language while playing).
3. Switch from Latin/English input mode to the respective asian input mode.
   - Chinese: Use Ctrl+Space to switch between English and Chinese input mode. You can change this hotkey in the IME's settings.
   - Japanese: Use Ctrl+Space to switch between Alphanumeric and Hiragana/Katakana input mode. You can change this hotkey in the IME's settings.
   - Korean: Use Right Alt to switch between English and Hangul input mode. You cannot change this hotkey as of yet.
   - Note that the input mode is also tracked per application, but there is no setting to change this behavior as far as I know, so you'll need to switch for every application separately.
4. Start typing. The underlined text is the current composition text. While a composition is active, you can only edit the composition text. Confirm the composition with Space or by selecting a candidate from the candidate list with the arrow keys. Cancel the composition with Escape or by using Backspace to delete the composition text. Note that not all languages offer a candidate list.

SDL version-specific issues
------------------------------

- 2.26.5, 2.24.2, 2.0.22: IME candidates work. But there are minor bugs when moving the composition cursor.
- 2.0.18, 2.0.20: IME candidates work.
- 2.0.16 (our current version): IME candidates cannot be determined with Windows API. Windows tries to draw the composition window like before, so this does not work in fullscreen mode.
- 2.0.8 (upstream 0.7): IME candidates work. But this SDL version is too old for us.
2023-04-23 15:00:29 +02:00
bors[bot] 15620354b9
Merge #6521
6521: Minor refactoring of engine input r=Chairn a=Robyt3



## Checklist

- [X] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [X] Considered possible null pointers and out of bounds array indexing
- [X] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2023-04-22 18:43:30 +00:00
Robert Müller 001d11d9ed Refactor CEditorMap::CMapInfo
Reduce duplicate code. Make code more similar to upstream.
2023-04-22 16:46:10 +02:00
Robert Müller ecc49a699f Use size_t for number of input events 2023-04-21 18:44:49 +02:00
Robert Müller 8507a651d1 Refactor vertical alignment in UI
Add separate constants `TEXTALIGN_TOP`, `TEXTALIGN_MIDDLE` and `TEXTALIGN_BOTTOM` for vertical alignment.

Add shorthand constants for all possible combinations of horizontal and vertical alignment, e.g. `TEXTALIGN_MC` for `TEXTALIGN_MIDDLE | TEXTALIGN_CENTER`.

Replace usage of `SLabelProperties::m_AlignVertically` with these constants in all menu and editor code for more convenient and versatile alignment of text. Use combined horizontal-vertical alignment constants for all existing labels. Manually adjust layout for some elements which were initially misaligned with the new implementation.

Refactoring:

- Use `CORNER_NONE` instead of `0`.
- Improve some `CUIRect` variables names and usage.
2023-04-10 17:22:09 +02:00
Robert Müller ede3e5631f Move generic popup handling to UI (port from editor and upstream)
Support using editor popup rendering in game client.

Support unlimited number of popup menus instead of maximum of 8.

Fix non-active popups handling key events. Add `Active` parameter to popup function, so key events are only processed by the active (top-most) popup. Previously the "New folder" popup could be confirmed with enter while an error message is shown, which causes multiple error messages to stack.

Allow popups to close without closing their child popups. Previously a popup could not open another popup and close itself immediately afterwards, as this was causing the newly opened popup to be closed instead.

Support using return/enter keys to confirm binary choice popups and to close message popups for more convenient usage.
2023-04-07 17:16:16 +02:00
bors[bot] fdcb2668e8
Merge #6502
6502: Improve editor file browser button layout when screen width is low r=def- a=Robyt3

Move "Map details" button from editor file browser to file menu.

Decrease button spacing in editor file browser when screen width is low (4:3 and 5:4 resolutions).

Screenshots:
- File menu:
   - Before: 
![file-menu old](https://user-images.githubusercontent.com/23437060/230586902-079a042d-0223-4a97-b228-ec8a4fae43d1.png)
   - After:
![file-menu new](https://user-images.githubusercontent.com/23437060/230589757-ef18d6d8-f8f0-4a2b-bc35-219349d6a7e7.png)
- File browser (800x600):
   - Before:
![save 800x600 old](https://user-images.githubusercontent.com/23437060/230591373-11b3e0c8-ce3f-4e8e-9fd1-297f8276de28.png)
   - After:
![save 800x600 new](https://user-images.githubusercontent.com/23437060/230591387-162de3fc-95e9-41ea-94a8-9b7b46ac97cb.png)
- File browser (1280x1024):
   - Before:
![save 1280x1024 old](https://user-images.githubusercontent.com/23437060/230591411-5dddd9de-4773-4dc9-a77b-61d5d4de4dc6.png)
   - After:
![save 1280x1024 new](https://user-images.githubusercontent.com/23437060/230591422-1ee8c941-9eb2-4e13-9268-de591b5b72f5.png)
- File browser (1920x1080):
   - Before:
![save 1920x1080 old](https://user-images.githubusercontent.com/23437060/230591437-146e961a-3e55-463f-988e-0d7eef92b439.png)
   - After:
![save 1920x1080 new](https://user-images.githubusercontent.com/23437060/230591445-931718f4-81fb-4c87-a018-f377a5c473df.png)

## Checklist

- [X] Tested the change ingame
- [X] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2023-04-07 11:12:40 +00:00
Robert Müller 5fb9f5db5b Decrease button spacing in editor file browser when screen width low
To prevent the buttons from overlapping in 4:3 and 5:4 resolutions.
2023-04-07 12:00:09 +02:00
Robert Müller b7e8168e4b Move "Map details" button from editor file browser to file menu
There is not enought space for the button in the file browser on 4:3 and 5:4 resolutions.

The button fits in the file menu, as it allows to adjust the map details which are specific to the current map file.
2023-04-07 12:00:09 +02:00
Robert Müller eaa4e19188 Fix image/sound readding broken by error messages
When an image/sound is readded, this reuses the `ReplaceImage/Sound` callback functions. The added error handling to prevent duplicate images/sounds was causing this to not work, as the image/sound being readded was already present. The implementation is separated from the callback functions and an additional parameter is added to toggle the duplicate name check.

Previously this was hard to notice, as the error message popup was not shown due to the top-most popup being closed immediately. This will be fixed separately by a larger refactoring, so a popup can close itself immediately after opening another popup without closing the child popup instead.

Closes #6500.
2023-04-07 10:58:57 +02:00
bors[bot] b4c114450c
Merge #6492
6492: Refactor editor popups, improve layout of new folder, map details and event popups r=def- a=Robyt3

- New folder popup:
   - Before: 
![new_folder old](https://user-images.githubusercontent.com/23437060/229349012-66aa4156-7f2c-4132-9cf3-da7451f93b09.png)
   - After:
![new_folder new](https://user-images.githubusercontent.com/23437060/229349015-d53a07f8-baa4-46f6-af7d-50d302e5d784.png)
- Map details popup:
   - Before: 
![map_details old](https://user-images.githubusercontent.com/23437060/229349023-0febb078-0948-4820-bda5-98a8e560ffb8.png)
   - After:
![map_details new](https://user-images.githubusercontent.com/23437060/229349027-8cdcc47d-e71b-43f2-9f7c-533993772afd.png)
- New map event popup:
   - Before: 
![new_map old](https://user-images.githubusercontent.com/23437060/229349034-dea63fb4-0f2c-4a93-8235-ab06224d0a89.png)
   - After:
![new_map new](https://user-images.githubusercontent.com/23437060/229349039-863451ba-8154-427f-a30b-7c7e542aa0b5.png)
- Load current map popup:
   - Before: 
![load_map_current old](https://user-images.githubusercontent.com/23437060/229349045-fe8eabed-2a64-46cf-b0d7-e71c2297e0ac.png)
   - After:
![load_map_current new](https://user-images.githubusercontent.com/23437060/229349051-1877c1ec-713e-41da-b52e-19ba004b467e.png)
- Large layer popup:
   - Before: 
![large_layer old](https://user-images.githubusercontent.com/23437060/229349053-93301856-5f96-4c42-b7e1-d79afeaa9281.png)
   - After:
![large_layer new](https://user-images.githubusercontent.com/23437060/229349369-5c42c3ae-619c-4ff8-9b78-515415703bf4.png)

## Checklist

- [X] Tested the change ingame
- [X] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2023-04-06 21:47:11 +00:00
VoxelDoesCode df48c44e78 Bring every Font Icon unicode into a namespace
Fix namespace hopefully
2023-04-03 20:25:28 -04:00
Robert Müller 3c841f7ad8 Refactor CEditor::PopupEntities 2023-04-02 13:16:15 +02:00
Robert Müller 9391155360 Refactor CEditor::PopupColorPicker 2023-04-02 13:16:14 +02:00
Robert Müller 8bdf2cf7a9 Refactor CEditor::PopupGoto 2023-04-02 13:16:14 +02:00
Robert Müller b839c68350 Refactor CEditor::PopupSpeedup 2023-04-02 13:16:13 +02:00
Robert Müller b20cf7865c Refactor CEditor::PopupEvent and improve layout
Swap buttons so confirm button is on the right and cancel button is on the left consistently.

Decrease empty space and popup size.

Add missing title for `POPEVENT_LOADCURRENT` (caught by the added assertion).

Improve messages by adding additional empty line for existing line breaks.
2023-04-02 13:16:12 +02:00
Robert Müller 91ce99b65b Refactor CEditor::PopupSound 2023-04-02 12:54:36 +02:00
Robert Müller 7289f7d504 Refactor CEditor::PopupImage 2023-04-02 12:54:36 +02:00
Robert Müller e09a771937 Refactor CEditor::PopupPoint 2023-04-02 12:54:36 +02:00
Robert Müller 04d9e2b54a Refactor CEditor::PopupMapInfo and improve layout
Swap buttons so confirm button is on the right and cancel button is on the left consistently.

Decrease empty space and popup size.
2023-04-02 12:54:36 +02:00
Robert Müller 141571cc55 Refactor CEditor::PopupNewFolder and improve layout
Swap buttons so confirm button is on the right and cancel button is on the left consistently.

Decrease empty space and popup size.
2023-04-02 12:54:35 +02:00
Robert Müller 5cfecdb42f Refactor CEditor::PopupSource 2023-04-02 12:54:35 +02:00
Robert Müller 2146d7bd92 Refactor CEditor::PopupQuad 2023-04-02 12:54:35 +02:00
Robert Müller eda808e385 Refactor CEditor::PopupGroup 2023-04-02 12:54:35 +02:00
Robert Müller c6d14e5fa1 Move all editor popup function definitions to popups.cpp
Editor code for the popups should be located in `popups.cpp`.
2023-04-02 12:52:37 +02:00
Robert Müller f4c3fee617 Use ShowFileDialogError instead of ShowPopupMessage
To reduce duplicate code.
2023-04-02 12:52:37 +02:00
bors[bot] a27dbb1219
Merge #6435
6435: add proof mode for menu backgrounds closes #3009 r=def- a=Marmare314


![backgroundproof](https://user-images.githubusercontent.com/49279081/225979288-3fb43d41-79f7-477e-8479-6b3d106fbd5b.gif)

## Checklist

- [x] Tested the change ingame
- [x] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [x] Considered possible null pointers and out of bounds array indexing
- [x] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: marmare314 <49279081+Marmare314@users.noreply.github.com>
2023-03-27 14:48:18 +00:00
marmare314 927c80167f update selected layer correctly after dragging 2023-03-27 09:13:39 +02:00
marmare314 93d204f0ca show duplicate positions in tooltip 2023-03-27 08:51:02 +02:00
Robert Müller fda8507d03 Add "Delete" button to editor file browser
To delete files and empty folders from the user's save directory.

Only files and folders from the user's save directory can be deleted. Only empty folders can be deleted.

Error message popups are shown when the deletion fails.

Closes #6272.
2023-03-25 16:59:02 +01:00
Robert Müller 6f1533ee18 Group UI code of right and left editor file dialog buttons
Move UI code for "New folder" button close to the code the "Map details" button.
2023-03-25 16:58:51 +01:00
bors[bot] 8a9489292e
Merge #6443
6443: Reveal selection when scrolling layer list with up/down arrow keys r=def- a=Robyt3

Closes #6441.

## Checklist

- [X] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2023-03-19 13:19:54 +00:00
Robert Müller 0c6c52e8d9 Reveal selection when scrolling layer list with up/down arrow keys
Closes #6441.
2023-03-19 12:34:50 +01:00
bors[bot] 854445d4e1
Merge #6434
6434: Show popups in editor when loading/saving file fails, fix minor issues with preview image r=def- a=Robyt3

![screenshot_2023-03-17_13-00-59](https://user-images.githubusercontent.com/23437060/225899583-fb264a56-ad9d-455e-b80b-885aad2fbd51.png)

![screenshot_2023-03-17_13-00-46](https://user-images.githubusercontent.com/23437060/225899589-d143d9db-ccaf-47d6-92cf-dea3dd49ab80.png)

![screenshot_2023-03-17_13-00-38](https://user-images.githubusercontent.com/23437060/225899590-527bb926-a244-4a55-ab3b-69953b836cf3.png)

![screenshot_2023-03-17_13-00-16](https://user-images.githubusercontent.com/23437060/225899598-abfa9c44-d2c5-4261-8459-2a4d612d480f.png)

![screenshot_2023-03-19_11-12-28](https://user-images.githubusercontent.com/23437060/226169030-e4d33cb1-238f-4e7d-a57d-1cf0a8bb18ea.png)

![screenshot_2023-03-17_12-59-42](https://user-images.githubusercontent.com/23437060/225899607-3613b4b6-2ef8-45c9-8803-61380ef675a7.png)

When using Ctrl+S:

![screenshot_2023-03-17_12-59-31](https://user-images.githubusercontent.com/23437060/225899610-44dbda9d-1207-4456-8219-a5a4947691fe.png)

Closes #6430.

## Checklist

- [X] Tested the change ingame
- [X] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [X] Considered possible null pointers and out of bounds array indexing
- [X] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2023-03-19 11:21:51 +00:00
Robert Müller 99ef97a0f8 Use variadic arguments for ShowFileDialogError formatting
Reduces duplicate code when calling the function.

Also increase the size of the message popup message, as it was not large enough for all paths.
2023-03-19 11:48:39 +01:00
Robert Müller c5f2727a3f Fix inconsistent slow mouse in editor
The mouse slow flag must be reset at the beginning of the render function in the editor instead of at the beginning of the update function, as it otherwise only works very inconsistently.
2023-03-18 22:26:43 +01:00
marmare314 8e2869e280 add tooltips 2023-03-18 07:53:18 +01:00
marmare314 9537656e57 use array again and consider checkpoints 2023-03-17 19:25:50 +01:00
marmare314 0ce70f863b add proof mode for menu backgrounds closes #3009 2023-03-17 18:37:55 +01:00
Robert Müller 3ab0fa7653 Fix editor preview image not being updated after searching
The preview image was not being updated after the search term is changed. Changing the search term causes the selected image to be changed, so the preview image also needs to be updated.
2023-03-17 12:58:25 +01:00
Robert Müller 9b8d8e4965 Don't reload editor preview image every frame if it's invalid
If the preview image in the "Add image" dialog could not be loaded it was retried every frame, which causes a debug message to be printed each time.

Now a tristate variable is used to ensure that the image is not reloaded after is previously failed to load.
2023-03-17 12:58:25 +01:00
Robert Müller 0c67d033ea Show popups in editor when loading/saving file fails
Show error message in a popup at the current mouse position when a file operation fails. Also works when pressing Ctrl+S to save.

When replacing images/sounds also first check if an image/sound with that name already exists.

When replacing sounds also first check whether the replacement sound could be loaded and don't replace existing sound with invalid sound on failure.

Replace existing error message for "Create folder" dialog with the new mechanism.

Closes #6430.
2023-03-17 12:58:24 +01:00
bors[bot] 5e2e1e25e3
Merge #6433
6433: add show directory button in filedialog closes #6422 r=Robyt3 a=Marmare314

## Checklist

- [x] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [x] Considered possible null pointers and out of bounds array indexing
- [x] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: marmare314 <49279081+Marmare314@users.noreply.github.com>
2023-03-17 11:30:35 +00:00
marmare314 b477173b8a add show directory button in filedialog 2023-03-17 12:17:31 +01:00
marmare314 fe221dab23 implement draggable layers 2023-03-17 11:28:08 +01:00
Robert Müller 3808a23bc7 Always enable editor panning and zooming when GUI is hidden
The `UI()->MouseInside(&View)` check does work when the mouse is all the way at the right or bottom side. Changing the `MouseInside` functions introduces other problems due to UI element and mouse positions being floating point numbers and not corresponding to exact pixels.

As a workaround to enable unlimited editor panning in all direction when the GUI is hidden the check is omitted, as the map editor encompasses the entire view and so the check is not necessary in this case.

Closes #4553.
2023-03-14 22:19:40 +01:00
bors[bot] 5f7f30d009
Merge #6419
6419: add sorting by name and time modified to filedialog r=Robyt3 a=Marmare314

As suggested in #4508 it would be nice to have at least some basic sorting ability in the filedialog. This PR implements at least the two most important sorting criteria: filename and time modified. Also the time modified is now displayed.
At the moment the characters ▲ and ▼ are used to indicate the sorting direction. Maybe there is a nicer way to display this.
![file_dialog_1](https://user-images.githubusercontent.com/49279081/224561567-d3335ca0-d9c9-4d44-ab97-31ce177d287e.png)
![dialog_2](https://user-images.githubusercontent.com/49279081/224561570-4182ba16-bfe0-42d7-b2ee-0f49895fec85.png)

## Checklist

- [x] Tested the change ingame
- [x] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [x] Considered possible null pointers and out of bounds array indexing
- [x] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: marmare314 <49279081+Marmare314@users.noreply.github.com>
2023-03-14 18:55:19 +00:00
marmare314 223813e519 reset timemodified sort 2023-03-14 17:17:24 +01:00
Robert Müller 1e74e06908 Fix slash removal when multiple slashes are pasted in editor
When pasting text containing multiple consecutive (back)slashes in the editor save dialog not all slashes where removed. For example with the text `/a//bb/\/ccc////dddd//\//`.
2023-03-14 13:32:06 +01:00
marmare314 fb5cb3e131 fix formatting 2023-03-12 19:57:46 +01:00
marmare314 c338eca199 ignore time for links and root folder 2023-03-12 19:41:58 +01:00
marmare314 e2449ac3b8 use str_timestamp_ex and fix codestyle 2023-03-12 18:54:57 +01:00
marmare314 9540d27a10 fix formatting issues and clean up indicator selection 2023-03-12 18:39:11 +01:00
marmare314 f012716af6 add sorting by name and time modified to filedialog 2023-03-12 18:10:22 +01:00
bors[bot] 20ae11567f
Merge #6416
6416: use ValueSelector for envelope selection #3598 r=def- a=Marmare314

Allow choosing envelopes by typing its ID.

## Checklist

- [x] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [x] Considered possible null pointers and out of bounds array indexing
- [x] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: marmare314 <49279081+Marmare314@users.noreply.github.com>
2023-03-12 15:29:12 +00:00
marmare314 05204bbcb8 use ValueSelector for envelope selection closes #3598 2023-03-12 15:58:38 +01:00
Robert Müller 4a94ab340f Fix some potentially undefined editor member variables
See #6407.
2023-03-10 17:18:24 +01:00
bors[bot] 0fd284a6f3
Merge #6392
6392: Add missing default value for custom parallax zoom property r=def- a=Robyt3

The "Custom Zoom" property was not initialized when creating a new layer group, leading to the property editor not working correctly and an undefined value being saved to the map file.

![property-editor](https://user-images.githubusercontent.com/23437060/223575784-81ce5eeb-992e-4084-985b-183b4389090c.png)

## Checklist

- [X] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2023-03-07 23:22:28 +00:00
Robert Müller 96ccfbb4c2 Add missing default value for custom parallax zoom property
The "Custom Zoom" property was not initialized when creating a new layer group, leading to the property editor not working correctly and an undefined value being saved to the map file.
2023-03-08 00:15:15 +01:00
Robert Müller da08533adf Revert "When GUI inactive, unlock mouse and don't render popup menus"
This reverts commit 0e476dfd70.
2023-03-07 22:51:56 +01:00
Robert Müller d69084ca0d Revert "Close editor popups and prevent popups from opening when GUI hidden"
This reverts commit 5c4d5fb571.
2023-03-07 22:43:35 +01:00
Robert Müller 5c4d5fb571 Close editor popups and prevent popups from opening when GUI hidden
Prevent editor popups (quad point, quad pivot, sound source) from being opened while the editor GUI is hidden. The opened popups would not be visible, which results in multiple identical popups being opened at the same time. This cannot happen while the GUI is shown, as the already opened popup takes focus so no second identical popup can be opened at the same time.

Additionally, all opened popups are now closed when the GUI is hidden. Otherwise this results in crashes, as the already opened popups reference the current layer and quad selection, which can change or become invalidated while the GUI is hidden.

Closes #6383.
2023-03-07 00:31:31 +01:00
Robert Müller 75d371743e Disable editor file browser hotkeys while another popup is open
Prevent enter, escape, up/down and F5 keys from manipulating the editor file browser while a popup menu (map details, new folder) is open.
2023-03-03 22:28:56 +01:00
Robert Müller dc2601f335 Fix opening file in editor with enter not working after searching
The filename of the selected file is tracked separately and was not updated when the search term in the Open File dialog is changed.
2023-03-03 22:28:08 +01:00
Robert Müller db4ec4a12d Replace usages of C math functions
Replacing the C standard headers with the C++ standard headers causes various `error: call to 'floor' promotes float to double [performance-type-promotion-in-math-fn,-warnings-as-errors]`, which are fixed by using the C++ std math functions or our own math functions instead of the C math functions.

- Use `absolute` instead of `abs` and `fabs`.
- Use `std::floor` instead of `floor` and `floorf`.
- Use `std::ceil` instead of `ceil`, `ceilf` and `round_ceil`.
- Use `std::round` instead of `round` and `roundf`.
- Use `std::sin` instead of `sin` and `sinf`.
- Use `std::asin` instead of `asin` and `asinf`.
- Use `std::cos` instead of `cos` and `cosf`.
- Use `std::acos` instead of `acos` and `acosf`.
- Use `std::tan` instead of `tan` and `tanf`.
- Use `std::atan` instead of `atan` and `atanf`.
- Use `std::pow` instead of `pow` and `powf`.
- Use `std::log` instead of `log` and `logf`.
- Use `std::log2` instead of `log2` and `log2f`.
- Use `std::log10` instead of `log10` and `log10f`.
- Use `std::pow` instead of `pow` and `powf`.
- Use `std::sqrt` instead of `sqrt` and `sqrtf`.
- Use `std::fmod` instead of `fmod` and `fmodf`.
- Use `direction(Angle)` instead of `vec2(std::cos(Angle), std::sin(Angle))`.
- Use `length(vec2(x, y))` instead of `std::sqrt(x * x + y * y)`.
- Remove unused `NormalizeAngular` and `AngularDistance` functions.
2023-03-01 19:26:53 +01:00
Robert Müller f386eff45c Remove unused argument of Text/TextWidth/TextLineCount
The `void *pFontSetV` argument is unused and all invocations except one were already passing `0`, `0x0` or `nullptr` for this argument.
2023-02-20 20:06:17 +01:00
bors[bot] 911bd0e69a
Merge #6282
6282: Add a refresh button to the editor file browser r=heinrich5991 a=Robyt3

![screenshot_2023-01-13_22-51-07](https://user-images.githubusercontent.com/23437060/212426385-f8c03e58-8e5d-4c47-9f19-865946c5be9c.png)

## Checklist

- [X] Tested the change ingame
- [X] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2023-02-04 11:16:09 +00:00
Robert Müller 624f7df217 Fix memory leak of editor preview image texture and data
The texture of the previous preview image was not unloaded before loading the texture of the new image.

The PNG data was never freed either. It's not necessary to keep this data loaded after loading the texture.
2023-02-04 11:28:13 +01:00