#!/usr/bin/env python

import sys, time
import pygame

def main(imagefile, convert_alpha=False, run_speed_test=False):
    """show an interactive image scaler

    arguemnts:
    imagefile - name of source image (required)
    convert_alpha - use convert_alpha() on the surf (default False)
    run_speed_test - (default False)

    """

    bSpeedTest = run_speed_test
    # initialize display
    pygame.display.init()
    # load background image
    background = pygame.image.load(imagefile)
    if convert_alpha:
        screen = pygame.display.set_mode((1024, 768), pygame.FULLSCREEN)
        background = background.convert_alpha()

    if bSpeedTest:
        SpeedTest(background)
        return
    screen = pygame.display.set_mode((1024, 768), pygame.FULLSCREEN)
    # start fullscreen mode
    # turn off the mouse pointer
    pygame.mouse.set_visible(0)
    # main loop
    bRunning = True
    bUp = False
    bDown = False
    bLeft = False
    bRight = False
    cursize = [background.get_width(), background.get_height()]
    while(bRunning):
        image = pygame.transform.smoothscale(background, cursize)
        imgpos = image.get_rect(centerx=512, centery=384)
        screen.fill((255,255,255))
        screen.blit(image, imgpos)
        pygame.display.flip()
        for event in pygame.event.get():
            if event.type == pygame.QUIT or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE):
                bRunning = False
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_UP:    bUp = True
                if event.key == pygame.K_DOWN:  bDown = True
                if event.key == pygame.K_LEFT:  bLeft = True
                if event.key == pygame.K_RIGHT: bRight = True
            if event.type == pygame.KEYUP:
                if event.key == pygame.K_UP:    bUp = False
                if event.key == pygame.K_DOWN:  bDown = False
                if event.key == pygame.K_LEFT:  bLeft = False
                if event.key == pygame.K_RIGHT: bRight = False
        if bUp:
            cursize[1] -= 2
            if cursize[1] < 1: cursize[1] = 1
        if bDown:
            cursize[1] += 2
        if bLeft:
            cursize[0] -= 2
            if cursize[0] < 1: cursize[0] = 1
        if bRight:
            cursize[0] += 2


def SpeedTest(image):
    print ("Smoothscale Speed Test - Image Size %s\n" % str(image.get_size()))
    imgsize = [image.get_width(), image.get_height()]
    duration = 0.0
    for i in range(128):
        shrinkx = (imgsize[0] * i) // 128
        shrinky = (imgsize[1] * i) // 128
        start = time.time()
        tempimg = pygame.transform.smoothscale(image, (shrinkx, shrinky))
        duration += (time.time() - start)
        del tempimg
    print ("Average smooth shrink time: %i milliseconds." % int((duration / 128) * 1000))
    duration = 0
    for i in range(128):
        expandx = (imgsize[0] * (i + 129)) // 128
        expandy = (imgsize[1] * (i + 129)) // 128
        start = time.time()
        tempimg = pygame.transform.smoothscale(image, (expandx, expandy))
        duration += (time.time() - start)
        del tempimg
    print ("Average smooth expand time: %i milliseconds." % int((duration / 128) * 1000))
    duration = 0.0
    for i in range(128):
        shrinkx = (imgsize[0] * i) // 128
        shrinky = (imgsize[1] * i) // 128
        start = time.time()
        tempimg = pygame.transform.scale(image, (shrinkx, shrinky))
        duration += (time.time() - start)
        del tempimg
    print ("Average jaggy shrink time: %i milliseconds." % int((duration / 128) * 1000))
    duration = 0
    for i in range(128):
        expandx = (imgsize[0] * (i + 129)) // 128
        expandy = (imgsize[1] * (i + 129)) // 128
        start = time.time()
        tempimg = pygame.transform.scale(image, (expandx, expandy))
        duration += (time.time() - start)
        del tempimg
    print ("Average jaggy expand time: %i milliseconds." % int((duration / 128) * 1000))



if __name__ == '__main__':
    # check input parameters
    if len(sys.argv) < 2:
        print ("Usage: %s ImageFile [-t] [-convert_alpha]" % sys.argv[0])
        print ("       [-t] = Run Speed Test\n")
        print ("       [-convert_alpha] = Use convert_alpha() on the surf.\n")
    else:
        main(sys.argv[1],
             convert_alpha = '-convert_alpha' in sys.argv,
             run_speed_test = '-t' in sys.argv)
