Remove JM_REQSIZE message

This commit is contained in:
David Capello 2012-09-26 18:34:52 -03:00
parent 44b8822e38
commit ef4934bef2
29 changed files with 179 additions and 234 deletions

View File

@ -26,6 +26,7 @@
#include "ui/entry.h"
#include "ui/manager.h"
#include "ui/message.h"
#include "ui/preferred_size_event.h"
#include "ui/rect.h"
#include "ui/system.h"
#include "ui/view.h"
@ -99,24 +100,6 @@ bool ColorCurveEditor::onProcessMessage(Message* msg)
{
switch (msg->type) {
case JM_REQSIZE: {
#if 0
msg->reqsize.w =
+ border_width.l
+ ((m_x2 - m_x1 + 1))
+ border_width.r;
msg->reqsize.h =
+ border_width.t
+ ((m_y2 - m_y1 + 1))
+ border_width.b;
#else
msg->reqsize.w = border_width.l + 1 + border_width.r;
msg->reqsize.h = border_width.t + 1 + border_width.b;
#endif
return true;
}
case JM_KEYPRESSED: {
switch (msg->key.scancode) {
@ -325,6 +308,12 @@ bool ColorCurveEditor::onProcessMessage(Message* msg)
return Widget::onProcessMessage(msg);
}
void ColorCurveEditor::onPreferredSize(PreferredSizeEvent& ev)
{
ev.setPreferredSize(gfx::Size(border_width.l + 1 + border_width.r,
border_width.t + 1 + border_width.b));
}
gfx::Point* ColorCurveEditor::getClosestPoint(int x, int y, int** edit_x, int** edit_y)
{
#define CALCDIST(xx, yy) \

View File

@ -37,6 +37,7 @@ public:
protected:
bool onProcessMessage(ui::Message* msg) OVERRIDE;
void onPreferredSize(ui::PreferredSizeEvent& ev) OVERRIDE;
private:
gfx::Point* getClosestPoint(int x, int y, int** edit_x, int** edit_y);

View File

@ -113,6 +113,7 @@ public:
protected:
bool onProcessMessage(Message* msg) OVERRIDE;
void onPreferredSize(PreferredSizeEvent& ev) OVERRIDE;
private:
void setCursor(int x, int y);
@ -235,13 +236,6 @@ bool AnimationEditor::onProcessMessage(Message* msg)
{
switch (msg->type) {
case JM_REQSIZE:
// This doesn't matter, the AniEditor'll use the entire screen
// anyway.
msg->reqsize.w = 32;
msg->reqsize.h = 32;
return true;
case JM_DRAW: {
JRect clip = &msg->draw.rect;
int layer, first_layer, last_layer;
@ -808,6 +802,12 @@ bool AnimationEditor::onProcessMessage(Message* msg)
return Widget::onProcessMessage(msg);
}
void AnimationEditor::onPreferredSize(PreferredSizeEvent& ev)
{
// This doesn't matter, the AniEditor'll use the entire screen anyway.
ev.setPreferredSize(Size(32, 32));
}
void AnimationEditor::setCursor(int x, int y)
{
int mx = x - rc->x1;

View File

@ -104,7 +104,6 @@ namespace ui {
JM_CLOSE_APP, // The user wants to close the entire application.
JM_DRAW, // Widget needs be repainted.
JM_TIMER, // A timer timeout.
JM_REQSIZE, // Request size.
JM_SETPOS, // Set position.
JM_WINMOVE, // Window movement.
JM_DEFERREDFREE, // Deferred jwidget_free call.

View File

@ -12,6 +12,7 @@
#include "ui/draw.h"
#include "ui/image_view.h"
#include "ui/message.h"
#include "ui/preferred_size_event.h"
#include "ui/rect.h"
#include "ui/system.h"
#include "ui/theme.h"
@ -24,24 +25,14 @@ ImageView::ImageView(BITMAP* bmp, int align)
setAlign(align);
}
bool ImageView::onProcessMessage(Message* msg)
void ImageView::onPreferredSize(PreferredSizeEvent& ev)
{
switch (msg->type) {
struct jrect box, text, icon;
jwidget_get_texticon_info(this, &box, &text, &icon,
getAlign(), m_bmp->w, m_bmp->h);
case JM_REQSIZE: {
struct jrect box, text, icon;
jwidget_get_texticon_info(this, &box, &text, &icon,
getAlign(), m_bmp->w, m_bmp->h);
msg->reqsize.w = border_width.l + jrect_w(&box) + border_width.r;
msg->reqsize.h = border_width.t + jrect_h(&box) + border_width.b;
return true;
}
}
return Widget::onProcessMessage(msg);
ev.setPreferredSize(gfx::Size(border_width.l + jrect_w(&box) + border_width.r,
border_width.t + jrect_h(&box) + border_width.b));
}
void ImageView::onPaint(PaintEvent& ev)

View File

@ -20,7 +20,7 @@ namespace ui {
ImageView(BITMAP* bmp, int align);
protected:
bool onProcessMessage(Message* msg) OVERRIDE;
void onPreferredSize(PreferredSizeEvent& ev) OVERRIDE;
void onPaint(PaintEvent& ev) OVERRIDE;
private:

View File

@ -8,6 +8,7 @@
#include "ui/label.h"
#include "ui/message.h"
#include "ui/preferred_size_event.h"
#include "ui/theme.h"
namespace ui {
@ -32,25 +33,19 @@ void Label::setTextColor(int color)
m_textColor = color;
}
bool Label::onProcessMessage(Message* msg)
void Label::onPreferredSize(PreferredSizeEvent& ev)
{
switch (msg->type) {
case JM_REQSIZE:
if (this->hasText()) {
msg->reqsize.w = jwidget_get_text_length(this);
msg->reqsize.h = jwidget_get_text_height(this);
}
else
msg->reqsize.w = msg->reqsize.h = 0;
msg->reqsize.w += this->border_width.l + this->border_width.r;
msg->reqsize.h += this->border_width.t + this->border_width.b;
return true;
gfx::Size sz(0, 0);
if (this->hasText()) {
sz.w = jwidget_get_text_length(this);
sz.h = jwidget_get_text_height(this);
}
return Widget::onProcessMessage(msg);
sz.w += this->border_width.l + this->border_width.r;
sz.h += this->border_width.t + this->border_width.b;
ev.setPreferredSize(sz);
}
void Label::onPaint(PaintEvent& ev)

View File

@ -21,7 +21,7 @@ namespace ui {
void setTextColor(int color);
protected:
bool onProcessMessage(Message* msg) OVERRIDE;
void onPreferredSize(PreferredSizeEvent& ev) OVERRIDE;
void onPaint(PaintEvent& ev) OVERRIDE;
private:

View File

@ -1037,7 +1037,6 @@ void Manager::pumpQueue()
"JM_CLOSE_APP",
"JM_DRAW",
"JM_TIMER",
"JM_REQSIZE",
"JM_SETPOS",
"JM_WINMOVE",
"JM_DEFERREDFREE",

View File

@ -299,10 +299,6 @@ bool Menu::onProcessMessage(Message* msg)
{
switch (msg->type) {
case JM_REQSIZE:
requestSize(&msg->reqsize.w, &msg->reqsize.h);
return true;
case JM_SETPOS:
set_position(&msg->setpos.rect);
return true;
@ -316,27 +312,28 @@ bool Menu::onProcessMessage(Message* msg)
return Widget::onProcessMessage(msg);
}
void Menu::requestSize(int *w, int *h)
void Menu::onPreferredSize(PreferredSizeEvent& ev)
{
Size size(0, 0);
Size reqSize;
*w = *h = 0;
UI_FOREACH_WIDGET_WITH_END(getChildren(), it, end) {
reqSize = (*it)->getPreferredSize();
if (this->getParent()->type == JI_MENUBAR) {
*w += reqSize.w + ((it+1 != end) ? this->child_spacing: 0);
*h = MAX(*h, reqSize.h);
size.w += reqSize.w + ((it+1 != end) ? this->child_spacing: 0);
size.h = MAX(size.h, reqSize.h);
}
else {
*w = MAX(*w, reqSize.w);
*h += reqSize.h + ((it+1 != end) ? this->child_spacing: 0);
size.w = MAX(size.w, reqSize.w);
size.h += reqSize.h + ((it+1 != end) ? this->child_spacing: 0);
}
}
*w += this->border_width.l + this->border_width.r;
*h += this->border_width.t + this->border_width.b;
size.w += this->border_width.l + this->border_width.r;
size.h += this->border_width.t + this->border_width.b;
ev.setPreferredSize(size);
}
void Menu::set_position(JRect rect)
@ -375,10 +372,6 @@ bool MenuBox::onProcessMessage(Message* msg)
switch (msg->type) {
case JM_REQSIZE:
requestSize(&msg->reqsize.w, &msg->reqsize.h);
return true;
case JM_SETPOS:
set_position(&msg->setpos.rect);
return true;
@ -669,18 +662,17 @@ bool MenuBox::onProcessMessage(Message* msg)
return Widget::onProcessMessage(msg);
}
void MenuBox::requestSize(int* w, int* h)
void MenuBox::onPreferredSize(PreferredSizeEvent& ev)
{
if (Menu* menu = getMenu()) {
Size reqSize = menu->getPreferredSize();
*w = reqSize.w;
*h = reqSize.h;
}
else
*w = *h = 0;
Size size(0, 0);
*w += this->border_width.l + this->border_width.r;
*h += this->border_width.t + this->border_width.b;
if (Menu* menu = getMenu())
size = menu->getPreferredSize();
size.w += this->border_width.l + this->border_width.r;
size.h += this->border_width.t + this->border_width.b;
ev.setPreferredSize(size);
}
void MenuBox::set_position(JRect rect)
@ -698,10 +690,6 @@ bool MenuItem::onProcessMessage(Message* msg)
{
switch (msg->type) {
case JM_REQSIZE:
requestSize(&msg->reqsize.w, &msg->reqsize.h);
return true;
case JM_DRAW:
getTheme()->draw_menuitem(this, &msg->draw.rect);
return true;
@ -898,29 +886,29 @@ void MenuItem::onClick()
Click();
}
void MenuItem::requestSize(int *w, int *h)
void MenuItem::onPreferredSize(PreferredSizeEvent& ev)
{
Size size(0, 0);
int bar = (this->getParent()->getParent()->type == JI_MENUBAR);
if (this->hasText()) {
*w =
size.w =
+ this->border_width.l
+ jwidget_get_text_length(this)
+ ((bar) ? this->child_spacing/4: this->child_spacing)
+ this->border_width.r;
*h =
size.h =
+ this->border_width.t
+ jwidget_get_text_height(this)
+ this->border_width.b;
if (m_accel && !m_accel->isEmpty()) {
*w += ji_font_text_len(this->getFont(), m_accel->toString().c_str());
size.w += ji_font_text_len(this->getFont(), m_accel->toString().c_str());
}
}
else {
*w = *h = 0;
}
ev.setPreferredSize(size);
}
// Climbs the hierarchy of menus to get the most-top menubox.

View File

@ -34,13 +34,13 @@ namespace ui {
protected:
virtual bool onProcessMessage(Message* msg) OVERRIDE;
virtual void onPreferredSize(PreferredSizeEvent& ev) OVERRIDE;
private:
void setOwnerMenuItem(MenuItem* ownerMenuItem) {
m_menuitem = ownerMenuItem;
}
void requestSize(int* w, int* h);
void set_position(JRect rect);
void closeAll();
@ -73,10 +73,10 @@ namespace ui {
protected:
virtual bool onProcessMessage(Message* msg) OVERRIDE;
virtual void onPreferredSize(PreferredSizeEvent& ev) OVERRIDE;
MenuBaseData* createBase();
private:
void requestSize(int* w, int* h);
void set_position(JRect rect);
void closePopup();
@ -125,10 +125,10 @@ namespace ui {
protected:
virtual bool onProcessMessage(Message* msg) OVERRIDE;
virtual void onPreferredSize(PreferredSizeEvent& ev) OVERRIDE;
virtual void onClick();
private:
void requestSize(int* w, int* h);
void openSubmenu(bool select_first);
void closeSubmenu(bool last_of_close_chain);
void startTimer();

View File

@ -74,12 +74,6 @@ namespace ui {
struct jrect rect; /* set position */
};
struct MessageReqSize
{
MessageAny any;
int w, h; /* requested size */
};
struct MessageDrawRgn
{
MessageAny any;
@ -102,7 +96,6 @@ namespace ui {
MessageMouse mouse;
MessageTimer timer;
MessageSetPos setpos;
MessageReqSize reqsize;
MessageDrawRgn drawrgn;
MessageUser user;
};

View File

@ -9,6 +9,7 @@
#include "gfx/size.h"
#include "ui/intern.h"
#include "ui/message.h"
#include "ui/preferred_size_event.h"
#include "ui/rect.h"
#include "ui/region.h"
#include "ui/system.h"
@ -239,16 +240,6 @@ bool View::onProcessMessage(Message* msg)
{
switch (msg->type) {
case JM_REQSIZE: {
Size viewSize = m_viewport.getPreferredSize();
msg->reqsize.w = viewSize.w;
msg->reqsize.h = viewSize.h;
msg->reqsize.w += this->border_width.l + this->border_width.r;
msg->reqsize.h += this->border_width.t + this->border_width.b;
return true;
}
case JM_SETPOS:
jrect_copy(this->rc, &msg->setpos.rect);
updateView();
@ -273,6 +264,14 @@ bool View::onProcessMessage(Message* msg)
return Widget::onProcessMessage(msg);
}
void View::onPreferredSize(PreferredSizeEvent& ev)
{
Size viewSize = m_viewport.getPreferredSize();
viewSize.w += this->border_width.l + this->border_width.r;
viewSize.h += this->border_width.t + this->border_width.b;
ev.setPreferredSize(viewSize);
}
// static
void View::displaceWidgets(Widget* widget, int x, int y)
{

View File

@ -49,6 +49,7 @@ public:
protected:
// Events
bool onProcessMessage(Message* msg) OVERRIDE;
void onPreferredSize(PreferredSizeEvent& ev) OVERRIDE;
private:
static void displaceWidgets(Widget* widget, int x, int y);

View File

@ -9,6 +9,7 @@
#include "gfx/point.h"
#include "gfx/size.h"
#include "ui/message.h"
#include "ui/preferred_size_event.h"
#include "ui/theme.h"
#include "ui/view.h"
#include "ui/viewport.h"
@ -27,11 +28,6 @@ bool Viewport::onProcessMessage(Message* msg)
{
switch (msg->type) {
case JM_REQSIZE:
msg->reqsize.w = this->border_width.l + 1 + this->border_width.r;
msg->reqsize.h = this->border_width.t + 1 + this->border_width.b;
return true;
case JM_SETPOS:
set_position(&msg->setpos.rect);
return true;
@ -44,6 +40,12 @@ bool Viewport::onProcessMessage(Message* msg)
return Widget::onProcessMessage(msg);
}
void Viewport::onPreferredSize(PreferredSizeEvent& ev)
{
ev.setPreferredSize(gfx::Size(this->border_width.l + 1 + this->border_width.r,
this->border_width.t + 1 + this->border_width.b));
}
Size Viewport::calculateNeededSize()
{
Size maxSize(0, 0);

View File

@ -22,6 +22,7 @@ namespace ui {
protected:
// Events
bool onProcessMessage(Message* msg) OVERRIDE;
void onPreferredSize(PreferredSizeEvent& ev) OVERRIDE;
private:
void set_position(JRect rect);

View File

@ -1316,11 +1316,6 @@ bool Widget::onProcessMessage(Message* msg)
return ev.isPainted();
}
case JM_REQSIZE:
msg->reqsize.w = this->min_w;
msg->reqsize.h = this->min_h;
return true;
case JM_SETPOS: {
jrect_copy(this->rc, &msg->setpos.rect);
JRect cpos = jwidget_get_child_rect(this);
@ -1403,24 +1398,9 @@ void Widget::onInvalidateRegion(const JRegion region)
}
}
/**
Calculates the preferred size for the widget.
The default implementation get the preferred size of the current
layout manager. Also, if there exists layout-free widgets inside
this parent (like a StatusBar), they preferred-sizes are
accumulated.
@see Layout#getPreferredSize,
*/
void Widget::onPreferredSize(PreferredSizeEvent& ev)
{
Message* msg = jmessage_new(JM_REQSIZE);
sendMessage(msg);
Size sz(msg->reqsize.w, msg->reqsize.h);
jmessage_free(msg);
ev.setPreferredSize(sz);
ev.setPreferredSize(Size(this->min_w, this->min_h));
}
void Widget::onLoadLayout(LoadLayoutEvent& ev)

View File

@ -892,10 +892,6 @@ bool Editor::onProcessMessage(Message* msg)
{
switch (msg->type) {
case JM_REQSIZE:
editor_request_size(&msg->reqsize.w, &msg->reqsize.h);
return true;
case JM_DRAW: {
SkinTheme* theme = static_cast<SkinTheme*>(this->getTheme());
@ -1059,6 +1055,27 @@ bool Editor::onProcessMessage(Message* msg)
return Widget::onProcessMessage(msg);
}
void Editor::onPreferredSize(PreferredSizeEvent& ev)
{
gfx::Size sz(0, 0);
if (m_sprite) {
View* view = View::getView(this);
Rect vp = view->getViewportBounds();
m_offset_x = std::max<int>(vp.w/2, vp.w - m_sprite->getWidth()/2);
m_offset_y = std::max<int>(vp.h/2, vp.h - m_sprite->getHeight()/2);
sz.w = (m_sprite->getWidth() << m_zoom) + m_offset_x*2;
sz.h = (m_sprite->getHeight() << m_zoom) + m_offset_y*2;
}
else {
sz.w = 4;
sz.h = 4;
}
ev.setPreferredSize(sz);
}
// When the current tool is changed
void Editor::onCurrentToolChange()
{
@ -1073,27 +1090,6 @@ void Editor::onFgColorChange()
}
}
/**
* Returns size for the editor viewport
*/
void Editor::editor_request_size(int *w, int *h)
{
if (m_sprite) {
View* view = View::getView(this);
Rect vp = view->getViewportBounds();
m_offset_x = std::max<int>(vp.w/2, vp.w - m_sprite->getWidth()/2);
m_offset_y = std::max<int>(vp.h/2, vp.h - m_sprite->getHeight()/2);
*w = (m_sprite->getWidth() << m_zoom) + m_offset_x*2;
*h = (m_sprite->getHeight() << m_zoom) + m_offset_y*2;
}
else {
*w = 4;
*h = 4;
}
}
void Editor::editor_setcursor()
{
bool used = false;

View File

@ -154,6 +154,7 @@ public:
protected:
bool onProcessMessage(ui::Message* msg) OVERRIDE;
void onPreferredSize(ui::PreferredSizeEvent& ev) OVERRIDE;
void onCurrentToolChange();
void onFgColorChange();
@ -173,7 +174,6 @@ private:
void drawGrid(const gfx::Rect& gridBounds, const Color& color);
void editor_request_size(int *w, int *h);
void editor_setcursor();
void for_each_pixel_of_pen(int screen_x, int screen_y,

View File

@ -109,28 +109,6 @@ bool FileList::onProcessMessage(Message* msg)
{
switch (msg->type) {
case JM_REQSIZE:
if (!m_req_valid) {
gfx::Size reqSize(0, 0);
// rows
for (FileItemList::iterator
it=m_list.begin();
it!=m_list.end(); ++it) {
IFileItem* fi = *it;
gfx::Size itemSize = getFileItemSize(fi);
reqSize.w = MAX(reqSize.w, itemSize.w);
reqSize.h += itemSize.h;
}
m_req_valid = true;
m_req_w = reqSize.w;
m_req_h = reqSize.h;
}
msg->reqsize.w = m_req_w;
msg->reqsize.h = m_req_h;
return true;
case JM_DRAW: {
View* view = View::getView(this);
gfx::Rect vp = view->getViewportBounds();
@ -434,6 +412,28 @@ bool FileList::onProcessMessage(Message* msg)
return Widget::onProcessMessage(msg);
}
void FileList::onPreferredSize(PreferredSizeEvent& ev)
{
if (!m_req_valid) {
gfx::Size reqSize(0, 0);
// rows
for (FileItemList::iterator
it=m_list.begin();
it!=m_list.end(); ++it) {
IFileItem* fi = *it;
gfx::Size itemSize = getFileItemSize(fi);
reqSize.w = MAX(reqSize.w, itemSize.w);
reqSize.h += itemSize.h;
}
m_req_valid = true;
m_req_w = reqSize.w;
m_req_h = reqSize.h;
}
ev.setPreferredSize(Size(m_req_w, m_req_h));
}
void FileList::onFileSelected()
{
FileSelected();

View File

@ -50,6 +50,7 @@ namespace widgets {
protected:
virtual bool onProcessMessage(ui::Message* msg) OVERRIDE;
virtual void onPreferredSize(ui::PreferredSizeEvent& ev) OVERRIDE;
virtual void onFileSelected();
virtual void onFileAccepted();
virtual void onCurrentFolderChanged();

View File

@ -32,6 +32,7 @@
#include "raster/palette.h"
#include "ui/manager.h"
#include "ui/message.h"
#include "ui/preferred_size_event.h"
#include "ui/rect.h"
#include "ui/system.h"
#include "ui/theme.h"
@ -201,10 +202,6 @@ bool PaletteView::onProcessMessage(Message* msg)
{
switch (msg->type) {
case JM_REQSIZE:
request_size(&msg->reqsize.w, &msg->reqsize.h);
return true;
case JM_SETPOS:
if (!m_isUpdatingColumns) {
m_isUpdatingColumns = true;
@ -343,6 +340,13 @@ bool PaletteView::onProcessMessage(Message* msg)
return Widget::onProcessMessage(msg);
}
void PaletteView::onPreferredSize(ui::PreferredSizeEvent& ev)
{
gfx::Size sz;
request_size(&sz.w, &sz.h);
ev.setPreferredSize(sz);
}
void PaletteView::request_size(int* w, int* h)
{
div_t d = div(Palette::MaxColors, m_columns);

View File

@ -52,6 +52,7 @@ public:
protected:
bool onProcessMessage(ui::Message* msg) OVERRIDE;
void onPreferredSize(ui::PreferredSizeEvent& ev) OVERRIDE;
private:
void request_size(int* w, int* h);

View File

@ -472,13 +472,6 @@ bool StatusBar::onProcessMessage(Message* msg)
{
switch (msg->type) {
case JM_REQSIZE:
msg->reqsize.w = msg->reqsize.h =
4*jguiscale()
+ jwidget_get_text_height(this)
+ 4*jguiscale();
return true;
case JM_SETPOS:
jrect_copy(this->rc, &msg->setpos.rect);
{
@ -826,6 +819,12 @@ bool StatusBar::onProcessMessage(Message* msg)
return Widget::onProcessMessage(msg);
}
void StatusBar::onPreferredSize(PreferredSizeEvent& ev)
{
int s = 4*jguiscale() + jwidget_get_text_height(this) + 4*jguiscale();
ev.setPreferredSize(Size(s, s));
}
bool StatusBar::CustomizedTipWindow::onProcessMessage(Message* msg)
{
switch (msg->type) {

View File

@ -104,6 +104,7 @@ public:
protected:
bool onProcessMessage(ui::Message* msg) OVERRIDE;
void onPreferredSize(ui::PreferredSizeEvent& ev) OVERRIDE;
private:
void onCurrentToolChange();

View File

@ -248,13 +248,6 @@ bool Tabs::onProcessMessage(Message* msg)
switch (msg->type) {
case JM_REQSIZE:
msg->reqsize.w = 0; // msg->reqsize.h = 4 + jwidget_get_text_height(widget) + 5;
msg->reqsize.h =
theme->get_part(PART_TAB_FILLER)->h +
theme->get_part(PART_TAB_BOTTOM_NORMAL)->h;
return true;
case JM_SETPOS:
jrect_copy(this->rc, &msg->setpos.rect);
setScrollX(m_scrollX);
@ -440,6 +433,15 @@ bool Tabs::onProcessMessage(Message* msg)
return Widget::onProcessMessage(msg);
}
void Tabs::onPreferredSize(PreferredSizeEvent& ev)
{
SkinTheme* theme = static_cast<SkinTheme*>(this->getTheme());
ev.setPreferredSize(gfx::Size(0, // 4 + jwidget_get_text_height(widget) + 5,
theme->get_part(PART_TAB_FILLER)->h +
theme->get_part(PART_TAB_BOTTOM_NORMAL)->h));
}
void Tabs::onInitTheme(InitThemeEvent& ev)
{
Widget::onInitTheme(ev);

View File

@ -91,6 +91,7 @@ public:
protected:
bool onProcessMessage(ui::Message* msg) OVERRIDE;
void onPreferredSize(ui::PreferredSizeEvent& ev) OVERRIDE;
void onInitTheme(ui::InitThemeEvent& ev) OVERRIDE;
void onSetText() OVERRIDE;

View File

@ -57,6 +57,7 @@ public:
protected:
bool onProcessMessage(Message* msg) OVERRIDE;
void onPreferredSize(PreferredSizeEvent& ev) OVERRIDE;
private:
Rect getToolBounds(int index);
@ -123,13 +124,6 @@ bool ToolBar::onProcessMessage(Message* msg)
{
switch (msg->type) {
case JM_REQSIZE: {
Size iconsize = getToolIconSize(this);
msg->reqsize.w = iconsize.w + this->border_width.l + this->border_width.r;
msg->reqsize.h = iconsize.h + this->border_width.t + this->border_width.b;
return true;
}
case JM_DRAW: {
BITMAP *doublebuffer = create_bitmap(jrect_w(&msg->draw.rect),
jrect_h(&msg->draw.rect));
@ -338,6 +332,14 @@ bool ToolBar::onProcessMessage(Message* msg)
return Widget::onProcessMessage(msg);
}
void ToolBar::onPreferredSize(PreferredSizeEvent& ev)
{
Size iconsize = getToolIconSize(this);
iconsize.w += this->border_width.l + this->border_width.r;
iconsize.h += this->border_width.t + this->border_width.b;
ev.setPreferredSize(iconsize);
}
int ToolBar::getToolGroupIndex(ToolGroup* group)
{
ToolBox* toolbox = App::instance()->getToolBox();
@ -602,23 +604,6 @@ bool ToolStrip::onProcessMessage(Message* msg)
{
switch (msg->type) {
case JM_REQSIZE: {
ToolBox* toolbox = App::instance()->getToolBox();
int c = 0;
for (ToolIterator it = toolbox->begin(); it != toolbox->end(); ++it) {
Tool* tool = *it;
if (tool->getGroup() == m_group) {
++c;
}
}
Size iconsize = getToolIconSize(this);
msg->reqsize.w = iconsize.w * c;
msg->reqsize.h = iconsize.h;
return true;
}
case JM_DRAW: {
BITMAP *doublebuffer = create_bitmap(jrect_w(&msg->draw.rect),
jrect_h(&msg->draw.rect));
@ -718,6 +703,22 @@ bool ToolStrip::onProcessMessage(Message* msg)
return Widget::onProcessMessage(msg);
}
void ToolStrip::onPreferredSize(PreferredSizeEvent& ev)
{
ToolBox* toolbox = App::instance()->getToolBox();
int c = 0;
for (ToolIterator it = toolbox->begin(); it != toolbox->end(); ++it) {
Tool* tool = *it;
if (tool->getGroup() == m_group) {
++c;
}
}
Size iconsize = getToolIconSize(this);
ev.setPreferredSize(Size(iconsize.w * c, iconsize.h));
}
Rect ToolStrip::getToolBounds(int index)
{
Size iconsize = getToolIconSize(this);

View File

@ -58,6 +58,7 @@ public:
protected:
bool onProcessMessage(ui::Message* msg) OVERRIDE;
void onPreferredSize(ui::PreferredSizeEvent& ev) OVERRIDE;
private:
int getToolGroupIndex(tools::ToolGroup* group);