# -*- mode: python; coding: utf-8 -*-
#
# Pigment Python tools
#
# Copyright © 2006, 2007, 2008 Fluendo Embedded S.L.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.

"""
Pigment image utility module
"""

import cairo, array
import pgm

def get_height_from_par(img):
    par = img.aspect_ratio[0] / float(img.aspect_ratio[1])
    if par:
        height = img.width / par
    else:
        height = img.height
    return height

def get_width_from_par(img):
    if img.aspect_ratio[0]:
        par = img.aspect_ratio[1] / float(img.aspect_ratio[0])
        width = img.height / par
    else:
        width = img.width
    return width

def cairo_gradient(png_path, image, gradient_stop):
    image_surface = cairo.ImageSurface.create_from_png(png_path)
    width = image_surface.get_width()
    height = image_surface.get_height()

    data = array.array('c', chr(0) * width * height * 4)
    dest_surface = cairo.ImageSurface.create_for_data(data, cairo.FORMAT_ARGB32,
                                                      width, height, width * 4)

    context = cairo.Context(dest_surface)

    context.set_source_surface(image_surface)
    context.scale(width, height)

    gradient = cairo.LinearGradient (0.0, 0.0, 0.0, 1.0)
    gradient.add_color_stop_rgba(gradient_stop, 0, 0, 0, 0)
    gradient.add_color_stop_rgba(1, 0, 0, 0, 1)

    context.mask(gradient)
    
    image.set_from_buffer(pgm.IMAGE_BGRA, width, height, width*4,
                          width*height*4, data.tostring())

