Re: wrong default clip for Gtk::DrawingArea



hi;

the regression should be fixed by commit
f3bd78a3cfff64cd0a043091e07bf46cd178cf0c, which will be in the GTK+
3.14.2 release.

your code, nevertheless, has some serious issues.

you cannot simply expect to get the GdkWindow of a widget from any
signal handler, then create a cairo context from it and draw. that's
something that barely used to work in GTK+ 2.x, and an "undefined
behaviour" we keep in GTK+ 3.x only because big applications, like
Gnumeric, still rely on that grey area.

you should only ever draw in the GtkWidget::draw signal handler, using
the cairo context that is being given to you, which already sets up
the clip region and transformation matrix.

ciao,
 Emmanuele.


On 15 October 2014 19:13, Detlef Reichl <detlef reichl gmx org> wrote:
Hi,

I have a problem with an self created widget, based on Gtk::DrawingArea.
It was introduced with a change to version 3.14.1 (debian version is
3.14.1-1; ruby-gtk shows as Gtk::VERSION [3, 14, 1]).

If I place the drawing area in box (vertical) below an other widget, all
drawing with cairo is clipped on the bottom side of the drawing area, as
much as the widgets above the area are tall.

Here is a simple ruby-gtk example that shows this behavior.


#!/usr/bin/env ruby

require 'gtk3'

win = Gtk::Window.new
win.set_default_size 400, 400
box = Gtk::Box.new :vertical
win.add box

button = Gtk::Button.new :label => 'click me'
box.pack_start button, :expand => false, :fill => false

area = Gtk::DrawingArea.new
box.pack_start area, :expand => true, :fill => true

button.signal_connect(:clicked) do
    cc = area.window.create_cairo_context
#    cc.reset_clip
    cc.set_source_rgb 1, 1, 1
    cc.paint
    cc.set_source_rgb 0, 0, 0
    allo = area.allocation
    cc.rectangle 10, 10, allo.width - 20, allo.height - 20
    cc.stroke
end

win.show_all
Gtk.main


If I uncomment the line 18 to reset the clipping of the cairo context,
The drawing fills as expected the complete drawing area. So my
assumption is, that gtk creates a default clip region, that is in this
case wrong. Or is this behavior expected, and if so, what is the
preferred way to handle it?

Cheers, detlef


_______________________________________________
gtk-list mailing list
gtk-list gnome org
https://mail.gnome.org/mailman/listinfo/gtk-list



-- 
http://www.bassi.io
[ ] ebassi [ gmail com]


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