Class: SDL::Surface

Inherits:
Object
  • Object
show all
Defined in:
ext/sdl/sdl.c

Direct Known Subclasses

Screen

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.load(path) ⇒ Object

// SDL::Surface methods:



479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
# File 'ext/sdl/sdl.c', line 479

static VALUE Surface_s_load(VALUE klass, VALUE path) {
  UNUSED(klass);
  SDL_Surface *surface;

  ExportStringValue(path);

  surface = IMG_Load(RSTRING_PTR(path));

  if (!surface)
    rb_raise(eSDLError, "Couldn't load file %s : %s",
             RSTRING_PTR(path),
             SDL_GetError());

  return TypedData_Wrap_Struct(cSurface, &_Surface_type, surface);
}

Instance Method Details

#[](x, y) ⇒ Object



806
807
808
809
# File 'ext/sdl/sdl.c', line 806

static VALUE Surface_index(VALUE self, VALUE x, VALUE y) {
  rb_raise(eSDLError, "Reading the canvas isn't currently supported");
  return Qnil;
}

#formatObject



755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
# File 'ext/sdl/sdl.c', line 755

static VALUE Surface_format(VALUE self) {
  DEFINE_SELF(Surface, surface, self);
  SDL_PixelFormat* format;
  SDL_Palette* palette;
  SDL_Palette* src = surface->format->palette;

  // TODO: remove this or drop down to SDL_AllocFormat only

  if (src) {
    palette = ALLOC(SDL_Palette);
    palette->ncolors = src->ncolors;
    palette->colors  = ALLOC_N(SDL_Color, (size_t)src->ncolors);
    MEMCPY(palette->colors, src->colors, SDL_Color, (size_t)src->ncolors);
  } else {
    palette = NULL;
  }

  VALUE ret = TypedData_Make_Struct(cPixelFormat, SDL_PixelFormat, &_PixelFormat_type, format);

  *format = *(surface->format);
  format->palette = palette;

  return ret;
}

#hObject



800
801
802
803
804
# File 'ext/sdl/sdl.c', line 800

static VALUE Surface_h(VALUE self) {
  DEFINE_SELF(Surface, surface, self);

  return INT2NUM(surface->h);
}

#make_collision_mapObject

TODO: reimplement and jettison SGE



838
839
840
841
842
843
844
845
846
# File 'ext/sdl/sdl.c', line 838

static VALUE Surface_make_collision_map(VALUE self) {
  DEFINE_SELF(Surface, surface, self);

  sge_cdata * cdata = sge_make_cmap(surface);
  if (!cdata)
    FAILURE("Surface#make_collision_map");

  return TypedData_Wrap_Struct(cCollisionMap, &_CollisionMap_type, cdata);
}

#transform(angle, xscale, yscale, flags) ⇒ Object

TODO: maybe remove? I dunno… could be nice for pre-rendering?



855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
# File 'ext/sdl/sdl.c', line 855

static VALUE Surface_transform(VALUE self, VALUE angle,
                               VALUE xscale, VALUE yscale,
                               VALUE flags) {
  DEFINE_SELF(Surface, surface, self);

  SDL_Surface *result = rotozoomSurfaceXY(surface,
                                          NUM2FLT(angle),
                                          NUM2FLT(xscale),
                                          NUM2FLT(yscale),
                                          SMOOTHING_ON);

  if (!result)
    FAILURE("Surface#transform");

  return TypedData_Wrap_Struct(cSurface, &_Surface_type, result);
}

#wObject



848
849
850
851
852
# File 'ext/sdl/sdl.c', line 848

static VALUE Surface_w(VALUE self) {
  DEFINE_SELF(Surface, surface, self);

  return INT2NUM(surface->w);
}