1
0
mirror of git://projects.qi-hardware.com/cae-tools.git synced 2024-12-22 23:26:27 +02:00

The bottom face can now be shifted and rotated as well.

- solidify/overlap.h, solidify/overlap.c (edit_top, overlap_edit): select
  the face to rotate and shift
- solidify/overlap.c (scroll_event): select face to manipulate based on
  edit_top
- solidify/solidify.c (a_b, gui_buttons): new button B+A to select the
  bottom face for editing
- solidify/solidify.c clicked): call overlap_edit to select face to edit
This commit is contained in:
Werner Almesberger 2010-09-28 22:03:02 -03:00
parent 5fd9b33e5a
commit 733332da8c
3 changed files with 26 additions and 6 deletions

View File

@ -28,6 +28,7 @@
static int has_osd; static int has_osd;
static int edit_top;
static int sx(const struct solid *s) static int sx(const struct solid *s)
@ -405,16 +406,20 @@ static gboolean scroll_event(GtkWidget *widget, GdkEventScroll *event,
switch (event->direction) { switch (event->direction) {
case GDK_SCROLL_UP: case GDK_SCROLL_UP:
if (center) if (center)
shift(&s->a->m, dx, dy, dist); shift(edit_top ? &s->a->m : &s->b->m,
edit_top ? dx : -dx, dy, dist);
else else
rotate(&s->a->m, dx > 0 ? rot : -rot); rotate(edit_top ? &s->a->m : &s->b->m,
dx > 0 ? rot : -rot);
draw_image(darea, s, osd); draw_image(darea, s, osd);
break; break;
case GDK_SCROLL_DOWN: case GDK_SCROLL_DOWN:
if (center) if (center)
shift(&s->a->m, dx, dy, -dist); shift(edit_top ? &s->a->m : &s->b->m,
edit_top ? dx : -dx, dy, -dist);
else else
rotate(&s->a->m, dx > 0 ? -rot : rot); rotate(edit_top ? &s->a->m : &s->b->m,
dx > 0 ? -rot : rot);
draw_image(darea, s, osd); draw_image(darea, s, osd);
break; break;
default: default:
@ -446,6 +451,12 @@ static gboolean motion_notify_event(GtkWidget *widget, GdkEventMotion *event,
} }
void overlap_edit(int top)
{
edit_top = top;
}
void overlap(GtkWidget *canvas, struct solid *s) void overlap(GtkWidget *canvas, struct solid *s)
{ {
GtkWidget *evbox, *darea; GtkWidget *evbox, *darea;

View File

@ -18,6 +18,7 @@
#include "solid.h" #include "solid.h"
void overlap_edit(int top);
void overlap(GtkWidget *canvas, struct solid *solid); void overlap(GtkWidget *canvas, struct solid *solid);
#endif /* !OVERLAP_H */ #endif /* !OVERLAP_H */

View File

@ -28,13 +28,16 @@
static struct project *prj; static struct project *prj;
static const struct face *active; /* NULL if overlapping */ static const struct face *active; /* NULL if overlapping */
static GtkWidget *canvas; static GtkWidget *canvas, *a_b;
static void clicked(GtkButton *button, gpointer user_data) static void clicked(GtkButton *button, gpointer user_data)
{ {
struct face *face = user_data; struct face *face = user_data;
if (!face)
overlap_edit(button == GTK_BUTTON(a_b));
if (active == face) if (active == face)
return; return;
@ -66,7 +69,12 @@ static GtkWidget *gui_buttons(void)
g_signal_connect(G_OBJECT(but), "clicked", g_signal_connect(G_OBJECT(but), "clicked",
G_CALLBACK(clicked), prj->s.b); G_CALLBACK(clicked), prj->s.b);
but = gtk_button_new_with_label("A+B"); a_b = gtk_button_new_with_label("A+B");
gtk_box_pack_start(GTK_BOX(vbox), a_b, FALSE, FALSE, 0);
g_signal_connect(G_OBJECT(a_b), "clicked",
G_CALLBACK(clicked), NULL);
but = gtk_button_new_with_label("B+A");
gtk_box_pack_start(GTK_BOX(vbox), but, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), but, FALSE, FALSE, 0);
g_signal_connect(G_OBJECT(but), "clicked", g_signal_connect(G_OBJECT(but), "clicked",
G_CALLBACK(clicked), NULL); G_CALLBACK(clicked), NULL);