wrb 2.0.0
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 +7 -0
- data/README +28 -0
- data/Rakefile +66 -0
- data/bin/wrb +41 -0
- data/bin/wrb.bat +6 -0
- data/ext/rwin/aatree.c +192 -0
- data/ext/rwin/aatree.h +55 -0
- data/ext/rwin/extconf.rb +47 -0
- data/ext/rwin/rw_api.c +2058 -0
- data/ext/rwin/rw_devices.c +215 -0
- data/ext/rwin/rw_gdiplus.h +278 -0
- data/ext/rwin/rw_graphics.c +1583 -0
- data/ext/rwin/rw_resources.c +1988 -0
- data/ext/rwin/rw_ubfuncs.c +281 -0
- data/ext/rwin/rw_windows.c +1936 -0
- data/ext/rwin/rwin.c +451 -0
- data/ext/rwin/rwin.h +442 -0
- data/lib/rwin.rb +820 -0
- data/lib/wrb.rb +20 -0
- data/lib/wrb/applications/frmdesigner/angle.cur +0 -0
- data/lib/wrb/applications/frmdesigner/angle2.cur +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Button.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Button.rb +34 -0
- data/lib/wrb/applications/frmdesigner/controls/Checkbox.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Checkbox.rb +10 -0
- data/lib/wrb/applications/frmdesigner/controls/Combobox.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Combobox.rb +88 -0
- data/lib/wrb/applications/frmdesigner/controls/ComboboxEx.rb +97 -0
- data/lib/wrb/applications/frmdesigner/controls/Comboboxex.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/DateTimePicker.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/DateTimePicker.rb +11 -0
- data/lib/wrb/applications/frmdesigner/controls/Edit.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Edit.rb +8 -0
- data/lib/wrb/applications/frmdesigner/controls/Groupbox.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Groupbox.rb +9 -0
- data/lib/wrb/applications/frmdesigner/controls/Hotkeyctrl.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Hotkeyctrl.rb +9 -0
- data/lib/wrb/applications/frmdesigner/controls/Imagelist.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Imagelist.rb +115 -0
- data/lib/wrb/applications/frmdesigner/controls/Listbox.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Listbox.rb +77 -0
- data/lib/wrb/applications/frmdesigner/controls/Listview.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Listview.rb +157 -0
- data/lib/wrb/applications/frmdesigner/controls/Menu.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Menu.rb +198 -0
- data/lib/wrb/applications/frmdesigner/controls/Menubar.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Menubar.rb +9 -0
- data/lib/wrb/applications/frmdesigner/controls/MonthCalender.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Monthcalender.rb +9 -0
- data/lib/wrb/applications/frmdesigner/controls/Panel.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Panel.rb +30 -0
- data/lib/wrb/applications/frmdesigner/controls/Progressbar.rb +10 -0
- data/lib/wrb/applications/frmdesigner/controls/Radiobutton.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Radiobutton.rb +13 -0
- data/lib/wrb/applications/frmdesigner/controls/Rebar.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Rebar.rb +162 -0
- data/lib/wrb/applications/frmdesigner/controls/Splitter.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Splitter.rb +66 -0
- data/lib/wrb/applications/frmdesigner/controls/Static.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Static.rb +9 -0
- data/lib/wrb/applications/frmdesigner/controls/Statusbar.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Statusbar.rb +103 -0
- data/lib/wrb/applications/frmdesigner/controls/Tabctrl.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Tabctrl.rb +136 -0
- data/lib/wrb/applications/frmdesigner/controls/Timer.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Timer.rb +36 -0
- data/lib/wrb/applications/frmdesigner/controls/Toolbar.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Toolbar.rb +165 -0
- data/lib/wrb/applications/frmdesigner/controls/Trackbar.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Trackbar.rb +34 -0
- data/lib/wrb/applications/frmdesigner/controls/Treeview.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Treeview.rb +107 -0
- data/lib/wrb/applications/frmdesigner/controls/Updown.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/Updown.rb +31 -0
- data/lib/wrb/applications/frmdesigner/controls/default.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/progressbar.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/controls/unselect.bmp +0 -0
- data/lib/wrb/applications/frmdesigner/fddialogs.rb +87 -0
- data/lib/wrb/applications/frmdesigner/fdesign.rb +1315 -0
- data/lib/wrb/applications/frmdesigner/fdmodules.rb +1394 -0
- data/lib/wrb/applications/frmdesigner/fdparseform.rb +197 -0
- data/lib/wrb/applications/frmdesigner/img13.bmp +0 -0
- data/lib/wrb/base.rb +1294 -0
- data/lib/wrb/combocommon.rb +77 -0
- data/lib/wrb/commctrlconst.rb +139 -0
- data/lib/wrb/commdlg.rb +77 -0
- data/lib/wrb/components/animate.rb +114 -0
- data/lib/wrb/components/bitmap.rb +116 -0
- data/lib/wrb/components/button.rb +134 -0
- data/lib/wrb/components/canvas.rb +266 -0
- data/lib/wrb/components/checkbox.rb +118 -0
- data/lib/wrb/components/choosecolordlg.rb +87 -0
- data/lib/wrb/components/choosefontdlg.rb +142 -0
- data/lib/wrb/components/clipboard.rb +174 -0
- data/lib/wrb/components/combobox.rb +282 -0
- data/lib/wrb/components/comboboxex.rb +574 -0
- data/lib/wrb/components/cursor.rb +91 -0
- data/lib/wrb/components/datetimepicker.rb +197 -0
- data/lib/wrb/components/ddeclient.rb +180 -0
- data/lib/wrb/components/ddeserver.rb +131 -0
- data/lib/wrb/components/dialog.rb +228 -0
- data/lib/wrb/components/edit.rb +412 -0
- data/lib/wrb/components/font.rb +35 -0
- data/lib/wrb/components/form.rb +65 -0
- data/lib/wrb/components/groupbox.rb +122 -0
- data/lib/wrb/components/header.rb +479 -0
- data/lib/wrb/components/hotkeyctrl.rb +72 -0
- data/lib/wrb/components/icon.rb +109 -0
- data/lib/wrb/components/imagelist.rb +396 -0
- data/lib/wrb/components/inifile.rb +97 -0
- data/lib/wrb/components/listbox.rb +149 -0
- data/lib/wrb/components/listview.rb +1467 -0
- data/lib/wrb/components/menu.rb +592 -0
- data/lib/wrb/components/menubar.rb +84 -0
- data/lib/wrb/components/monthcalender.rb +164 -0
- data/lib/wrb/components/openfilenamedlg.rb +147 -0
- data/lib/wrb/components/pager.rb +199 -0
- data/lib/wrb/components/panel.rb +103 -0
- data/lib/wrb/components/picture.rb +55 -0
- data/lib/wrb/components/printdlg.rb +148 -0
- data/lib/wrb/components/printdlgex.rb +117 -0
- data/lib/wrb/components/printer.rb +97 -0
- data/lib/wrb/components/progressbar.rb +140 -0
- data/lib/wrb/components/radiobutton.rb +49 -0
- data/lib/wrb/components/rebar.rb +830 -0
- data/lib/wrb/components/registry.rb +408 -0
- data/lib/wrb/components/richedit.rb +1181 -0
- data/lib/wrb/components/savefilenamedlg.rb +27 -0
- data/lib/wrb/components/scintilla.rb +1298 -0
- data/lib/wrb/components/scrollbar.rb +239 -0
- data/lib/wrb/components/splitter.rb +494 -0
- data/lib/wrb/components/static.rb +198 -0
- data/lib/wrb/components/statusbar.rb +490 -0
- data/lib/wrb/components/tabctrl.rb +686 -0
- data/lib/wrb/components/timer.rb +117 -0
- data/lib/wrb/components/toolbar.rb +1107 -0
- data/lib/wrb/components/tooltip.rb +651 -0
- data/lib/wrb/components/trackbar.rb +298 -0
- data/lib/wrb/components/treeview.rb +845 -0
- data/lib/wrb/components/updown.rb +198 -0
- data/lib/wrb/ddeml.rb +241 -0
- data/lib/wrb/documents/animate.html +46 -0
- data/lib/wrb/documents/bitmap.html +69 -0
- data/lib/wrb/documents/button.html +78 -0
- data/lib/wrb/documents/canvas.html +137 -0
- data/lib/wrb/documents/checkbox.html +77 -0
- data/lib/wrb/documents/choosecolordlg.html +29 -0
- data/lib/wrb/documents/choosefontdlg.html +31 -0
- data/lib/wrb/documents/clipboard.html +31 -0
- data/lib/wrb/documents/combobox.html +117 -0
- data/lib/wrb/documents/comboboxex.html +139 -0
- data/lib/wrb/documents/control.html +53 -0
- data/lib/wrb/documents/cursor.html +45 -0
- data/lib/wrb/documents/datetimepicker.html +70 -0
- data/lib/wrb/documents/ddeclient.html +33 -0
- data/lib/wrb/documents/ddeserver.html +26 -0
- data/lib/wrb/documents/dialog.html +78 -0
- data/lib/wrb/documents/edit.html +169 -0
- data/lib/wrb/documents/empty.html +11 -0
- data/lib/wrb/documents/favicon.png +0 -0
- data/lib/wrb/documents/font.html +38 -0
- data/lib/wrb/documents/form.html +63 -0
- data/lib/wrb/documents/groupbox.html +57 -0
- data/lib/wrb/documents/header.html +85 -0
- data/lib/wrb/documents/hotkeyctrl.html +42 -0
- data/lib/wrb/documents/icon.html +45 -0
- data/lib/wrb/documents/imagelist.html +101 -0
- data/lib/wrb/documents/images/button.png +0 -0
- data/lib/wrb/documents/images/checkbox.png +0 -0
- data/lib/wrb/documents/images/combobox.png +0 -0
- data/lib/wrb/documents/images/comboboxex.png +0 -0
- data/lib/wrb/documents/images/datetimepicker.png +0 -0
- data/lib/wrb/documents/images/edit.png +0 -0
- data/lib/wrb/documents/images/groupbox.png +0 -0
- data/lib/wrb/documents/images/hotkeyctrl.png +0 -0
- data/lib/wrb/documents/images/listbox.png +0 -0
- data/lib/wrb/documents/images/listview.png +0 -0
- data/lib/wrb/documents/images/menu.png +0 -0
- data/lib/wrb/documents/images/menubar.png +0 -0
- data/lib/wrb/documents/images/monthcalender.png +0 -0
- data/lib/wrb/documents/images/progressbar.png +0 -0
- data/lib/wrb/documents/images/radiobutton.png +0 -0
- data/lib/wrb/documents/images/rebar.png +0 -0
- data/lib/wrb/documents/images/richedit.png +0 -0
- data/lib/wrb/documents/images/splitter.png +0 -0
- data/lib/wrb/documents/images/static.png +0 -0
- data/lib/wrb/documents/images/statusbar.png +0 -0
- data/lib/wrb/documents/images/tabctrl.png +0 -0
- data/lib/wrb/documents/images/toolbar.png +0 -0
- data/lib/wrb/documents/images/tooltip.png +0 -0
- data/lib/wrb/documents/images/trackbar.png +0 -0
- data/lib/wrb/documents/images/treeview.png +0 -0
- data/lib/wrb/documents/images/updown.png +0 -0
- data/lib/wrb/documents/index.html +155 -0
- data/lib/wrb/documents/inifile.html +36 -0
- data/lib/wrb/documents/license.txt +22 -0
- data/lib/wrb/documents/listbox.html +96 -0
- data/lib/wrb/documents/listview.html +277 -0
- data/lib/wrb/documents/make_doc.rb +596 -0
- data/lib/wrb/documents/menu.html +144 -0
- data/lib/wrb/documents/menubar.html +54 -0
- data/lib/wrb/documents/monthcalender.html +48 -0
- data/lib/wrb/documents/openfilenamedlg.html +36 -0
- data/lib/wrb/documents/pager.html +63 -0
- data/lib/wrb/documents/panel.html +32 -0
- data/lib/wrb/documents/picture.html +48 -0
- data/lib/wrb/documents/printdlg.html +35 -0
- data/lib/wrb/documents/printdlgex.html +35 -0
- data/lib/wrb/documents/printer.html +40 -0
- data/lib/wrb/documents/progressbar.html +69 -0
- data/lib/wrb/documents/radiobutton.html +51 -0
- data/lib/wrb/documents/rebar.html +143 -0
- data/lib/wrb/documents/registry.html +36 -0
- data/lib/wrb/documents/richedit.html +232 -0
- data/lib/wrb/documents/samples/editimg.bmp +0 -0
- data/lib/wrb/documents/samples/editimg.iml +0 -0
- data/lib/wrb/documents/samples/fileimg.bmp +0 -0
- data/lib/wrb/documents/samples/fileimg.iml +0 -0
- data/lib/wrb/documents/samples/sample_button.rb +21 -0
- data/lib/wrb/documents/samples/sample_checkbox.rb +18 -0
- data/lib/wrb/documents/samples/sample_combobox.rb +18 -0
- data/lib/wrb/documents/samples/sample_comboboxex.rb +23 -0
- data/lib/wrb/documents/samples/sample_datetimepicker.rb +11 -0
- data/lib/wrb/documents/samples/sample_edit.rb +25 -0
- data/lib/wrb/documents/samples/sample_groupbox.rb +19 -0
- data/lib/wrb/documents/samples/sample_hotkeyctrl.rb +12 -0
- data/lib/wrb/documents/samples/sample_listbox.rb +12 -0
- data/lib/wrb/documents/samples/sample_listview.rb +32 -0
- data/lib/wrb/documents/samples/sample_menu.rb +21 -0
- data/lib/wrb/documents/samples/sample_menubar.rb +23 -0
- data/lib/wrb/documents/samples/sample_monthcalender.rb +11 -0
- data/lib/wrb/documents/samples/sample_progressbar.rb +14 -0
- data/lib/wrb/documents/samples/sample_radiobutton.rb +14 -0
- data/lib/wrb/documents/samples/sample_rebar.rb +25 -0
- data/lib/wrb/documents/samples/sample_richedit.rb +60 -0
- data/lib/wrb/documents/samples/sample_splitter.rb +33 -0
- data/lib/wrb/documents/samples/sample_static.rb +15 -0
- data/lib/wrb/documents/samples/sample_statusbar.rb +17 -0
- data/lib/wrb/documents/samples/sample_tabctrl.rb +19 -0
- data/lib/wrb/documents/samples/sample_toolbar.rb +29 -0
- data/lib/wrb/documents/samples/sample_tooltip.rb +50 -0
- data/lib/wrb/documents/samples/sample_trackbar.rb +30 -0
- data/lib/wrb/documents/samples/sample_treeview.rb +19 -0
- data/lib/wrb/documents/samples/sample_updown.rb +18 -0
- data/lib/wrb/documents/samples/sampleimg16.iml +0 -0
- data/lib/wrb/documents/samples/sampleimg32.iml +0 -0
- data/lib/wrb/documents/samples/samplemg16.png +0 -0
- data/lib/wrb/documents/samples/samplemg32.png +0 -0
- data/lib/wrb/documents/samples/wrb.ico +0 -0
- data/lib/wrb/documents/savefilenamedlg.html +19 -0
- data/lib/wrb/documents/scrollbar.html +60 -0
- data/lib/wrb/documents/splitter.html +96 -0
- data/lib/wrb/documents/static.html +84 -0
- data/lib/wrb/documents/statusbar.html +110 -0
- data/lib/wrb/documents/tabctrl.html +151 -0
- data/lib/wrb/documents/timer.html +43 -0
- data/lib/wrb/documents/toolbar.html +181 -0
- data/lib/wrb/documents/tooltip.html +131 -0
- data/lib/wrb/documents/trackbar.html +107 -0
- data/lib/wrb/documents/treeview.html +210 -0
- data/lib/wrb/documents/updown.html +85 -0
- data/lib/wrb/documents/wincontrol.html +258 -0
- data/lib/wrb/documents/window.html +499 -0
- data/lib/wrb/documents/wrb.css +228 -0
- data/lib/wrb/gmem.rb +26 -0
- data/lib/wrb/imecommon.rb +59 -0
- data/lib/wrb/listcommon.rb +185 -0
- data/lib/wrb/lzss.rb +126 -0
- data/lib/wrb/scrollinfo.rb +142 -0
- data/lib/wrb/toplevelcommon.rb +634 -0
- metadata +315 -0
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/*
|
|
2
|
+
# Project WRB was forked from Project VisualuRuby(temp-name).
|
|
3
|
+
# Author of this project: BANJO Koyu <banjokoyu at gmail.com>
|
|
4
|
+
# The URL of this project: https://bitbucket.org/wrb/
|
|
5
|
+
#
|
|
6
|
+
# This is a ext-library part of WRB.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/* Printer etc... which has hdc */
|
|
10
|
+
#include "rwin.h"
|
|
11
|
+
|
|
12
|
+
typedef struct {
|
|
13
|
+
HDC hdc;
|
|
14
|
+
DEVMODE *devmode;
|
|
15
|
+
} RwPrinter;
|
|
16
|
+
|
|
17
|
+
VALUE cRwPrinter;
|
|
18
|
+
|
|
19
|
+
void
|
|
20
|
+
rwpriner_free(void* ptr){
|
|
21
|
+
if(ptr){
|
|
22
|
+
RwPrinter* rp = ptr;
|
|
23
|
+
if(rp->hdc)DeleteDC(rp->hdc);
|
|
24
|
+
if(rp->devmode) free(rp->devmode);
|
|
25
|
+
free(rp);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
static size_t
|
|
30
|
+
rwprinter_memsize(const void *ptr){
|
|
31
|
+
return ptr ? sizeof(RwPrinter) : 0;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const rb_data_type_t
|
|
35
|
+
rwprinter_data_type = {
|
|
36
|
+
"Printer", {NULL, rwpriner_free, rwprinter_memsize}, NULL, NULL
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
#define RwPrinter_Data_Make_Struct(obj, sval) \
|
|
40
|
+
TypedData_Make_Struct(obj, RwPrinter, &rwprinter_data_type, sval)
|
|
41
|
+
|
|
42
|
+
#define RwPrinter_Data_Get_Struct(obj, sval) \
|
|
43
|
+
TypedData_Get_Struct(obj, RwPrinter, &rwprinter_data_type, sval)
|
|
44
|
+
|
|
45
|
+
static VALUE
|
|
46
|
+
alloc_rwpriner(VALUE klass){
|
|
47
|
+
RwPrinter *rp;
|
|
48
|
+
VALUE robj = RwPrinter_Data_Make_Struct(klass, rp);
|
|
49
|
+
rp->hdc = 0;
|
|
50
|
+
rp->devmode = NULL;
|
|
51
|
+
return robj;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
static DEVMODE*
|
|
55
|
+
get_devmode_from_name(TCHAR *pname){
|
|
56
|
+
int neeeded_len;
|
|
57
|
+
HANDLE hprinter;
|
|
58
|
+
HGLOBAL hgmmem;
|
|
59
|
+
DEVMODE *pdevmode;
|
|
60
|
+
if(!OpenPrinter(pname, &hprinter, NULL)) rb_raise(rb_eRuntimeError, "could't open printer");
|
|
61
|
+
neeeded_len = DocumentProperties(NULL, hprinter, pname, NULL, NULL, 0);
|
|
62
|
+
hgmmem = GlobalAlloc(GHND, neeeded_len);
|
|
63
|
+
pdevmode = GlobalLock(hgmmem);
|
|
64
|
+
DocumentProperties(NULL, hprinter, pname, pdevmode, NULL, DM_OUT_BUFFER);
|
|
65
|
+
return pdevmode;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
static VALUE
|
|
69
|
+
rwprinter_initialize(VALUE self, VALUE v_device){
|
|
70
|
+
HGLOBAL hdevmode;
|
|
71
|
+
DEVMODE *pdevmode;
|
|
72
|
+
RwPrinter *rp = DATA_PTR(self);
|
|
73
|
+
RW_CALLOC(rp->devmode, sizeof(DEVMODE));
|
|
74
|
+
switch(TYPE(v_device)){
|
|
75
|
+
case T_FIXNUM: case T_BIGNUM:
|
|
76
|
+
hdevmode = (HANDLE)NUM2HANDLE(v_device);
|
|
77
|
+
if(pdevmode = GlobalLock(hdevmode)){
|
|
78
|
+
memcpy(rp->devmode, pdevmode, sizeof(DEVMODE));
|
|
79
|
+
GlobalUnlock(hdevmode);
|
|
80
|
+
break;
|
|
81
|
+
} else {
|
|
82
|
+
rb_raise(rb_eArgError, "invalid handle (perhaps not of DEVMODE)");
|
|
83
|
+
}
|
|
84
|
+
case T_STRING:
|
|
85
|
+
if(pdevmode = get_devmode_from_name(rw_str2tchar(v_device))){
|
|
86
|
+
memcpy(rp->devmode, pdevmode, sizeof(DEVMODE));
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
case T_DATA:
|
|
90
|
+
if(rb_typeddata_is_kind_of(v_device, &cstruct_data_type)){
|
|
91
|
+
CStructData *cs;
|
|
92
|
+
CStruct_Data_Get_Struct(v_device, cs);
|
|
93
|
+
if (cs->dtlen != sizeof(DEVMODE)){
|
|
94
|
+
rb_raise(rb_eArgError, "Size of DEVMODE different: ecpected %d, but got %d",
|
|
95
|
+
(int)sizeof(DEVMODE), (int)cs->dtlen);
|
|
96
|
+
}
|
|
97
|
+
memcpy(rp->devmode, cs->dtstr+cs->dtoffset, cs->dtlen);
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
default:
|
|
101
|
+
rb_raise(rb_eArgError, "invalid device type:%s", RSTRING_PTR(rb_inspect(v_device)));
|
|
102
|
+
}
|
|
103
|
+
return self;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
static VALUE
|
|
107
|
+
rwprinter_open(VALUE self){
|
|
108
|
+
RwPrinter *rp = DATA_PTR(self);
|
|
109
|
+
if(!rp->hdc){
|
|
110
|
+
rp->hdc = CreateDC(TEXT("WINSPOOL"), (TCHAR*)rp->devmode->dmDeviceName, NULL,
|
|
111
|
+
rp->devmode);
|
|
112
|
+
if(!rp->hdc) rb_raise(rb_eRuntimeError, "failed to CreateDC");
|
|
113
|
+
} else {
|
|
114
|
+
rb_warn("Already printer was opend");
|
|
115
|
+
}
|
|
116
|
+
if(rb_block_given_p()){
|
|
117
|
+
rb_yield(self);
|
|
118
|
+
DeleteDC(rp->hdc);
|
|
119
|
+
rp->hdc = 0;
|
|
120
|
+
}
|
|
121
|
+
return self;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
static VALUE
|
|
125
|
+
rwprinter_close(VALUE self){
|
|
126
|
+
RwPrinter *rp = DATA_PTR(self);
|
|
127
|
+
if(rp->hdc){
|
|
128
|
+
DeleteDC(rp->hdc);
|
|
129
|
+
rp->hdc = 0;
|
|
130
|
+
}
|
|
131
|
+
return self;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
static VALUE
|
|
135
|
+
v_cv1_nextpage(VALUE self){
|
|
136
|
+
RwCanvas *cv = DATA_PTR(self);
|
|
137
|
+
EndPage(cv->hdc);
|
|
138
|
+
StartPage(cv->hdc);
|
|
139
|
+
return self;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
static VALUE
|
|
143
|
+
v_cv1_abortdoc(VALUE self){
|
|
144
|
+
RwCanvas *cv = DATA_PTR(self);
|
|
145
|
+
AbortDoc(cv->hdc);
|
|
146
|
+
return self;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
static VALUE
|
|
150
|
+
rwprinter_print(int argc, VALUE *argv, VALUE self){
|
|
151
|
+
DOCINFO di;
|
|
152
|
+
VALUE v_docname, klass, v_cv;
|
|
153
|
+
RwPrinter *rp = DATA_PTR(self);
|
|
154
|
+
rb_scan_args(argc, argv, "11", &v_docname, &klass);
|
|
155
|
+
if(!rp->hdc) rb_raise(rb_eRuntimeError, "Printer not opened");
|
|
156
|
+
if(!rb_block_given_p()) rb_raise(rb_eRuntimeError, "Need block");
|
|
157
|
+
ZeroMemory(&di, sizeof(DOCINFO));
|
|
158
|
+
di.cbSize = sizeof(DOCINFO);
|
|
159
|
+
di.lpszDocName = rw_str2tchar(v_docname);
|
|
160
|
+
v_cv = rwcvs_new_from_hdc(NIL_P(klass) ? cRwCanvas : klass, rp->hdc);
|
|
161
|
+
rb_define_singleton_method(v_cv, "NextPage", v_cv1_nextpage, 0);
|
|
162
|
+
rb_define_singleton_method(v_cv, "AbortDoc", v_cv1_abortdoc, 0);
|
|
163
|
+
StartDoc(rp->hdc, &di);
|
|
164
|
+
StartPage(rp->hdc);
|
|
165
|
+
rb_yield(v_cv);
|
|
166
|
+
EndPage(rp->hdc);
|
|
167
|
+
EndDoc(rp->hdc);
|
|
168
|
+
return self;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
static VALUE
|
|
172
|
+
rwprinter1_getdefaultptr(){
|
|
173
|
+
TCHAR *buff;
|
|
174
|
+
DWORD cch;
|
|
175
|
+
GetDefaultPrinter(NULL, &cch);
|
|
176
|
+
buff = alloca(cch*sizeof(WCHAR));
|
|
177
|
+
GetDefaultPrinter(buff, &cch);
|
|
178
|
+
return rw_encode_external(buff);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
static VALUE
|
|
182
|
+
rwprinter_getdevmode(VALUE self){
|
|
183
|
+
RwPrinter *rp = DATA_PTR(self);
|
|
184
|
+
if(rp->hdc) rb_raise(rb_eRuntimeError, "already printer opened, so can't retrieve devmode");
|
|
185
|
+
if(!rp->devmode) rb_raise(rb_eRuntimeError, "devmode not established");
|
|
186
|
+
return cstruct_wrapptr(ccsDEVMODE, (char*)rp->devmode, 0);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
static VALUE
|
|
190
|
+
rwprinter_gethdc(VALUE self){
|
|
191
|
+
RwPrinter *rp = DATA_PTR(self);
|
|
192
|
+
return ULONG_PTR2NUM((ULONG_PTR)rp->hdc);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
static void
|
|
197
|
+
rw_init_Printer(){
|
|
198
|
+
cRwPrinter = rb_define_class_under(mRwin, "Printer", rb_cData);
|
|
199
|
+
rb_define_alloc_func(cRwPrinter, alloc_rwpriner);
|
|
200
|
+
|
|
201
|
+
rb_define_method(cRwPrinter, "initialize", rwprinter_initialize, 1);
|
|
202
|
+
rb_define_method(cRwPrinter, "open", rwprinter_open, 0);
|
|
203
|
+
rb_define_method(cRwPrinter, "close", rwprinter_close, 0);
|
|
204
|
+
rb_define_method(cRwPrinter, "print", rwprinter_print, -1);
|
|
205
|
+
rb_define_method(cRwPrinter, "_devmode", rwprinter_getdevmode, 0);
|
|
206
|
+
rb_define_method(cRwPrinter, "_hdc", rwprinter_gethdc, 0);
|
|
207
|
+
|
|
208
|
+
/* API functions */
|
|
209
|
+
rb_define_singleton_method(cRwPrinter, "GetDefaultPrinter", rwprinter1_getdefaultptr, 0);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
void
|
|
213
|
+
Init_rw_devices(){
|
|
214
|
+
rw_init_Printer();
|
|
215
|
+
}
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
/*
|
|
2
|
+
# Project WRB was forked from Project VisualuRuby(temp-name).
|
|
3
|
+
# Author of this project: BANJO Koyu <banjokoyu at gmail.com>
|
|
4
|
+
# The URL of this project: https://bitbucket.org/wrb/
|
|
5
|
+
#
|
|
6
|
+
# This is a ext-library part of WRB.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
#ifndef __RW_GDIPLUS_H
|
|
10
|
+
#define __RW_GDIPLUS_H
|
|
11
|
+
|
|
12
|
+
#define WINGDIPAPI __stdcall
|
|
13
|
+
#define GDIPCONST const
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
typedef float REAL;
|
|
17
|
+
typedef DWORD ARGB;
|
|
18
|
+
typedef INT PixelFormat;
|
|
19
|
+
|
|
20
|
+
typedef void *DebugEventProc;
|
|
21
|
+
|
|
22
|
+
//typedef BOOL CALLBACK (*EnumerateMetafileProc)(EmfPlusRecordType,UINT,UINT,const BYTE*,VOID*);
|
|
23
|
+
|
|
24
|
+
typedef void *DrawImageAbort;
|
|
25
|
+
typedef void *GetThumbnailImageAbort;
|
|
26
|
+
typedef void *NotificationHookProc;
|
|
27
|
+
typedef void *NotificationUnhookProc;
|
|
28
|
+
|
|
29
|
+
typedef void CGpEffect;
|
|
30
|
+
typedef void GpAdjustableArrowCap;
|
|
31
|
+
typedef void GpBitmap;
|
|
32
|
+
typedef void GpBrush;
|
|
33
|
+
typedef void GpCachedBitmap;
|
|
34
|
+
typedef void GpCustomLineCap;
|
|
35
|
+
typedef void GpFont;
|
|
36
|
+
typedef void GpFontFamily;
|
|
37
|
+
typedef void GpFontCollection;
|
|
38
|
+
typedef void GpGraphics;
|
|
39
|
+
typedef void GpHatch;
|
|
40
|
+
typedef void GpImage;
|
|
41
|
+
typedef void GpImageAttributes;
|
|
42
|
+
typedef void GpLineGradient;
|
|
43
|
+
typedef void GpMatrix;
|
|
44
|
+
typedef void GpMetafile;
|
|
45
|
+
typedef void GpPath;
|
|
46
|
+
typedef void GpPathData;
|
|
47
|
+
typedef void GpPathGradient;
|
|
48
|
+
typedef void GpPathIterator;
|
|
49
|
+
typedef void GpPen;
|
|
50
|
+
typedef void GpRegion;
|
|
51
|
+
typedef void GpSolidFill;
|
|
52
|
+
typedef void GpStringFormat;
|
|
53
|
+
typedef void GpTexture;
|
|
54
|
+
|
|
55
|
+
typedef struct GdiplusStartupInput {
|
|
56
|
+
UINT32 GdiplusVersion;
|
|
57
|
+
DebugEventProc DebugEventCallback;
|
|
58
|
+
BOOL SuppressBackgroundThread;
|
|
59
|
+
BOOL SuppressExternalCodecs;
|
|
60
|
+
} GdiplusStartupInput;
|
|
61
|
+
|
|
62
|
+
typedef struct GdiplusStartupOutput {
|
|
63
|
+
NotificationHookProc NotificationHook;
|
|
64
|
+
NotificationUnhookProc NotificationUnhook;
|
|
65
|
+
} GdiplusStartupOutput;
|
|
66
|
+
typedef enum GpStatus {
|
|
67
|
+
Ok = 0,
|
|
68
|
+
GenericError = 1,
|
|
69
|
+
InvalidParameter = 2,
|
|
70
|
+
OutOfMemory = 3,
|
|
71
|
+
ObjectBusy = 4,
|
|
72
|
+
InsufficientBuffer = 5,
|
|
73
|
+
NotImplemented = 6,
|
|
74
|
+
Win32Error = 7,
|
|
75
|
+
WrongState = 8,
|
|
76
|
+
Aborted = 9,
|
|
77
|
+
FileNotFound = 10,
|
|
78
|
+
ValueOverflow = 11,
|
|
79
|
+
AccessDenied = 12,
|
|
80
|
+
UnknownImageFormat = 13,
|
|
81
|
+
FontFamilyNotFound = 14,
|
|
82
|
+
FontStyleNotFound = 15,
|
|
83
|
+
NotTrueTypeFont = 16,
|
|
84
|
+
UnsupportedGdiplusVersion = 17,
|
|
85
|
+
GdiplusNotInitialized = 18,
|
|
86
|
+
PropertyNotFound = 19,
|
|
87
|
+
PropertyNotSupported = 20,
|
|
88
|
+
ProfileNotFound = 21
|
|
89
|
+
} GpStatus;
|
|
90
|
+
|
|
91
|
+
typedef struct Size {
|
|
92
|
+
INT Width;
|
|
93
|
+
INT Height;
|
|
94
|
+
} Size;
|
|
95
|
+
|
|
96
|
+
typedef struct SizeF {
|
|
97
|
+
REAL Width;
|
|
98
|
+
REAL Height;
|
|
99
|
+
} SizeF;
|
|
100
|
+
|
|
101
|
+
typedef struct Point {
|
|
102
|
+
INT X;
|
|
103
|
+
INT Y;
|
|
104
|
+
} Point;
|
|
105
|
+
|
|
106
|
+
typedef struct PointF {
|
|
107
|
+
REAL X;
|
|
108
|
+
REAL Y;
|
|
109
|
+
} PointF;
|
|
110
|
+
|
|
111
|
+
typedef struct Rect {
|
|
112
|
+
INT X;
|
|
113
|
+
INT Y;
|
|
114
|
+
INT Width;
|
|
115
|
+
INT Height;
|
|
116
|
+
} Rect;
|
|
117
|
+
|
|
118
|
+
typedef struct RectF {
|
|
119
|
+
REAL X;
|
|
120
|
+
REAL Y;
|
|
121
|
+
REAL Width;
|
|
122
|
+
REAL Height;
|
|
123
|
+
} RectF;
|
|
124
|
+
|
|
125
|
+
typedef struct CharacterRange {
|
|
126
|
+
INT First;
|
|
127
|
+
INT Length;
|
|
128
|
+
} CharacterRange;
|
|
129
|
+
|
|
130
|
+
typedef struct PathData {
|
|
131
|
+
INT Count;
|
|
132
|
+
PointF *Points;
|
|
133
|
+
BYTE *Types;
|
|
134
|
+
} PathData;
|
|
135
|
+
|
|
136
|
+
typedef struct PropertyItem {
|
|
137
|
+
PROPID id;
|
|
138
|
+
ULONG length;
|
|
139
|
+
WORD type;
|
|
140
|
+
VOID *value;
|
|
141
|
+
} PropertyItem;
|
|
142
|
+
|
|
143
|
+
typedef enum RotateFlipType {
|
|
144
|
+
RotateNoneFlipNone = 0,
|
|
145
|
+
Rotate90FlipNone = 1,
|
|
146
|
+
Rotate180FlipNone = 2,
|
|
147
|
+
Rotate270FlipNone = 3,
|
|
148
|
+
RotateNoneFlipX = 4,
|
|
149
|
+
Rotate90FlipX = 5,
|
|
150
|
+
Rotate180FlipX = 6,
|
|
151
|
+
Rotate270FlipX = 7,
|
|
152
|
+
Rotate180FlipXY = 0,
|
|
153
|
+
Rotate270FlipXY = 1,
|
|
154
|
+
RotateNoneFlipXY = 2,
|
|
155
|
+
Rotate90FlipXY = 3,
|
|
156
|
+
Rotate180FlipY = 4,
|
|
157
|
+
Rotate270FlipY = 5,
|
|
158
|
+
RotateNoneFlipY = 6,
|
|
159
|
+
Rotate90FlipY = 7
|
|
160
|
+
} RotateFlipType;
|
|
161
|
+
|
|
162
|
+
typedef struct BitmapData {
|
|
163
|
+
UINT Width;
|
|
164
|
+
UINT Height;
|
|
165
|
+
INT Stride;
|
|
166
|
+
INT PixelFormat; /* MSDN: "PixelFormat PixelFormat;" */
|
|
167
|
+
VOID *Scan0;
|
|
168
|
+
UINT_PTR Reserved;
|
|
169
|
+
} BitmapData;
|
|
170
|
+
|
|
171
|
+
typedef struct EncoderParameter {
|
|
172
|
+
GUID Guid;
|
|
173
|
+
ULONG NumberOfValues;
|
|
174
|
+
ULONG Type;
|
|
175
|
+
VOID *Value;
|
|
176
|
+
} EncoderParameter;
|
|
177
|
+
|
|
178
|
+
typedef struct EncoderParameters {
|
|
179
|
+
UINT Count;
|
|
180
|
+
EncoderParameter Parameter[1];
|
|
181
|
+
} EncoderParameters;
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
typedef struct ImageCodecInfo {
|
|
185
|
+
CLSID Clsid;
|
|
186
|
+
GUID FormatID;
|
|
187
|
+
WCHAR *CodecName;
|
|
188
|
+
WCHAR *DllName;
|
|
189
|
+
WCHAR *FormatDescription;
|
|
190
|
+
WCHAR *FilenameExtension;
|
|
191
|
+
WCHAR *MimeType;
|
|
192
|
+
DWORD Flags;
|
|
193
|
+
DWORD Version;
|
|
194
|
+
DWORD SigCount;
|
|
195
|
+
DWORD SigSize;
|
|
196
|
+
BYTE *SigPattern;
|
|
197
|
+
BYTE *SigMask;
|
|
198
|
+
} ImageCodecInfo;
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
#define PropertyTagTypeByte ((WORD) 1)
|
|
202
|
+
#define PropertyTagTypeASCII ((WORD) 2)
|
|
203
|
+
#define PropertyTagTypeShort ((WORD) 3)
|
|
204
|
+
#define PropertyTagTypeLong ((WORD) 4)
|
|
205
|
+
#define PropertyTagTypeRational ((WORD) 5)
|
|
206
|
+
#define PropertyTagTypeUndefined ((WORD) 7)
|
|
207
|
+
#define PropertyTagTypeSLONG ((WORD) 9)
|
|
208
|
+
#define PropertyTagTypeSRational ((WORD) 10)
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
/* from gdiplusenums */
|
|
212
|
+
typedef enum EncoderParameterValueType {
|
|
213
|
+
EncoderParameterValueTypeByte = 1,
|
|
214
|
+
EncoderParameterValueTypeASCII = 2,
|
|
215
|
+
EncoderParameterValueTypeShort = 3,
|
|
216
|
+
EncoderParameterValueTypeLong = 4,
|
|
217
|
+
EncoderParameterValueTypeRational = 5,
|
|
218
|
+
EncoderParameterValueTypeLongRange = 6,
|
|
219
|
+
EncoderParameterValueTypeUndefined = 7,
|
|
220
|
+
EncoderParameterValueTypeRationalRange = 8,
|
|
221
|
+
EncoderParameterValueTypePointer = 9
|
|
222
|
+
} EncoderParameterValueType;
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
GpStatus WINGDIPAPI GdiplusStartup(ULONG_PTR*,GDIPCONST GdiplusStartupInput*,GdiplusStartupOutput*);
|
|
228
|
+
VOID WINGDIPAPI GdiplusShutdown(ULONG_PTR);
|
|
229
|
+
GpStatus WINGDIPAPI GdiplusNotificationHook(ULONG_PTR*);
|
|
230
|
+
VOID WINGDIPAPI GdiplusNotificationUnhook(ULONG_PTR);
|
|
231
|
+
|
|
232
|
+
/* Bitmap functions */
|
|
233
|
+
GpStatus WINGDIPAPI GdipCreateHBITMAPFromBitmap(GpBitmap*,HBITMAP*,ARGB);
|
|
234
|
+
GpStatus WINGDIPAPI GdipCreateHICONFromBitmap(GpBitmap*,HICON*);
|
|
235
|
+
|
|
236
|
+
/* Image functions */
|
|
237
|
+
GpStatus WINGDIPAPI GdipDisposeImage(GpImage*);
|
|
238
|
+
GpStatus WINGDIPAPI GdipGetImageWidth(GpImage*,UINT*);
|
|
239
|
+
GpStatus WINGDIPAPI GdipGetImageHeight(GpImage*,UINT*);
|
|
240
|
+
GpStatus WINGDIPAPI GdipGetImageHorizontalResolution(GpImage*,REAL*);
|
|
241
|
+
GpStatus WINGDIPAPI GdipGetImageVerticalResolution(GpImage*,REAL*);
|
|
242
|
+
GpStatus WINGDIPAPI GdipGetImageFlags(GpImage*,UINT*);
|
|
243
|
+
GpStatus WINGDIPAPI GdipGetPropertyCount(GpImage*,UINT*);
|
|
244
|
+
GpStatus WINGDIPAPI GdipGetPropertyIdList(GpImage*,UINT,PROPID*);
|
|
245
|
+
GpStatus WINGDIPAPI GdipGetPropertyItemSize(GpImage*,PROPID,UINT*);
|
|
246
|
+
GpStatus WINGDIPAPI GdipGetPropertyItem(GpImage*,PROPID,UINT,PropertyItem*);
|
|
247
|
+
GpStatus WINGDIPAPI GdipLoadImageFromStream(IStream*,GpImage**);
|
|
248
|
+
GpStatus WINGDIPAPI GdipLoadImageFromFile(GDIPCONST WCHAR*,GpImage**);
|
|
249
|
+
GpStatus WINGDIPAPI GdipSaveImageToStream(GpImage*,IStream*,GDIPCONST CLSID*,GDIPCONST EncoderParameters*);
|
|
250
|
+
GpStatus WINGDIPAPI GdipSaveImageToFile(GpImage*,GDIPCONST WCHAR*,GDIPCONST CLSID*,GDIPCONST EncoderParameters*);
|
|
251
|
+
GpStatus WINGDIPAPI GdipImageRotateFlip(GpImage*,RotateFlipType);
|
|
252
|
+
GpStatus WINGDIPAPI GdipGetImageThumbnail(GpImage*,UINT,UINT,GpImage**,GetThumbnailImageAbort,VOID*);
|
|
253
|
+
|
|
254
|
+
/* Image codec functions */
|
|
255
|
+
GpStatus WINGDIPAPI GdipGetImageEncodersSize(UINT*,UINT*);
|
|
256
|
+
GpStatus WINGDIPAPI GdipGetImageEncoders(UINT,UINT,ImageCodecInfo*);
|
|
257
|
+
|
|
258
|
+
//GdipCreateHBITMAPFromBitmap(ri->himage, &hbitmap, background);
|
|
259
|
+
//GdipCreateHICONFromBitmap(ri->himage, &hicon))
|
|
260
|
+
|
|
261
|
+
//GdipDisposeImage(ri->himage);
|
|
262
|
+
//GdipGetImageWidth(ri->himage, & w);
|
|
263
|
+
//GdipGetImageHeight(ri->himage, & h);
|
|
264
|
+
//GdipGetImageHorizontalResolution(ri->himage, & horiz);
|
|
265
|
+
//GdipGetImageVerticalResolution(ri->himage, & vert);
|
|
266
|
+
//GdipGetPropertyCount(ri->himage, &count);
|
|
267
|
+
//GdipGetPropertyIdList(ri->himage, count, propids);
|
|
268
|
+
//GdipGetPropertyItemSize(ri->himage, id, &size);
|
|
269
|
+
//GdipGetPropertyItem(ri->himage, id, size, pi);
|
|
270
|
+
//GdipLoadImageFromFile(rw_str2wchar(v_path)
|
|
271
|
+
//GdipLoadImageFromStream(pstream, &himage)
|
|
272
|
+
//GdipSaveImageToStream(ri->himage, pstream, &enc_clsid, enc_params)==Ok)
|
|
273
|
+
//GdipSaveImageToFile(ri->himage, rw_str2wchar(v_save2), &enc_clsid, enc_params);
|
|
274
|
+
|
|
275
|
+
//GdipImageRotateFlip(ri->himage, FIX2INT(v_rotate))) return Qtrue;
|
|
276
|
+
//GdipGetImageThumbnail(ri->himage,FIX2INT(v_w), FIX2INT(v_h), &himage, NULL, NULL);
|
|
277
|
+
|
|
278
|
+
#endif /* __RW_GDIPLUS_H */
|