Commit Graph

71519 Commits

Author SHA1 Message Date
Vadim Zeitlin
907f6da047 Make wxWithImages::GetUpdatedImageListFor() public
It should be possible to call this function on wxWithImages objects
contained in derived classes too.

This commit is best viewed with --color-moved git option.
2021-11-11 00:52:12 +00:00
Vadim Zeitlin
8a3d886135 Replace wxImageLists in wxListCtrlBase with wxWithImages
Still no real changes, but this makes the code simpler and more robust
and prepares the way for adding wxListCtrl methods taking vectors of
bitmap bundles.
2021-11-11 00:52:12 +00:00
Vadim Zeitlin
638d865632 Add more useful wxWithImages::GetUpdatedImageListFor()
This replaces the previously added UpdateImageListIfNecessary() as we
almost always needed the image list after calling that function anyhow,
so it makes more sense to return the image list from it -- which also
required renaming it.

No real changes.
2021-11-11 00:52:12 +00:00
Vadim Zeitlin
5941dea234 Move wxImageList-related code to wxListCtrlBase
Put the code common to all wxListCtrl implementations in the common base
class instead of duplicating it in wxMSW, wxQt and generic versions.

No real changes yet, this is a pure refactoring which prepares for the
upcoming changes.
2021-11-11 00:52:12 +00:00
Vadim Zeitlin
9d86ba11e2 Add support for wxBitmapBundle to wxGTK wxNotebook
Just use wxWithImages::GetBitmapBundle() directly with wxGtkImage
without passing by wxImageList -- this suffices to have working high DPI
support for notebook page icons.
2021-11-07 23:40:47 +01:00
Vadim Zeitlin
f1da96db27 Add helper wxWithImages::GetBitmapBundle()
This function can be used in the ports that don't require wxImageList
(i.e. anything but wxMSW) to use wxBitmapBundle if it's available,
rather than passing by wxImageList.
2021-11-07 23:39:59 +01:00
Vadim Zeitlin
0588bc8820 Fix size of wxImageList created by wxBitmapBundle
The size must be specified in logical, and not physical, pixels and the
failure to do use the correct units results in a silent (!) failure to
add any bitmaps to the wxImageList later.
2021-11-07 23:23:47 +01:00
Vadim Zeitlin
73886b1bb2 Significantly extend wxWithImages documentation
Notably explain that SetImages() should be preferred to the old methods
taking wxImageList and why.
2021-11-07 22:07:00 +00:00
Vadim Zeitlin
99c30e488c Document the use of wxWithImages methods with wxTreeCtrl
Also remove the documentation of the inherited methods from wxTreeCtrl
itself.
2021-11-07 21:57:42 +00:00
Vadim Zeitlin
ced845f006 Update wxTreeCtrl and its sample to work with wxBitmapBundle
Override OnImagesChanged() to call UpdateImageListIfNecessary() even in
wxGenericTreeCtrl for now, although in the future it would really make
sense to stop using wxImageList in its implementation and just use
wxBitmapBundle directly instead.

wxMSW is the only one which really needs an image list, as it's required
by the native control.

Also update the sample, even though it doesn't look very nice because
its icons are only available in a single size, so we have to always
scale them.
2021-11-07 21:46:42 +00:00
Vadim Zeitlin
e293a3a6e3 Remove unnecessary wxBusyCursor from the treectrl sample
This was added way back in 618a5e382a (Applied Greg's patch to tree
control and related., 2001-08-18) for some reason, but probably was
never needed and definitely isn't any more.
2021-11-07 21:15:02 +00:00
Vadim Zeitlin
c777a34d78 Move wxBookCtrlBase::WXHandleDPIChanged() to wxWithImages itself
This function is not really wxBookCtrl-specific and can be used with
other classes as well, so allow reusing it in them.

No real changes, this is just a refactoring.
2021-11-07 21:13:39 +00:00
Vadim Zeitlin
ddb3b4a80a Use wxWithImages in wxTreeCtrl
Replace direct use of wxImageList with the use of wxWithImages, which
will make adding support for using wxBitmapBundle later simpler.

In fact, this already somewhat simplifies the code by removing the need
to manually take care of m_ownsImageListXXX flags.
2021-11-07 17:52:35 +00:00
Vadim Zeitlin
34a730f89c Small cleanup of wxGenericTreeCtrl-specific parts of the sample
Use HAS_GENERIC_TREECTRL for testing whether we're actually using it or
not instead of checking for USE_GENERIC_TREECTRL and then port names
with a native control, which was done inconsistently, as it included
wxQt in one place, but not the other one.

