Skip to content

Commit

Permalink
ADDED initial zoom support. Not working very well yet.
Browse files Browse the repository at this point in the history
  • Loading branch information
ksterker committed Apr 8, 2011
1 parent 2e5b58b commit 09064d6
Show file tree
Hide file tree
Showing 5 changed files with 127 additions and 23 deletions.
45 changes: 45 additions & 0 deletions src/modeller/gui_modeller.cc
Expand Up @@ -148,6 +148,36 @@ static void on_file_save_activate (GtkMenuItem * menuitem, gpointer user_data)
}
}

// Model Menu: Zoom In
static void on_model_zoom_in (GtkMenuItem * menuitem, gpointer user_data)
{
base::Scale++;

GuiModeller *modeller = (GuiModeller *) user_data;
modeller->setActive("item_zoom_out", true);
modeller->zoom();
}

// Model Menu: Zoom Out
static void on_model_zoom_out (GtkMenuItem * menuitem, gpointer user_data)
{
base::Scale--;

GuiModeller *modeller = (GuiModeller *) user_data;
modeller->setActive("item_zoom_out", base::Scale > 1);
modeller->zoom();
}

// Model Menu: Zoom Normal
static void on_model_reset_zoom (GtkMenuItem * menuitem, gpointer user_data)
{
base::Scale = 1;

GuiModeller *modeller = (GuiModeller *) user_data;
modeller->setActive("item_zoom_out", false);
modeller->zoom();
}

// callback for selection changes in sprite list
static void anim_selected_event (GtkTreeSelection *selection, gpointer user_data)
{
Expand Down Expand Up @@ -361,6 +391,12 @@ GuiModeller::GuiModeller ()
g_signal_connect (widget, "activate", G_CALLBACK (on_file_save_as_activate), (gpointer) this);
widget = gtk_builder_get_object (Ui, "item_quit");
g_signal_connect (widget, "activate", G_CALLBACK (on_widget_destroy), (gpointer) NULL);
widget = gtk_builder_get_object (Ui, "item_zoom_in");
g_signal_connect (widget, "activate", G_CALLBACK (on_model_zoom_in), (gpointer) this);
widget = gtk_builder_get_object (Ui, "item_zoom_out");
g_signal_connect (widget, "activate", G_CALLBACK (on_model_zoom_out), (gpointer) this);
widget = gtk_builder_get_object (Ui, "item_zoom_normal");
g_signal_connect (widget, "activate", G_CALLBACK (on_model_reset_zoom), (gpointer) this);

// connect button signals
widget = gtk_builder_get_object (Ui, "add_sprite");
Expand Down Expand Up @@ -392,6 +428,9 @@ GuiModeller::GuiModeller ()
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(widget));
g_signal_connect (G_OBJECT(selection), "changed", G_CALLBACK(shape_selected_event), this);

// can't zoom less than 1
setActive("item_zoom_out", false);

// update title
setTitle(false);
}
Expand Down Expand Up @@ -891,6 +930,12 @@ void GuiModeller::updateShapeList (world::placeable_model *model)
gtk_toggle_button_set_active (is_solid, shape->is_solid ());
}

// zoom displayed model
void GuiModeller::zoom()
{
Preview->draw(0, 0, 800, 600);
}

