Commit Graph

61742 Commits

Author SHA1 Message Date
Artur Wieczorek
c845b953a2 Don't destroy clipping region if empty clipping region is required (wxDC, GTK).
For compatibility with wxGCDC (Cairo and all native MSW renderers) current clipping region shouldn't be explicitly destroyed if empty clipping region is requested. It should be handled as any other region.
2016-07-17 16:43:13 +02:00
Artur Wieczorek
ad9ebd4b54 Fixed setting clipping box with negative size (wxDC, GTK).
Rectangular clipping region with negative size is accepted by wxDC::SetClippingRegion() (for compatibility with wxGCDC and Cairo) but for internal calculations we need to have this box defined by (x,y) at top-left corner and having non-negative size so we need to recalculate box's parameters in wxWindowDCImpl::DoSetClippingRegion() if necessary.
2016-07-17 16:43:13 +02:00
Artur Wieczorek
79ffd029fa Allow creating wxRegion from rectangle with negative size (GTK).
GdkRectangle used to represent a rectangle region should have (x,y) parameters pointing to the top-left corner of the box with non-negative width and height so if a rectangle with negative values of the width or height is passed to wxRegion::InitRect() (what means that (x,y) doesn't represent top-left corner) we need to recalculate passed parameters to get rectangle with (x,y) at the top-left corner.
2016-07-17 16:43:12 +02:00
David Costanzo
ab092c8d13 Don't handle special keys as characters in wxSTC in non-Unicode build
Correct the check for non-special keys when wxUSE_UNICODE==0.

Closes #17598.
2016-07-17 14:15:40 +02:00
Vadim Zeitlin
63944ae9bd Recognize wxAUI_NB_MIDDLE_CLICK_CLOSE in wxAuiNotebook XRC handler
This style was apparently just forgotten, so add it too.

Closes #17597.
2016-07-17 14:03:52 +02:00
Vadim Zeitlin
fe2052fb35 Skip the recently added wxString test broken with libc++
This should have been part of 90eaa1bbe3 and
should finally really fix the build with libc++ after the changes of
14ec2691f6.
2016-07-16 01:46:45 +02:00
Artur Wieczorek
2821d68a73 Updated wxDC and wxGraphicsContext documentation 2016-07-15 21:03:56 +02:00
Artur Wieczorek
6c3e7e9e9b Use dedicated wxRect functions to get rectangle parameters.
Minor refactoring to simplify the code.
2016-07-15 21:02:54 +02:00
Artur Wieczorek
947c6d4954 Fixed setting clipping region (passed in wxRegion) for Direct2D renderer.
If empty wxRegion is passed to wxD2DContext::Clip() then ID2D1RectangleGeometry object representing geometric mask used by ID2D1Layer object (clipping layer) has to be created in a special way because wxRegionIterator doesn't extract empty rectangle.

ID2D1RectangleGeometry object representing geometric mask has to be maintained as long as corresponding clipping layer is in use so we have to store a reference to this object together with other layer data. Object is released when layer is destroyed.

Closes #17596
2016-07-15 21:01:57 +02:00
Artur Wieczorek
4e4317e71d Fixed setting clipping region for wxGCDC using device coordinates.
Because source wxRegion contains regions given in device coordinates and underlying wxGraphicsContext::Clip() function expects regions in logical coordinates so we have to convert device coordinates of all region components to source coordinates prior to calling this function.

Effective clipping box (always calculated in logical units) is the result of intersection of clipping box of the provided region with either clipping box of previously set clipping region (if set) or with wxGCDC surface extents if no clipping region is set. This way effective clipping box is always inside the wxGCDC surface.
Note: Effective clipping box can be an empty region.

See #17596
2016-07-15 21:00:49 +02:00
Artur Wieczorek
b2760ff420 Fixed setting wxRegion with rectangle having negative size (MSW).
wxRegion uses CreateRectRgn() Win API which requires that its (x1,y1) parameters represent the top-left corner of the rectangle region so if a rectangle with negative values of the width or height is passed to wxRegion's ctor (what means that (x,y) doesn't represent top-left corner) we need to recalculate passed parameters to get rectangle with (x,y) at the top-left corner.
2016-07-15 20:58:37 +02:00
Artur Wieczorek
9ecea7dc74 Added tests to check setting of clipping region using device coordinates.
Tests of setting clipping region(s) with wxDC::SetDeviceClippingRegion() for transformed wxDC/wxGCDC (with changed device origin, logical origin and scale and with various renderers for wxGCDC) to check if all transformations are taken into account in the clipping box calculations.