Also avoid repeating CreateButtonsImageList() declaration twice, as this
resulted in having unbalanced curly braces in this file, which was just
unpleasant.

No real changes.
2021-11-07 16:36:43 +00:00
Vadim Zeitlin
725c3d5608 Update images when DPI changes in wxBookCtrlBase-derived classes
Just pretend that the images themselves have changed, this should be
enough to recreate wxImageList from the bundle using the new scale
factor in UpdateImageListIfNecessary().
2021-11-07 16:06:55 +00:00
Vadim Zeitlin
b0d9465921 Add wxWithImages::SetImages() and update wxMSW wxNotebook for it
This new function will allow selecting the bitmap of the most suitable
size and automatically react to DPI scale changes (although this hasn't
been implemented yet) in all controls using image lists.

For now, only wxNotebook in wxMSW has been updated to work with it, the
other classes and ports will be updated to override OnImagesChanged()
instead of SetImageList() later.

Also update the notebook sample to use SetImages() rather than
SetImageList() -- which means that it doesn't show the icons any longer
in non-MSW ports, which haven't been updated yet.
2021-10-31 20:54:58 +01:00
Vadim Zeitlin
55819925dc Add wxBitmapBundle::GetConsensusSizeFor()
Move the code for determining the size preferred by a bunch of bitmap
bundles from wxToolBar to wxBitmapBundle itself to allow reusing it from
other classes.

No real changes, this is just a refactoring.

This commit is best viewed with --color-moved git option.
2021-10-31 20:40:06 +01:00
Vadim Zeitlin
0df49f0a54 Add wxWithImages::GetImageCount() and HasImages() helpers
These functions allow avoiding using wxImageList explicitly in a couple
of places.

No real changes, this just prepares for adding new API not based on
wxImageList.
2021-10-31 17:34:44 +01:00
Vadim Zeitlin
9cc0c9a082 Only check sizer elements if there is valid containing window
This is another correction to the changes of 62c3d921b2 (Check that all
windows in a sizer use associated window as parent, 2021-10-20): we need
to restrict the part of this check in wxSizer::SetContainingWindow() to
the case when this function argument is non-null, otherwise the check
would always fail.

Notice that it is perfectly valid to call SetContainingWindow(NULL) and
wxWrapSizer does it for every re-layout, for example.

This commit is best viewed ignoring whitespace-only changes.

See #19308.
2021-10-29 16:33:10 +01:00
Vadim Zeitlin
34f430a016 Relax the sizer parent check to account for wxStaticBoxSizer
The check added in 62c3d921b2 (Check that all windows in a sizer use
associated window as parent, 2021-10-20) didn't work correctly when
using wxStaticBoxSizer, as the windows in this sizer are grandchildren
(or possibly even further descendants, in case of nested sizers) of the
window that the sizer is associated with, with the static box being the
immediate parent.

Relax the check to account for this and to avoid triggering for any use
of wxStaticBoxSizer.

Closes #19308.
2021-10-29 01:33:48 +01:00
Vadim Zeitlin
e2a0c87f1d Merge branch 'cmake-lib-dir-fix' of https://github.com/MaartenBent/wxWidgets
CMake: Fix library directory and don't use symlinks when using MinGW.

See https://github.com/wxWidgets/wxWidgets/pull/2569
2021-10-27 23:28:23 +01:00
Maarten Bent
ad75a77bc6 CMake: Cleanup the wx_configure_script macro 2021-10-27 22:28:33 +02:00
Maarten Bent
f59bbcd3e1 CMake: Don't create symlinks with MinGW
On Windows, user might not have the correct permissions to create symlinks.

Closes #19304
2021-10-27 22:27:35 +02:00
Maarten Bent
4f0d9d3346 CMake: Fix library directory when using MinGW
This was broken in b102afc316 (CMake: Don't include generator expression in
wxPLATFORM_LIB_DIR, 2021-10-17).
And for clarity, always add a '/' after directories.

Closes #19305
2021-10-27 21:27:41 +02:00
Vadim Zeitlin
f9621cb888 Merge branch 'grid-selection-compat'
Fix wxGrid selection functions compatibility.

