Commit Graph

39053 Commits

Author SHA1 Message Date
Artur Wieczorek
810c1be640 Use GdiPlus::Status enum to represent status of GDI+ operation 2020-04-05 21:55:46 +02:00
Artur Wieczorek
f0e458e25c Get font family of private GDI+ font from the cache
When font family of a private font is retrieved with call to
Gdiplus::Font::GetFamily() then later on there is thrown access violation
exception when array of cached private font families (filled in by
Gdiplus::PrivateFontCollection::GetFamilies()) is deleted in
wxGDIPlusRenderer::Unload(). Call to Font::GetFamily() is done in
wxGDIPlusContext::GetTextExtent() so this issue can be seen once text
extent is retrieved for a private font.
Because it looks that calling to Font::GetFamily() for a private font is
messing up something in the array of cached private font families so
we should avoid calling this method and directly fetch corresponding font
family from the cache instead.
Reference to the cached font family would be stored in
the wxGDIPlusDataFont and it could be fetched from there directly instead
of making a call to Font::GetFamily().

Closes #18704.
2020-04-05 21:14:24 +02:00
Vadim Zeitlin
43b3a3fc5b Merge branch 'grid-hidpi'
wxGrid improvements for high DPI and DPI changes

See https://github.com/wxWidgets/wxWidgets/pull/1776
2020-04-04 18:46:54 +02:00
Vadim Zeitlin
28a9f50bc7 Merge branch 'grid-align-overflow'
Fix overflow in wxGrid cells with non-default alignment.

See https://github.com/wxWidgets/wxWidgets/pull/1775
2020-04-04 18:46:18 +02:00
Artur Wieczorek
372a609e82 Use ellipsis character instead of "..." approximation
This way editor button label will be shorter.
2020-04-04 18:07:46 +02:00
Artur Wieczorek
c7b789d351 Increase wxPropertyGrid line height under wxGTK3
Line height calculation based on the font size is not right for wxGTK3
because native buttons (used as in-line editor buttons) don't scale down
well and they are not displayed properly within the line.
Minimal button size when the label is displayed properly is 35 so this
has to be minimal line height under wxGTK3.

Closes #18715.
2020-04-04 18:02:40 +02:00
Artur Wieczorek
a3cbcc2c6c Fix positioning the buttons in wxPGMultiButton
For the sake of consistency with editor buttons created with
wxPropertyGrid::GenerateEditorButton(), the borders around the buttons
should be taken into account while positioning the buttons
in wxPGMultiButton.
2020-04-04 17:41:46 +02:00
Vadim Zeitlin
c90bb2596a Upgrade libjpeg to the latest 9d version
This library version includes some optimizations as well as security
fixes.
2020-04-04 00:46:40 +02:00
Vadim Zeitlin
a40ead0ccf Remove unnecessary Refresh() from wxGrid::OnDPIChanged()
The entire TLW is already refreshed when the DPI changes, so it's
unnecessary to refresh wxGrid window itself.
2020-04-01 23:43:17 +02:00
Vadim Zeitlin
9463415998 Fix check mark size in wxGrid after DPI change
Moving wxGrid window to a monitor with different DPI now correctly
changes the check mark size as expected.
2020-04-01 22:39:45 +02:00
Vadim Zeitlin
d41d159576 Replace wxGridCellBoolRenderer::ms_sizeCheckMark with a local var
This variable is (now) only used in a single function, so there is no
reason to declare it as a class member.

No real changes.
2020-04-01 22:33:02 +02:00
Paul Cornett
3e7e7dd24c Avoid generating wxEVT_TEXT when wxTextCtrl initial value is not empty
See #18714
2020-04-01 10:23:44 -07:00
Vadim Zeitlin
f2923d49e1 Update native wxGrid header on DPI change
Simply resize all columns to their effective widths when using native
wxHeaderCtrl for the grid.
2020-04-01 01:08:41 +02:00
Vadim Zeitlin
5525e0ed3f Update grid row/column sizes when switching DPI
Because the size of the text (usually) shown in the grid changes, the
size of its columns/rows should change as well when DPI changes. Scale
them by the DPI ratio if necessary, i.e. if any of them were set to
non-default values to achieve this.

Note that this is not ideal because it can result in rounding errors and
hence in slight change of row/column size when moving the grid window to
another display with a different DPI and then back, but to prevent this
from happening we'd need to store the column/rows sizes in DIPs inside
wxGrid and convert them to actual physical pixels everywhere, which
would require much more changes. Still, if the round trip problems turn
out to be a real problem in practice, we probably will need to do this.

