Commit Graph

7972 Commits

Author SHA1 Message Date
Maarten Bent
b833b12931 Improve wxRadioBox height on wxMSW
With larger fonts, there is an excessive gap between the box and the first (and last) radio button.
Instead of using the dynamic character size, use the fixed size of the radio button to determine this height.
2017-12-10 23:24:40 +01:00
Maarten Bent
f696d035a6 Remove unused variables from wxRadioBox
These variables never got assigned a value.
2017-12-10 23:23:29 +01:00
Maarten Bent
febd929f0f Improve wxRadioBox width on wxMSW
Do not use 'RADIO_SIZE 20' as the fixed width of the radio button, but use the actual width as returned by wxRendererNative.
wxRendererNative has no GetRadioButtonSize, so for now use GetCheckBoxSize. It returns the same sizes.
Also add a half character width to account for the space between the button and the label.
There is no need to add extra width to the label of the static box.

Closes #18010.
2017-12-10 23:22:13 +01:00
Vadim Zeitlin
b5d0a291a5 Merge branch 'msw-double-buffer'
Improve double-buffering support in wxMSW wxListCtrl and optionally use
it in wxTreeCtrl too.

Closes https://github.com/wxWidgets/wxWidgets/pull/636
2017-12-10 17:47:31 +01:00
Steve Browne
ef91e5ecbe Implement wxTreeCtrl::SetDoubleBuffered() in MSW wxTreeCtrl
Also don't erase background when the control is double-buffered because
it's not necessary and can cause flicker.

See https://github.com/wxWidgets/wxWidgets/pull/374
2017-12-10 17:47:26 +01:00
Vadim Zeitlin
061e6f9a3c Fix flicker when resizing columns of report-mode MSW wxListCtrl
Just turn off background erasing to avoid having horrible flicker which
can be seen perfectly well simply by drag-resizing a column in a list
control with non-default background colour.

See https://github.com/wxWidgets/wxWidgets/pull/374
2017-12-10 17:47:21 +01:00
Vadim Zeitlin
17105cfd07 Simplify changing window styles in wxMSW code
Add wxMSWWinStyleUpdater and wxMSWWinExStyleUpdater helper classes which
allow writing code changing GWL_STYLE and GWL_EXSTYLE bits,
respectively, in a shorter and more clear way.

There should be no real changes in behaviour.
2017-12-10 17:47:16 +01:00
Vadim Zeitlin
588ae3744c Move fallback BS_TYPEMASK definition to wx/msw/missing.h
It can be useful in source files other than src/msw/control.cpp too.
2017-12-10 17:47:11 +01:00
Vadim Zeitlin
badf6bc300 Disable scrollbars for frozen wxTreeCtrl in MSW
Replace the hack with resizing the control to the minimal possible size
while it's frozen with just disabling its scrollbars in the frozen
state. This should also fix the original problem (of scrollbar jumping
around wildly as the items are added), but without different problems
due to the control being resized unexpectedly.

