Class: RWin::Cursor

Inherits:
Data
  • Object
show all
Defined in:
ext/rwin/rw_resources.c

Direct Known Subclasses

WR::Cursor

Class Method Summary collapse

Instance Method Summary collapse

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;
}

#_hcursorObject



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);
}

#disposeObject



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_bmpsObject



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));
}