Also note that this doesn't take care of the grid with a native header,
but this will be addressed by upcoming commits.
2020-04-01 00:58:59 +02:00
Vadim Zeitlin
5e761ad99f Add minimal DPI change handler to wxGrid
This handler redoes wxGrid layout and refreshes it to at least avoid
ugly display artifacts when moving wxGrid window between displays with
different DPI.
2020-04-01 00:46:39 +02:00
Vadim Zeitlin
ca30169767 Restore overflowing for cells with non-default vertical alignment
Since the changes in a40acbb28e (Add CanOverflow function to
wxGridCellAttr, 2020-02-06), cells with non-default vertical alignment
didn't overflow any more, even if their horizontal alignment was
unchanged and still defaulted to left-aligned.

This was due to assuming that if the alignment of wxGridCellAttr itself
was different from wxALIGN_LEFT, it meant that it wasn't left-aligned,
which seems logical but is in fact false, as the alignment can also be
wxALIGN_INVALID, in which case the real alignment is taken from the
default grid attribute.

Fix this by using GetNonDefaultAlignment() to get the alignment value
effectively used and add a unit test, as well as an example in the
sample, showing that this now works correctly.
2020-03-31 19:32:47 +02:00
Vadim Zeitlin
59ad458d39 Scale default wxGrid constants by DPI
In particular, this makes default column width better suited for high
DPI displays, as it was too narrow before.

Also mark a couple of obsolete constants as such with a comment.
2020-03-31 14:48:54 +02:00
Vadim Zeitlin
15b5a1865c Add a simple wxGrid::AssignTable() wrapper for SetTable()
In many case SetTable() is called with its takeOwnership parameter set
to true, as shown by the grid sample in which all 3 of the calls to
SetTable() set it to true, but calling it in this case is awkward, as
bare "true" in the caller is unreadable and almost invariably requires
an explanatory comment.

Improve the API by adding AssignTable(), which is the same to SetTable()
as the existing AssignImageList() to SetImageLabel(), which always takes
ownership of the table pointer.
2020-03-31 02:43:08 +02:00
Vadim Zeitlin
3674240146 Add missing wx/scopedptr.h in wxMSW wxFileDialog code
This file uses wxScopedPtr<> and so needs to include this header
explicitly instead of relying on it being included indirectly from some
other header, as happens in the default build, but not always.

Closes #18711.
2020-03-30 23:10:13 +02:00
Vadim Zeitlin
6c061b6bf9 Fix compilation of spinctrlcmn.cpp when wxUSE_SPINCTRL==0
Don't include wx/private/spinctrl.h header (nor the other ones) at all
in this case, as it doesn't compile in this build configuration.

This fixes one of build problems under iOS.

See https://github.com/wxWidgets/wxWidgets/pull/1773
2020-03-30 15:26:00 +02:00
Vadim Zeitlin
00f6cfec51 Fix wxUniv build with wxNO_RTTI
ForceUpperFunctor must have a default ctor when wxNO_RTTI is on, i.e.
when wxRTTI is used.

Closes #18707.
2020-03-30 00:57:16 +02:00
Anton Triest
53d51105be Fix drawing of non-solid lines with width 0 using wxDC in wxMSW
::ExtCreatePen() doesn't allow the pen width to be 0, unlike
::CreatePen() and failed to create the brush in this case.

Use width of 1 to draw e.g. hatched lines of width 0 correctly.

See #7097.
2020-03-27 12:02:36 +01:00
Anton Triest
d245dc9e1f Fix drawing of dotted lines with wxDC in wxMSW
Use ::ExtCreatePen() for creating pens for such lines, as it results in
much better appearance for them than ::CreatePen(), which draws dashed,
and not dotted, lines in this case.

See #7097.
2020-03-27 11:59:10 +01:00
Vadim Zeitlin
ebb6f89e13 Fix wxMSW build error with wxUSE_UXTHEME==0
Explicitly include <commctrl.h> instead of relying on it being done
implicitly by wx/msw/uxtheme.h, as this doesn't happen when
wxUSE_UXTHEME is 0.

Closes #18702.
2020-03-24 03:22:13 +01:00
Vadim Zeitlin
9b36924258 Merge branch 'generic-treectrl-fixes'
Several improvements to generic wxTreeCtrl.