Unfortunately we don't have a reproducer for the original problem, which
the commits 6754c300cf ("Freeze wxTreeCtrl
in wxMSW by hiding it") and 4e1e8dc51b
("Change wxMSW wxTreeCtrl::DoFreeze() to not hide the tree any more" --
but resize it instead) tried to fix, so it's difficult to be sure that
it really doesn't exist any more, but it does seem like it ought to be
as the comment added back then spoke of the problem with scrollbar
updating and this really shouldn't happen if scrollbars are completely
disabled.

See https://github.com/wxWidgets/wxWidgets/pull/375
2017-12-10 17:47:06 +01:00
Vadim Zeitlin
23caf6fe00 Remove misleading comment from wxStaticBox::PaintBackground()
We do use wxStaticBox colour for painting its background (as can be seen
with test code from #18018, for example) under MSW, so don't say that we
don't.

Also, the reasons for not doing it mentioned in the comment are either
obsolete (wxGTK3 does do it too, unlike wxGTK2) or lost (the link to the
mailing list message doesn't work any longer and can't be recovered).

Closes #17913.
2017-12-07 18:49:59 +01:00
Vadim Zeitlin
3e0adbf541 Merge branch 'gesture-events'
Integrate GSoC 2017 work by Prashant Kumar implementing support for
gesture events.

Closes https://github.com/wxWidgets/wxWidgets/pull/551

Closes https://github.com/wxWidgets/wxWidgets/pull/565
2017-12-02 18:46:53 +01:00
Maarten Bent
afc02a34ee More use of wxFALLTHROUGH in MSW code and samples 2017-11-25 17:52:08 +01:00
Vadim Zeitlin
778340a286 Merge branch 'private-fonts'
Add support for using application-private fonts.

Closes #13568.

Closes https://github.com/wxWidgets/wxWidgets/pull/591
2017-11-24 22:58:09 +01:00
Vadim Zeitlin
b040dab0ca Add wxUSE_PRIVATE_FONTS and drop wxHAS_PRIVATE_FONTS
Handle this feature as all the other ones and provide a configure switch
and a setup.h option to disable it if necessary, as it may be desirable
to do it, especially under Linux, to avoid extra dependency on pangoft2
if this functionality is unnecessary.
2017-11-24 22:56:17 +01:00
Vadim Zeitlin
a8dfaa569b Allow enabling individual touch gesture events
Implement support for enabling just some gesture events instead of
having to choose between getting none or all of them.

Also make wxTOUCH_NONE really disable the gestures events generation
instead of just doing nothing as before.
2017-11-22 03:05:02 +01:00
Vadim Zeitlin
842dd1cfd9 Add wxWindow::EnableTouchEvents()
Don't request touch event generation for all windows by default, this
has an inherent overhead and is not needed for 99% of the application
windows, so require calling EnableTouchEvents() explicitly to do it
instead.

Note that this requires properly initializing gesture recognizers in
wxOSX now that they're not always allocated, otherwise releasing them
when destroying the window would crash.
2017-11-22 02:24:24 +01:00
Vadim Zeitlin
bb2887930f Use wxPoint instead of (x,y) pair in wxPanGestureEvent
Using higher level objects makes the code generating and using this
event shorter and more clear.
2017-11-21 17:45:34 +01:00
Vadim Zeitlin
db71a10b29 Set rotation angle for the initial rotate gesture event in MSW
According to MSDN, for the initial rotation even the angle is just
passed directly, so use it.
2017-11-21 17:27:42 +01:00
Vadim Zeitlin
b3e726faed Refactor MSW gesture events initialization
Don't repeat the same code for initializing events in several different
functions but put it in a helper InitGestureEvent() function and just
call it from the event-specific handlers.
2017-11-21 17:25:55 +01:00
Vadim Zeitlin
989dd36405 Style fixes in the MSW gestures code
No real changes, just reformat code and comments to fit in 80 column
lines.
2017-11-21 16:12:37 +01:00
Vadim Zeitlin
daf19c652c Use WinStruct<> to initialize GESTUREINFO
This is more concise and clear than initializing it manually.
2017-11-21 16:12:35 +01:00
Vadim Zeitlin
7ffb897810 Remove unnecessary assignments in WM_GESTURE handler code
The "processed" flag is false by default, no need to explicitly reset
it, this was just confusing.
2017-11-21 16:12:32 +01:00
Vadim Zeitlin
59f428d25e Slightly simplify GestureFuncs code
Document that the users of this class always must call IsOk() first, as
they already do, and remove the checks for ms_gestureSymbolsLoaded and
calls to LoadGestureSymbols() from all the other methods, which are
unnecessary in this case.
2017-11-21 16:12:30 +01:00
Vadim Zeitlin
bf929f9868 Use wxLoadedDLL for loading user32.dll dynamically
This avoids unnecessarily loading and unloading (except that it's not
really unloaded) a DLL which is always available anyhow.
2017-11-21 16:05:33 +01:00
Artur Wieczorek
1033a1636d Process HDN_ITEMCHANGING notifications only when column is being resized
When column resizing is finished, after HDN_ENDTRACK notification there is
also sent one (and last) HDN_ITEMCHANGING notification. We have to skip it
to prevent from sending EVT_HEADER_RESIZING after EVT_HEADER_END_RESIZE
because EVT_HEADER_END_RESIZE should be really the last one event
in the sequence of resizing events (like it's assumed in wxGrid).

Closes #16390.
2017-11-20 21:57:05 +01:00
prashantkn94
261b04b5a3 Merge multi-touch gestures event branch
This is a squashed commit of the SOC2017_GESTURES branch from
https://github.com/prashantkn94/wxWidgets.git

Closes https://github.com/wxWidgets/wxWidgets/pull/551
2017-11-17 18:06:06 +01:00
Vadim Zeitlin
d4d3222466 Split initial wxProgressDialog message consistently with updates
Native wxMSW dialog split the provided message into the title and body
in Update(), but didn't do it for the initial message specified when
constructing the dialog, resulting in weird jumps, due to the font size
change between the body and title dialog elements, if the updated
message differed just slightly from the initial one.

Fix this and refactor the code to reuse the same function for doing this
splitting in both places.
2017-11-16 23:52:33 +01:00
Vadim Zeitlin
602e2e6abb Avoid fitting wxProgressDialog to its contents on first update
Use TDM_UPDATE_ELEMENT_TEXT even for the initial update as this allows
to specify the message of roughly comparable (or greater) length than
the messages that will be subsequently used while the dialog is shown
and avoid size changes later, which is much more natural than having to
do it for the first call to Update().
2017-11-16 23:52:30 +01:00
Vadim Zeitlin
83b9fa3119 Get rid of unnecessary wxCriticalSectionLocker use
No real changes, just don't lock a critical section for a short time
only to lock it again almost immediately after unlocking -- just combine
both blocks for which it is locked into one, there is no reason to
release it for TASKDIALOGCONFIG and wxMSWTaskDialogConfig initialization
which are both trivial operations not involving any callbacks.
2017-11-16 23:52:27 +01:00
Vadim Zeitlin
5a3fd23a68 Remove a now redundant test in UpdateExpandedInformation()
Checking for m_progressBarMarquee is not necessary any longer, just
testing the value is enough.

Update the comments to explain why is it so.

No real changes.
2017-11-16 01:35:53 +01:00
Vadim Zeitlin
4ab676c967 Show elapsed/estimated times in wxMSW wxProgressDialog by default
This further improves the dialog usability when the main thread doesn't
update it frequently enough, as these times can be seen immediately
without having to expand the "details" part of the dialog which can be
very sluggish in this case.

It is also more consistent with the generic dialog and the behaviour of
the native dialog before 6b91c5dfab876f0f1b17d54304bfb2fda27398ef which
removed the code clearing TDF_EXPAND_FOOTER_AREA style.
2017-11-16 01:35:53 +01:00
Vadim Zeitlin
ed086ea044 Get rid of unnecessary variables in wxMSW wxProgressDialog
There doesn't seem to be any need to have both "foo" and "realFoo", just
reuse the existing variables instead.

No real changes.
2017-11-16 01:35:53 +01:00
Vadim Zeitlin
e49cde166f Improve progress bar updating in native wxMSW wxProgressDialog
Since the switch to tying the task dialog thread message queue with the
main thread, animating the progress bar didn't work well unless the
dialog was updated very frequently from the main thread and could lag
behind significantly, and confusingly for the user, otherwise.

Work around this by avoiding the progress bar animation and setting it
immediately to its real value. This works much better in practice.
2017-11-16 01:35:53 +01:00
Vadim Zeitlin
cac3d39fa1 Don't explicitly attach progress dialog thread input
This is actually completely unnecessary because this is done implicitly
by Windows itself anyhow when we create the dialog with the owner window
belonging to a different thread.

Notice that this also explains why the thread input can't be detached
later.
2017-11-16 01:35:52 +01:00
Vadim Zeitlin
1c62ebdcd7 Minor optimizations in wxProgressDialog
Don't bother performing the updates if nothing was requested.

And ensure that nothing is requested even more often than it already was
by not requesting an update if the new value is the same as the old one.
2017-11-16 01:35:52 +01:00
Vadim Zeitlin
ca7e1d8bd1 Remove manual wxProgressDialog centering code
This is not necessary any longer now that we use the correct parent for
the dialog window, the task dialog is centered automatically.

And unlike our own code, comctl32.dll code always puts the dialog fully
on one monitor instead of making it span two of them if the parent
window does.
2017-11-16 01:35:52 +01:00
Vadim Zeitlin
2b8e84ca49 Avoid deadlock when closing the progress dialog
Don't call EndDialog() while inside the critical section, this could
(and did, sometimes) result in a deadlock if the main thread was trying
to enter it in order to send us wxSPDD_DESTROYED notification as
EndDialog() needs it to process some messages.
2017-11-16 01:35:52 +01:00
Vadim Zeitlin
d7ec02636a Avoid spurious assert when cancelling wxProgressDialog
If Cancel/close button was pressed twice in a row, assert checking that
the dialog state was "Continue" could be triggered, which was worse than
annoying as it resulted in a deadlock due to trying to show the assert
dialog box while holding the critical section that prevented the main
thread from continuing.

Allow the state to be either "Continue" or already be set to "Canceled"
now to account for this case.

Still assert for the other invalid states, but they really aren't
supposed to be possible here.
2017-11-16 01:35:52 +01:00
Vadim Zeitlin
a8eccd21c7 Implement wxProgressDialog::DoGetSize() for the native dialog too
DoGetPosition() was done in 1ef1f8fda6,
implement DoGetSize() too now in order to give a chance Centre() (which
needs both position and size to work).

See #17768.
2017-11-16 01:35:52 +01:00
Vadim Zeitlin
ffe84cfb99 Factor out wxProgressDialog::GetTaskDialogRect()
No real changes, just prepare for implementing DoGetSize() in this class
by extracting the common part between the existing DoGetPosition() and
it in a new function.
2017-11-16 01:35:51 +01:00
Vadim Zeitlin
df2a0eb67e Stop using m_winPosition to pass position to the main thread
We can just ask for the window rectangle directly from the main thread,
there is no need to update the position in wxProgressDialogSharedData
all the time.
2017-11-16 01:35:51 +01:00
Vadim Zeitlin
12efb20ad2 Disable close title bar button in wxProgressDialog too
When the "Cancel" button inside the dialog is disabled, disable the
close title bar button as well as it serves the same purpose.

In particular, this avoids asserts when clicking the close title bar
button while showing the confirmation message box asking the user
whether the dialog should be cancelled in the dialogs sample.
2017-11-16 01:35:51 +01:00
Vadim Zeitlin
fdfd8efa83 Factor out wxTopLevelWindow::MSWEnableCloseButton()
Make it possible to reuse this code for other, non-wx, windows.

No real changes, this is just a pure refactoring.
2017-11-16 01:35:51 +01:00
Vadim Zeitlin
79e2adf916 Remove unused wxSPDD_DISABLE_ABORT notification
This notification and the code handling it were never used, so just
remove it.
2017-11-16 01:35:51 +01:00
Vadim Zeitlin
0f1590a90b Create MSW task dialog progress window with non-null parent
This ensures the correct relationship between wxProgressDialog and its
parent window, fixing different problems with Z-order and the progress
dialog icon, but requires attaching the progress dialog thread input to
the main thread, which creates its own problems: in particular, the task
dialog is now only updated when the messages are dispatched in the main
thread, i.e. more sluggishly than before.

It also requires taking care to avoid the deadlocks as the task dialog
thread now waits for the main thread to dispatch its messages too, as
the child dialog sends messages to the parent window. In particular, we
can't simply wait for the task dialog thread to terminate, but must do
it while dispatching the events as well.

Closes #13185.
2017-11-16 01:35:50 +01:00
Vadim Zeitlin
0b96d3b905 Dispatch events from the native MSW wxProgressDialog too
Do this for compatibility with wxGenericProgressDialog, which always did
this and can't really do otherwise as it needs to react to the clicks on
its buttons, and also because not doing it results in the other
application windows being marked as "not responding" by MSW, which looks
bad.

Closes #17768.
2017-11-16 01:35:50 +01:00
Vadim Zeitlin
93c9ec2f01 Remove unnecessary check from DoNativeBeforeUpdate()
Don't test if we're using the native task dialog in this function
because it is only called if we are, so simplify the code by omitting
this check.
2017-11-16 01:35:50 +01:00
Vadim Zeitlin
046d3be215 Don't require calling DoNativeBeforeUpdate() with locked CS
Acquire the lock in wxProgressDialog::DoNativeBeforeUpdate() itself
instead of relying on the caller to do it.

This is just a refactoring in preparation for further changes.
2017-11-16 01:35:50 +01:00
Vadim Zeitlin
aac673391c Make state change in wxProgressDialog::Resume() more explicit
Reset the state to "Continue" instead of assigning it the dialogs own
m_state which was also set to "Continue" from the base class Resume()
called just before, but this wasn't necessarily obvious from just
reading the code.

No real changes.
2017-11-16 01:35:50 +01:00
Vadim Zeitlin
1206b7e0bd Return HRESULT, not BOOL, from TaskDialogCallbackProc
Although this doesn't change anything because, by a happy concourse of
circumstances, FALSE is the same as S_OK and TRUE is the same as S_FALSE
numerically, it is still better and more clear, because consistent with
the documentation, to return these constants from the task dialog
callback function rather than boolean ones.
2017-11-16 01:35:50 +01:00