Commit Graph

354 Commits

Author SHA1 Message Date
Paul Cornett
948ddc6e0f Eliminate -Wcast-qual warnings with GCC and Clang
Use const_cast, mutable, and various other changes to avoid -Wcast-qual
2020-02-02 22:50:32 -08:00
Vadim Zeitlin
a2ff49eeeb Initialize wxWindowDCImpl::m_window for hidden windows too
Ensure that we set m_window in case of early return from wxWindowDCImpl
ctor, so that using e.g. wxDC::GetSize() works for wxClientDC created
for windows that hadn't been realized yet.

It might be possible to avoid this early return completely as the
comment explaining why we're doing it seems to be out of date: our
SetBackground() doesn't call wxWindow::SetBackground() (and it would be
exceedingly strange if it did), but for now just the bug without
changing anything else.

Closes #18569.
2019-11-10 00:35:07 +01:00
Paul Cornett
e87ea7389b Avoid inadvertently destroying a shared PangoContext on GTK2
wxMemoryDC and wxScreenDC dtors were freeing a context they didn't own, potentially
causing a crash. Fixed by having the base wxWindowDC dtor free the context.
See #18566
2019-11-07 11:26:10 -08:00
Olly Betts
e2b4cd9f77 Fix typos in comments and assertion messages
Closes https://github.com/wxWidgets/wxWidgets/pull/1596
2019-10-08 23:30:22 +02:00
Vadim Zeitlin
1bcde69a73 Use white in wxDC::Clear() if background brush is reset in wxGTK2
Although white background was used if the brush was never set, setting
and resetting it nothing unexpectedly (and inconsistently with the other
ports) resulted in using black background.

Fix this by just resetting the brush to white if it's invalid, instead
of not setting it at all.
2019-10-02 02:45:28 +02:00
Vadim Zeitlin
771832ebbb Clear background if background brush is invalid in wxGTK2 too
We only should avoid clearing the background if the brush is
transparent, not if it's not set.

This refines 6549d4c3c5

See #10273.
2019-10-01 01:30:11 +02:00
Artur Wieczorek
919a4ec702 Fix drawing wxBitmap with mask
Under wxGTK+2, when wxBitmap has a wxMask but this mask shouldn't be used
in the actual drawing (useMask parameter in wxDC::DrawBitmap() is set to
false), we need to get bitmap data from the buffer with raw (original,
non-masked) data and not from the buffer containing data with mask applied.

Close #18498.
2019-09-18 23:58:48 +02:00
Paul Cornett
6549d4c3c5 Fix wxDC::Clear() with transparent brush on GTK2
See #10273
2019-08-15 17:14:31 -07:00
Vadim Zeitlin
3dc16a7419 Compute wxDCImpl::m_mm_to_pix_[xy] on demand
If nothing else, this avoids 2 calls to each of wxGetDisplaySize() and
wxGetDisplaySizeMM() on each and every wxGCDC construction which are
completely unnecessary as wxGCDCImpl uses its own hardcoded resolution
of 72 DPI, as do some other classes deriving from wxDCImpl.

And even for the classes which do compute these fields using the display
resolution, it may still be unnecessary to do it as they can be never
used if neither GetSizeMM() nor SetLogicalScale() are called on the
corresponding wxDC object.

Finally, this is more than an optimization as when using Cairo-based
wxGCDC without display (which is explicitly supported), calling
wxGetDisplaySize() simply doesn't work at all.
2018-12-06 03:30:55 +01:00
Paul Cornett
41d534ac0d Use more accurate color conversion in DoGetPixel() 2018-08-22 08:39:13 -07:00
Vadim Zeitlin
c5530b1abf Switch to using DoGetClippingRect() instead of DoGetClippingBox()
The new method returns a boolean flag which indicates whether there is
any clipping region or not and so is preferable to using the old one and
checking its return value to determine this, which can't be done
reliably.
2018-06-19 00:20:47 +02:00
Jeff Bland
8b18bbb9c7 Fix uses of wxPalette without check for wxUSE_PALETTE 2018-05-18 18:49:05 -06:00
Vadim Zeitlin
d6af0236c5 Simplify GTK+ 2 version checks with a helper function
Use wx_is_at_least_gtk2(minor) instead of gtk_check_version(2, minor)
because it is more clear and also works as expected (i.e. returns true)
when using GTK+ 3 instead of creating difficult to notice bugs in the
code by failing the version check in this case.

