]> git.saurik.com Git - wxWidgets.git/blame - src/os2/dcprint.cpp
fixing mngw32 (cross)compilation
[wxWidgets.git] / src / os2 / dcprint.cpp
CommitLineData
27476f73
DW
1/////////////////////////////////////////////////////////////////////////////
2// Name: dcprint.cpp
3// Purpose: wxPrinterDC class
fb46a9a6 4// Author: David Webster
27476f73 5// Modified by:
fb46a9a6 6// Created: 10/14/99
27476f73 7// RCS-ID: $Id$
fb46a9a6
DW
8// Copyright: (c) David Webster
9// Licence: wxWindows licence
27476f73
DW
10/////////////////////////////////////////////////////////////////////////////
11
27476f73
DW
12// For compilers that support precompilation, includes "wx.h".
13#include "wx/wxprec.h"
fb46a9a6
DW
14
15#define INCL_DEV
16#define INCL_GPI
17#define INCL_PM
18#include<os2.h>
19
27476f73
DW
20#ifndef WX_PRECOMP
21#endif
22
23#include "wx/string.h"
24#include "wx/log.h"
25#include "wx/window.h"
26#include "wx/os2/private.h"
27#include "wx/dcprint.h"
28#include "math.h"
29
7e99520b
DW
30#if wxUSE_PRINTING_ARCHITECTURE
31
27476f73 32IMPLEMENT_CLASS(wxPrinterDC, wxDC)
27476f73 33
27476f73
DW
34
35// This form is deprecated
e1a688e4
DW
36wxPrinterDC::wxPrinterDC(
37 const wxString& rsDriverName
38, const wxString& rsDeviceName
39, const wxString& rsFile
40, bool bInteractive
41, int nOrientation
42)
27476f73 43{
9dea36ef 44 LONG lType = 0;
e1a688e4
DW
45 DEVOPENSTRUC vDevOpen = { (char*)rsDeviceName.c_str()
46 ,(char*)rsDriverName.c_str()
47 ,NULL
48 ,NULL
49 ,NULL
50 ,NULL
51 ,NULL
52 ,NULL
53 ,NULL
54 };
55
56 m_isInteractive = bInteractive;
57
58 if (!rsFile.IsNull() && rsFile != wxT(""))
59 m_printData.SetFilename(rsFile);
27476f73
DW
60
61/*
62 Implement PM's version of this
63#if wxUSE_COMMON_DIALOGS
64 if (interactive)
65 {
66 PRINTDLG pd;
67
68 pd.lStructSize = sizeof( PRINTDLG );
69 pd.hwndOwner=(HWND) NULL;
70 pd.hDevMode=(HANDLE)NULL;
71 pd.hDevNames=(HANDLE)NULL;
72 pd.Flags=PD_RETURNDC | PD_NOSELECTION | PD_NOPAGENUMS;
73 pd.nFromPage=0;
74 pd.nToPage=0;
75 pd.nMinPage=0;
76 pd.nMaxPage=0;
77 pd.nCopies=1;
78 pd.hInstance=(HINSTANCE)NULL;
79
80 if ( PrintDlg( &pd ) != 0 )
81 {
82 m_hDC = (WXHDC) pd.hDC;
83 m_ok = TRUE;
84 }
85 else
86 {
87 m_ok = FALSE;
88 return;
89 }
90
91 // m_dontDelete = TRUE;
92 }
93 else
94#endif
95*/
e1a688e4
DW
96 if ((!rsDriverName.IsNull() && rsDriverName != wxT("")) &&
97 (!rsDeviceName.IsNull() && rsDeviceName != wxT("")) &&
98 (!rsFile.IsNull() && rsFile != wxT("")))
27476f73 99 {
e1a688e4 100 m_hDC = (WXHDC) ::DevOpenDC( vHabmain
27476f73
DW
101 ,OD_QUEUED
102 ,"*"
103 ,5L
e1a688e4 104 ,(PDEVOPENDATA)&vDevOpen
27476f73
DW
105 ,NULLHANDLE
106 );
107 m_ok = m_hDC ? TRUE: FALSE;
108 }
109 else
110 {
e1a688e4
DW
111 wxPrintData vPrintData;
112
113 vPrintData.SetOrientation(nOrientation);
114 m_hDC = wxGetPrinterDC(vPrintData);
27476f73
DW
115 m_ok = m_hDC ? TRUE: FALSE;
116 }
117
118 if (m_hDC)
119 {
120 // int width = GetDeviceCaps(m_hDC, VERTRES);
121 // int height = GetDeviceCaps(m_hDC, HORZRES);
122 SetMapMode(wxMM_TEXT);
123 }
124 SetBrush(*wxBLACK_BRUSH);
125 SetPen(*wxBLACK_PEN);
e1a688e4 126} // end of wxPrinterDC::wxPrinterDC
27476f73 127
e1a688e4
DW
128wxPrinterDC::wxPrinterDC(
129 const wxPrintData& rPrintData
130)
27476f73 131{
e1a688e4 132 m_printData = rPrintData;
27476f73 133 m_isInteractive = FALSE;
e1a688e4 134 m_hDC = wxGetPrinterDC(rPrintData);
27476f73 135 m_ok = (m_hDC != 0);
27476f73
DW
136 if (m_hDC)
137 SetMapMode(wxMM_TEXT);
27476f73
DW
138 SetBrush(*wxBLACK_BRUSH);
139 SetPen(*wxBLACK_PEN);
e1a688e4 140} // end of wxPrinterDC::wxPrinterDC
27476f73 141
e1a688e4
DW
142wxPrinterDC::wxPrinterDC(
143 WXHDC hTheDC
144)
27476f73
DW
145{
146 m_isInteractive = FALSE;
e1a688e4 147 m_hDC = hTheDC;
27476f73
DW
148 m_ok = TRUE;
149 if (m_hDC)
150 {
27476f73
DW
151 SetMapMode(wxMM_TEXT);
152 }
153 SetBrush(*wxBLACK_BRUSH);
154 SetPen(*wxBLACK_PEN);
e1a688e4 155} // end of wxPrinterDC::wxPrinterDC
27476f73 156
e1a688e4 157void wxPrinterDC::Init()
27476f73 158{
e1a688e4
DW
159 if (m_hDC)
160 {
161 SetMapMode(wxMM_TEXT);
27476f73 162
e1a688e4
DW
163 SetBrush(*wxBLACK_BRUSH);
164 SetPen(*wxBLACK_PEN);
165 }
166} // end of wxPrinterDC::Init
167
168bool wxPrinterDC::StartDoc(
169 const wxString& rsMessage
170)
27476f73
DW
171{
172/* TODO: PM's implementation
173 DOCINFO docinfo;
174 docinfo.cbSize = sizeof(DOCINFO);
175 docinfo.lpszDocName = (const wxChar*)message;
176
177 wxString filename(m_printData.GetFilename());
178
179 if (filename.IsEmpty())
180 docinfo.lpszOutput = NULL;
181 else
182 docinfo.lpszOutput = (const wxChar *) filename;
183
184#if defined(__WIN95__)
185 docinfo.lpszDatatype = NULL;
186 docinfo.fwType = 0;
187#endif
188
189 if (!m_hDC)
190 return FALSE;
191
192 int ret =
193#ifndef __WIN32__
194 ::StartDoc((HDC) m_hDC, &docinfo);
195#else
196#ifdef UNICODE
197 ::StartDocW((HDC) m_hDC, &docinfo);
198#else
199#ifdef __TWIN32__
200 ::StartDoc((HDC) m_hDC, &docinfo);
201#else
202 ::StartDocA((HDC) m_hDC, &docinfo);
203#endif
204#endif
205#endif
206
207#ifndef __WIN16__
208 if (ret <= 0)
209 {
210 DWORD lastError = GetLastError();
223d09f6 211 wxLogDebug(wxT("wxDC::StartDoc failed with error: %d\n"), lastError);
27476f73
DW
212 }
213#endif
214 return (ret > 0);
215*/
216 return(TRUE);
e1a688e4 217} // end of wxPrinterDC::StartDoc
27476f73 218
e1a688e4 219void wxPrinterDC::EndDoc()
27476f73
DW
220{
221// if (m_hDC) ::EndDoc((HDC) m_hDC);
e1a688e4 222} // end of wxPrinterDC::EndDoc
27476f73 223
e1a688e4 224void wxPrinterDC::StartPage()
27476f73
DW
225{
226// if (m_hDC)
227// ::StartPage((HDC) m_hDC);
e1a688e4 228} // end of wxPrinterDC::StartPage
27476f73 229
e1a688e4 230void wxPrinterDC::EndPage()
27476f73
DW
231{
232// if (m_hDC)
233// ::EndPage((HDC) m_hDC);
e1a688e4 234} // end of wxPrinterDC::EndPage
27476f73
DW
235
236// Returns default device and port names
e1a688e4
DW
237static bool wxGetDefaultDeviceName(
238 wxString& rsDeviceName
239, wxString& rsPortName
240)
27476f73 241{
e1a688e4 242 rsDeviceName = "";
27476f73
DW
243/*
244 LPDEVNAMES lpDevNames;
245 LPSTR lpszDriverName;
246 LPSTR lpszDeviceName;
247 LPSTR lpszPortName;
248
249 PRINTDLG pd;
250
251 // Cygwin has trouble believing PRINTDLG is 66 bytes - thinks it is 68
252#ifdef __GNUWIN32__
253 pd.lStructSize = 66; // sizeof(PRINTDLG);
254#else
255 pd.lStructSize = sizeof(PRINTDLG);
256#endif
257
258 pd.hwndOwner = (HWND)NULL;
259 pd.hDevMode = NULL; // Will be created by PrintDlg
260 pd.hDevNames = NULL; // Ditto
261 pd.Flags = PD_RETURNDEFAULT;
262 pd.nCopies = 1;
263
264 if (!PrintDlg((LPPRINTDLG)&pd))
265 {
266 if ( pd.hDevMode )
267 GlobalFree(pd.hDevMode);
268 if (pd.hDevNames)
269 GlobalFree(pd.hDevNames);
270
271 return FALSE;
272 }
273
274 if (pd.hDevNames)
275 {
276 lpDevNames = (LPDEVNAMES)GlobalLock(pd.hDevNames);
277 lpszDriverName = (LPSTR)lpDevNames + lpDevNames->wDriverOffset;
278 lpszDeviceName = (LPSTR)lpDevNames + lpDevNames->wDeviceOffset;
279 lpszPortName = (LPSTR)lpDevNames + lpDevNames->wOutputOffset;
280 GlobalUnlock(pd.hDevNames);
281 GlobalFree(pd.hDevNames);
282 pd.hDevNames=NULL;
283
284 deviceName = lpszDeviceName;
285 portName = lpszPortName;
286 }
287
288 if (pd.hDevMode)
289 {
290 GlobalFree(pd.hDevMode);
291 pd.hDevMode=NULL;
292 }
223d09f6 293 return ( deviceName != wxT("") );
27476f73
DW
294*/
295 return(TRUE);
e1a688e4 296} // end of wxGetDefaultDeviceName
27476f73
DW
297
298// Gets an HDC for the specified printer configuration
e1a688e4
DW
299WXHDC WXDLLEXPORT wxGetPrinterDC(
300 const wxPrintData& rPrintDataConst
301)
27476f73 302{
9dea36ef 303 HDC hDC = NULLHANDLE;
27476f73
DW
304/*
305 wxPrintData printData = printDataConst;
306 printData.ConvertToNative();
307
308 wxChar* driverName = (wxChar*) NULL;
309
310 wxString devNameStr = printData.GetPrinterName();
311 wxChar* deviceName;
312 wxChar* portName = (wxChar*) NULL; // Obsolete in WIN32
313
223d09f6 314 if (devNameStr == wxT(""))
27476f73
DW
315 deviceName = (wxChar*) NULL;
316 else
317 deviceName = WXSTRINGCAST devNameStr;
318
319 LPDEVMODE lpDevMode = (LPDEVMODE) NULL;
320
321 HGLOBAL hDevMode = (HGLOBAL)(DWORD) printData.GetNativeData();
322
323 if ( hDevMode )
324 lpDevMode = (DEVMODE*) GlobalLock(hDevMode);
325
223d09f6 326 if (devNameStr == wxT(""))
27476f73
DW
327 {
328 // Retrieve the default device name
329 wxString portName;
330 bool ret = wxGetDefaultDeviceName(devNameStr, portName);
331
223d09f6 332 wxASSERT_MSG( ret, wxT("Could not get default device name.") );
27476f73
DW
333
334 deviceName = WXSTRINGCAST devNameStr;
335 }
336
337#ifdef __WIN32__
338 HDC hDC = CreateDC(driverName, deviceName, portName, (DEVMODE *) lpDevMode);
339#else
340 HDC hDC = CreateDC(driverName, deviceName, portName, (LPSTR) lpDevMode);
341#endif
342
343 if (hDevMode && lpDevMode)
344 GlobalUnlock(hDevMode);
345*/
346 return (WXHDC) hDC;
e1a688e4
DW
347} // end of wxGetPrinterDC
348
349void wxPrinterDC::DoDrawBitmap(
350 const wxBitmap& rBmp
351, wxCoord vX
352, wxCoord vY
353, bool bUseMask
354)
355{
356 wxCHECK_RET( rBmp.Ok(), _T("invalid bitmap in wxPrinterDC::DrawBitmap") );
357
358 int nWidth = rBmp.GetWidth();
359 int nHeight = rBmp.GetHeight();
360
361 // TODO:
362
363} // end of wxPrinterDC::DoDrawBitmap
364
365bool wxPrinterDC::DoBlit(
366 wxCoord vXdest
367, wxCoord vYdest
368, wxCoord vWidth
369, wxCoord vHeight
370, wxDC* pSource
371, wxCoord vXsrc
372, wxCoord vYsrc
373, int nRop
374, bool bUseMask
375)
376{
377 bool bSuccess = TRUE;
378
379 // TODO:
380
381 return bSuccess;
382} // end of wxPrintDC::DoBlit
383
27476f73 384
7e99520b 385#endif //wxUSE_PRINTING_ARCHITECTURE