Below is a revised version of the widget subclass example given here:
http://live.gnome.org/Vala/CustomWidgetSamples

It is update to work with gtk+-3.0.   It took me a while to figure out what 
needed to be changed to work with the latest gtk (there may still be some wonky 
bits there, so feel free to revise further).  Maybe it is useful for someone 
else.

best -august.


----------------------------------------


using Gtk;
using Gdk;
using Cairo;

public class ValaWidget : Widget {

    private static const string TEXT = "Hello World!";
    private static const int BORDER_WIDTH = 10;
    private Pango.Layout layout;
    construct {
        this.layout = create_pango_layout (TEXT);
                                set_has_window (false);         //need this for 
some reason, don't know why.
                                set_size_request (100, 100);
    }

                public override bool draw        (Cairo.Context cr) {
                        int width  = this.get_allocated_width();
                        int height  = this.get_allocated_height();
                        // In this example, draw a rectangle in the foreground 
color
                        //Gdk.cairo_set_source_color (cr, 
this.style.fg[this.state]);
                        cr.set_source_rgba (0.5,0.5,0.5, 1);
                        cr.rectangle (BORDER_WIDTH, BORDER_WIDTH,
                                        width - 2 * BORDER_WIDTH,
                                        height - 2 * BORDER_WIDTH);
                        cr.set_line_width (5.0);
                        cr.set_line_join (LineJoin.ROUND);
                        cr.stroke ();

                        // And draw the text in the middle of the allocated 
space
                        int fontw, fonth;
                        this.layout.get_pixel_size (out fontw, out fonth);
                        cr.move_to ((width - fontw) / 2,
                                        (height - fonth) / 2);
                        Pango.cairo_update_layout (cr, this.layout);
                        Pango.cairo_show_layout (cr, this.layout);
                        return true;
                }

    static int main (string[] args) {
        Gtk.init (ref args);

        var win = new Gtk.Window (Gtk.WindowType.TOPLEVEL);
        win.border_width = 5;
        win.title = "Widget test";
        win.destroy.connect (Gtk.main_quit);

        var frame = new Frame ("Example Vala Widget");
        win.add (frame);

        var widget = new ValaWidget ();
        frame.add (widget);

        win.show_all ();

        Gtk.main ();
        return 0;
    }
}

_______________________________________________
vala-list mailing list
vala-list@gnome.org
http://mail.gnome.org/mailman/listinfo/vala-list

Reply via email to