Class: RWin::Cursor
- Inherits:
-
Data
- Object
- Data
- RWin::Cursor
- Defined in:
- ext/rwin/rw_resources.c
Direct Known Subclasses
Class Method Summary collapse
Instance Method Summary collapse
- #_dump(*args) ⇒ Object
- #_hcursor ⇒ Object
- #dispose ⇒ Object
- #initialize(v_xhot, v_yhot, v_bmmask, v_bmcolor) ⇒ Object constructor
- #to_bmps ⇒ Object
Constructor Details
#initialize(v_xhot, v_yhot, v_bmmask, v_bmcolor) ⇒ Object
808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 |
# File 'ext/rwin/rw_resources.c', line 808
static VALUE
rwcursor_initialize(VALUE self, VALUE v_xhot, VALUE v_yhot, VALUE v_bmmask, VALUE v_bmcolor){
RwBitmap *rbmask, *rbcolor;
ICONINFO iinfo;
RwCursor *rc = DATA_PTR(self);
iinfo.fIcon = FALSE;
iinfo.xHotspot = FIX2INT(v_xhot);
iinfo.yHotspot = FIX2INT(v_yhot);
RwBitmap_Data_Get_Struct(v_bmmask, rbmask);
iinfo.hbmMask = rw_dib2ddb(rbmask);
RwBitmap_Data_Get_Struct(v_bmcolor, rbcolor);
iinfo.hbmColor = rw_dib2ddb(rbcolor);
rc->hcursor = CreateIconIndirect(&iinfo);
if (!rc->hcursor) rb_raise(rb_eRuntimeError, "failed to create cursor");
rc->shared = FALSE;
return self;
}
|
Class Method Details
._load(str) ⇒ Object
889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 |
# File 'ext/rwin/rw_resources.c', line 889
static VALUE
rwcursor1__load(VALUE klass, VALUE str){
char *pstr = RSTRING_PTR(str);
ICONDIR *idir = (ICONDIR*)pstr;
ICONDIRENTRY *idirent = (ICONDIRENTRY *)(pstr + sizeof(ICONDIR));
HCURSOR hcursor = rwicon1__load_core(pstr, idirent, idir->idType==1);
if(hcursor){
RwCursor *rc;
VALUE robj;
robj = RwCursor_Data_Make_Struct(klass, rc);
rc->type = RcCursor;
rc->hcursor = hcursor;
Register_rsc(rc->hcursor, robj);
return robj;
}
return Qnil;
}
|
.fromfile(fname) ⇒ Object
826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 |
# File 'ext/rwin/rw_resources.c', line 826
static VALUE
rwcursor1_loadfromfile(VALUE klass, VALUE fname){
RwCursor* rc;
VALUE robj = RwCursor_Data_Make_Struct(klass, rc);
if(!FIXNUM_P(fname)){
char abspath[RW_MAXPATH];
rwconv2absolute_path(abspath, RSTRING_PTR(fname));
rc->hcursor = LoadImageA(NULL, abspath, IMAGE_CURSOR, 0, 0, LR_LOADFROMFILE);
} else {
rc->hcursor = LoadCursor(NULL, MAKEINTRESOURCE(FIX2INT(fname)));
}
if(!rc->hcursor) rb_raise(rb_eRuntimeError, "failed to create cursor");
rc->type = RcCursor;
rc->shared = FIXNUM_P(fname) ? TRUE : FALSE;
return robj;
}
|
Instance Method Details
#_dump(*args) ⇒ Object
627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 |
# File 'ext/rwin/rw_resources.c', line 627
static VALUE
rwicon__dump(int argc, VALUE *argv, VALUE self){
VALUE robj, rstr;
char *pstr;
ICONINFO ii;
ICONDIR *idir;
ICONDIRENTRY *idirent;
int clrdpth = argc>0 ? FIX2INT(argv[0]) : 24;
RwIcon *ri = DATA_PTR(self);
int ccalloc = sizeof(ICONDIR) + sizeof(ICONDIRENTRY);
RW_CALLOC(pstr, ccalloc);
GetIconInfo(ri->hicon, &ii);
idir = (ICONDIR*)pstr;
idir->idType = ii.fIcon ? 1 : 2;
idir->idCount = 1;
idirent = (ICONDIRENTRY*)(pstr+sizeof(ICONDIR));
rstr = rwicon__dump_core(&ii, idirent, clrdpth);
robj = rb_str_new(pstr, ccalloc);
rb_str_cat(robj, RSTRING_PTR(rstr), RSTRING_LEN(rstr));
return robj;
}
|
#_hcursor ⇒ Object
853 854 855 856 857 |
# File 'ext/rwin/rw_resources.c', line 853
static VALUE
rwcursor_hcursor(VALUE self){
RwCursor *rc = DATA_PTR(self);
return ULONG_PTR2NUM((ULONG_PTR)rc->hcursor);
}
|
#dispose ⇒ Object
844 845 846 847 848 849 850 851 |
# File 'ext/rwin/rw_resources.c', line 844
static VALUE
rwcursor_delete(VALUE self){
RwCursor *rc = DATA_PTR(self);
Unregister_rsc(rc->hcursor);
DestroyCursor(rc->hcursor);
rc->hcursor = 0;
return Qtrue;
}
|
#to_bmps ⇒ Object
552 553 554 555 556 557 558 559 560 561 562 563 564 |
# File 'ext/rwin/rw_resources.c', line 552
static VALUE
rwicon_to_bmps(VALUE self){
ICONINFO iinfo;
VALUE v_bmmask, v_bmcolor;
RwIcon *ri = DATA_PTR(self);
GetIconInfo(ri->hicon, &iinfo);
v_bmmask = rwbitmap1_fromhandle_core(cRwBitmap, iinfo.hbmMask);
v_bmcolor = iinfo.hbmColor ? rwbitmap1_fromhandle_core(cRwBitmap, iinfo.hbmColor) : Qnil;
DeleteObject(iinfo.hbmMask);
DeleteObject(iinfo.hbmColor);
if(iinfo.fIcon) return rb_ary_new3(2, v_bmmask, v_bmcolor);
return rb_ary_new3(4, v_bmmask, v_bmcolor, INT2FIX(iinfo.xHotspot), INT2FIX(iinfo.yHotspot));
}
|