aseprite/src/gui/intern.cpp

122 lines
2.4 KiB
C++
Raw Normal View History

// ASE gui library
2011-01-18 23:49:53 +00:00
// Copyright (C) 2001-2011 David Capello
//
// This source file is ditributed under a BSD-like license, please
// read LICENSE.txt for more information.
2007-09-18 23:57:02 +00:00
2009-07-12 20:29:16 +00:00
#include "config.h"
#include <vector>
#include "gui/frame.h"
#include "gui/manager.h"
#include "gui/theme.h"
#include "gui/widget.h"
2007-09-18 23:57:02 +00:00
static std::vector<JWidget>* widgets;
int _ji_widgets_init()
{
widgets = new std::vector<JWidget>;
return 0;
}
void _ji_widgets_exit()
{
delete widgets;
}
2007-09-18 23:57:02 +00:00
JWidget _ji_get_widget_by_id(JID widget_id)
2007-09-18 23:57:02 +00:00
{
ASSERT((widget_id >= 0) && (widget_id < widgets->size()));
2007-09-18 23:57:02 +00:00
return (*widgets)[widget_id];
2007-09-18 23:57:02 +00:00
}
JWidget* _ji_get_widget_array(int* n)
2007-09-18 23:57:02 +00:00
{
*n = widgets->size();
return &widgets->front();
2007-09-18 23:57:02 +00:00
}
void _ji_add_widget(JWidget widget)
2007-09-18 23:57:02 +00:00
{
JID widget_id;
// first widget
if (widgets->empty()) {
widgets->resize(2);
2007-09-18 23:57:02 +00:00
// id=0 no widget
(*widgets)[0] = NULL;
2007-09-18 23:57:02 +00:00
// id>0 all widgets
(*widgets)[1] = widget;
(*widgets)[1]->id = widget_id = 1;
2007-09-18 23:57:02 +00:00
}
else {
// find a free slot
for (widget_id=1; widget_id<widgets->size(); widget_id++) {
// is it free?
if ((*widgets)[widget_id] == NULL)
break;
2007-09-18 23:57:02 +00:00
}
// we need space for other widget more?
if (widget_id == widgets->size())
widgets->resize(widgets->size()+1);
2007-09-18 23:57:02 +00:00
(*widgets)[widget_id] = widget;
(*widgets)[widget_id]->id = widget_id;
2007-09-18 23:57:02 +00:00
}
}
void _ji_remove_widget(JWidget widget)
2007-09-18 23:57:02 +00:00
{
ASSERT_VALID_WIDGET(widget);
2007-09-18 23:57:02 +00:00
(*widgets)[widget->id] = NULL;
2007-09-18 23:57:02 +00:00
}
bool _ji_is_valid_widget(JWidget widget)
2007-09-18 23:57:02 +00:00
{
return (widget &&
widget->id >= 0 &&
widget->id < widgets->size() &&
(*widgets)[widget->id] &&
(*widgets)[widget->id]->id == widget->id);
2007-09-18 23:57:02 +00:00
}
void _ji_set_font_of_all_widgets(FONT* f)
2007-09-18 23:57:02 +00:00
{
size_t c;
2007-09-18 23:57:02 +00:00
// first of all, we have to set the font to all the widgets
for (c=0; c<widgets->size(); c++)
if (_ji_is_valid_widget((*widgets)[c]))
(*widgets)[c]->setFont(f);
}
void _ji_reinit_theme_in_all_widgets()
{
size_t c;
// Then we can reinitialize the theme of each widget
for (c=0; c<widgets->size(); c++)
if (_ji_is_valid_widget((*widgets)[c])) {
(*widgets)[c]->setTheme(CurrentTheme::get());
(*widgets)[c]->initTheme();
}
2007-09-18 23:57:02 +00:00
// Remap the windows
for (c=0; c<widgets->size(); c++)
if (_ji_is_valid_widget((*widgets)[c])) {
if ((*widgets)[c]->type == JI_FRAME)
static_cast<Frame*>((*widgets)[c])->remap_window();
2007-09-18 23:57:02 +00:00
}
// Refresh the screen
jmanager_refresh_screen();
2007-09-18 23:57:02 +00:00
}