aseprite/src/jinete/jintern.cpp

127 lines
3.5 KiB
C++
Raw Normal View History

2007-09-23 20:13:58 +00:00
/* Jinete - a GUI library
* Copyright (C) 2003-2009 David Capello.
2007-09-23 20:13:58 +00:00
* All rights reserved.
2007-09-18 23:57:02 +00:00
*
2007-09-23 20:13:58 +00:00
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* * Neither the name of the author nor the names of its contributors may
2007-09-23 20:13:58 +00:00
* be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2007-09-18 23:57:02 +00:00
*/
#include <assert.h>
#include <vector>
#include "jinete/jmanager.h"
#include "jinete/jtheme.h"
#include "jinete/jwidget.h"
#include "jinete/jwindow.h"
2007-09-18 23:57:02 +00:00
static std::vector<JWidget> 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];
}
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
2007-09-18 23:57:02 +00:00
widgets[0] = NULL;
// id>0 all widgets
widgets[1] = widget;
2007-09-18 23:57:02 +00:00
widgets[1]->id = widget_id = 1;
}
else {
// find a free slot
for (widget_id=1; widget_id<widgets.size(); widget_id++) {
// is it free?
if (widgets[widget_id] == NULL)
2007-09-18 23:57:02 +00:00
break;
}
// 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;
2007-09-18 23:57:02 +00:00
widgets[widget_id]->id = widget_id;
}
}
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() &&
2007-09-18 23:57:02 +00:00
widgets[widget->id] &&
widgets[widget->id]->id == widget->id);
}
void _ji_set_font_of_all_widgets(struct FONT *f)
2007-09-18 23:57:02 +00:00
{
int 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]->font(f);
/* then we can reinitialize the theme of each widget */
for (c=0; c<widgets.size(); c++)
if (_ji_is_valid_widget(widgets[c]))
jwidget_init_theme(widgets[c]);
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])) {
2007-09-18 23:57:02 +00:00
if (widgets[c]->type == JI_WINDOW)
jwindow_remap(widgets[c]);
2007-09-18 23:57:02 +00:00
}
/* refresh the screen */
jmanager_refresh_screen();
2007-09-18 23:57:02 +00:00
}