def test_SDL_SetSurfacePalette(self):
        invpalette = pixels.SDL_AllocPalette(10)
        palette = pixels.SDL_AllocPalette(1 << 16)
        sf = surface.SDL_CreateRGBSurface(0, 10, 10, 16, 0, 0, 0, 0)

        #        self.assertRaises((AttributeError, TypeError),
        #                          surface.set_surface_palette, None, None)
        #        self.assertRaises((AttributeError, TypeError),
        #                          surface.set_surface_palette, None, palette)
        self.assertFalse(sf.contents.format.contents.palette)
        surface.SDL_SetSurfacePalette(sf, palette)
        self.assertIsNotNone(sf.contents.format.contents.palette.contents)
        #        self.assertRaises(sdl.SDLError, surface.set_surface_palette, sf,
        #                          invpalette)
        self.assertIsNotNone(sf.contents.format.contents.palette.contents)
        surface.SDL_SetSurfacePalette(sf, None)
        self.assertFalse(sf.contents.format.contents.palette)

        surface.SDL_FreeSurface(sf)
        pixels.SDL_FreePalette(invpalette)
        pixels.SDL_FreePalette(palette)
Example #2
0
 def test_SDL_GetSetSurfaceBlendMode(self):
     modes = (blendmode.SDL_BLENDMODE_NONE, blendmode.SDL_BLENDMODE_BLEND,
              blendmode.SDL_BLENDMODE_ADD, blendmode.SDL_BLENDMODE_MOD)
     bpp = c_int()
     rmask, gmask, bmask, amask = Uint32(), Uint32(), Uint32(), Uint32()
     for fmt in pixels.ALL_PIXELFORMATS:
         if pixels.SDL_ISPIXELFORMAT_FOURCC(fmt):
             continue
         ret = pixels.SDL_PixelFormatEnumToMasks(fmt, byref(bpp),
                                                 byref(rmask), byref(gmask),
                                                 byref(bmask), byref(amask))
         self.assertEqual(ret, SDL_TRUE)
         sf = surface.SDL_CreateRGBSurface(0, 10, 10, bpp, rmask, gmask,
                                           bmask, amask)
         for mode in modes:
             smode = blendmode.SDL_BlendMode()
             ret = surface.SDL_SetSurfaceBlendMode(sf, mode)
             self.assertEqual(ret, 0)
             surface.SDL_GetSurfaceBlendMode(sf, byref(smode))
             self.assertEqual(smode.value, mode)
         surface.SDL_FreeSurface(sf)
Example #3
0
 def test_SDL_ConvertSurface(self):
     tenbit = [
         pixels.SDL_PACKEDLAYOUT_2101010, pixels.SDL_PACKEDLAYOUT_1010102
     ]
     for idx in pixels.ALL_PIXELFORMATS:
         pfmt = pixels.SDL_AllocFormat(idx)
         for fmt in pixels.ALL_PIXELFORMATS:
             idx_name = pixels.SDL_GetPixelFormatName(idx).decode(
                 'utf-8')  # for debug
             fmt_name = pixels.SDL_GetPixelFormatName(fmt).decode(
                 'utf-8')  # for debug
             # SDL2 doesn't support converting fancier formats (e.g YUV, 10bit)
             if pixels.SDL_ISPIXELFORMAT_FOURCC(
                     idx) or pixels.SDL_PIXELLAYOUT(idx) in tenbit:
                 continue
             if pixels.SDL_ISPIXELFORMAT_FOURCC(
                     fmt) or pixels.SDL_PIXELLAYOUT(fmt) in tenbit:
                 continue
             # SDL2 doesn't support converting to formats w/ less than 8 bpp
             if pixels.SDL_BITSPERPIXEL(idx) < 8:
                 continue
             # SDL2 doesn't support converting from indexed formats w/ 4 bpp
             if pixels.SDL_PIXELTYPE(fmt) == pixels.SDL_PIXELTYPE_INDEX4:
                 continue
             bpp = c_int()
             rmask, gmask, bmask, amask = Uint32(), Uint32(), Uint32(
             ), Uint32()
             ret = pixels.SDL_PixelFormatEnumToMasks(
                 fmt, byref(bpp), byref(rmask), byref(gmask), byref(bmask),
                 byref(amask))
             assert ret == SDL_TRUE
             sf = surface.SDL_CreateRGBSurface(0, 10, 20, bpp, rmask, gmask,
                                               bmask, amask)
             assert isinstance(sf.contents, surface.SDL_Surface)
             csf = surface.SDL_ConvertSurface(sf, pfmt, 0)
             assert csf, error.SDL_GetError()
             assert isinstance(csf.contents, surface.SDL_Surface)
             surface.SDL_FreeSurface(sf)
             surface.SDL_FreeSurface(csf)
         pixels.SDL_FreeFormat(pfmt)