See https://github.com/wxWidgets/wxWidgets/pull/1765
2020-03-19 01:13:49 +01:00
Vadim Zeitlin
10c51dbf28 Avoid spurious asserts when holding arrows in GTK wxSpinButton
The change in the value can be greater than 1 when the arrows are held
pressed, contrary to what the logic of determining the wraparound added
in 086793ceef supposed.

Replace this with a check of whether we switch from the min value
directly to the max one or vice versa, which mostly works and avoids
asserts, even if it can still fail and produces wrong events when the
arrows are held pressed for long enough to increase the delta to the
range of the control, in which case we just can't distinguish between
wraparound and passing from min to max (or vice versa) in a single step,
which means that we have no way to determine the right event to send.
But producing a wrong event is better than asserting, so this still
counts as an improvement.

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

See #17957.

Closes #18695.
2020-03-19 01:11:06 +01:00
Vadim Zeitlin
34ade14c0f Avoid data races on wxMutexInternal::m_owningThread under Unix
This variable was written to and read from different threads without any
synchronization, which resulted in tons of TSAN warnings -- in addition
to being incorrect, of course.

Fix this by using C++11 atomic type for it if available and just not
doing anything otherwise, as there doesn't seem to be any simple
workaround for this problem without an atomic 64 bit type that our own
wx/atomic.h doesn't currently provide.
2020-03-18 19:34:16 +01:00
Anton Triest
6b04c9938d Improve behaviour of Left/Right arrow keys in wxGenericTreeCtrl
Make the left arrow collapse the item if it's currently expanded before
falling back to its previous behaviour of going to the item parent and
the right arrow to go to the first child if the item is already
expanded.

This is compatible with the native MSW control behaviour, but mostly
just more useful and convenient.

Closes #18684.
2020-03-16 00:55:04 +01:00
Anton Triest
730b3d1a44 Allow accepting edit with Numpad Enter key in wxTreeCtrl too
This key should work in the same way as normal Enter key and accept the
changes.

Closes #18682.
2020-03-16 00:34:31 +01:00
Anton Triest
0c6d6e6472 Fix deselecting items on branch toggle in wxTR_MULTIPLE control
Don't deselect all the other items when an item is collapsed or expanded
in wxGenericTreeCtrl with wxTR_MULTIPLE style, this was completely
unexpected and seems to have been accidentally introduced back in
35cf1ec63c

Closes #18680.
2020-03-16 00:30:41 +01:00
Vadim Zeitlin
8bc830337c Slightly optimize Shift/Control-clicking in wxTR_MULTIPLE case
Don't call GetSelections() unnecessarily if we're not going to use its
result in any case because either Shift or Command/Control key was
pressed when the mouse button was released.

See #18680.
2020-03-16 00:27:12 +01:00
Vadim Zeitlin
2f05f5e2eb Remove unnecessary commented out test
This test remained since 902725eefe but
should have been simply removed back then, as we return if the item is
null due to a test above.

No real changes.
2020-03-16 00:24:03 +01:00
Vadim Zeitlin
eaaad6471d Merge branch 'aui-delete-tool'
Provide work around for surprising behaviour of
wxAuiToolBar::DeleteTool().

Closes https://github.com/wxWidgets/wxWidgets/pull/1758
2020-03-15 17:10:41 +01:00
Vadim Zeitlin
700eaff131 Add wxAuiToolBar::DestroyTool() and DestroyToolByIndex()
These new functions destroy the associated window too, unlike the
existing DeleteTool() and DeleteByIndex().

Closes #16552.
2020-03-15 17:09:51 +01:00
ali kettab
40cbea298d Make wxGrid::SetLabelXXX() work when using native header as well
Allow changing label colours and font of the native column header too.

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

Closes #18605.
2020-03-13 00:43:34 +01:00
followait
95eea38eb0 Fix bug when resetting wxListCtrl column header image in wxMSW
Set LVCFMT_IMAGE, meaning that the column just uses an image from the
image list, instead of LVCFMT_COL_HAS_IMAGES, meaning that the column
contains the image from the image list and do not set LVCF_IMAGE when
resetting the image, as this still reserved space for the (invalid)
image, resulting in an extra blank area in the column header.

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

Closes #18617.
2020-03-12 23:54:29 +01:00
Vadim Zeitlin
c4a95ab32c Merge branch 'grid-live-resize'
Implement live-resizing of rows/columns in wxGrid.

