This is related to #1100, as the Linux port is not well tested and may
fail, it's good to have an option to disable the native clipboard code
just in case.
This is a weird combination of things:
1. StatusBar::onPixelFormatChanged() is being called in a non-UI thread
because ChangePixelFormatCommand changes the color mode from a
Job (background thread).
2. The UI layer is not prepared to work on multithreading, so all UI
stuff should be used in the main UI thread (anyway, generally, the UI
layer doesn't crash if it's used by multiple threads).
3. The harfbuzz library (used for TTF fonts) crashes if it is used by
multiple threads, so that was the trigger of this crash.
This is a work-in-progress to create a consistent API and finally
separate the whole Aseprite base/gfx/ui libs into a reusable C++ library.
Classes:
app::IFileItem, app::AppMenuItem, app::skin::SkinPart,
gfx::Rect, gfx::Border, she::FileDialog,
ui::IButtonIcon, ui::Graphics, ui::Overlay, ui::Widget,
ui::ScrollableViewDelegate, and UI events
- Moved ui::GuiSystem from ui/base.h to ui/system.h as ui::UISystem
- Moved some internals to ui::details namespace
- Fix crash of UI tests when ~Manager is called
- Removed ui::init/exit_system() functions
* In this branch the Alt+mnemonic issues are solved in "she" layer when the
she::Event is generated (see src/she/alleg4/key_poller.cpp)
* Mouse cursor issues on OS X are solved in src/she/alleg4/mouse_poller.cpp
Conflicts:
src/app/test_context.h
src/ui/manager.cpp
Now we generate she::Event::MouseEnter/Leave events correctly when the
mouse leaves or enters into the window to show the native cursor again
when necessary.
Close#466
Changing the mouse position isn't user-friendly in desktop apps, and
has several problems in some platforms (Mac OS X). In this way we've
changed the approach to handle the mouse position when it goes outside
the ui::Editor viewport.
This is an huge refactor to avoid handling Allegro FONT directly. Some
changes:
* Add she::System::defaultDisplay/Font, createRgbaSurface, loadSurface,
and loadRgbaSurface.
* Rename she::CreateSystem/Instance to she::create_system/instance.
* Remove ui/font.cpp and move ui/fontbmp.cpp to she library.
* ui::IButtonIcon uses she::Surface instead of BITMAP.
* Rename she::LockedSurface::drawAlphaSurface -> drawRgbaSurface
* Rename ui::SetDisplay -> set_display
* Rename _ji_font_text_len -> ui::Graphics::measureUIStringLength
On Windows, instead of polling Allegro mouse position/buttons we can use
the mouse messages (WM_*) directly to generate she::Events. Those events
are received by the ui::Manager and converted to ui::Messages.
Maybe this is a possible fix for issue #133 (Wacom tablets don't work
properly).
Changes:
- Don't use jmouse_z() directly (new ui::MouseMessage::wheelDelta() member)
- Add ui::_internal_set_mouse_position() to change the jmouse_x/y(0)
from the new mouse position received in she::Events. The same for
ui::_internal_set_mouse_buttons().
- Modify the ui::Manager to generate mouse events in any case: using old
Allegro 4 polling method, or from she::Events.
- Add HAVE_CONFIG_H wrapper to #include "config.h"
- Removed widgets namespace (it's in app now)
- Move some functions from src/file/file.h to src/base/cfile.h
- Move Vector2d to base library
- Rename MenuItem2 to AppMenuItem