Example #4
0
 def test_SDL_ConvertSurfaceFormat(self):
     for pfmt in pixels.ALL_PIXELFORMATS:
         if pixels.SDL_ISPIXELFORMAT_FOURCC(pfmt):
             continue
         for fmt in pixels.ALL_PIXELFORMATS:
             if pixels.SDL_ISPIXELFORMAT_FOURCC(fmt):
                 continue
             bpp = c_int()
             rmask, gmask, bmask, amask = Uint32(), Uint32(), Uint32(
             ), Uint32()
             ret = pixels.SDL_PixelFormatEnumToMasks(
                 fmt, byref(bpp), byref(rmask), byref(gmask), byref(bmask),
                 byref(amask))
             self.assertEqual(ret, SDL_TRUE)
             sf = surface.SDL_CreateRGBSurface(0, 10, 20, bpp, rmask, gmask,
                                               bmask, amask)
             self.assertIsInstance(sf.contents, surface.SDL_Surface)
             csf = surface.SDL_ConvertSurfaceFormat(sf, pfmt, 0)
             self.assertTrue(csf, error.SDL_GetError())
             self.assertIsInstance(csf.contents, surface.SDL_Surface)
             surface.SDL_FreeSurface(sf)
             surface.SDL_FreeSurface(csf)
Example #5
0
 def test_SDL_GetSetSurfaceAlphaMod(self):
     bpp = c_int()
     rmask, gmask, bmask, amask = Uint32(), Uint32(), Uint32(), Uint32()
     for fmt in pixels.ALL_PIXELFORMATS:
         if pixels.SDL_ISPIXELFORMAT_FOURCC(fmt):
             continue
         ret = pixels.SDL_PixelFormatEnumToMasks(fmt, byref(bpp),
                                                 byref(rmask), byref(gmask),
                                                 byref(bmask), byref(amask))
         self.assertEqual(ret, SDL_TRUE)
         sf = surface.SDL_CreateRGBSurface(0, 10, 10, bpp, rmask, gmask,
                                           bmask, amask)
         salpha = Uint8()
         ret = surface.SDL_GetSurfaceAlphaMod(sf, byref(salpha))
         self.assertEqual(ret, 0)
         self.assertEqual(salpha.value, 255)
         for alpha in range(0, 255):
             ret = surface.SDL_SetSurfaceAlphaMod(sf, alpha)
             self.assertEqual(ret, 0)
             ret = surface.SDL_GetSurfaceAlphaMod(sf, byref(salpha))
             self.assertEqual(ret, 0)
             self.assertEqual(salpha.value, alpha)
         surface.SDL_FreeSurface(sf)
Example #6
0
    def test_SDL_FreeSurface(self):
        #        self.assertRaises((AttributeError, TypeError),
        #                          surface.SDL_FreeSurface, None)
        #        self.assertRaises((AttributeError, TypeError),
        #                          surface.free_surface, "Test")
        #        self.assertRaises((AttributeError, TypeError),
        #                          surface.free_surface, 5)

        formats = (pixels.SDL_PIXELFORMAT_INDEX1LSB,
                   pixels.SDL_PIXELFORMAT_RGB332,
                   pixels.SDL_PIXELFORMAT_RGBA4444,
                   pixels.SDL_PIXELFORMAT_BGR888,
                   pixels.SDL_PIXELFORMAT_ARGB8888,
                   pixels.SDL_PIXELFORMAT_ARGB2101010)
        bpp = c_int()
        rmask, gmask, bmask, amask = Uint32(), Uint32(), Uint32(), Uint32()
        for fmt in formats:
            ret = pixels.SDL_PixelFormatEnumToMasks(fmt, byref(bpp),
                                                    byref(rmask), byref(gmask),
                                                    byref(bmask), byref(amask))
            self.assertEqual(ret, SDL_TRUE)
            sf = surface.SDL_CreateRGBSurface(0, 5, 5, bpp, rmask, gmask,
                                              bmask, amask)
            surface.SDL_FreeSurface(sf)
    def test_IMG_LoadTextureTyped_RW(self):
        sf = surface.SDL_CreateRGBSurface(0, 10, 10, 32, 0, 0, 0, 0)
        rd = render.SDL_CreateSoftwareRenderer(sf)

        fname = "surfacetest.%s"
        for fmt in formats:
            if fmt == "webp":
                # FIXME: crashew with SDL_image 2.0.2
                continue
            if fmt == "svg":
                # FIXME: svg crashes with SDL2_image 2.0.2
                continue
            filename = os.path.join(os.path.dirname(os.path.abspath(__file__)),
                                    "resources", fname % fmt)
            print(filename)
            with open(filename, "rb") as fp:
                rw = rwops.rw_from_object(fp)
                fmtx = fmt.upper().encode("utf-8")
                tex = sdlimage.IMG_LoadTextureTyped_RW(rd, rw, 0, fmtx)
                self.assertIsNotNone(tex)
                self.assertIsInstance(tex.contents, render.SDL_Texture)
            render.SDL_DestroyTexture(tex)
        render.SDL_DestroyRenderer(rd)
        surface.SDL_FreeSurface(sf)