See #17596
2016-07-15 20:57:21 +02:00
Vadim Zeitlin
90eaa1bbe3 Compilation fix for libc++ after the previous commit
libc++ defines std::iter_swap() with a non-standard exception specification
incompatible with the other other standard libraries and not compiling with
our definition of swap() for wxUniCharRef anyhow, so disable iter_swap()
specialization until https://llvm.org/bugs/show_bug.cgi?id=28559 is fixed.
2016-07-15 02:12:55 +02:00
Vadim Zeitlin
14ec2691f6 Allow swapping wxString iterators in C++11 mode
Specialize std::iter_swap() for wxString::iterator in C++11 mode as the
default implementation of it doesn't work for iterators using "reference" type
different from "value_type&" as is the case for wxString::iterator.

This notably allows the code using std::reverse() with wxString iterators to
compile in C++11 mode, which wasn't the case before.
2016-07-14 16:36:24 +02:00
JulianSmart
0e541e7a57 Merge branch 'master' of https://github.com/wxWidgets/wxWidgets 2016-07-14 15:29:16 +01:00
JulianSmart
aa9901e728 Avoid moving content onto part of itself and subsequent crash 2016-07-14 15:28:01 +01:00
Vadim Zeitlin
aa3acfdd15 Work around an apparent gcc optimizer bug in wxClassInfo
Rewrite a complex expression in wxClassInfo::IsKindOf() as several statements
to avoid what looks like a gcc optimizer bug as it was dereferencing
m_baseInfo1 pointer even when it was null.

The new version is not completely equivalent to the old one as it doesn't
check for info == NULL which is not really necessary, but this is just a side
effect and doesn't affect anything, the important change is avoiding doing
everything in a single expression.

Closes #17483.
2016-07-13 23:33:23 +02:00
Paul Kulchenko
3057c18939 Use wgetcwd() with MinGW to handle non-ASCII working directory
All versions of MinGW seem to have this function, so use it to ensure that
wxGetCwd() returns the correct result even when the current directory contains
non-ASCII characters.

Closes https://github.com/wxWidgets/wxWidgets/pull/307
2016-07-13 23:05:10 +02:00
Artur Wieczorek
e9af6d6ec7 Fixed setting/unsetting wxPGProperty as read-only.
Don't do any action only if property is exactly in the same state as required (and action is requested for single property only).
2016-07-11 21:44:49 +02:00
Artur Wieczorek
97713c12d7 Fixed setting wxPGProperty label
If wxPropertyGrid has wxPG_AUTO_SORT flag set then renaming the label of any property can change the order of displayed properties including this one which is currently selected. To be properly displayed in the new location this selected property has to be refreshed separately.
2016-07-11 21:44:48 +02:00
Václav Slavík
d6a6b8fbd4 Fix VC++ warning about comparing bool with > 0 2016-07-10 16:39:09 +02:00
Artur Wieczorek
13f9789996 Fixed clearing wxWindowDC, wxMemoryDC for wxMSW.
Current implementation suffers for two issues:
1. Because wxClientDC and wxWindowDC are not distinguished in wxMSWDCImpl::Clear and in both cases DC coordinates are obtained with GetClientRect() Win API what leads to this that for wxWindowDC the entire area is not cleared.
2. Translations like moving logical origin or scaling are not taken into account in wxMemoryDC coordinates calculations (only device origin is included) so for transformed DC calculated coordinates are invalid and finally the entire area is not cleared.

