12 class CairoView(gtk
.Window
):
13 def __init__(self
, family
="", slant
=0, weight
=0, size
=18, text
="The Quick Brown Fox Jumps Over The Lazy Dog!"):
14 gtk
.Widget
.__init
__ (self
)
18 self
.slant
= cairo
.FONT_SLANT_ITALIC
19 elif slant
== "oblique":
20 self
.slant
= cairo
.FONT_SLANT_OBLIQUE
22 self
.slant
= cairo
.FONT_SLANT_NORMAL
24 self
.weight
= cairo
.FONT_WEIGHT_BOLD
26 self
.weight
= cairo
.FONT_WEIGHT_NORMAL
27 self
.size
= float (size
)
31 self
.set_flags(self
.flags() | gtk
.REALIZED
)
33 self
.window
= gtk
.gdk
.Window(
34 self
.get_parent_window(),
35 width
=self
.allocation
.width
,
36 height
=self
.allocation
.height
,
37 window_type
=gtk
.gdk
.WINDOW_CHILD
,
38 wclass
=gtk
.gdk
.INPUT_OUTPUT
,
39 event_mask
=self
.get_events() | gtk
.gdk
.EXPOSURE_MASK
)
41 self
.window
.set_user_data(self
)
43 self
.style
.attach(self
.window
)
45 self
.style
.set_background(self
.window
, gtk
.STATE_NORMAL
)
47 self
.width
, self
.height
= self
.draw ()
48 self
.window
.move_resize(0, 0, self
.width
, self
.height
)
50 def do_unrealize(self
):
53 def do_expose_event(self
, event
):
58 def draw(self
, event
= None):
60 cr
= self
.window
.cairo_create()
62 cr
.rectangle(event
.area
.x
, event
.area
.y
,
63 event
.area
.width
, event
.area
.height
)
66 cr
.set_source_rgb (1, 1, 1)
69 cr
.select_font_face (self
.family
, self
.slant
, self
.weight
)
70 cr
.set_font_size (self
.size
)
74 extents
= cr
.text_extents (self
.text
)
75 cr
.translate (PAD
-extents
[0], PAD
-extents
[1])
77 font_extents
= cr
.font_extents ()
78 cr
.rectangle (0, -font_extents
[0], extents
[4], font_extents
[2])
80 cr
.line_to (extents
[2]+PAD
, 0)
81 cr
.set_source_rgba (1, 0, 0, .7)
84 cr
.rectangle (*extents
[:4])
85 cr
.set_source_rgba (0, 1, 0, .7)
89 cr
.set_source_rgb (0, 0, 0)
90 cr
.show_text (self
.text
)
92 return int (extents
[2]) + 2 * PAD
, int (extents
[3]) + 2 * PAD
96 self
.props
.allow_shrink
= True
97 self
.connect("destroy", gtk
.main_quit
)
102 gobject
.type_register(CairoView
)
107 print "usage: cairo-view family [slant [weight [size [text]]]]"
109 cv
= CairoView (*args
[1:])
112 if __name__
== "__main__":