Modified state-bar to show the stack of layers.

Removed the sprite & undo size indicators (completely useless).
This commit is contained in:
David Capello 2010-03-28 17:28:38 -03:00
parent 145a78ac09
commit 2d5e2dc7d7
3 changed files with 72 additions and 20 deletions

View File

@ -27,6 +27,7 @@
#include "raster/sprite.h"
#include "undoable.h"
#include "sprite_wrappers.h"
#include "widgets/statebar.h"
//////////////////////////////////////////////////////////////////////
// new_layer
@ -84,6 +85,10 @@ void NewLayerCommand::execute(Context* context)
}
layer->set_name(name);
update_screen_for_sprite(sprite);
app_get_statusbar()->dirty();
statusbar_show_tip(app_get_statusbar(), 1000,
_("Layer `%s' created"), name);
}
}

View File

@ -18,12 +18,17 @@
#include "config.h"
#include "jinete/jwidget.h"
#include "app.h"
#include "commands/command.h"
#include "modules/gui.h"
#include "raster/layer.h"
#include "raster/sprite.h"
#include "raster/undo.h"
#include "undoable.h"
#include "sprite_wrappers.h"
#include "widgets/statebar.h"
//////////////////////////////////////////////////////////////////////
// remove_layer
@ -56,13 +61,22 @@ bool RemoveLayerCommand::enabled(Context* context)
void RemoveLayerCommand::execute(Context* context)
{
std::string layer_name;
CurrentSpriteWriter sprite(context);
{
Undoable undoable(sprite, "Remove Layer");
layer_name = sprite->layer->get_name();
undoable.remove_layer(sprite->layer);
undoable.commit();
}
update_screen_for_sprite(sprite);
app_get_statusbar()->dirty();
statusbar_show_tip(app_get_statusbar(), 1000,
_("Layer `%s' removed"),
layer_name.c_str());
}
//////////////////////////////////////////////////////////////////////

View File

@ -291,6 +291,7 @@ static bool statusbar_msg_proc(JWidget widget, JMessage msg)
break;
case JM_DRAW: {
SkinneableTheme* theme = static_cast<SkinneableTheme*>(widget->theme);
int text_color = ji_color_foreground();
int face_color = ji_color_face();
JRect rc = jwidget_get_rect(widget);
@ -307,15 +308,15 @@ static bool statusbar_msg_proc(JWidget widget, JMessage msg)
rc->x2 -= 2*jguiscale();
rc->y2 -= 2*jguiscale();
/* status bar text */
// Status bar text
if (widget->getText()) {
textout_ex(doublebuffer, widget->getFont(), widget->getText(),
rc->x1+2,
rc->x1+4*jguiscale(),
(rc->y1+rc->y2)/2-text_height(widget->getFont())/2,
text_color, -1);
}
/* draw progress bar */
// Draw progress bar
if (!jlist_empty(statusbar->progress)) {
int width = 64;
int y1, y2;
@ -335,34 +336,66 @@ static bool statusbar_msg_proc(JWidget widget, JMessage msg)
x -= width+4;
}
}
/* draw current sprite size in memory */
else {
char buf[1024];
// Available width for layers buttons
int width = jrect_w(rc)/4;
// Draw layers
try {
const CurrentSpriteReader sprite(UIContext::instance());
if (sprite) {
ustrcpy(buf, "Sprite:");
get_pretty_memsize(sprite_get_memsize(sprite),
buf+ustrsize(buf),
sizeof(buf)-ustrsize(buf));
LayerFolder* folder = sprite->get_folder();
LayerIterator it = folder->get_layer_begin();
LayerIterator end = folder->get_layer_end();
size_t count = folder->get_layers_count();
char buf[256];
ustrcat(buf, " Undo:");
get_pretty_memsize(undo_get_memsize(sprite->undo),
buf+ustrsize(buf),
sizeof(buf)-ustrsize(buf));
for (size_t c=0; it != end; ++it, ++c) {
int x1 = rc->x2-width + c*width/count;
int x2 = rc->x2-width + (c+1)*width/count;
bool hot = (*it == sprite->layer);
{
BITMAP* old_ji_screen = ji_screen; // TODO fix this ugly hack
ji_screen = doublebuffer;
theme->draw_bounds(x1, rc->y1, x2, rc->y2,
hot ? PART_TOOLBUTTON_HOT_NW:
PART_TOOLBUTTON_NORMAL_NW,
hot ? theme->get_button_hot_face_color():
theme->get_button_normal_face_color());
ji_screen = old_ji_screen;
}
usprintf(buf, "%d", c);
textout_centre_ex(doublebuffer, widget->getFont(), buf,
(x1+x2)/2,
(rc->y1+rc->y2)/2-text_height(widget->getFont())/2,
hot ? theme->get_button_hot_text_color():
theme->get_button_normal_text_color(), -1);
}
}
else {
ustrcpy(buf, "No Sprite");
int x1 = rc->x2-width;
int x2 = rc->x2;
{
BITMAP* old_ji_screen = ji_screen; // TODO fix this ugly hack
ji_screen = doublebuffer;
theme->draw_bounds(x1, rc->y1, x2, rc->y2,
PART_TOOLBUTTON_NORMAL_NW,
theme->get_button_normal_face_color());
ji_screen = old_ji_screen;
}
textout_centre_ex(doublebuffer, widget->getFont(), "No Sprite",
(x1+x2)/2,
(rc->y1+rc->y2)/2-text_height(widget->getFont())/2,
theme->get_button_normal_text_color(), -1);
}
}
catch (locked_sprite_exception&) {
ustrcpy(buf, "Sprite is Locked");
// Do nothing...
}
textout_right_ex(doublebuffer, widget->getFont(), buf,
rc->x2-2,
(rc->y1+rc->y2)/2-text_height(widget->getFont())/2,
text_color, -1);
}
jrect_free(rc);