wrb 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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 */
|