See #18004.
2017-11-23 13:15:31 +01:00
Paul Cornett
5b679bfbec Get rid of wxGTKDash, it's the same as wxDash 2017-07-31 10:19:44 -07:00
Paul Cornett
41311298eb Fix SetPen() with a re-used user dash array
wxPen::SetDashes() is poorly designed, making it possible for different
wxPenRefData objects to point to the same dash array. This allows two wxPen
objects to appear to be equal after modifying the array and setting it on
the second pen (the drawing sample does this). So testing for equality is
not enough to determine that SetPen() can return early.
2017-07-31 10:14:26 -07:00
Artur Wieczorek
ba4b8d5670 Fix retrieving clipping box after changing wxDC coordinates (GTK)
Member data containing clipping box have to be updated not only when the clipping region is explicitly changed by SetClippingRegion()/DestroyClippingRegion() but also when wxDC coordinates are transformed with SetDeviceOrigin(), SetLogicalOrigin(), SetUserScale(), SetLogicalScale(), SetTransformMatrix() or ResetTransformMatrix().
When any of these functions is called then clipping box data are marked as invalid and updated by recalculating extents of the clipping region in new coordinates at nearest call to GetClippingBox().

Closes #17646.
2016-09-01 21:42:13 +02:00
Artur Wieczorek
902b9a5c56 Fix calculating the extent of clipping box (wxDC, GTK).
While setting a clipping region 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. Effective clipping box can be an empty region.
Clipping box parameters are calculated and stored in logical coordinates.
2016-07-17 17:05:02 +02:00
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
Paul Cornett
c4bf905cd5 Remove special-case rectangle drawing for width 2 pen
Avoid missing corner pixel with width 2 pen when using rounded
join on X11 by simply not using rounded join with small pens
2015-10-18 10:53:49 -07:00
Dimitri Schoolwerth
8f8d58d193 Use wx-prefixed macros throughout the repository.
Change {DECLARE,IMPLEMENT}_*CLASS and {DECLARE,BEGIN,END}_EVENT_TABLE
occurrences to use the wx-prefixed version of the macros.
2015-04-23 22:00:35 +04:00
Vadim Zeitlin
8b72652a28 Make results of wxDC::DrawEllipticArc() consistent across all platforms.
And also consistent with wxGraphicsContext method with the same name.

Document the rules determining what is drawn.

Closes #4437.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@78125 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2014-11-11 01:02:14 +00:00
Paul Cornett
60972cc037 Fix X 'BadPixmap' crash in Blit() with mask when GTK+ <= 2.16, closes #16303
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@76626 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2014-05-30 16:29:13 +00:00
Paul Cornett
8b4ae731d3 use wxOVERRIDE
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@76220 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2014-03-30 00:02:23 +00:00
Vadim Zeitlin
b0ad146aba Fix assorted typos in comments and other non-code.
Closes #15509.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74827 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-09-17 15:25:59 +00:00
Paul Cornett
3e5a70b5d7 avoid setting pango matrix when not needed
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74654 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-08-12 16:24:42 +00:00
Vadim Zeitlin
3f66f6a5b3 Remove all lines containing cvs/svn "$Id$" keyword.
This keyword is not expanded by Git which means it's not replaced with the
correct revision value in the releases made using git-based scripts and it's
confusing to have lines with unexpanded "$Id$" in the released files. As
expanding them with Git is not that simple (it could be done with git archive
and export-subst attribute) and there are not many benefits in having them in
the first place, just remove all these lines.

If nothing else, this will make an eventual transition to Git simpler.

