[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [pygame] Mac cursors broken



Bob Ippolito wrote:
On Feb 28, 2006, at 2:50 PM, Kamilche wrote:

I tried my app on the Mac today, and everything works fine (go me!) except the cursors. Some of them are cut in half, some of them are wrapping around funny. I'm compiling custom cursors in a variety of sizes, but all multiples of 8x8. Is there a limitation on the Mac platform regarding cursors, that I'm unaware of?


It would be useful to come up with a reproducible example of this so that if it is indeed broken, someone can figure out why and fix it.

-bob



Here ya go. Run this under Mac and Windows.

--Kamilche

import pygame


arrow = ( "xX ", "X.X ", "X..X ", "X...X ", "X....X ", "X.....X ", "X......X ", "X.......X ", "X........X ", "X.........X ", "X......XXXXX ", "X...X..X ", "X..XX..X ", "X.X XX..X ", "XX X..X ", "X X..X ", " X..X ", " X..X ", " X..X ", " XX ", " ", " ", " ", " ")


no = (" ", " ", " XXXXXX ", " XX......XX ", " X..........X ", " X....XXXX....X ", " X...XX XX...X ", " X.....X X...X ", " X..X...X X..X ", " X...XX...X X...X ", " X..X X...X X..X ", " X..X X...X X..X ", " X..X X.,.X X..X ", " X..X X...X X..X ", " X...X X...XX...X ", " X..X X...X..X ", " X...X X.....X ", " X...XX X...X ", " X....XXXXX...X ", " X..........X ", " XX......XX ", " XXXXXX ", " ", " ", )

def TestCursor(arrow):
hotspot = None
for y in range(len(arrow)):
for x in range(len(arrow[y])):
if arrow[y][x] in ['x', ',', 'O']:
hotspot = x,y
break
if hotspot != None:
break
if hotspot == None:
raise Exception("No hotspot specified for cursor '%s'!" % cursorname)
s2 = []
for line in arrow:
s2.append(line.replace('x', 'X').replace(',', '.').replace('O', 'o'))
cursor, mask = pygame.cursors.compile(s2, 'X', '.', 'o')
size = len(arrow[0]), len(arrow)
pygame.mouse.set_cursor(size, hotspot, cursor, mask)


def main():
    pygame.init()
    pygame.font.init()
    font = pygame.font.Font(None, 24)
    bg = pygame.display.set_mode((800, 600), 0, 24)
    bg.fill((255,255,255))
    bg.blit(font.render("Click to advance", 1, (0, 0, 0)), (0, 0))
    pygame.display.update()
    for cursor in [no, arrow]:
        TestCursor(cursor)
        quit = 0
        while not quit:
            pygame.event.pump()
            for e in pygame.event.get():
                if e.type == pygame.MOUSEBUTTONDOWN:
                    quit = 1
    pygame.quit()

main()