wxruby3 0.9.0.pre.beta.10 → 0.9.0.pre.beta.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/wxruby3/include/wxruby-ScaledDC.h +549 -0
- data/lib/wx/core/data_object.rb +74 -6
- data/lib/wx/core/point.rb +21 -10
- data/lib/wx/core/real_point.rb +21 -10
- data/lib/wx/core/rect.rb +2 -2
- data/lib/wx/core/size.rb +12 -5
- data/lib/wx/doc/data_object.rb +104 -0
- data/lib/wx/doc/gdi_common.rb +33 -5
- data/lib/wx/doc/scaled_dc.rb +16 -0
- data/lib/wx/global_const.rb +4 -3
- data/lib/wx/version.rb +1 -1
- data/rakelib/lib/core/package.rb +3 -3
- data/rakelib/lib/core/spec.rb +2 -0
- data/rakelib/lib/director/data_object.rb +94 -0
- data/rakelib/lib/director/data_object_simple_base.rb +123 -0
- data/rakelib/lib/director/derived_dc.rb +38 -0
- data/rakelib/lib/specs/interfaces.rb +2 -0
- data/rakelib/lib/typemap/data_object_data.rb +13 -4
- data/tests/lib/wxapp_runner.rb +64 -0
- data/tests/test_basic.rb +0 -5
- data/tests/test_clipboard.rb +114 -17
- data/tests/test_dialog.rb +2 -13
- data/tests/test_event_handling.rb +2 -13
- data/tests/test_events.rb +2 -6
- data/tests/test_geometry.rb +54 -17
- data/tests/test_intl.rb +2 -15
- data/tests/test_item_data.rb +2 -15
- data/tests/test_variant.rb +1 -15
- data/tests/testapp.rb +0 -5
- data/tests/testapp_noframe.rb +0 -5
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b577d2fda2fffbd6d2ef1e8f53c6f2542c15e66e50a2d8b843ce7362a3ef5ba3
|
4
|
+
data.tar.gz: 49dbec57d8a01bee05d23d0c995d7e7ac00eeac589f33d4a9b18c47e703483d7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 67b9604ae977c9ebb9399de258c0c0452b560a7365325c2ef173e26ba5c97acb63b3de4c8f55a4494d3c2c474df7fde7f301ec81d151d7469576fbb0c6b7594d
|
7
|
+
data.tar.gz: 3ac00b5f4fac949aa8d757be43c092358f294007fda663b68f15094ac287c564469bbd9dd81ecaf3a003b30e13228e012c7e80a0ac3617833d50a290fcafb4a5
|
@@ -0,0 +1,549 @@
|
|
1
|
+
/*
|
2
|
+
* WxRuby3 wxScaledDC class
|
3
|
+
* Derived from wxSFScaledDC class in wxShapeFramework library.
|
4
|
+
* Copyright (c) M.J.N. Corino, The Netherlands
|
5
|
+
*/
|
6
|
+
/***************************************************************
|
7
|
+
* Name: ScaledDC.h
|
8
|
+
* Purpose: Defines scaled DC class
|
9
|
+
* Author: Michal Bližňák (michal.bliznak@tiscali.cz)
|
10
|
+
* Created: 2008-11-7
|
11
|
+
* Copyright: Michal Bližňák
|
12
|
+
* License: wxWidgets license (www.wxwidgets.org)
|
13
|
+
* Notes:
|
14
|
+
**************************************************************/
|
15
|
+
|
16
|
+
#ifndef _WXRUBY_SCALEDDC_H
|
17
|
+
#define _WXRUBY_SCALEDDC_H
|
18
|
+
|
19
|
+
#include <wx/graphics.h>
|
20
|
+
#include <wx/dc.h>
|
21
|
+
#include <math.h>
|
22
|
+
#include <wx/dcclient.h>
|
23
|
+
|
24
|
+
class wxDCImplWrapper : public wxDCImpl
|
25
|
+
{
|
26
|
+
public:
|
27
|
+
friend class wxScaledDC;
|
28
|
+
|
29
|
+
wxDCImplWrapper( wxDCImpl *orig, double scale ) : wxDCImpl( orig->GetOwner() )
|
30
|
+
{
|
31
|
+
m_pOrig = orig;
|
32
|
+
m_nScale = scale;
|
33
|
+
}
|
34
|
+
virtual ~wxDCImplWrapper()
|
35
|
+
{
|
36
|
+
}
|
37
|
+
|
38
|
+
wxDC *GetOwner() const { return m_pOrig->GetOwner(); }
|
39
|
+
|
40
|
+
wxWindow* GetWindow() const { return m_pOrig->GetWindow(); }
|
41
|
+
|
42
|
+
virtual bool IsOk() const { return m_pOrig->IsOk(); }
|
43
|
+
|
44
|
+
// query capabilities
|
45
|
+
|
46
|
+
virtual bool CanDrawBitmap() const { return m_pOrig->CanDrawBitmap(); }
|
47
|
+
virtual bool CanGetTextExtent() const { return m_pOrig->CanGetTextExtent(); }
|
48
|
+
|
49
|
+
// get Cairo context
|
50
|
+
virtual void* GetCairoContext() const
|
51
|
+
{
|
52
|
+
return m_pOrig->GetCairoContext();
|
53
|
+
}
|
54
|
+
|
55
|
+
// query dimension, colour deps, resolution
|
56
|
+
|
57
|
+
virtual void DoGetSize(int *width, int *height) const { m_pOrig->DoGetSize( width, height); }
|
58
|
+
void GetSize(int *width, int *height) const
|
59
|
+
{
|
60
|
+
DoGetSize(width, height);
|
61
|
+
return ;
|
62
|
+
}
|
63
|
+
|
64
|
+
wxSize GetSize() const
|
65
|
+
{
|
66
|
+
int w, h;
|
67
|
+
DoGetSize(&w, &h);
|
68
|
+
return wxSize(w, h);
|
69
|
+
}
|
70
|
+
|
71
|
+
virtual void DoGetSizeMM(int* width, int* height) const { m_pOrig->DoGetSizeMM( width, height); }
|
72
|
+
|
73
|
+
virtual int GetDepth() const { return m_pOrig->GetDepth(); }
|
74
|
+
virtual wxSize GetPPI() const { return m_pOrig->GetPPI(); }
|
75
|
+
|
76
|
+
// Right-To-Left (RTL) modes
|
77
|
+
|
78
|
+
virtual void SetLayoutDirection(wxLayoutDirection dir) { m_pOrig->SetLayoutDirection( dir ); }
|
79
|
+
virtual wxLayoutDirection GetLayoutDirection() const { return m_pOrig->GetLayoutDirection(); }
|
80
|
+
|
81
|
+
// page and document
|
82
|
+
|
83
|
+
virtual bool StartDoc(const wxString& message) { return m_pOrig->StartDoc( message ); }
|
84
|
+
virtual void EndDoc() { return m_pOrig->EndDoc(); }
|
85
|
+
|
86
|
+
virtual void StartPage() { m_pOrig->StartPage(); }
|
87
|
+
virtual void EndPage() { m_pOrig->EndPage(); }
|
88
|
+
|
89
|
+
// flushing the content of this dc immediately eg onto screen
|
90
|
+
virtual void Flush() { m_pOrig->Flush(); }
|
91
|
+
|
92
|
+
// bounding box
|
93
|
+
|
94
|
+
virtual void CalcBoundingBox(wxCoord x, wxCoord y) { m_pOrig->CalcBoundingBox( x, y); }
|
95
|
+
|
96
|
+
wxCoord MinX() const { return m_pOrig->MinX(); }
|
97
|
+
wxCoord MaxX() const { return m_pOrig->MaxX(); }
|
98
|
+
wxCoord MinY() const { return m_pOrig->MinY(); }
|
99
|
+
wxCoord MaxY() const { return m_pOrig->MaxY(); }
|
100
|
+
|
101
|
+
// setters and getters
|
102
|
+
|
103
|
+
virtual void SetFont(const wxFont& font) { m_pOrig->SetFont( font ); }
|
104
|
+
virtual const wxFont& GetFont() const { return m_pOrig->GetFont(); }
|
105
|
+
|
106
|
+
virtual void SetPen(const wxPen& pen) { m_pOrig->SetPen( pen ); }
|
107
|
+
virtual const wxPen& GetPen() const { return m_pOrig->GetPen(); }
|
108
|
+
|
109
|
+
virtual void SetBrush(const wxBrush& brush) { m_pOrig->SetBrush( brush ); }
|
110
|
+
virtual const wxBrush& GetBrush() const { return m_pOrig->GetBrush(); }
|
111
|
+
|
112
|
+
virtual void SetBackground(const wxBrush& brush) { m_pOrig->SetBackground( brush ); }
|
113
|
+
virtual const wxBrush& GetBackground() const { return m_pOrig->GetBackground(); }
|
114
|
+
|
115
|
+
virtual void SetBackgroundMode(int mode) { m_pOrig->SetBackgroundMode( mode ); }
|
116
|
+
virtual int GetBackgroundMode() const { return m_pOrig->GetBackgroundMode(); }
|
117
|
+
|
118
|
+
virtual void SetTextForeground(const wxColour& colour) { m_pOrig->SetTextForeground( colour ); }
|
119
|
+
virtual const wxColour& GetTextForeground() const { return m_pOrig->GetTextForeground(); }
|
120
|
+
|
121
|
+
virtual void SetTextBackground(const wxColour& colour) { m_pOrig->SetTextBackground( colour ); }
|
122
|
+
virtual const wxColour& GetTextBackground() const { return m_pOrig->GetTextBackground(); }
|
123
|
+
|
124
|
+
#if wxUSE_PALETTE
|
125
|
+
virtual void SetPalette(const wxPalette& palette) { m_pOrig->SetPalette( palette ); }
|
126
|
+
#endif // wxUSE_PALETTE
|
127
|
+
|
128
|
+
// inherit the DC attributes (font and colours) from the given window
|
129
|
+
//
|
130
|
+
// this is called automatically when a window, client or paint DC is
|
131
|
+
// created
|
132
|
+
virtual void InheritAttributes(wxWindow *win) { m_pOrig->InheritAttributes( win ); }
|
133
|
+
|
134
|
+
|
135
|
+
// logical functions
|
136
|
+
|
137
|
+
virtual void SetLogicalFunction(wxRasterOperationMode function) { m_pOrig->SetLogicalFunction( function ); }
|
138
|
+
virtual wxRasterOperationMode GetLogicalFunction() const { return m_pOrig->GetLogicalFunction(); }
|
139
|
+
|
140
|
+
// text measurement
|
141
|
+
|
142
|
+
virtual wxCoord GetCharHeight() const { return m_pOrig->GetCharHeight(); }
|
143
|
+
virtual wxCoord GetCharWidth() const { return m_pOrig->GetCharWidth(); }
|
144
|
+
virtual void DoGetTextExtent(const wxString& string,
|
145
|
+
wxCoord *x, wxCoord *y,
|
146
|
+
wxCoord *descent = NULL,
|
147
|
+
wxCoord *externalLeading = NULL,
|
148
|
+
const wxFont *theFont = NULL) const { m_pOrig->DoGetTextExtent( string, x, y, descent, externalLeading, theFont ); }
|
149
|
+
virtual void GetMultiLineTextExtent(const wxString& string,
|
150
|
+
wxCoord *width,
|
151
|
+
wxCoord *height,
|
152
|
+
wxCoord *heightLine = NULL,
|
153
|
+
const wxFont *font = NULL) const { m_pOrig->GetMultiLineTextExtent( string, width, height, heightLine, font ); }
|
154
|
+
virtual bool DoGetPartialTextExtents(const wxString& text, wxArrayInt& widths) const { return m_pOrig->DoGetPartialTextExtents( text, widths); }
|
155
|
+
|
156
|
+
// clearing
|
157
|
+
|
158
|
+
virtual void Clear() { m_pOrig->Clear(); }
|
159
|
+
|
160
|
+
// clipping
|
161
|
+
|
162
|
+
virtual void DoSetClippingRegion(wxCoord x, wxCoord y,
|
163
|
+
wxCoord width, wxCoord height) { m_pOrig->DoSetClippingRegion( x, y, width, height ); }
|
164
|
+
|
165
|
+
// NB: this function works with device coordinates, not the logical ones!
|
166
|
+
virtual void DoSetDeviceClippingRegion(const wxRegion& region) { m_pOrig->DoSetDeviceClippingRegion( region ); }
|
167
|
+
|
168
|
+
virtual bool DoGetClippingRect(wxRect& rect) const { return m_pOrig->DoGetClippingRect(rect); }
|
169
|
+
|
170
|
+
virtual void DestroyClippingRegion() { m_pOrig->DestroyClippingRegion(); }
|
171
|
+
|
172
|
+
|
173
|
+
// coordinates conversions and transforms
|
174
|
+
|
175
|
+
virtual wxCoord DeviceToLogicalX(wxCoord x) const { return m_pOrig->DeviceToLogicalX(x); }
|
176
|
+
virtual wxCoord DeviceToLogicalY(wxCoord y) const { return m_pOrig->DeviceToLogicalY(y); }
|
177
|
+
virtual wxCoord DeviceToLogicalXRel(wxCoord x) const { return m_pOrig->DeviceToLogicalXRel(x); }
|
178
|
+
virtual wxCoord DeviceToLogicalYRel(wxCoord y) const { return m_pOrig->DeviceToLogicalYRel(y); }
|
179
|
+
virtual wxCoord LogicalToDeviceX(wxCoord x) const { return m_pOrig->LogicalToDeviceX(x); }
|
180
|
+
virtual wxCoord LogicalToDeviceY(wxCoord y) const { return m_pOrig->LogicalToDeviceY(y); }
|
181
|
+
virtual wxCoord LogicalToDeviceXRel(wxCoord x) const { return m_pOrig->LogicalToDeviceXRel(x); }
|
182
|
+
virtual wxCoord LogicalToDeviceYRel(wxCoord y) const { return m_pOrig->LogicalToDeviceYRel(y); }
|
183
|
+
|
184
|
+
virtual void SetMapMode(wxMappingMode mode) { m_pOrig->SetMapMode(mode); }
|
185
|
+
virtual wxMappingMode GetMapMode() const { return m_pOrig->GetMapMode(); }
|
186
|
+
|
187
|
+
virtual void SetUserScale(double x, double y) { m_pOrig->SetUserScale( x, y ); }
|
188
|
+
virtual void GetUserScale(double *x, double *y) const { m_pOrig->GetUserScale( x, y ); }
|
189
|
+
|
190
|
+
virtual void SetLogicalScale(double x, double y) { m_pOrig->SetLogicalScale( x, y ); }
|
191
|
+
virtual void GetLogicalScale(double *x, double *y) const { m_pOrig->GetLogicalScale( x, y ); }
|
192
|
+
|
193
|
+
virtual void SetLogicalOrigin(wxCoord x, wxCoord y) { m_pOrig->SetLogicalOrigin( x, y ); }
|
194
|
+
virtual void DoGetLogicalOrigin(wxCoord *x, wxCoord *y) const { m_pOrig->DoGetLogicalOrigin( x, y); }
|
195
|
+
|
196
|
+
virtual void SetDeviceOrigin(wxCoord x, wxCoord y) { m_pOrig->SetDeviceOrigin( x, y ); }
|
197
|
+
virtual void DoGetDeviceOrigin(wxCoord *x, wxCoord *y) const { m_pOrig->DoGetDeviceOrigin( x, y ); }
|
198
|
+
|
199
|
+
virtual void SetDeviceLocalOrigin( wxCoord x, wxCoord y ) { m_pOrig->SetDeviceLocalOrigin( x, y ); }
|
200
|
+
|
201
|
+
virtual void ComputeScaleAndOrigin() { m_pOrig->ComputeScaleAndOrigin(); }
|
202
|
+
|
203
|
+
// this needs to overidden if the axis is inverted
|
204
|
+
virtual void SetAxisOrientation(bool xLeftRight, bool yBottomUp) { m_pOrig->SetAxisOrientation( xLeftRight, yBottomUp); }
|
205
|
+
|
206
|
+
// ---------------------------------------------------------
|
207
|
+
// the actual drawing API
|
208
|
+
|
209
|
+
virtual bool DoFloodFill(wxCoord x, wxCoord y, const wxColour& col,
|
210
|
+
wxFloodFillStyle style = wxFLOOD_SURFACE)
|
211
|
+
{
|
212
|
+
return m_pOrig->DoFloodFill( ScaleCoord(x), ScaleCoord(y), col, style );
|
213
|
+
}
|
214
|
+
|
215
|
+
virtual void DoGradientFillLinear(const wxRect& rect,
|
216
|
+
const wxColour& initialColour,
|
217
|
+
const wxColour& destColour,
|
218
|
+
wxDirection nDirection = wxEAST)
|
219
|
+
{
|
220
|
+
m_pOrig->DoGradientFillLinear( wxRect( ScaleInt(rect.x), ScaleInt(rect.y), ScaleInt(rect.width), ScaleInt(rect.height)),
|
221
|
+
initialColour, destColour, nDirection );
|
222
|
+
}
|
223
|
+
|
224
|
+
virtual void DoGradientFillConcentric(const wxRect& rect,
|
225
|
+
const wxColour& initialColour,
|
226
|
+
const wxColour& destColour,
|
227
|
+
const wxPoint& circleCenter)
|
228
|
+
{
|
229
|
+
m_pOrig->DoGradientFillConcentric( wxRect( ScaleInt(rect.x), ScaleInt(rect.y), ScaleInt(rect.width), ScaleInt(rect.height)),
|
230
|
+
initialColour, destColour,
|
231
|
+
wxPoint( ScaleInt(circleCenter.x), ScaleInt(circleCenter.y)) );
|
232
|
+
}
|
233
|
+
|
234
|
+
virtual bool DoGetPixel(wxCoord x, wxCoord y, wxColour *col) const
|
235
|
+
{
|
236
|
+
return m_pOrig->DoGetPixel( (wxCoord)ceil((double)x*m_nScale), (wxCoord)ceil((double)y*m_nScale), col );
|
237
|
+
}
|
238
|
+
|
239
|
+
virtual void DoDrawPoint(wxCoord x, wxCoord y)
|
240
|
+
{
|
241
|
+
m_pOrig->DoDrawPoint( ScaleCoord(x), ScaleCoord(y) );
|
242
|
+
}
|
243
|
+
virtual void DoDrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2)
|
244
|
+
{
|
245
|
+
m_pOrig->DoDrawLine( ScaleCoord(x1), ScaleCoord(y1), ScaleCoord(x2), ScaleCoord(y2) );
|
246
|
+
}
|
247
|
+
|
248
|
+
virtual void DoDrawArc(wxCoord x1, wxCoord y1,
|
249
|
+
wxCoord x2, wxCoord y2,
|
250
|
+
wxCoord xc, wxCoord yc)
|
251
|
+
{
|
252
|
+
m_pOrig->DoDrawArc( ScaleCoord(x1), ScaleCoord(y1),
|
253
|
+
ScaleCoord(x2), ScaleCoord(y2),
|
254
|
+
ScaleCoord(xc), ScaleCoord(yc) );
|
255
|
+
}
|
256
|
+
|
257
|
+
virtual void DoDrawCheckMark(wxCoord x, wxCoord y,
|
258
|
+
wxCoord width, wxCoord height)
|
259
|
+
{
|
260
|
+
m_pOrig->DoDrawCheckMark( ScaleCoord(x), ScaleCoord(y), ScaleCoord(width), ScaleCoord(height) );
|
261
|
+
}
|
262
|
+
|
263
|
+
virtual void DoDrawEllipticArc(wxCoord x, wxCoord y, wxCoord w, wxCoord h,
|
264
|
+
double sa, double ea)
|
265
|
+
{
|
266
|
+
m_pOrig->DoDrawEllipticArc( ScaleCoord(x), ScaleCoord(y), ScaleCoord(w), ScaleCoord(h), sa, ea );
|
267
|
+
}
|
268
|
+
|
269
|
+
virtual void DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height)
|
270
|
+
{
|
271
|
+
m_pOrig->DoDrawRectangle( ScaleCoord(x), ScaleCoord(y), ScaleCoord(width), ScaleCoord(height) );
|
272
|
+
}
|
273
|
+
|
274
|
+
virtual void DoDrawRoundedRectangle(wxCoord x, wxCoord y,
|
275
|
+
wxCoord width, wxCoord height,
|
276
|
+
double radius)
|
277
|
+
{
|
278
|
+
m_pOrig->DoDrawRoundedRectangle( ScaleCoord(x), ScaleCoord(y), ScaleCoord(width), ScaleCoord(height), radius*m_nScale );
|
279
|
+
}
|
280
|
+
|
281
|
+
virtual void DoDrawEllipse(wxCoord x, wxCoord y,
|
282
|
+
wxCoord width, wxCoord height)
|
283
|
+
{
|
284
|
+
m_pOrig->DoDrawEllipse( ScaleCoord(x), ScaleCoord(y), ScaleCoord(width), ScaleCoord(height) );
|
285
|
+
}
|
286
|
+
|
287
|
+
virtual void DoCrossHair(wxCoord x, wxCoord y)
|
288
|
+
{
|
289
|
+
m_pOrig->DoCrossHair( ScaleCoord(x), ScaleCoord(y) );
|
290
|
+
}
|
291
|
+
|
292
|
+
virtual void DoDrawIcon(const wxIcon& icon, wxCoord x, wxCoord y)
|
293
|
+
{
|
294
|
+
m_pOrig->DoDrawIcon( icon, ScaleCoord(x), ScaleCoord(y) );
|
295
|
+
}
|
296
|
+
|
297
|
+
virtual void DoDrawBitmap(const wxBitmap &bmp, wxCoord x, wxCoord y,
|
298
|
+
bool useMask = false)
|
299
|
+
{
|
300
|
+
m_pOrig->DoDrawBitmap( bmp, ScaleCoord(x), ScaleCoord(y), useMask );
|
301
|
+
}
|
302
|
+
|
303
|
+
virtual void DoDrawText(const wxString& text, wxCoord x, wxCoord y)
|
304
|
+
{
|
305
|
+
wxFont font = GetFont();
|
306
|
+
wxFont prevfont = font;
|
307
|
+
|
308
|
+
if(font != wxNullFont)
|
309
|
+
{
|
310
|
+
font.SetPointSize(int(font.GetPointSize()*m_nScale));
|
311
|
+
SetFont(font);
|
312
|
+
}
|
313
|
+
|
314
|
+
m_pOrig->DoDrawText( text, ScaleCoord(x), ScaleCoord(y) );
|
315
|
+
|
316
|
+
SetFont(prevfont);
|
317
|
+
}
|
318
|
+
|
319
|
+
virtual void DoDrawRotatedText(const wxString& text,
|
320
|
+
wxCoord x, wxCoord y, double angle)
|
321
|
+
{
|
322
|
+
wxFont font = GetFont();
|
323
|
+
wxFont prevfont = font;
|
324
|
+
|
325
|
+
if(font != wxNullFont)
|
326
|
+
{
|
327
|
+
font.SetPointSize(int(font.GetPointSize()*m_nScale));
|
328
|
+
SetFont(font);
|
329
|
+
}
|
330
|
+
|
331
|
+
m_pOrig->DoDrawRotatedText( text, ScaleCoord(x), ScaleCoord(y), angle );
|
332
|
+
|
333
|
+
SetFont(prevfont);
|
334
|
+
}
|
335
|
+
|
336
|
+
virtual bool DoBlit(wxCoord xdest, wxCoord ydest,
|
337
|
+
wxCoord width, wxCoord height,
|
338
|
+
wxDC *source,
|
339
|
+
wxCoord xsrc, wxCoord ysrc,
|
340
|
+
wxRasterOperationMode rop = wxCOPY,
|
341
|
+
bool useMask = false,
|
342
|
+
wxCoord xsrcMask = wxDefaultCoord,
|
343
|
+
wxCoord ysrcMask = wxDefaultCoord)
|
344
|
+
{
|
345
|
+
return m_pOrig->DoBlit( ScaleCoord(xdest), ScaleCoord(ydest),
|
346
|
+
width, height, source, xsrc, ysrc, rop, useMask, xsrcMask, ysrcMask );
|
347
|
+
}
|
348
|
+
|
349
|
+
virtual bool DoStretchBlit(wxCoord xdest, wxCoord ydest,
|
350
|
+
wxCoord dstWidth, wxCoord dstHeight,
|
351
|
+
wxDC *source,
|
352
|
+
wxCoord xsrc, wxCoord ysrc,
|
353
|
+
wxCoord srcWidth, wxCoord srcHeight,
|
354
|
+
wxRasterOperationMode rop = wxCOPY,
|
355
|
+
bool useMask = false,
|
356
|
+
wxCoord xsrcMask = wxDefaultCoord,
|
357
|
+
wxCoord ysrcMask = wxDefaultCoord)
|
358
|
+
{
|
359
|
+
return m_pOrig->DoStretchBlit( ScaleCoord(xdest), ScaleCoord(ydest), ScaleCoord(dstWidth), ScaleCoord(dstHeight),
|
360
|
+
source, xsrc, ysrc, srcWidth, srcHeight, rop, useMask, xsrcMask, ysrcMask );
|
361
|
+
}
|
362
|
+
|
363
|
+
virtual wxBitmap DoGetAsBitmap(const wxRect *subrect) const
|
364
|
+
{
|
365
|
+
return m_pOrig->DoGetAsBitmap( subrect );
|
366
|
+
}
|
367
|
+
|
368
|
+
#if wxVERSION_NUMBER < 2905
|
369
|
+
virtual void DoDrawLines(int n, wxPoint points[],
|
370
|
+
#else
|
371
|
+
virtual void DoDrawLines(int n, const wxPoint points[],
|
372
|
+
#endif
|
373
|
+
wxCoord xoffset, wxCoord yoffset )
|
374
|
+
{
|
375
|
+
wxPoint *updPoints = new wxPoint[n];
|
376
|
+
|
377
|
+
for(int i = 0; i < n; i++)
|
378
|
+
{
|
379
|
+
(updPoints + i)->x = ScaleInt((points + i)->x);
|
380
|
+
(updPoints + i)->y = ScaleInt((points + i)->y);
|
381
|
+
}
|
382
|
+
|
383
|
+
m_pOrig->DoDrawLines( n, updPoints, ScaleCoord(xoffset), ScaleCoord(yoffset) );
|
384
|
+
|
385
|
+
delete [] updPoints;
|
386
|
+
}
|
387
|
+
|
388
|
+
virtual void DrawLines(const wxPointList *list,
|
389
|
+
wxCoord xoffset, wxCoord yoffset )
|
390
|
+
{
|
391
|
+
int i = 0;
|
392
|
+
wxPoint *pts = new wxPoint[list->GetCount()];
|
393
|
+
|
394
|
+
wxPointList::compatibility_iterator node = list->GetFirst();
|
395
|
+
while( node )
|
396
|
+
{
|
397
|
+
*(pts + i) = *node->GetData();
|
398
|
+
i++;
|
399
|
+
node = node->GetNext();
|
400
|
+
}
|
401
|
+
|
402
|
+
wxDCImplWrapper::DoDrawLines( i, pts, xoffset, yoffset );
|
403
|
+
|
404
|
+
delete [] pts;
|
405
|
+
}
|
406
|
+
|
407
|
+
#if wxVERSION_NUMBER < 2905
|
408
|
+
virtual void DoDrawPolygon(int n, wxPoint points[],
|
409
|
+
#else
|
410
|
+
virtual void DoDrawPolygon(int n, const wxPoint points[],
|
411
|
+
#endif
|
412
|
+
wxCoord xoffset, wxCoord yoffset,
|
413
|
+
wxPolygonFillMode fillStyle = wxODDEVEN_RULE)
|
414
|
+
{
|
415
|
+
wxPoint *updPoints = new wxPoint[n];
|
416
|
+
|
417
|
+
for(int i = 0; i < n; i++)
|
418
|
+
{
|
419
|
+
(updPoints + i)->x = ScaleInt((points + i)->x);
|
420
|
+
(updPoints + i)->y = ScaleInt((points + i)->y);
|
421
|
+
}
|
422
|
+
|
423
|
+
m_pOrig->DoDrawPolygon(n, updPoints, ScaleCoord(xoffset), ScaleCoord(yoffset), fillStyle);
|
424
|
+
|
425
|
+
delete [] updPoints;
|
426
|
+
}
|
427
|
+
|
428
|
+
virtual void DoDrawPolyPolygon(int n, const int count[], const wxPoint points[],
|
429
|
+
wxCoord xoffset, wxCoord yoffset,
|
430
|
+
wxPolygonFillMode fillStyle)
|
431
|
+
{
|
432
|
+
int nTotalPoints = 0;
|
433
|
+
|
434
|
+
for(int i = 0; i < n; i++)nTotalPoints += count[i];
|
435
|
+
|
436
|
+
wxPoint *updPoints = new wxPoint[nTotalPoints];
|
437
|
+
|
438
|
+
for(int i = 0; i < nTotalPoints; i++)
|
439
|
+
{
|
440
|
+
(updPoints + i)->x = ScaleInt((points + i)->x);
|
441
|
+
(updPoints + i)->y = ScaleInt((points + i)->y);
|
442
|
+
}
|
443
|
+
|
444
|
+
m_pOrig->DoDrawPolyPolygon(n, count, updPoints, ScaleCoord(xoffset), ScaleCoord(yoffset), fillStyle);
|
445
|
+
|
446
|
+
delete [] updPoints;
|
447
|
+
}
|
448
|
+
|
449
|
+
void DrawPolygon(const wxPointList *list,
|
450
|
+
wxCoord xoffset, wxCoord yoffset,
|
451
|
+
wxPolygonFillMode fillStyle )
|
452
|
+
{
|
453
|
+
int i = 0;
|
454
|
+
wxPoint *pts = new wxPoint[list->GetCount()];
|
455
|
+
|
456
|
+
wxPointList::compatibility_iterator node = list->GetFirst();
|
457
|
+
while( node )
|
458
|
+
{
|
459
|
+
*(pts + i) = *node->GetData();
|
460
|
+
i++;
|
461
|
+
node = node->GetNext();
|
462
|
+
}
|
463
|
+
|
464
|
+
wxDCImplWrapper::DoDrawPolygon( i, pts, xoffset, yoffset, fillStyle );
|
465
|
+
|
466
|
+
delete [] pts;
|
467
|
+
}
|
468
|
+
|
469
|
+
|
470
|
+
#if wxUSE_SPLINES
|
471
|
+
void DrawSpline(wxCoord x1, wxCoord y1,
|
472
|
+
wxCoord x2, wxCoord y2,
|
473
|
+
wxCoord x3, wxCoord y3);
|
474
|
+
void DrawSpline(int n, wxPoint points[]);
|
475
|
+
void DrawSpline(const wxPointList *points) { DoDrawSpline(points); }
|
476
|
+
|
477
|
+
virtual void DoDrawSpline(const wxPointList *points)
|
478
|
+
{
|
479
|
+
wxPoint *pPt;
|
480
|
+
wxPointList updPoints;
|
481
|
+
|
482
|
+
wxPointList::compatibility_iterator node = points->GetFirst();
|
483
|
+
while( node )
|
484
|
+
{
|
485
|
+
pPt = node->GetData();
|
486
|
+
updPoints.Append( new wxPoint( ScaleInt(pPt->x), ScaleInt(pPt->y)) );
|
487
|
+
node = node->GetNext();
|
488
|
+
}
|
489
|
+
|
490
|
+
m_pOrig->DoDrawSpline( &updPoints );
|
491
|
+
|
492
|
+
updPoints.DeleteContents( true );
|
493
|
+
updPoints.Clear();
|
494
|
+
}
|
495
|
+
#endif
|
496
|
+
|
497
|
+
// ---------------------------------------------------------
|
498
|
+
// wxMemoryDC Impl API
|
499
|
+
|
500
|
+
virtual void DoSelect(const wxBitmap& bmp) { m_pOrig->DoSelect( bmp ); }
|
501
|
+
|
502
|
+
virtual const wxBitmap& GetSelectedBitmap() const { return m_pOrig->GetSelectedBitmap(); }
|
503
|
+
virtual wxBitmap& GetSelectedBitmap() { return m_pOrig->GetSelectedBitmap(); }
|
504
|
+
|
505
|
+
// ---------------------------------------------------------
|
506
|
+
// wxPrinterDC Impl API
|
507
|
+
|
508
|
+
virtual wxRect GetPaperRect() const { return m_pOrig->GetPaperRect(); }
|
509
|
+
|
510
|
+
virtual int GetResolution() const { return m_pOrig->GetResolution(); }
|
511
|
+
|
512
|
+
protected:
|
513
|
+
/*! \brief Pointer to original DC implementation. */
|
514
|
+
wxDCImpl *m_pOrig;
|
515
|
+
/*! \brief Global graphics scale. */
|
516
|
+
double m_nScale;
|
517
|
+
|
518
|
+
/**
|
519
|
+
* \brief Scale given value.
|
520
|
+
* \param val Value to scale
|
521
|
+
* \return Scaled value
|
522
|
+
*/
|
523
|
+
wxCoord ScaleCoord(wxCoord val){return (wxCoord)ceil((double)val*m_nScale);}
|
524
|
+
|
525
|
+
/**
|
526
|
+
* \brief Scale given value.
|
527
|
+
* \param val Value to scale
|
528
|
+
* \return Scaled value
|
529
|
+
*/
|
530
|
+
wxCoord ScaleInt(int val){return (int)ceil((double)val*m_nScale);}
|
531
|
+
};
|
532
|
+
|
533
|
+
/*! \brief Class acts as a wrapper for given DC class and provides modified
|
534
|
+
* drawing functions cooperating with the shape canvas able to draw scaled graphics.
|
535
|
+
* All drawing operations performed by the shapes should be done via this class otherwise
|
536
|
+
* the global scalling capabilities provided by the shape canvas wont be available.
|
537
|
+
* \sa wxSFShapeCanvas
|
538
|
+
*/
|
539
|
+
class wxScaledDC : public wxDC
|
540
|
+
{
|
541
|
+
public:
|
542
|
+
wxScaledDC(wxDC& target, double scale)
|
543
|
+
: wxDC(new wxDCImplWrapper(target.GetImpl(), scale))
|
544
|
+
{}
|
545
|
+
virtual ~wxScaledDC()
|
546
|
+
{}
|
547
|
+
};
|
548
|
+
|
549
|
+
#endif // _WXRUBY_SCALEDDC_H
|
data/lib/wx/core/data_object.rb
CHANGED
@@ -1,10 +1,78 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
|
2
|
+
module Wx
|
3
|
+
|
4
|
+
# Provide some default implementations of these to make life easier
|
5
|
+
class DataObject
|
6
|
+
def get_preferred_format(direction)
|
7
|
+
get_all_formats(direction).first
|
8
|
+
end
|
9
|
+
|
10
|
+
def get_format_count(direction)
|
11
|
+
get_all_formats(direction).size
|
12
|
+
end
|
5
13
|
end
|
6
14
|
|
7
|
-
|
8
|
-
|
15
|
+
class DataObjectSimple
|
16
|
+
|
17
|
+
# implement the overloads which do not require the format arg
|
18
|
+
# using pure Ruby
|
19
|
+
|
20
|
+
wx_get_data_size = instance_method :get_data_size
|
21
|
+
define_method :get_data_size do |format = nil|
|
22
|
+
wx_get_data_size.bind(self).call(format || self.get_format)
|
23
|
+
end
|
24
|
+
|
25
|
+
wx_get_data_here = instance_method :get_data_here
|
26
|
+
define_method :get_data_here do |format = nil|
|
27
|
+
wx_get_data_here.bind(self).call(format || self.get_format)
|
28
|
+
end
|
29
|
+
|
30
|
+
wx_set_data = instance_method :set_data
|
31
|
+
define_method :set_data do |*args|
|
32
|
+
if args.size>1
|
33
|
+
format, buf = args
|
34
|
+
else
|
35
|
+
format = nil
|
36
|
+
buf = args.first
|
37
|
+
end
|
38
|
+
wx_set_data.bind(self).call(format || self.get_format, buf)
|
39
|
+
end
|
40
|
+
|
9
41
|
end
|
42
|
+
|
43
|
+
class DataObjectSimpleBase
|
44
|
+
|
45
|
+
# implement these in pure Ruby for optimization
|
46
|
+
def get_data_size(*)
|
47
|
+
self._get_data_size
|
48
|
+
end
|
49
|
+
def get_data_here(*)
|
50
|
+
self._get_data
|
51
|
+
end
|
52
|
+
|
53
|
+
def set_data(*args)
|
54
|
+
if args.size>1
|
55
|
+
_, buf = args
|
56
|
+
else
|
57
|
+
buf = args.first
|
58
|
+
end
|
59
|
+
self._set_data(buf)
|
60
|
+
end
|
61
|
+
|
62
|
+
def _get_data_size
|
63
|
+
(_get_data || '').bytesize
|
64
|
+
end
|
65
|
+
protected :_get_data_size
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
class TextDataObject
|
70
|
+
|
71
|
+
# override this to loose the extra terminating 0 we otherwise get
|
72
|
+
def get_data_here(*)
|
73
|
+
self.get_text
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
|
10
78
|
end
|
data/lib/wx/core/point.rb
CHANGED
@@ -1,4 +1,7 @@
|
|
1
1
|
class Wx::Point
|
2
|
+
|
3
|
+
include Comparable
|
4
|
+
|
2
5
|
# More informative output when converted to string
|
3
6
|
def to_s
|
4
7
|
"#<Wx::Point: (#{x}, #{y})>"
|
@@ -16,23 +19,26 @@ class Wx::Point
|
|
16
19
|
alias :get_x :x
|
17
20
|
alias :get_y :y
|
18
21
|
|
19
|
-
#
|
20
|
-
def
|
21
|
-
if
|
22
|
+
# Correct comparison for Points - same if same x and y
|
23
|
+
def eql?(other)
|
24
|
+
if other.instance_of?(self.class)
|
22
25
|
x == other.x and y == other.y
|
23
|
-
elsif Array === other && other.size == 2
|
24
|
-
to_ary == other
|
25
26
|
else
|
26
|
-
|
27
|
+
false
|
27
28
|
end
|
28
29
|
end
|
29
30
|
|
30
|
-
|
31
|
-
|
31
|
+
def hash
|
32
|
+
to_ary.hash
|
33
|
+
end
|
34
|
+
|
35
|
+
def <=>(other)
|
32
36
|
if Wx::Point === other
|
33
|
-
x
|
37
|
+
(x*y) <=> (other.x*other.y)
|
38
|
+
elsif Array === other && other.size == 2
|
39
|
+
(x*y) <=> (other.first.to_i*other.last.to_i)
|
34
40
|
else
|
35
|
-
|
41
|
+
nil
|
36
42
|
end
|
37
43
|
end
|
38
44
|
|
@@ -89,4 +95,9 @@ class Wx::Point
|
|
89
95
|
end
|
90
96
|
end
|
91
97
|
end
|
98
|
+
|
99
|
+
def to_real_point
|
100
|
+
Wx::RealPoint.new(self.x.to_f, self.y.to_f)
|
101
|
+
end
|
102
|
+
alias :to_real :to_real_point
|
92
103
|
end
|