Example #8
0
    def test_SDL_RenderGetSetLogicalSize(self):
        w, h = 100, 100
        sf = surface.SDL_CreateRGBSurface(0, w, h, 32, 0xFF000000, 0x00FF0000,
                                          0x0000FF00, 0x000000FF)

        renderer = render.SDL_CreateSoftwareRenderer(sf)
        view = PixelView(sf.contents)

        magenta = 255, 0, 255, 255
        green = 0, 255, 0, 255

        magenta_int = sum(c << (i * 8)
                          for i, c in enumerate(reversed(magenta)))
        green_int = sum(c << (i * 8) for i, c in enumerate(reversed(green)))

        def clear_green():
            ret = render.SDL_SetRenderDrawColor(renderer, green[0], green[1],
                                                green[2], green[3])
            self.assertEqual(ret, 0)
            ret = render.SDL_RenderClear(renderer)
            self.assertEqual(ret, 0)

        def draw_magenta_pixel(x, y):
            ret = render.SDL_SetRenderDrawColor(renderer, magenta[0],
                                                magenta[1], magenta[2],
                                                magenta[3])
            self.assertEqual(ret, 0)
            ret = render.SDL_RenderDrawPoint(renderer, x, y)
            self.assertEqual(ret, 0)

        # Test 1
        # If we set the logical renderer size to 1 x 1, drawing a point
        # at 0, 0 should have the same effect as filling the entire
        # (square) window with magenta - no green should show through.
        got_width, got_height = c_int(), c_int()

        ret = render.SDL_RenderSetLogicalSize(renderer, 1, 1)
        self.assertEqual(ret, 0)
        render.SDL_RenderGetLogicalSize(renderer, byref(got_width),
                                        byref(got_height))
        self.assertEqual(got_width.value, 1)
        self.assertEqual(got_height.value, 1)

        clear_green()
        draw_magenta_pixel(0, 0)

        for x, y in itertools.product(range(w), range(h)):
            self.assertEqual(view[y][x], magenta_int,
                             'No pixel should be green')

        # Test 2
        # Reset the logical size to the original target by using 0, 0
        # only the first and last pixel should be magenta. The rest
        # should be green.
        got_width, got_height = c_int(), c_int()

        ret = render.SDL_RenderSetLogicalSize(renderer, 0, 0)
        self.assertEqual(ret, 0)

        render.SDL_RenderGetLogicalSize(renderer, byref(got_width),
                                        byref(got_height))
        self.assertEqual(got_width.value, 0)
        self.assertEqual(got_height.value, 0)

        clear_green()

        draw_magenta_pixel(0, 0)
        draw_magenta_pixel(w - 1, h - 1)

        for x, y in itertools.product(range(w), range(h)):
            if (x, y) == (0, 0) or (x, y) == (w - 1, h - 1):
                self.assertEqual(view[y][x], magenta_int,
                                 'First and last pixel should be magenta')
            else:
                self.assertEqual(view[y][x], green_int,
                                 'All other pixels should be green')

        # Test 3
        # Set the logical size to 1/10, making a logical pixel draw be
        # 10 x 10 real pixel blocks.
        got_width, got_height = c_int(), c_int()

        ret = render.SDL_RenderSetLogicalSize(renderer, w // 10, h // 10)
        self.assertEqual(ret, 0)

        render.SDL_RenderGetLogicalSize(renderer, byref(got_width),
                                        byref(got_height))
        self.assertEqual(got_width.value, w // 10)
        self.assertEqual(got_height.value, h // 10)

        clear_green()

        draw_magenta_pixel(0, 0)
        for x, y in itertools.product(range(w), range(h)):
            if x < 10 and y < 10:
                self.assertEqual(
                    view[y][x], magenta_int,
                    'Top-left 10 x 10 pixel block should be magenta')
            else:
                self.assertEqual(view[y][x], green_int,
                                 'All other pixels should be green')

        render.SDL_DestroyRenderer(renderer)
        surface.SDL_FreeSurface(sf)
Example #9
0
 def test_SDL_SetWindowIcon(self):
     sf = surface.SDL_CreateRGBSurface(0, 16, 16, 16, 0xF000, 0x0F00,
                                       0x00F0, 0x000F)
     assert isinstance(sf.contents, surface.SDL_Surface)
     window = video.SDL_CreateWindow(b"Test", 10, 10, 10, 10, 0)
     video.SDL_SetWindowIcon(window, sf)