93 Commits

Author SHA1 Message Date
David Capello
15e10ad9f6 Add touch magnify event to support OS X trackpad gesture 2016-02-18 13:58:45 -03:00
David Capello
1588e834c3 Fix artifacts when scrolling on widgets with sub-children (fix #963)
This bug was introduced in b0650f6afea1b860a8593fd4614ca272f8edbfac
To fix this issue we've to remove kPaintMessages from the message queue
for widgets that were moved. Those pending paint messages aren't valid
anymore because the widget was invalidated again.
2016-02-15 15:54:54 -03:00
David Capello
b0650f6afe Generalize View::setViewScroll() to blit valid/scrollable region automatically
With this change we are removing specific code to scroll the Editor widget.
Now if we use Editor::setEditorScroll() to scroll it should work as
View::setViewScroll(). In this way we remove the ugly "blitValidRegion"
parameter from setEditorScroll().

Changes:
* Removed Widget::scrollRegion() because each widget must control
  valid/invalid regions after a ui::move_region() in a very specific way
  (see View::setViewScroll() or Window::moveWindow)
* Invalidate the whole widget on Widget::setBoundsQuietly()
* Fixed problems blitting invalid regions/not yet updated/painted: using
  the new ui::Manager::m_invalidRegion.
* Added View::onSetViewScroll() and View::onScrollRegion()
* Added FileListView to avoid moving the thumbnail region when we scroll
2016-01-05 16:37:52 -03:00
David Capello
eba8de0306 Fix slow scroll/selection movement with Alleg4 port (fix #929) 2016-01-04 12:15:23 -03:00
David Capello
910612101a Fix slow performance pressing Alt or Ctrl key on Editor in Alleg4/Win port 2015-12-30 17:30:20 -03:00
David Capello
0f28e216ba Fix Manager::pumpQueue() when DEBUG_PAINT_EVENTS is defined 2015-12-30 12:24:26 -03:00
David Capello
5074ef2d68 Handle several UI mouse movement events at once if they are in the she layer queue 2015-12-28 13:02:45 -03:00
David Capello
1aaeacc460 Refactor several "getNoun()" getters to "noun()"
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
2015-12-04 14:39:04 -03:00
David Capello
cdd955441a Rename PreferredSize -> SizeHint 2015-12-03 21:50:05 -03:00
David Capello
78ba213471 Rename ui::Widget::getChildren() -> children()
Extra changes:
* Removed UI_FOREACH_WIDGET(), replaced with range-based for-loops
2015-12-03 19:46:13 -03:00
David Capello
bd1a1ffafb Add support to transport key modifiers from she events to UI messages
It’s better if we use the original key modifiers from she::Events (given
by Cocoa or Win32 APIs) instead of asking for the current state of
the modifier when the ui::Message is created (which can be different
from the original value).

This commit adds support to transport the modifiers, but it is not
using the original key modifiers yet.
2015-10-14 16:42:49 -03:00
David Capello
2fe612fd00 Add precise trackpad support on Skia/OSX port 2015-10-14 09:27:20 -03:00
David Capello
615e369cc4 Fix closing multiple tabs with middle-click without moving mouse (fix #826) 2015-10-13 12:13:13 -03:00
David Capello
e8abba1b93 Refactor some UI code
- 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
2015-09-01 10:18:47 -03:00
David Capello
04f07af173 Fix problem leaving dirty areas in the screen when we move a window 2015-08-24 11:56:40 -03:00
David Capello
de3d4c3662 Improve performance flipping the dirty region only 2015-08-24 10:14:25 -03:00
David Capello
32b12d17da Fix visual artifacts on Windows when the window is resized
Now when the user resizes the OS window (a she::Display), it generates
a kDisplayResize she::Event, and this is processed by the UI layer to
redraw the entire ui::Manager.

With this change we remove the obscure "bool" return value in
she::Display::flip() member function.
2015-07-30 16:15:21 -03:00
David Capello
f2d5242ff3 Redraw the entire ui::Manager after resizing
Regression introduced in dd94925cf7cde621307ae5570e890be36c789831
2015-07-30 10:34:39 -03:00
David Capello
dd94925cf7 Move display flip logic to ui library (ui::Manager class) 2015-07-29 18:12:35 -03:00
David Capello
48a1af7342 Revert "Make Manager::freeMouse() to select a new visible widget"
This reverts commit 3accd85662972ea0e70e28b2177d79054fbfe7de.
2015-07-03 13:43:05 -03:00
David Capello
3accd85662 Make Manager::freeMouse() to select a new visible widget
In this way we generate a SetCursor message when a widget is hidden.
2015-06-29 15:46:08 -03:00
David Capello
0b0cb56c1e Replace some UI_FOREACH_WIDGET() with range-based for loops 2015-06-29 15:42:34 -03:00
David Capello
1922a27b38 Make ui::Widget::flags field private 2015-06-23 16:07:41 -03:00
David Capello
325e9245bf Rename ui::Widget::type -> m_type and make it private 2015-06-23 14:37:22 -03:00
David Capello
f01b816fb5 Remove JI_ prefix from ui/base.h constants 2015-06-23 14:00:00 -03:00
David Capello
5d6bdf5462 Fix crash pressing keys when the program is closing 2015-06-23 09:50:04 -03:00
David Capello
8eefdf174e Fix problem mapping "Ctrl++ Pad" key 2015-06-10 16:44:46 -03:00
David Capello
e8350fb51a Move event queue to she::System 2015-06-01 14:32:06 -03:00
David Capello
ca3fade50d Don't call focusFirstChild() if the Window doesn't want the focus 2015-05-04 12:50:04 -03:00
David Capello
883629b563 Fix bug triggering global keyboard shortcuts when a combobox popup is open
When a combobox popup is open, it creates a new non-foreground top window
(which is sibling of the window where the combobox widget is). When the
popup receives a key press, and it doesn't use it, the key is passed to
its parent (a ui::Manager), and then the latter has to process it.

Before this commit, CustomizedGuiManager::onProcessMessage() was
filtering shortcuts for foreground window, but it was working only
when the key was pressed in the foreground window itself (not when a
combination of foreground and background windows were open). Now the
filter is done in Manager::onProcessMessage() (which returns true,
i.e. key was used, for every pressed key when a foreground window
is found in its children hierarchy).
2015-05-04 11:25:42 -03:00
David Capello
0350ac4bbe Initial work on Skia backend (WIP) 2015-03-16 15:05:13 -03:00
David Capello
ad856b2a55 Use std:: when necessary, and std::numeric_limits instead of INT_MAX 2015-03-04 21:35:11 -03:00
David Capello
9e0990a70f Remove Manager::currentMouseButtons() 2014-11-25 22:11:44 -03:00
David Capello
752faf11f2 Remove jmouse_[xyz]() functions 2014-11-25 22:10:28 -03:00
David Capello
376fd0a23c Remove jmouse_b() function 2014-11-25 22:01:36 -03:00
David Capello
d9ed3c2348 Rename jmouse_[gs]et_cursor() to ui::[gs]et_mouse_cursor() 2014-11-25 21:30:56 -03:00
David Capello
d176839bf4 Merge branch '1.0'
* 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
2014-11-01 20:55:57 -03:00
David Capello
b9b3b02882 Fix mouse issues on OS X (fix #458)
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
2014-11-01 11:36:51 -03:00
David Capello
c5a568cd15 Generate mouse/key events from polling in she module instead of ui module 2014-09-19 10:12:05 -03:00
David Capello
c37958a7f3 Fix focus movement in ui::Entry widget on Mac OS X platform 2014-09-09 09:52:37 -03:00
David Capello
bde2ddbe83 Remove ji_screen and ji_clock global variables
- Replace JI_SCREEN_W/H with ui::display_w/h()
- Remove GfxMode class
- Move drawing code of ColorCurveEditor widget to onPaint()
- Rename ji_clock -> ui::clock()
2014-08-31 14:17:49 -03:00
David Capello
400ab0c464 Fix a bug in ui::Manager putting the focus in non-visible widgets
We've to ask for isVisible() member function because it checks for
the visibility of the widget and its parents.
2014-08-12 08:10:02 -03:00
David Capello
4d4958bf35 Move capture/release mouse function to she layer 2014-08-09 22:32:05 -03:00
David Capello
a6933b2c7a Rename ui::jmouse_poll to ui::_internal_poll_mouse 2014-08-09 11:16:54 -03:00
David Capello
6ccd95e22d Use a desktop Window in PreviewCommand to avoid a special events loop 2014-08-09 10:37:51 -03:00
David Capello
dbad153698 Add she::Font class (wrapper of Allegro FONT)
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
2014-06-22 18:53:14 -03:00
David Capello
47b6df19ee Fix problems generating mouse messages with pos=0,0 2014-05-25 16:22:48 -03:00
David Capello
778578b210 Fix Editor scroll issues: we cannot process several WM_MOUSEMOVE in one UI loop-cycle
We have to wait to validate not-scrolled regions before we can use
Widget::scrollRegion() or Window::moveWindow() again. This is an issue
to see in the future (to avoid lossing mouse move messages). At the moment,
one solution is to use the last received mouse move message.
2014-05-04 21:40:46 -03:00
David Capello
81d10f1c4f Add DEBUG_PAINT_EVENTS to manager.cpp 2014-05-04 21:17:45 -03:00
David Capello
e363577e65 Better double-click: remove DoubleClickeable and make ui::Widget default behavior to convert double-clicks into mouse downs 2014-04-29 23:02:27 -03:00