Skip to content

Commit

Permalink
crop button
Browse files Browse the repository at this point in the history
  • Loading branch information
evmar committed Feb 21, 2010
1 parent 7e6d499 commit 680c227
Showing 1 changed file with 41 additions and 14 deletions.
55 changes: 41 additions & 14 deletions snapz.vala
Expand Up @@ -9,6 +9,7 @@ class ShotCanvas : Gtk.DrawingArea {

this.pixbuf = pixbuf;
this.pixbuf_scaled = null;
this.sel_start.x = -1;

this.button_press_event.connect((event) => {
sel_start = canvas_to_image(Gdk.Point() {
Expand All @@ -27,16 +28,35 @@ class ShotCanvas : Gtk.DrawingArea {
sel_end = canvas_to_image(Gdk.Point() {
x = (int)event.x, y = (int)event.y
});
if (sel_end.x == sel_start.x && sel_end.y == sel_start.y)
sel_start.x = -1;
selection_changed();
});

expose_event.connect(draw);
selection_changed.connect(() => { queue_draw(); });
}

public void save(string filename) throws GLib.Error {
pixbuf.save(filename, "png", null);
}

public bool has_selection() {
return sel_start.x != -1;
}

public signal void selection_changed();


public void crop() {
pixbuf = new Gdk.Pixbuf.subpixbuf(pixbuf, sel_start.x, sel_start.y,
sel_end.x - sel_start.x,
sel_end.y - sel_start.y);
pixbuf_scaled = null;
sel_start.x = -1;
selection_changed();
}


private Gdk.Point scale_point(Gdk.Point p, float mult) {
return Gdk.Point() {
Expand All @@ -52,10 +72,6 @@ class ShotCanvas : Gtk.DrawingArea {
return scale_point(p, allocation.width / (float)pixbuf.get_width());
}

private void selection_changed() {
queue_draw();
}

private void rescale_if_necessary() {
var aspect = pixbuf.get_width() / (float)pixbuf.get_height();
var width = allocation.width;
Expand Down Expand Up @@ -90,7 +106,7 @@ class ShotCanvas : Gtk.DrawingArea {
Gdk.cairo_set_source_pixbuf(ctx, pixbuf_scaled, 0, 0);
ctx.paint();

if (sel_start.x != -1) {
if (has_selection()) {
var start = image_to_canvas(sel_start);
var end = image_to_canvas(sel_end);

Expand Down Expand Up @@ -124,27 +140,38 @@ class ShotCanvas : Gtk.DrawingArea {

class SnapzWin : Gtk.Window {
private ShotCanvas canvas;
private Gtk.Button crop_button;

public SnapzWin(Gdk.Pixbuf shot) {
title = "Snapz";

var hbox = new Gtk.HBox(false, 12);
hbox.border_width = 12;
var vbox = new Gtk.VBox(false, 12);
vbox.border_width = 12;

canvas = new ShotCanvas(shot);
hbox.pack_start(canvas, true, true, 0);
vbox.pack_start(canvas, true, true, 0);

var bbox = new Gtk.HButtonBox();
bbox.layout_style = Gtk.ButtonBoxStyle.EDGE;

var bbox = new Gtk.VButtonBox();
bbox.layout_style = Gtk.ButtonBoxStyle.START;
crop_button = new Gtk.Button.with_mnemonic("_Crop");
crop_button.set_sensitive(false);
canvas.selection_changed.connect(() => {
crop_button.set_sensitive(canvas.has_selection());
});
crop_button.clicked.connect(() => {
canvas.crop();
});
bbox.add(crop_button);

var save_button = new Gtk.Button.with_mnemonic("_Save");
save_button.clicked.connect(save);
bbox.add(save_button);
bbox.pack_end(save_button, false, false, 0);

hbox.pack_start(bbox, false, false, 0);
vbox.pack_start(bbox, false, false, 0);

add(hbox);
hbox.show_all();
add(vbox);
vbox.show_all();

destroy.connect(Gtk.main_quit);
}
Expand Down

0 comments on commit 680c227

Please sign in to comment.