See https://github.com/wxWidgets/wxWidgets/pull/2568
2021-10-27 18:42:57 +01:00
Stefan Csomor
a7f5e3c5c3 OSX wxBitmapBundle::FromFiles implementation for macOS (#2561)
* adding macOS wxBitmapBundle::FromFiles implementation

* adding FromFiles overload, generic implementation

* Update interface/wx/bmpbndl.h

* Removing outdated comment

Co-authored-by: VZ <vz-github@zeitlins.org>
2021-10-26 22:27:36 +02:00
Vadim Zeitlin
c28c7edbb4 Let wxGrid::GetSelectionBlockTopLeft/BottomRight work in any mode
These functions used to work in any mode until the changes of 02509cbc39
(Refactor wxGridSelection to store selection as blocks only, 2020-03-03)
and should continue to do so, if only for compatibility.
2021-10-26 19:51:26 +01:00
Vadim Zeitlin
9b820b74b2 Fix handling selection in wxGrid::Render()
Temporarily reset the m_selection pointer itself instead of clearing the
selection, this is much more efficient, especially for big grids, and
also more correct, as the old code simply lost the original selection in
non-block selection modes.
2021-10-26 19:41:06 +01:00
Vadim Zeitlin
5f8e9c14ae Merge branch 'wxrichtextctrl_word_wrapping_opt' of https://github.com/mehmet-soyturk/wxWidgets
Optimize wrapping long lines in wxRichTextCtrl.

See https://github.com/wxWidgets/wxWidgets/pull/2523
2021-10-26 19:43:03 +02:00
PB
f8dda6db65 Do not use calendar.rc for calendar sample in CMake
The file was removed in  16f2c7bb89 (Remove unused samples resource
files, 2021-10-20) merged as part of 3d5664cabe (Merge branch
'samples-dpi-v2-aware', 2021-10-25).

Closes https://github.com/wxWidgets/wxWidgets/pull/2565
2021-10-26 19:40:18 +02:00
Vadim Zeitlin
8d14270636 Merge branches 'statbmp-bundle', 'upscale-only-bitmap' and 'bitmap-from-icon'
Fixes for wxBitmapBundle behaviour and use it in wxStaticBitmap too now.

See https://github.com/wxWidgets/wxWidgets/pull/2560,
    https://github.com/wxWidgets/wxWidgets/pull/2566,
    https://github.com/wxWidgets/wxWidgets/pull/2567
2021-10-26 19:38:21 +02:00
Vadim Zeitlin
04828b7225 Update wxStaticBitmap in wxMSW on DPI change
Use the appropriately sized bitmap when the resolution changes.
2021-10-26 00:11:57 +02:00
Vadim Zeitlin
0a91a2f40b Use wxBitmap::Rescale() in wxGenericStaticBitmap code
No real changes, just reuse the existing function instead of redoing it
one more time.
2021-10-26 00:11:57 +02:00
Vadim Zeitlin
3abec9254f Take wxBitmapBundle in wxStaticBitmap::SetBitmap()
This allows using higher resolution bitmaps when using high DPI
automatically in this control too.
2021-10-26 00:11:57 +02:00
Vadim Zeitlin
da73be0d77 Upscale the biggest bitmap in the bundle if it's too small
The changes of b20552116c (Allow wxBitmapBundle to specify its preferred
bitmap size, 2021-10-19) resulted in never rescaling the bitmaps in
standard size in high DPI at all, which isn't the right thing to do: by
default, i.e. if just a single bitmap is specified, we should scale it
up as necessary in order to show the UI elements in the correct sizes.
2021-10-26 00:04:22 +02:00
Vadim Zeitlin
41b1ba3c9e Replace many identical wxBitmap::CopyFromIcon() with a single one
Define CopyFromIcon() directly in wxBitmapBase for the non-MSW ports, as
it was implemented exactly in the same way in all ports using this class
anyhow.

This means this function is not virtual any longer, but this shouldn't
be a problem as it was never supposed to be overridden in application
code and this couldn't be done with wxMSW, where it never was virtual in
the first place, anyhow.

No real changes, just a simplification.
2021-10-25 23:36:45 +02:00
Vadim Zeitlin
568411347b Make wxOSX wxBitmap::CopyFromIcon() work as in the other ports
Just use the same object, as wxIcon is the same thing as wxBitmap
anyhow, instead of re-creating another wxBitmap which can be subtly
different from the original one.

Notably, converting an icon with default scale factor of 1 to bitmap
when using a high DPI display resulted in a bitmap with the same
physical size but scale factor of 2, as wxOSXGetImageScaleFactor()
returned 2 in this case, i.e. changed the logical bitmap size.

This couldn't be anything other than a bug, so fix this and, at the same
time, simplify the code and make it consistent with the other ports.
2021-10-25 23:36:45 +02:00
Vadim Zeitlin
9ffa5cf4f0 Use 16x16 default size for wxStaticBitmap in wxMotif too
Nobody cares about Motif, but still use the same default size there as
under the other platforms.
2021-10-25 13:40:18 +01:00
Vadim Zeitlin
0f9cb0fce1 Refresh wxStaticBitmap and update its size in wxUniv SetBitmap()
Make wxUniv behave consistently with the other ports.
2021-10-25 13:40:18 +01:00
Vadim Zeitlin
dc1c2c91b3 Fix setting size of wxStaticBitmap in wxOSX too
This is the same change as was done in the previous commit for
wxGenericStaticBitmap, see that commit message for more details.
2021-10-25 13:40:18 +01:00
Vadim Zeitlin
eba93fb5e7 Fix setting size of wxGenericStaticBitmap
We must call SetInitialSize() in Create() in order to take the size
argument passed to ctor/Create() into account -- it was completely
ignored previously.

But calling SetBitmap() must not change the initial size, as it can also
be done later, so just change the current size there instead (which is
consistent with wxMSW version and original behaviour, so keep it like
this, even though it's not totally clear if all ports do it).

Remove the now unused wxGenericStaticBitmap::GetBitmapSize().
2021-10-25 13:40:18 +01:00
Vadim Zeitlin
b403624f22 Add common implementations of wxStaticBitmap icon methods
Instead of defining them, slightly differently, in all the non-MSW
ports, define them once in wxStaticBitmapBase.

No real changes, this is just a simplification.
2021-10-25 13:40:18 +01:00
Vadim Zeitlin
5773a8736c Define wxICON_IS_BITMAP when this is indeed the case
This symbol is useful for testing if wxIcon can be just converted to
wxBitmap, as is the case in all ports except for wxMSW currently.
2021-10-25 13:40:18 +01:00
Vadim Zeitlin
e126ddc11c Use more suitable type for MSWReplaceImageHandle() parameter
It's a handle, so make it a WXHANDLE rather than WXLPARAM and avoid
casting the handle when calling it (there is still a cast when calling
::SendMessage() inside this function, but this is unavoidable and this
cast was already there anyhow).

No real changes.
2021-10-25 13:40:18 +01:00
Vadim Zeitlin
c1abbe6473 Refactor wxMSW wxStaticBitmap to separate bitmaps and icons
Use different members for storing wxBitmap and wxIcon instead of using a
single pointer for storing a heap-allocated copy of either of them
because this is simpler, more efficient due to avoiding unnecessary
conversions and RTTI, and will be simpler to generalize to using
wxBitmapBundle instead of wxBitmap in the upcoming commits.

As a side effect, don't assert in GetIcon() or GetBitmap() if there is
no valid icon or bitmap, as this is inconsistent with the other ports
and wasn't even consistent between these functions in wxMSW itself.

There should be no other changes in behaviour.
2021-10-25 13:40:18 +01:00
Vadim Zeitlin
373653e4e5 Remove unnecessary wxStaticBitmap::DeleteCurrentHandleIfNeeded()
This function was used exactly once and it's simpler and more clear to
just inline it into Free() where it was called.

No real changes, this is just a small simplification.
2021-10-25 13:40:18 +01:00
Vadim Zeitlin
1d6e3e3693 Move wxStaticBitmapBase methods to the appropriate file
For some reason, wxStaticBitmapBase methods were defined in the wrong
ctrlcmn.cpp file rather than statbmpcmn.cpp. Just move them there to
avoid confusion.

No real changes.

This commit is best viewed with --color-moved git option.
2021-10-25 13:40:18 +01:00
Vadim Zeitlin
9326aa3b6c Add wxBitmapBundle::GetBitmapFor() helper
This can be used to get the bitmap of the size appropriate for the DPI
scaling used for the given window.
2021-10-25 13:40:18 +01:00
Vadim Zeitlin
e5a7e9ccbd Take const wxWindow in wxBitmapBundle::GetPreferredSizeFor()
This function should be usable in const methods of wxWindow-derived
classes too.
2021-10-25 12:21:15 +01:00
Vadim Zeitlin
c119e84370 Merge branch 'bundle-scaled-bitmaps'
Make wxBitmapBundle compatible with bitmap scale factor > 1, both when
converting the latter to the former and when retrieving bitmaps from the
bundle.

See https://github.com/wxWidgets/wxWidgets/pull/2564
2021-10-25 13:18:47 +02:00