To fix these issues we can use GetClipBox() Win API to obtain actual logical coordinates of the clipping box (with all translations and scaling already included) and this way we can avoid using separate methods of retrieving coordinates for wxClientDC, wxWindowDC and wxMemoryDC.
2016-07-09 23:38:34 +02:00
Artur Wieczorek
2b7aab70ff Added tests to check setting of clipping region for transformed wxDC/wxGCDC.
In these tests clipping region is set for transformed wxDC/wxGCDC (with changed device origin, logical origin and scale) to check if all these transformations are taken into account in the clipping box calculations.
2016-07-09 23:38:33 +02:00
Artur Wieczorek
53230aaf4d Fixed retrieving clipping box for transformed wxDC
Because wxDC can be the subject of geometric transformations (like translation, scaling) so we cannot assume in the calculations of the clipping box that DC origin is always at (0,0) and its logical size is the same as physical size. To get correct result we have to use logical coordinates of wxDC area in all clipping box calculations.
2016-07-09 23:38:31 +02:00
Damien Ruscoe
fc0108ce71 Hide empty wxCheckBoxes in wxGTK to fix display problem
Focus rectangle was still drawn around the label when it was empty with some
themes, so hide it completely to ensure this doesn't happen.

Closes #17443.
2016-07-09 15:32:34 +02:00
Paul Cornett
fa54e1af15 Be more conservative in avoiding Cairo's maximum coordinate limit.
Fixes wxGCDC::Clear().
See #17584
2016-07-08 22:57:27 -07:00
Artur Wieczorek
c08b8c6f6d Fixed minor typo in comment. 2016-07-08 19:51:58 +02:00
Artur Wieczorek
9be1251f02 Modified methods used to set/unset wxPGProperty as read-only and to hide/show it.
If there is requested to set/unset a single property (without recursion) as a read-only (wxPropertyGridInterface::SetPropertyReadOnly) or to hide/show it (wxPropertyGridInterface::HideProperty) then first check if property is already in the requested state and if so do nothing. This prevents from unneeded refreshing of the display.
2016-07-08 19:51:02 +02:00
Artur Wieczorek
c910085507 Update documentation of some flags used by wxPropertyGridInterface methods. 2016-07-08 19:49:03 +02:00
Artur Wieczorek
04ba48e685 Use enum instead of macro to represent flag used in wxPGPropertyGridInterface and wxPGProperty methods.
Use enums to represent all flags.
2016-07-08 19:47:25 +02:00
Artur Wieczorek
4f1e3b7172 Fixed setting colours of wxPGProperty
When wxPGProperty's text or background colours are modified with dedicated wxPropertyGridInterface utility functions (SetPropertyBackgroundColour, SetPropertyTextColour, SetPropertyColoursToDefault) then it is enough to redraw the property with new colours because its internal state remains unmodified and full refreshing is not necessary.

Closes #17588
2016-07-08 19:44:32 +02:00
Jouk
d2b3484e60 g_log_set_default_handler not avaliable for gtk1 2016-07-08 15:15:27 +02:00
JulianSmart
c7d91d28a9 When collecting common attributes, reset attributes in target that are absent in source 2016-07-07 15:27:08 +01:00
Vadim Zeitlin
4c0e272589 Don't pass parameters to wxSizerXmlHandler::GetGB{Pos,Span}()
This doesn't make sense, these functions can only be ever used with a single
parameter ("cellpos" for the former and "cellspan" for the latter), so just
hard-code it inside the functions themselves.

No real changes, just make the code less confusing.
2016-07-06 18:51:10 +02:00
Vadim Zeitlin
50c16da687 Remove invalid "option" elements from XRC sample file
<option> can't be used for wxFlexGridSizer items, remove all these tags to
allow the file to validate against the XRC schema.
2016-07-06 18:48:35 +02:00
Vadim Zeitlin
f68c67aa85 Use "pair of ints" type for wxGridBagSizer size and position in XRC
Introduce a new type for XRC values imaginatively called just "pair of
integers" which can be used for values not expressed in pixels and hence for
which it doesn't make sense to use dialog units nor to scale them by the DPI.

Use this new type for wxGridBagSizer position and span elements to prevent
them from being changed when using higher than normal DPI.

Closes #17592.
2016-07-06 18:44:07 +02:00
Vadim Zeitlin
c4d2ba1335 Fix a typo in wxRadioBox XRC format documentation
s/ratio/radio/
2016-07-06 18:26:54 +02:00
JulianSmart
ab1ffb0c7c Removed @true typo from code 2016-07-06 13:35:28 +01:00
phallobst
9ae41a0f00 Update position correctly in wxGTK insert-text signal handler
"position" argument is input/output and must point after the newly inserted
text on return, but we didn't do it when handling the insertion specially.

