]> Pileus Git - ~andy/gtk/blob - gtk/gtkprint-win32.c
Revert name change
[~andy/gtk] / gtk / gtkprint-win32.c
1 /* GTK - The GIMP Toolkit
2  * gtkprintoperation.c: Print Operation
3  * Copyright (C) 2006, Red Hat, Inc.
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the
17  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18  * Boston, MA 02111-1307, USA.
19  */
20
21 #ifndef _MSC_VER
22 #define _WIN32_WINNT 0x0500
23 #define WINVER _WIN32_WINNT
24 #endif
25
26 #include "config.h"
27 #include "gtkprint-win32.h"
28 #include "gtkalias.h"
29
30 void
31 gtk_print_win32_devnames_free (GtkPrintWin32Devnames *devnames)
32 {
33   g_free (devnames->driver);
34   g_free (devnames->device);
35   g_free (devnames->output);
36   g_free (devnames);
37 }
38
39 GtkPrintWin32Devnames *
40 gtk_print_win32_devnames_from_win32 (HGLOBAL global)
41 {
42   LPDEVNAMES win = GlobalLock (global);
43   gunichar2 *data = (gunichar2 *)win;
44   GtkPrintWin32Devnames *devnames = g_new (GtkPrintWin32Devnames, 1);
45   
46   devnames->driver = g_utf16_to_utf8 (data + win->wDriverOffset, 
47                                       -1, NULL, NULL, NULL);
48   devnames->device = g_utf16_to_utf8 (data + win->wDeviceOffset, 
49                                       -1, NULL, NULL, NULL);
50   devnames->output = g_utf16_to_utf8 (data + win->wOutputOffset, 
51                                       -1, NULL, NULL, NULL);
52   devnames->flags = win->wDefault;
53   
54   GlobalUnlock (global);
55
56   return devnames;
57 }
58
59 HGLOBAL 
60 gtk_print_win32_devnames_to_win32 (const GtkPrintWin32Devnames *devnames)
61 {
62   HGLOBAL global;
63   LPDEVNAMES windevnames;
64   gunichar2 *data;
65   gunichar2 *driver, *device, *output;
66   glong driver_len, device_len, output_len;
67   int i;
68
69   driver = g_utf8_to_utf16 (devnames->driver, -1, NULL, &driver_len, NULL);
70   device = g_utf8_to_utf16 (devnames->device, -1, NULL, &device_len, NULL);
71   output = g_utf8_to_utf16 (devnames->output, -1, NULL, &output_len, NULL);
72
73   global = GlobalAlloc (GMEM_MOVEABLE, 
74                         sizeof (DEVNAMES) + 
75                         (driver_len + 1) * 2 + 
76                         (device_len + 1) * 2 +
77                         (output_len + 1) * 2);
78
79   windevnames = GlobalLock (global);
80   data = (gunichar2 *)windevnames;
81   i = sizeof(DEVNAMES) / sizeof (gunichar2);
82
83   windevnames->wDriverOffset = i;
84   memcpy (data + i, driver, (driver_len + 1) * sizeof (gunichar2));
85   i += driver_len + 1;
86   windevnames->wDeviceOffset = i;
87   memcpy (data + i, device, (device_len + 1) * sizeof (gunichar2));
88   i += device_len + 1;
89   windevnames->wOutputOffset = i;
90   memcpy (data + i, output, (output_len + 1) * sizeof (gunichar2));
91   i += output_len + 1;
92   windevnames->wDefault = devnames->flags;
93   GlobalUnlock (global);
94
95   g_free (driver);
96   g_free (device);
97   g_free (output);
98
99   return global;
100 }
101
102 HGLOBAL 
103 gtk_print_win32_devnames_from_printer_name (const char *printer)
104 {
105   const GtkPrintWin32Devnames devnames = { "", (char *)printer, "", 0 };
106   return gtk_print_win32_devnames_to_win32 (&devnames);
107 }
108
109
110 #define __GTK_PRINT_WIN32_C__
111 #include "gtkaliasdef.c"