See https://github.com/wxWidgets/wxWidgets/pull/1754
2020-03-12 23:09:48 +01:00
Paul Cornett
81309f083d Ensure that scrollbar GtkRange page increment is set to a positive value
It should not be less than the step increment, which is always one.
See #18688
2020-03-11 22:10:22 -07:00
Vadim Zeitlin
13b6b9ef18 Merge branch 'd2d-drawbitmap' of https://github.com/MaartenBent/wxWidgets
Fix DrawBitmap() in Direct2D renderer to resize the bitmap if necessary.

See https://github.com/wxWidgets/wxWidgets/pull/1752
2020-03-11 23:20:56 +01:00
Yuri D'Elia
f9b793f8d1 Check for valid entry in wxTextEntry::EnableTextChangedEvents()
GetTextObject() might return null, e.g. it does it for read-only
wxBitmapComboBox, so EnableTextChangedEvents() must account for this
possibility, as it's not really possible to avoid calling it in this
case, as it's called indirectly from e.g. SetSelection().

Check that the entry is valid before enabling or disabling events for it
to avoid several GLib assertion failures every time when e.g.
wxBitmapComboBox::SetValue() is called.

Closes https://github.com/wxWidgets/wxWidgets/pull/1756
2020-03-11 22:30:55 +01:00
Vadim Zeitlin
8b2237cd2d Make row/column drag-resizing in wxGrid "live"
Update the column width immediately, as it's being dragged, instead of
drawing a temporary line showing the new column boundary using wxINVERT.

This results in better user experience, as it the effect of changing the
column width can be immediately seen (especially important for non-left
aligned columns or columns using ellipsizition) and, equally if not more
importantly, fixes wxGrid drag-resize not showing any visible UI at all
with wxGTK3 and wxOSX where wxINVERT is not implemented.
2020-03-11 22:00:01 +01:00
Vadim Zeitlin
3d1de5c31b Make interface between wxGridHeaderCtrl and wxGrid more explicit
Rename the functions used from wxGridHeaderCtrl event handlers to start
with DoHeader prefix to make it clear that they're (only) used by it in
an attempt to make things more clear and more uniform.

No real changes.
2020-03-11 21:59:15 +01:00
Vadim Zeitlin
52b7267aac Add wxGrid::m_dragMoveCol field separate from m_dragRowOrCol
Don't reuse the same m_dragRowOrCol variable for both the index of the
row or column being drag-resized and for the index of the column being
drag-moved. Reusing it was confusing and made it more difficult what the
code was doing and what invariants were preserved in it, and just wasn't
worth saving a few bytes per wxGrid object.

No real changes.
2020-03-11 21:59:15 +01:00
Vadim Zeitlin
05c5891bf6 Slightly simplify wxGrid refresh logic
Use new ShouldRefresh() helper instead of testing for !GetBatchCount()
before calling Refresh().

Also check for GetBatchCount() inside CalcDimensions() itself, which
means that it can now be called unconditionally.

No real changes.
2020-03-11 21:59:15 +01:00
Vadim Zeitlin
15de1a4cf4 Optimize refresh when resizing grid rows or columns
This avoids visible flickering of column/row labels when row/column is
interactively resized.
2020-03-11 21:59:15 +01:00
Vadim Zeitlin
a004b8ba24 Remove unnecessary Refresh() from wxGrid::DoEndDragResizeLine()
The grid is completely refreshed by the call to SetLineSize(), so doing
it again here is completely unnecessary.
2020-03-11 21:59:15 +01:00
Vadim Zeitlin
ebbadae09a Double buffer wxGridWindow drawing
This eliminates noticeable flicker under MSW when changing selection,
for example.
2020-03-11 21:59:15 +01:00
Vadim Zeitlin
c2b0edefbd Also remove unused wxGrid wxEVT_ERASE_BACKGROUND handler
It is never used anyhow, as wxGrid is entirely covered by its children
windows.
2020-03-11 21:59:15 +01:00
Vadim Zeitlin
e671386d1a Use wxBG_STYLE_PAINT for wxGridWindow
This is more explicit, efficient and simpler than defining an empty
wxEVT_ERASE_BACKGROUND handler, which is not needed any longer.
2020-03-11 21:59:15 +01:00
Vadim Zeitlin
a5807b8fcf Remove unnecessary wxGrid::OnPaint()
This method was explicitly defined to do nothing, so just remove it.

No real changes.
2020-03-11 21:59:15 +01:00