Closes #17591.
2016-07-05 23:45:57 +02:00
pb101
105bd96319 Add missing "const" to wxGridCellEditor::PaintBackground() documentation
Closes #17589.
2016-07-05 23:37:26 +02:00
Artur Wieczorek
2d096311c5 Fixed clipping box tests for Direct2D
Flushing native Direct2D renderer (invoking wxGCDC::Flush() -> wxGraphicsContext::Flush() -> ID2D1RenderTarget::Flush()) is apparently not enough to update underlying DC (with selected in bitmap) and therefore we have to destroy the renderer (which in turn invokes ID2D1RenderTarget::EndDraw()) to do so.
2016-07-05 21:58:48 +02:00
Artur Wieczorek
832db47346 Fixed layer management in Direct2D renderer.
ID2D1RenderTarget::PushAxisAlignedClip/PopAxisAlignedClip used to clip the region (with wxGraphicsRenderer::Clip) and ID2D1RenderTarget::PushLayer/PopLayer used to rendering to the transparent layer (with wxGraphicsRenderer::BeginLayer) are non independent but have to be used in the controlled sequences: "A PushAxisAlignedClip and PopAxisAlignedClip pair can occur around or within a PushLayer and PopLayer, but cannot overlap" (and of course finally each Push* call must have a matching Pop* call).
To control the sequence of access to the AxisAlignedClips and Layers there is implemented a wxStack data member holding Clips/Layers parameters which reflects a physical stack of respective Clips/Layers in ID2D1RenderTarget. This way we know in which order to pop and what to pop from ID2D1RenderTarget stack if there is a need to do so.

Closes #17590
2016-07-05 21:58:34 +02:00
Artur Wieczorek
6b7ae05e3f Fixed updating clipping box parameters prior to retrieving the box (MSW).
Empty clipping region doesn't mean that there is no clipping.
2016-07-03 22:40:12 +02:00
Artur Wieczorek
8615921f42 Fixed retrieving clipping box parameters when there is no clipping region set.
When there is no clipping region currently set then current effective clipping region is identical with entire DC surface and therefore DC size should be returned as a region size.

Closes #17013
2016-07-03 22:39:48 +02:00
Artur Wieczorek
0b8975ac18 Properly reset internal data when destroying clipping region (wxGCDC).
Call ResetClipping() function in wxGCDCImpl::DestroyClippingRegion() to be sure that all internal clipping data are reset properly.
2016-07-03 22:39:26 +02:00
Artur Wieczorek
d50f331a99 Fixed calculation of clipping box with negative size (wxGCDC).
Graphics renderers accept negative clipping box size but for internal calculations done in wxDCImpl::DoSetClippingRegion() we need to have a box defined by (x,y) at top-left corner and having non-negative size so we need to recalculate parameters if necessary.
2016-07-03 22:39:25 +02:00
Artur Wieczorek
dafd0f217b Fixed setting clipping box.
While setting a clipping box there is necessary to intersect it either with current clipping region location if such region exists or with wxDC surface extents if no clipping region is set. This way effective clipping box will be always inside the wxDC surface.
Note: Effective clipping box can be an empty region.

See #17013
2016-07-03 22:39:23 +02:00
Artur Wieczorek
8b07bd1e27 Fixed setting clipping box for wxDC (MSW).
Because CreateRectRgn() Win API requires that (x1,y1) parameters represent the top-left corner of the clipping box so if a box with negative values of the width or height is passed to wxMSWDCImpl::DoSetClippingRegion() (what means that (x,y) doesn't represent top-left corner) we need to recalculate passed parameters to get the box with (x,y) at top-left corner.
2016-07-03 22:39:21 +02:00
Vadim Zeitlin
94d93bc53c Describe "d" suffix in XRC more clearly
Document that it has to be specified only at the end, not after each
component.
2016-07-03 14:40:21 +02:00
Vadim Zeitlin
2543c336b0 Revert "Fix invisible captions in high contrast mode"
This reverts commit 71dfb3b414 which fixed
appearance of the captions in high contrast mode but broke them for wxGTK.

Ideal would be to make this code work in wxGTK too or, in the worst, case only
use this code for wxMSW, but for now at least avoid breaking wxGTK appearance
by default.

See #16186.
2016-07-03 14:38:36 +02:00