File: example_02.py

package info (click to toggle)
gnome-python-desktop 2.32.0%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd, stretch
  • size: 4,528 kB
  • ctags: 983
  • sloc: sh: 10,214; xml: 8,851; ansic: 3,428; python: 1,457; makefile: 664
file content (109 lines) | stat: -rwxr-xr-x 2,964 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#! /usr/bin/env python
#/*
# *  example_02.c: sample gnome-print code
# *
# *  This program is free software; you can redistribute it and/or
# *  modify it under the terms of the GNU Library General Public License
# *  as published by the Free Software Foundation; either version 2 of
# *  the License, or (at your option) any later version.
# *
# *  This program 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 Library General Public License for more details.
# *
# *  You should have received a copy of the GNU Library General Public
# *  License along with this program; if not, write to the Free Software
# *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
# *
# *  Authors:
# *    Chema Celorio <chema@ximian.com>
#    Python conversion:
#      Gustavo J. A. M. Carneiro <gustavo@users.sf.net>
# *
# *  Copyright (C) 2002 Ximian Inc. and authors
# *
# */

#/*
# * See README
# */

import pygtk; pygtk.require("2.0")
import gnomeprint
import gtk.gdk
import struct


NUMBER_OF_PIXELS=256

def my_print_image_from_pixbuf(gpc, pixbuf):
    raw_image = pixbuf.get_pixels()
    has_alpha = pixbuf.get_has_alpha()
    rowstride = pixbuf.get_rowstride()
    height    = pixbuf.get_height()
    width     = pixbuf.get_width()
	
    if has_alpha:
	gpc.rgbaimage(raw_image, width, height, rowstride)
    else:
	gpc.rgbimage(raw_image, width, height, rowstride)


def my_print_image_from_disk(gpc):
    # Load the image into a pixbuf
    pixbuf = gtk.gdk.pixbuf_new_from_file("sample-image.png")
    # Save the graphic context, scale, print the image and restore
    gpc.gsave()
    gpc.scale(144, 144)
    my_print_image_from_pixbuf(gpc, pixbuf)
    gpc.grestore()


def my_print_image_from_memory(gpc):
    pixels = NUMBER_OF_PIXELS;

    # Create the image in memory
    color_image = []
    for y in xrange(pixels):
	for x in  xrange(pixels):
	    color_image.append(struct.pack("BBB",
					   (x + y) >> 1,
					   (x + (pixels - 1  - y)) >> 1,
					   ((pixels - 1 - x) + y) >> 1))
    # All images in postscript are printed on a 1 x 1 square, since we
    # want an image which has a size of 2" by 2" inches, we have to scale
    # the CTM (Current Transformation Matrix). Save the graphic state and
    # restore it after we are done so that our scaling does not affect the
    # drawing calls that follow.
    gpc.gsave()
    gpc.scale(144, 144)
    gpc.rgbimage("".join(color_image), pixels, pixels, pixels * 3)
    gpc.grestore()


def my_draw(gpc):
    gpc.beginpage("1")

    gpc.translate(200, 100)
    my_print_image_from_memory(gpc)

    gpc.translate(0, 150)
    my_print_image_from_disk(gpc)
	
    gpc.showpage()


def my_print():
    job = gnomeprint.Job(gnomeprint.config_default())
    gpc = job.get_context()

    my_draw(gpc)

    job.close()
    job.print_()


my_print()
print "Done..."