// enable or disable a widget
void GuiModeller::setActive (const std::string & id, const bool & sensitive)
{
Expand Down
5 changes: 5 additions & 0 deletions src/modeller/gui_modeller.h
Expand Up @@ -167,6 +167,11 @@ class GuiModeller
*/
void setActive (const std::string & id, const bool & sensitive);

/**
* Update zoom level of displayed model.
*/
void zoom ();

protected:
/**
* Update main window title.
Expand Down
19 changes: 14 additions & 5 deletions src/modeller/gui_preview.cc
Expand Up @@ -145,16 +145,25 @@ void GuiPreview::draw (const int & sx, const int & sy, const int & l, const int
// set clipping rectangle
gfx::drawing_area da (sx, sy, l, h);

// draw target
Target->draw (0, 0, &da, s);
// zoom stuff (testing)
if (base::Scale != 1)
{
gfx::surface *tmp = gfx::create_surface();
tmp->resize(Target->length(), Target->height());
Target->scale(tmp, base::Scale);
tmp->draw (0, 0, &da, s);
delete tmp;
}
else
{
// draw target
Target->draw (0, 0, &da, s);
}
}

// update size of the view
void GuiPreview::resizeSurface (GtkWidget *widget)
{
// set the size of the drawing area
gtk_widget_set_size_request (GTK_WIDGET (DrawingArea), widget->allocation.width, widget->allocation.height);

// set size of the render target
Target->resize (widget->allocation.width, widget->allocation.height);

Expand Down
4 changes: 4 additions & 0 deletions src/modeller/mdl_renderer.cc
Expand Up @@ -85,12 +85,16 @@ void ModelRenderer::draw (const s_int16 & x, const s_int16 & y, const world::ren
{
if (ActiveModel != NULL && obj.Shape == ActiveModel->current_shape())
{
// draw everything behind the currently selected sprite
Overlay->draw (0, 0, &da, target);
// clear overlay
Overlay->fillrect (0, 0, Overlay->length(), Overlay->height(), 0);
// draw currently selected sprite
renderer_base::draw (x, y, obj, da, target);
}
else
{
// render unselected sprites onto translucent overlay
renderer_base::draw (x, y, obj, da, Overlay);
}
}
Expand Down
77 changes: 59 additions & 18 deletions src/modeller/modeller.glade
@@ -1,4 +1,4 @@
<?xml version="1.0"?>
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk+" version="2.16"/>
<!-- interface-naming-policy project-wide -->
Expand All @@ -25,14 +25,13 @@
<child>
<object class="GtkVBox" id="vbox1">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkMenuBar" id="menu_bar">
<property name="visible">True</property>
<child>
<object class="GtkMenuItem" id="menuitem1">
<property name="visible">True</property>
<property name="label" translatable="yes">_Datei</property>
<property name="label" translatable="yes">_File</property>
<property name="use_underline">True</property>
<child type="submenu">
<object class="GtkMenu" id="menu1">
Expand Down Expand Up @@ -91,6 +90,51 @@
</child>
</object>
</child>
<child>
<object class="GtkMenuItem" id="menuitem2">
<property name="visible">True</property>
<property name="label">_Model</property>
<property name="use_underline">True</property>
<child type="submenu">
<object class="GtkMenu" id="menu2">
<property name="visible">True</property>
<property name="ubuntu_local">True</property>
<child>
<object class="GtkImageMenuItem" id="item_zoom_in">
<property name="label">gtk-zoom-in</property>
<property name="visible">True</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<property name="accel_group">menu_accelerators</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="item_zoom_out">
<property name="label">gtk-zoom-out</property>
<property name="visible">True</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<property name="accel_group">menu_accelerators</property>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="item_zoom_separator">
<property name="visible">True</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="item_zoom_normal">
<property name="label">gtk-zoom-100</property>
<property name="visible">True</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<property name="accel_group">menu_accelerators</property>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
Expand All @@ -112,7 +156,6 @@
<object class="GtkVBox" id="vbox2">
<property name="width_request">300</property>
<property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkFrame" id="frame1">
<property name="visible">True</property>
Expand Down Expand Up @@ -230,12 +273,10 @@
<child>
<object class="GtkVBox" id="vbox3">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<property name="spacing">2</property>
<child>
<object class="GtkVBox" id="vbox4">
<object class="GtkHBox" id="hbox4">
<property name="visible">True</property>
<property name="orientation">horizontal</property>
<property name="spacing">4</property>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow2">
Expand Down Expand Up @@ -269,8 +310,8 @@
<property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="image">img_add2</property>
<property name="tooltip_text" translatable="yes">Add new shape</property>
<property name="image">img_add2</property>
</object>
<packing>
<property name="expand">False</property>
Expand All @@ -284,8 +325,8 @@
<property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="image">img_remove2</property>
<property name="tooltip_text" translatable="yes">Remove selected shape</property>
<property name="image">img_remove2</property>
</object>
<packing>
<property name="expand">False</property>
Expand All @@ -299,8 +340,8 @@
<property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="image">img_copy</property>
<property name="tooltip_text" translatable="yes">Copy current shape(s) to clipboard</property>
<property name="image">img_copy</property>
</object>
<packing>
<property name="expand">False</property>
Expand Down Expand Up @@ -438,7 +479,7 @@
<object class="GtkEntry" id="offset_x">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">&#x25CF;</property>
<property name="invisible_char"></property>
<property name="width_chars">3</property>
</object>
<packing>
Expand All @@ -453,7 +494,7 @@
<object class="GtkEntry" id="offset_y">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">&#x25CF;</property>
<property name="invisible_char"></property>
<property name="width_chars">3</property>
</object>
<packing>
Expand All @@ -468,7 +509,7 @@
<object class="GtkEntry" id="pos_x">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">&#x25CF;</property>
<property name="invisible_char"></property>
<property name="width_chars">3</property>
</object>
<packing>
Expand All @@ -483,7 +524,7 @@
<object class="GtkEntry" id="pos_y">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">&#x25CF;</property>
<property name="invisible_char"></property>
<property name="width_chars">3</property>
</object>
<packing>
Expand All @@ -498,7 +539,7 @@
<object class="GtkEntry" id="pos_z">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">&#x25CF;</property>
<property name="invisible_char"></property>
<property name="width_chars">3</property>
</object>
<packing>
Expand All @@ -513,7 +554,7 @@
<object class="GtkEntry" id="size_x">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">&#x25CF;</property>
<property name="invisible_char"></property>
<property name="width_chars">3</property>
</object>
<packing>
Expand All @@ -528,7 +569,7 @@
<object class="GtkEntry" id="size_y">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">&#x25CF;</property>
<property name="invisible_char"></property>
<property name="width_chars">3</property>
</object>
<packing>
Expand All @@ -543,7 +584,7 @@
<object class="GtkEntry" id="size_z">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">&#x25CF;</property>
<property name="invisible_char"></property>
<property name="width_chars">3</property>
</object>
<packing>
Expand Down

0 comments on commit 09064d6

Please sign in to comment.