Closes #14487.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74602 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-07-26 16:02:46 +00:00
Paul Cornett
be1f902405 merge DoDrawText() and DoDrawRotatedText() into one function
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74584 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-07-23 05:13:32 +00:00
Paul Cornett
c148b21630 use pango_matrix_scale() to scale text
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74577 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-07-22 15:32:00 +00:00
Vadim Zeitlin
c92374f0a2 Fix crash when drawing bitmaps with mask in wxGTK with GTK+ < 2.20.
r73386 introduced a crash in wxGTK drawing code when using old GTK+ versions
by releasing the mask pixmap prematurely. Apparently GTK+ itself was fixed at
some time in 2.19.x time frame but work around the bug for the sake of older
GTK+ versions in wxGTK itself by simply releasing the pixmap at the end of
DoDrawBitmap(), as pre-r73386 code did.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73549 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-02-21 14:32:04 +00:00
Julian Smart
8f48176bbf Invalid conversion compile error fix (GTK+ 2.12.9)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73455 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-02-04 13:54:17 +00:00
Paul Cornett
5ca21fe7bf add wxMask::GetBitmap(), closes #9381
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73409 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-01-20 06:28:11 +00:00
Paul Cornett
d4ca3c5d8d draw monochrome source directly onto destination when it is also monochrome
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73387 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-01-20 02:04:57 +00:00
Paul Cornett
eb6ee8ab39 make some reference handling a little more direct and less obscure
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73386 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-01-20 01:46:50 +00:00
Paul Cornett
4787c92d39 use const arrays for wxDC array parameters, closes #10712
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73382 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-01-18 17:27:51 +00:00
Paul Cornett
76274efd34 revert r73185, it should no longer be needed after r73231
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73232 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-12-21 05:45:02 +00:00
Paul Cornett
ffc28384ca Get DC size from GDK window if possible, client size can unfortunately be wrong
This should fix wxDC::Clear() not clearing the whole window on Ubuntu 12.04 with overlay scrollbars
see #14871


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73185 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-12-14 06:25:00 +00:00
Vadim Zeitlin
8cd79b7af0 Factor out text measurement from wxDC and wxWindow into wxTextMeasure.
Add a new private wxTextMeasure class implementing methods for measuring text
and move the often duplicated (but not always identically) code for doing the
same from wxDC and wxWindow into it.

Currently this class is only really implemented in wxMSW and wxGTK.

Also extend the test for text measuring functions and rename it to
MeasuringTextTestCase from MeasuringContextTestCase as it's not wxGC-specific
any more.

Closes #14705.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72699 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-10-17 22:35:49 +00:00
Paul Cornett
c49ba2113c no real changes, just remove unnecessary indentation and scoping after r72001
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72002 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-07-10 17:17:53 +00:00
Paul Cornett
4e621d2471 update minimum GTK2 version requirement to 2.6
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72001 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-07-10 16:39:44 +00:00
Paul Cornett
8e98dabce4 fix building with GTK+ < 2.8
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70969 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-03-22 18:09:43 +00:00
Paul Cornett
e0564c1c2f fix test for transparent pen broken in r65820
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70824 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-03-06 04:51:40 +00:00
Vadim Zeitlin
1442168125 Implement wxBG_STYLE_TRANSPARENT support for wxGTK.
Use composited windows if supported by GTK+ for wxWindows with this background
style.

Also add wxWindow::IsTransparentBackgroundSupported() and show how to use it
in the sample.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70569 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-02-11 16:26:52 +00:00
Paul Cornett
99f8cf22db move Pango underline workaround into wxFont::GTKSetPangoAttrs
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70476 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-01-29 08:14:34 +00:00
Paul Cornett
c7e99122a0 move SetPangoAttrsForFont to wxFont
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70475 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-01-29 08:00:15 +00:00
Vadim Zeitlin
c7a49742ec Add support for stricken-through fonts.
Support stricken-through fonts in wxMSW and wxGTK (including special support
in wxStaticText and wxTextCtrl).

Closes #9907.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70446 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-01-23 11:28:28 +00:00
Vadim Zeitlin
2f5dec2e52 Use #ifdef, not #if, to check for __WXGTK26__ symbol.
This fixes gcc warning given if __WXGTK26__ is not defined (which almost never
happens nowadays but still).

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67801 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-05-27 09:46:27 +00:00
Václav Slavík
fc9ab22a76 Use accessor functions instead of deprecated GTK+ macros.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67312 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-03-26 15:49:57 +00:00
Vadim Zeitlin
1780a38b7b Use unsigned char for XBM bitmaps data.
This fixes compilation with g++ in C++0x mode in which conversions of
constants not fitting into signed char range to char are not permitted.

Closes #12575.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65846 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2010-10-18 23:43:20 +00:00
Vadim Zeitlin
e6777e6575 Add wx{Pen,Brush}::Is[Non]Transparent() methods and use them.
Using GetStyle() == wx{PEN,BRUSH}STYLE_TRANSPARENT doesn't work for
uninitialized pen or brush objects so add convenient helpers which do work for
them.

Use the new helper functions everywhere instead of explicitly checking for
style. This makes the code shorter and more clear and also fixes some bugs (at
least those in GTK printing code).

Notice that this patch removes the main reason for explicitly initializing
m_pen and m_brush in wxGTKDCImpl ctor but this initialization still can't be
removed, at least for the latter, as doing this somehow breaks GetPixel(). It
would be nice to understand why and do remove this initialization so that a
newly created DC doesn't have any non-default pen nor brush.

Closes #12522.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65820 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2010-10-15 23:46:46 +00:00