Refactored all jwidget_has_focus/mouse/capture functions to member functions.

Added Widget::hasFocus/Mouse/Capture and Widget::hasMouseOver() members.
Removed JI_HARDCAPTURE flag (it was used only by button widget).
This commit is contained in:
David Capello 2010-04-25 12:03:25 -03:00
parent 314e59dae1
commit f0f5bafd78
28 changed files with 231 additions and 244 deletions

View File

@ -302,7 +302,7 @@ static bool anieditor_msg_proc(JWidget widget, JMessage msg)
case JM_BUTTONPRESSED:
if (msg->mouse.middle || anieditor->space_pressed) {
jwidget_hard_capture_mouse(widget);
widget->captureMouse();
anieditor->state = STATE_SCROLLING;
return true;
}
@ -317,7 +317,7 @@ static bool anieditor_msg_proc(JWidget widget, JMessage msg)
/* do nothing */
break;
case A_PART_SEPARATOR:
jwidget_hard_capture_mouse(widget);
widget->captureMouse();
anieditor->state = STATE_MOVING_SEPARATOR;
break;
case A_PART_HEADER_LAYER:
@ -330,7 +330,7 @@ static bool anieditor_msg_proc(JWidget widget, JMessage msg)
sprite_writer->setCurrentFrame(anieditor->clk_frame);
}
jwidget_dirty(widget); /* TODO replace this by redrawing old current frame and new current frame */
jwidget_hard_capture_mouse(widget);
widget->captureMouse();
anieditor->state = STATE_MOVING_FRAME;
break;
case A_PART_LAYER: {
@ -356,15 +356,15 @@ static bool anieditor_msg_proc(JWidget widget, JMessage msg)
/* change the scroll to show the new selected cel */
anieditor_show_cel(widget, anieditor->clk_layer, sprite->getCurrentFrame());
jwidget_hard_capture_mouse(widget);
widget->captureMouse();
anieditor->state = STATE_MOVING_LAYER;
break;
}
case A_PART_LAYER_EYE_ICON:
jwidget_hard_capture_mouse(widget);
widget->captureMouse();
break;
case A_PART_LAYER_LOCK_ICON:
jwidget_hard_capture_mouse(widget);
widget->captureMouse();
break;
case A_PART_CEL: {
const SpriteReader sprite((Sprite*)anieditor->sprite);
@ -397,7 +397,7 @@ static bool anieditor_msg_proc(JWidget widget, JMessage msg)
anieditor_show_cel(widget, anieditor->clk_layer, sprite->getCurrentFrame());
/* capture the mouse (to move the cel) */
jwidget_hard_capture_mouse(widget);
widget->captureMouse();
anieditor->state = STATE_MOVING_CEL;
break;
}
@ -419,7 +419,7 @@ static bool anieditor_msg_proc(JWidget widget, JMessage msg)
int mx = msg->mouse.x - widget->rc->x1;
int my = msg->mouse.y - widget->rc->y1;
if (jwidget_has_capture(widget)) {
if (widget->hasCapture()) {
if (anieditor->state == STATE_SCROLLING) {
anieditor_set_scroll(widget,
anieditor->scroll_x+jmouse_x(1)-jmouse_x(0),
@ -504,8 +504,8 @@ static bool anieditor_msg_proc(JWidget widget, JMessage msg)
}
case JM_BUTTONRELEASED:
if (jwidget_has_capture(widget)) {
jwidget_release_mouse(widget);
if (widget->hasCapture()) {
widget->releaseMouse();
if (anieditor->state == STATE_SCROLLING) {
anieditor->state = STATE_STANDBY;

View File

@ -100,9 +100,8 @@ class Frame;
#define JI_MAGNETIC 0x0080 /* attract the focus */
#define JI_EXPANSIVE 0x0100 /* is expansive (want more space) */
#define JI_DECORATIVE 0x0200 /* to decorate windows */
#define JI_HARDCAPTURE 0x0400 /* only windows use hard capture */
#define JI_INITIALIZED 0x0800 /* the widget was already initialized by a theme */
#define JI_NOTEXT 0x1000 /* the widget does not have text */
#define JI_INITIALIZED 0x0400 /* the widget was already initialized by a theme */
#define JI_NOTEXT 0x0800 /* the widget does not have text */
/* widget types */
enum {

View File

@ -58,6 +58,7 @@ typedef struct ButtonCommand
typedef struct Button
{
/* generic */
bool pressed_status;
int draw_type;
BITMAP *icon;
int icon_align;
@ -251,10 +252,11 @@ void jradio_deselect_group(JWidget widget)
static bool button_msg_proc(JWidget widget, JMessage msg)
{
Button* button = reinterpret_cast<Button*>(jwidget_get_data(widget, widget->type));
switch (msg->type) {
case JM_DESTROY: {
Button* button = reinterpret_cast<Button*>(jwidget_get_data(widget, widget->type));
JLink link;
JI_LIST_FOR_EACH(button->commands, link)
@ -270,7 +272,6 @@ static bool button_msg_proc(JWidget widget, JMessage msg)
return true;
case JM_DRAW: {
Button* button = reinterpret_cast<Button*>(jwidget_get_data(widget, widget->type));
switch (button->draw_type) {
case JI_BUTTON: widget->theme->draw_button(widget, &msg->draw.rect); break;
case JI_CHECK: widget->theme->draw_check(widget, &msg->draw.rect); break;
@ -312,7 +313,7 @@ static bool button_msg_proc(JWidget widget, JMessage msg)
/* for JI_BUTTON */
if (widget->type == JI_BUTTON) {
/* has focus and press enter/space */
if (jwidget_has_focus(widget)) {
if (widget->hasFocus()) {
if ((msg->key.scancode == KEY_ENTER) ||
(msg->key.scancode == KEY_ENTER_PAD) ||
(msg->key.scancode == KEY_SPACE)) {
@ -344,7 +345,7 @@ static bool button_msg_proc(JWidget widget, JMessage msg)
else {
/* if the widget has the focus and the user press space or
if the user press Alt+the underscored letter of the button */
if ((jwidget_has_focus(widget) &&
if ((widget->hasFocus() &&
(msg->key.scancode == KEY_SPACE)) ||
((msg->any.shifts & KB_ALT_FLAG) &&
(jwidget_check_underscored(widget, msg->key.scancode)))) {
@ -388,7 +389,9 @@ static bool button_msg_proc(JWidget widget, JMessage msg)
case JI_BUTTON:
if (jwidget_is_enabled(widget)) {
jwidget_select(widget);
jwidget_capture_mouse(widget);
button->pressed_status = jwidget_is_selected(widget);
widget->captureMouse();
}
return true;
@ -399,7 +402,8 @@ static bool button_msg_proc(JWidget widget, JMessage msg)
else
jwidget_select(widget);
jwidget_capture_mouse(widget);
button->pressed_status = jwidget_is_selected(widget);
widget->captureMouse();
}
return true;
@ -410,7 +414,8 @@ static bool button_msg_proc(JWidget widget, JMessage msg)
jwidget_select(widget);
jwidget_signal_on(widget);
jwidget_capture_mouse(widget);
button->pressed_status = jwidget_is_selected(widget);
widget->captureMouse();
}
}
return true;
@ -418,10 +423,10 @@ static bool button_msg_proc(JWidget widget, JMessage msg)
break;
case JM_BUTTONRELEASED:
if (jwidget_has_capture(widget)) {
jwidget_release_mouse(widget);
if (widget->hasCapture()) {
widget->releaseMouse();
if (jwidget_has_mouse(widget)) {
if (widget->hasMouseOver()) {
switch (widget->type) {
case JI_BUTTON:
@ -444,20 +449,30 @@ static bool button_msg_proc(JWidget widget, JMessage msg)
}
break;
case JM_MOTION:
if (jwidget_is_enabled(widget) && widget->hasCapture()) {
bool hasMouse = widget->hasMouseOver();
// Switch state when the mouse go out
if (( hasMouse && jwidget_is_selected(widget) != button->pressed_status) ||
(!hasMouse && jwidget_is_selected(widget) == button->pressed_status)) {
jwidget_signal_off(widget);
if (hasMouse) {
jwidget_set_selected(widget, button->pressed_status);
}
else {
jwidget_set_selected(widget, !button->pressed_status);
}
jwidget_signal_on(widget);
}
}
break;
case JM_MOUSEENTER:
case JM_MOUSELEAVE:
if (jwidget_is_enabled(widget) && jwidget_has_capture(widget)) {
jwidget_signal_off(widget);
if (jwidget_is_selected(widget))
jwidget_deselect(widget);
else
jwidget_select(widget);
jwidget_signal_on(widget);
}
/* TODO theme stuff */
// TODO theme stuff
if (jwidget_is_enabled(widget))
jwidget_dirty(widget);
break;

View File

@ -382,7 +382,7 @@ static bool combobox_msg_proc(JWidget widget, JMessage msg)
case JM_BUTTONPRESSED:
if (combobox->window != NULL) {
if (!jwidget_has_mouse(jwidget_get_view(combobox->listbox))) {
if (!jwidget_get_view(combobox->listbox)->hasMouse()) {
combobox_close_window(widget);
return true;
}
@ -401,7 +401,7 @@ static bool combobox_entry_msg_proc(JWidget widget, JMessage msg)
switch (msg->type) {
case JM_KEYPRESSED:
if (jwidget_has_focus(widget)) {
if (widget->hasFocus()) {
if (!jcombobox_is_editable(combo_widget)) {
if (msg->key.scancode == KEY_SPACE ||
msg->key.scancode == KEY_ENTER ||
@ -498,7 +498,7 @@ static bool combobox_listbox_msg_proc(JWidget widget, JMessage msg)
/* } */
case JM_KEYPRESSED:
if (jwidget_has_focus(widget)) {
if (widget->hasFocus()) {
if (msg->key.scancode == KEY_SPACE ||
msg->key.scancode == KEY_ENTER ||
msg->key.scancode == KEY_ENTER_PAD) {

View File

@ -269,7 +269,7 @@ static bool entry_msg_proc(JWidget widget, JMessage msg)
return true;
case JM_TIMER:
if (jwidget_has_focus(widget) &&
if (widget->hasFocus() &&
msg->timer.timer_id == entry->timer_id) {
// blinking cursor
entry->state = entry->state ? false: true;
@ -297,7 +297,7 @@ static bool entry_msg_proc(JWidget widget, JMessage msg)
break;
case JM_KEYPRESSED:
if (jwidget_has_focus(widget) && !jentry_is_readonly(widget)) {
if (widget->hasFocus() && !jentry_is_readonly(widget)) {
// Command to execute
EntryCmd::Type cmd = EntryCmd::NoOp;
@ -371,10 +371,10 @@ static bool entry_msg_proc(JWidget widget, JMessage msg)
break;
case JM_BUTTONPRESSED:
jwidget_capture_mouse(widget);
widget->captureMouse();
case JM_MOTION:
if (jwidget_has_capture(widget)) {
if (widget->hasCapture()) {
const char *text = widget->getText();
bool move, dirty;
int c, x;
@ -443,8 +443,8 @@ static bool entry_msg_proc(JWidget widget, JMessage msg)
break;
case JM_BUTTONRELEASED:
if (jwidget_has_capture(widget))
jwidget_release_mouse(widget);
if (widget->hasCapture())
widget->releaseMouse();
return true;
case JM_DOUBLECLICK:

View File

@ -377,7 +377,7 @@ static bool filesel_msg_proc(JWidget widget, JMessage msg)
break;
case JM_KEYPRESSED:
if ((jwidget_has_focus (widget)) &&
if ((widget->hasFocus()) &&
((msg->key.scancode == KEY_ENTER) ||
(msg->key.scancode == KEY_ENTER_PAD))) {
if (enter_to_path_in_entry()) {

View File

@ -189,10 +189,10 @@ static bool listbox_msg_proc(JWidget widget, JMessage msg)
break;
case JM_BUTTONPRESSED:
jwidget_capture_mouse(widget);
widget->captureMouse();
case JM_MOTION:
if (jwidget_has_capture(widget)) {
if (widget->hasCapture()) {
int select = jlistbox_get_selected_index(widget);
JWidget view = jwidget_get_view(widget);
bool pick_item = true;
@ -235,7 +235,7 @@ static bool listbox_msg_proc(JWidget widget, JMessage msg)
break;
case JM_BUTTONRELEASED:
jwidget_release_mouse(widget);
widget->releaseMouse();
break;
case JM_WHEEL: {
@ -254,7 +254,7 @@ static bool listbox_msg_proc(JWidget widget, JMessage msg)
}
case JM_KEYPRESSED:
if (jwidget_has_focus(widget) && !jlist_empty(widget->children)) {
if (widget->hasFocus() && !jlist_empty(widget->children)) {
int select = jlistbox_get_selected_index(widget);
JWidget view = jwidget_get_view(widget);
int bottom = MAX(0, jlist_length(widget->children)-1);

View File

@ -305,7 +305,7 @@ bool jmanager_generate_messages(JWidget manager)
/* 1) get the magnetic widget */
magnet = find_magnetic_widget(window->getRoot());
/* 2) if magnetic widget exists and it doesn't have the focus */
if (magnet && !jwidget_has_focus(magnet))
if (magnet && !magnet->hasFocus())
jmanager_set_focus(magnet);
/* 3) if not, put the focus in the first child */
else
@ -349,7 +349,7 @@ bool jmanager_generate_messages(JWidget manager)
/* reset double click status */
double_click_level = DOUBLE_CLICK_NONE;
if (capture_widget && capture_widget->flags & JI_HARDCAPTURE)
if (capture_widget)
dst = capture_widget;
else
dst = mouse_widget;
@ -756,7 +756,7 @@ void jmanager_set_focus(JWidget widget)
break;
}
if (jwidget_has_focus(reinterpret_cast<JWidget>(link->data))) {
if (reinterpret_cast<JWidget>(link->data)->hasFocus()) {
((JWidget)link->data)->flags &= ~JI_HASFOCUS;
jmessage_add_dest(msg, reinterpret_cast<JWidget>(link->data));
}
@ -797,8 +797,7 @@ void jmanager_set_focus(JWidget widget)
void jmanager_set_mouse(JWidget widget)
{
if ((mouse_widget != widget)
&& (!capture_widget || !(capture_widget->flags & JI_HARDCAPTURE))) {
if ((mouse_widget != widget) && (!capture_widget)) {
JList widget_parents = NULL;
JWidget common_parent = NULL;
JLink link, link2;
@ -827,7 +826,7 @@ void jmanager_set_mouse(JWidget widget)
break;
}
if (jwidget_has_mouse(reinterpret_cast<JWidget>(link->data))) {
if (reinterpret_cast<JWidget>(link->data)->hasMouse()) {
((JWidget)link->data)->flags &= ~JI_HASMOUSE;
jmessage_add_dest(msg, reinterpret_cast<JWidget>(link->data));
}
@ -875,7 +874,7 @@ void jmanager_attract_focus(JWidget widget)
JWidget magnet = find_magnetic_widget(widget->getRoot());
/* if magnetic widget exists and it doesn't have the focus */
if (magnet && !jwidget_has_focus(magnet))
if (magnet && !magnet->hasFocus())
jmanager_set_focus(magnet);
}
@ -910,13 +909,13 @@ void jmanager_free_capture()
void jmanager_free_widget(JWidget widget)
{
/* break any relationship with the GUI manager */
if (jwidget_has_capture(widget))
if (widget->hasCapture())
jmanager_free_capture();
if (jwidget_has_mouse(widget))
if (widget->hasMouse())
jmanager_free_mouse();
if (jwidget_has_focus(widget) || (widget == focus_widget))
if (widget->hasFocus() || (widget == focus_widget))
jmanager_free_focus();
}
@ -1357,8 +1356,7 @@ static void generate_setcursor_message()
JWidget dst;
JMessage msg;
if (capture_widget &&
capture_widget->flags & JI_HARDCAPTURE)
if (capture_widget)
dst = capture_widget;
else
dst = mouse_widget;

View File

@ -607,7 +607,7 @@ static bool menubox_msg_proc(JWidget widget, JMessage msg)
#endif
/* highlight movement with keyboard */
if (jwidget_has_focus(widget)) {
if (widget->hasFocus()) {
JWidget highlight = get_highlight(menu);
JWidget child;
JWidget child_with_submenu_opened = NULL;

View File

@ -139,14 +139,14 @@ static bool panel_msg_proc(JWidget widget, JMessage msg)
if (!click_bar)
break;
jwidget_hard_capture_mouse(widget);
widget->captureMouse();
/* Continue with motion message... */
}
else
break;
case JM_MOTION:
if (jwidget_has_capture(widget)) {
if (widget->hasCapture()) {
Panel* panel = reinterpret_cast<Panel*>(jwidget_get_data(widget, JI_PANEL));
if (widget->getAlign() & JI_HORIZONTAL) {
@ -167,8 +167,8 @@ static bool panel_msg_proc(JWidget widget, JMessage msg)
break;
case JM_BUTTONRELEASED:
if (jwidget_has_capture(widget)) {
jwidget_release_mouse(widget);
if (widget->hasCapture()) {
widget->releaseMouse();
return true;
}
break;

View File

@ -141,7 +141,7 @@ static bool slider_msg_proc(JWidget widget, JMessage msg)
return true;
jwidget_select(widget);
jwidget_hard_capture_mouse(widget);
widget->captureMouse();
slider_press_x = msg->mouse.x;
slider_press_value = slider->value;
@ -152,7 +152,7 @@ static bool slider_msg_proc(JWidget widget, JMessage msg)
/* continue to JM_MOTION */
case JM_MOTION:
if (jwidget_has_capture(widget)) {
if (widget->hasCapture()) {
int value, accuracy, range;
JRect rc = jwidget_get_child_rect(widget);
@ -201,9 +201,9 @@ static bool slider_msg_proc(JWidget widget, JMessage msg)
break;
case JM_BUTTONRELEASED:
if (jwidget_has_capture(widget)) {
if (widget->hasCapture()) {
jwidget_deselect(widget);
jwidget_release_mouse(widget);
widget->releaseMouse();
slider_setcursor(widget);
}
break;
@ -227,7 +227,7 @@ static bool slider_msg_proc(JWidget widget, JMessage msg)
break;
case JM_KEYPRESSED:
if (jwidget_has_focus (widget)) {
if (widget->hasFocus()) {
int min = slider->min;
int max = slider->max;
int value = slider->value;
@ -295,7 +295,7 @@ static void slider_request_size(JWidget widget, int *w, int *h)
static void slider_setcursor(JWidget widget)
{
if (jwidget_has_capture(widget)) {
if (widget->hasCapture()) {
if (slider_press_left)
jmouse_set_cursor(JI_CURSOR_NORMAL);
else

View File

@ -82,7 +82,7 @@ static bool textbox_msg_proc(JWidget widget, JMessage msg)
break;
case JM_KEYPRESSED:
if (jwidget_has_focus(widget)) {
if (widget->hasFocus()) {
JWidget view = jwidget_get_view(widget);
if (view) {
JRect vp = jview_get_viewport_position(view);
@ -141,7 +141,7 @@ static bool textbox_msg_proc(JWidget widget, JMessage msg)
case JM_BUTTONPRESSED: {
JWidget view = jwidget_get_view(widget);
if (view) {
jwidget_hard_capture_mouse(widget);
widget->captureMouse();
jmouse_set_cursor(JI_CURSOR_SCROLL);
return true;
}
@ -150,7 +150,7 @@ static bool textbox_msg_proc(JWidget widget, JMessage msg)
case JM_MOTION: {
JWidget view = jwidget_get_view(widget);
if (view && jwidget_has_capture(widget)) {
if (view && widget->hasCapture()) {
JRect vp = jview_get_viewport_position(view);
int scroll_x, scroll_y;
@ -167,8 +167,8 @@ static bool textbox_msg_proc(JWidget widget, JMessage msg)
case JM_BUTTONRELEASED: {
JWidget view = jwidget_get_view(widget);
if (view && jwidget_has_capture(widget)) {
jwidget_release_mouse(widget);
if (view && widget->hasCapture()) {
widget->releaseMouse();
jmouse_set_cursor(JI_CURSOR_NORMAL);
return true;
}

View File

@ -561,13 +561,13 @@ static bool scrollbar_msg_proc(JWidget widget, JMessage msg)
return ret;
jwidget_select(widget);
jwidget_hard_capture_mouse(widget);
widget->captureMouse();
// continue to JM_MOTION handler...
}
case JM_MOTION:
if (jwidget_has_capture(widget)) {
if (widget->hasCapture()) {
View* view = reinterpret_cast<View*>(jwidget_get_data(widget->parent, JI_VIEW));
int pos, len, bar_size, viewport_size;
int old_pos;
@ -601,7 +601,7 @@ static bool scrollbar_msg_proc(JWidget widget, JMessage msg)
case JM_BUTTONRELEASED:
jwidget_deselect(widget);
jwidget_release_mouse(widget);
widget->releaseMouse();
break;
case JM_MOUSEENTER:

View File

@ -540,30 +540,6 @@ bool jwidget_is_deselected(JWidget widget)
return !(jwidget_is_selected(widget));
}
/**********************************************************************/
/* properties with manager */
bool jwidget_has_focus(JWidget widget)
{
assert_valid_widget(widget);
return (widget->flags & JI_HASFOCUS) ? true: false;
}
bool jwidget_has_mouse(JWidget widget)
{
assert_valid_widget(widget);
return (widget->flags & JI_HASMOUSE) ? true: false;
}
bool jwidget_has_capture(JWidget widget)
{
assert_valid_widget(widget);
return (widget->flags & JI_HASCAPTURE) ? true: false;
}
/**********************************************************************/
/* children handle */
@ -1350,15 +1326,6 @@ bool jwidget_send_message(JWidget widget, JMessage msg)
void jwidget_close_window(JWidget widget)
{ widget->closeWindow(); }
void jwidget_capture_mouse(JWidget widget)
{ widget->captureMouse(); }
void jwidget_hard_capture_mouse(JWidget widget)
{ widget->hardCaptureMouse(); }
void jwidget_release_mouse(JWidget widget)
{ widget->releaseMouse(); }
bool Widget::sendMessage(JMessage msg)
{
bool done = false;
@ -1388,40 +1355,33 @@ void Widget::closeWindow()
frame->closeWindow(this);
}
// ===============================================================
// FOCUS & MOUSE
// ===============================================================
void Widget::requestFocus()
{
jmanager_set_focus(this);
}
void Widget::releaseFocus()
{
if (hasFocus())
jmanager_free_focus();
}
/**
* Captures the mouse to send the future JM_BUTTONRELEASED messsage to
* the specified widget. There are messages like JM_MOTION and
* JM_SETCURSOR that are sent normally to the widget with the mouse
* (and not with the "soft" capture).
*
* @see jwidget_hard_capture_mouse
* Captures the mouse to send all the future mouse messsages to the
* specified widget (included the JM_MOTION and JM_SETCURSOR).
*/
void Widget::captureMouse()
{
if (!jmanager_get_capture()) {
jmanager_set_capture(this);
if (jmanager_get_capture() == this)
this->flags &= ~JI_HARDCAPTURE;
}
}
/**
* Captures the mouse to send all the future mouse messsages to the
* specified widget (included the JM_MOTION and JM_SETCURSOR).
*
* @see jwidget_capture_mouse
*/
void Widget::hardCaptureMouse()
{
if (!jmanager_get_capture()) {
jmanager_set_capture(this);
#ifdef ALLEGRO_WINDOWS
SetCapture(win_get_window());
#endif
if (jmanager_get_capture() == this)
this->flags |= JI_HARDCAPTURE;
}
}
@ -1432,14 +1392,33 @@ void Widget::releaseMouse()
{
if (jmanager_get_capture() == this) {
jmanager_free_capture();
#ifdef ALLEGRO_WINDOWS
::ReleaseCapture(); // Win32 API
#endif
this->flags &= ~JI_HARDCAPTURE;
}
}
bool Widget::hasFocus()
{
return (this->flags & JI_HASFOCUS) ? true: false;
}
bool Widget::hasMouse()
{
return (this->flags & JI_HASMOUSE) ? true: false;
}
bool Widget::hasMouseOver()
{
return (this == this->pick(jmouse_x(0), jmouse_y(0)));
}
bool Widget::hasCapture()
{
return (this->flags & JI_HASCAPTURE) ? true: false;
}
/**********************************************************************/
/* miscellaneous */

View File

@ -96,12 +96,6 @@ bool jwidget_is_disabled(JWidget widget);
bool jwidget_is_selected(JWidget widget);
bool jwidget_is_deselected(JWidget widget);
/* properties with manager */
bool jwidget_has_focus(JWidget widget);
bool jwidget_has_mouse(JWidget widget);
bool jwidget_has_capture(JWidget widget);
/* children handle */
void jwidget_add_child(JWidget widget, JWidget child);
@ -163,9 +157,6 @@ bool jwidget_emit_signal(JWidget widget, int signal_num);
bool jwidget_send_message(JWidget widget, JMessage msg);
void jwidget_close_window(JWidget widget);
void jwidget_capture_mouse(JWidget widget);
void jwidget_hard_capture_mouse(JWidget widget);
void jwidget_release_mouse(JWidget widget);
/* miscellaneous */
@ -316,9 +307,19 @@ public:
bool sendMessage(JMessage msg);
void closeWindow();
// ===============================================================
// FOCUS & MOUSE
// ===============================================================
void requestFocus();
void releaseFocus();
void captureMouse();
void hardCaptureMouse();
void releaseMouse();
bool hasFocus();
bool hasMouse();
bool hasMouseOver();
bool hasCapture();
protected:
virtual bool msg_proc(JMessage msg);

View File

@ -280,7 +280,7 @@ bool Frame::msg_proc(JMessage msg)
else
jrect_copy(click_pos, this->rc);
jwidget_hard_capture_mouse(this);
captureMouse();
return true;
}
else
@ -288,8 +288,8 @@ bool Frame::msg_proc(JMessage msg)
}
case JM_BUTTONRELEASED:
if (jwidget_has_capture(this)) {
jwidget_release_mouse(this);
if (hasCapture()) {
releaseMouse();
jmouse_set_cursor(JI_CURSOR_NORMAL);
if (click_pos != NULL) {
@ -307,7 +307,7 @@ bool Frame::msg_proc(JMessage msg)
break;
/* does it have the mouse captured? */
if (jwidget_has_capture(this)) {
if (hasCapture()) {
/* reposition/resize */
if (window_action == WINDOW_MOVE) {
int x = click_pos->x1 + (msg->mouse.x - press_x);

View File

@ -498,7 +498,7 @@ void jstandard_theme::draw_button(JWidget widget, JRect clip)
icon_bmp ? icon_bmp->h : 0);
/* with mouse */
if (jwidget_is_enabled(widget) && jwidget_has_mouse(widget))
if (jwidget_is_enabled(widget) && widget->hasMouseOver())
bg = COLOR_HOTFACE;
/* without mouse */
else
@ -533,7 +533,7 @@ void jstandard_theme::draw_button(JWidget widget, JRect clip)
jbutton_get_bevel(widget, bevel);
/* 1st border */
if (jwidget_has_focus(widget))
if (widget->hasFocus())
draw_bevel_box(x1, y1, x2, y2,
COLOR_FOREGROUND, COLOR_FOREGROUND, bevel);
else {
@ -545,7 +545,7 @@ void jstandard_theme::draw_button(JWidget widget, JRect clip)
/* 2nd border */
x1++, y1++, x2--, y2--;
if (jwidget_has_focus(widget))
if (widget->hasFocus())
draw_bevel_box(x1, y1, x2, y2, c1, c2, bevel);
else
draw_bevel_box(x1, y1, x2, y2, bg, bg, bevel);
@ -609,11 +609,11 @@ void jstandard_theme::draw_check(JWidget widget, JRect clip)
jdraw_rectfill(widget->rc, bg = get_bg_color(widget));
/* mouse */
if (jwidget_is_enabled(widget) && jwidget_has_mouse(widget))
if (jwidget_is_enabled(widget) && widget->hasMouseOver())
jdraw_rectfill(&box, bg = COLOR_HOTFACE);
/* focus */
if (jwidget_has_focus(widget)) {
if (widget->hasFocus()) {
jrect_stretch(&box, 1);
jdraw_rect(&box, COLOR_FOREGROUND);
}
@ -655,7 +655,7 @@ void jstandard_theme::draw_entry(JWidget widget, JRect clip)
/* 2nd border */
x1++, y1++, x2--, y2--;
if (jwidget_has_focus (widget))
if (widget->hasFocus())
rect(ji_screen, x1, y1, x2, y2, COLOR_FOREGROUND);
else
rect(ji_screen, x1, y1, x2, y2, get_bg_color(widget));
@ -677,7 +677,7 @@ void jstandard_theme::draw_entry(JWidget widget, JRect clip)
/* selected */
if ((c >= selbeg) && (c <= selend)) {
if (jwidget_has_focus(widget))
if (widget->hasFocus())
bg = COLOR_SELECTED;
else
bg = COLOR_DISABLED;
@ -701,13 +701,13 @@ void jstandard_theme::draw_entry(JWidget widget, JRect clip)
x += w;
/* cursor */
if ((c == cursor) && (state) && (jwidget_has_focus (widget)))
if ((c == cursor) && (state) && (widget->hasFocus()))
draw_entry_cursor(widget, cursor_x, y);
}
/* draw the cursor if it is next of the last character */
if ((c == cursor) && (state) &&
(jwidget_has_focus(widget)) &&
(widget->hasFocus()) &&
(jwidget_is_enabled(widget)))
draw_entry_cursor(widget, x, y);
}
@ -800,7 +800,7 @@ void jstandard_theme::draw_menuitem(JWidget widget, JRect clip)
bg = COLOR_SELECTED;
fg = COLOR_BACKGROUND;
}
else if (jwidget_has_mouse(widget)) {
else if (widget->hasMouse()) {
bg = COLOR_HOTFACE;
fg = COLOR_FOREGROUND;
}
@ -960,11 +960,11 @@ void jstandard_theme::draw_radio(JWidget widget, JRect clip)
jdraw_rectfill(widget->rc, bg);
/* mouse */
if (jwidget_is_enabled(widget) && jwidget_has_mouse(widget))
if (jwidget_is_enabled(widget) && widget->hasMouse())
jdraw_rectfill(&box, bg = COLOR_HOTFACE);
/* focus */
if (jwidget_has_focus(widget))
if (widget->hasFocus())
rect(ji_screen, box.x1-1, box.y1-1, box.x2, box.y2,
COLOR_FOREGROUND);
@ -1056,7 +1056,7 @@ void jstandard_theme::draw_slider(JWidget widget, JRect clip)
y2 = widget->rc->y2 - 1;
/* with mouse */
if (jwidget_is_enabled(widget) && jwidget_has_mouse(widget))
if (jwidget_is_enabled(widget) && widget->hasMouse())
bg = COLOR_HOTFACE;
/* without mouse */
else
@ -1068,7 +1068,7 @@ void jstandard_theme::draw_slider(JWidget widget, JRect clip)
/* 2nd border */
x1++, y1++, x2--, y2--;
if (jwidget_has_focus (widget))
if (widget->hasFocus())
rect(ji_screen, x1, y1, x2, y2, COLOR_FOREGROUND);
else
rect(ji_screen, x1, y1, x2, y2, bg);
@ -1157,7 +1157,7 @@ void jstandard_theme::draw_view(JWidget widget, JRect clip)
{
JRect pos = jwidget_get_rect(widget);
if (jwidget_has_focus(widget)) {
if (widget->hasFocus()) {
/* 1st border */
jdraw_rectedge(pos, COLOR_DISABLED, COLOR_BACKGROUND);
@ -1230,7 +1230,7 @@ void jstandard_theme::draw_view_scrollbar(JWidget widget, JRect clip)
/* bar-block background */
u1++, v1++, u2--, v2--;
if (jwidget_is_enabled(widget) && jwidget_has_mouse(widget))
if (jwidget_is_enabled(widget) && widget->hasMouse())
rectfill(ji_screen, u1, v1, u2, v2, COLOR_HOTFACE);
else
rectfill(ji_screen, u1, v1, u2, v2, get_bg_color(widget));

View File

@ -632,7 +632,7 @@ void SkinneableTheme::draw_button(JWidget widget, JRect clip)
PART_BUTTON_SELECTED_NW;
}
// with mouse
else if (jwidget_is_enabled(widget) && jwidget_has_mouse(widget)) {
else if (jwidget_is_enabled(widget) && widget->hasMouseOver()) {
fg = get_button_hot_text_color();
bg = get_button_hot_face_color();
part_nw = isMiniLook ? PART_TOOLBUTTON_HOT_NW:
@ -643,7 +643,7 @@ void SkinneableTheme::draw_button(JWidget widget, JRect clip)
fg = get_button_normal_text_color();
bg = get_button_normal_face_color();
if (jwidget_has_focus(widget))
if (widget->hasFocus())
part_nw = isMiniLook ? PART_TOOLBUTTON_HOT_NW:
PART_BUTTON_FOCUSED_NW;
else
@ -711,9 +711,9 @@ void SkinneableTheme::draw_check(JWidget widget, JRect clip)
// mouse
if (jwidget_is_enabled(widget)) {
if (jwidget_has_mouse(widget))
if (widget->hasMouseOver())
jdraw_rectfill(widget->rc, bg = get_check_hot_face_color());
else if (jwidget_has_focus(widget))
else if (widget->hasFocus())
jdraw_rectfill(widget->rc, bg = get_check_focus_face_color());
}
@ -728,7 +728,7 @@ void SkinneableTheme::draw_check(JWidget widget, JRect clip)
icon.x1, icon.y1);
// draw focus
if (jwidget_has_focus(widget)) {
if (widget->hasFocus()) {
draw_bounds_nw(ji_screen,
widget->rc->x1,
widget->rc->y1,
@ -763,8 +763,8 @@ void SkinneableTheme::draw_entry(JWidget widget, JRect clip)
draw_bounds_nw(ji_screen,
x1, y1, x2, y2,
jwidget_has_focus(widget) ? PART_SUNKEN_FOCUSED_NW:
PART_SUNKEN_NORMAL_NW, bg);
widget->hasFocus() ? PART_SUNKEN_FOCUSED_NW:
PART_SUNKEN_NORMAL_NW, bg);
/* draw the text */
x = widget->rc->x1 + widget->border_width.l;
@ -779,7 +779,7 @@ void SkinneableTheme::draw_entry(JWidget widget, JRect clip)
/* selected */
if ((c >= selbeg) && (c <= selend)) {
if (jwidget_has_focus(widget))
if (widget->hasFocus())
bg = COLOR_SELECTED;
else
bg = COLOR_DISABLED;
@ -803,13 +803,13 @@ void SkinneableTheme::draw_entry(JWidget widget, JRect clip)
x += w;
/* cursor */
if ((c == cursor) && (state) && (jwidget_has_focus (widget)))
if ((c == cursor) && (state) && (widget->hasFocus()))
draw_entry_cursor(widget, cursor_x, y);
}
/* draw the cursor if it is next of the last character */
if ((c == cursor) && (state) &&
(jwidget_has_focus(widget)) &&
(widget->hasFocus()) &&
(jwidget_is_enabled(widget)))
draw_entry_cursor(widget, x, y);
}
@ -895,7 +895,7 @@ void SkinneableTheme::draw_menuitem(JWidget widget, JRect clip)
fg = get_menuitem_highlight_text_color();
bg = get_menuitem_highlight_face_color();
}
else if (jwidget_has_mouse(widget)) {
else if (widget->hasMouseOver()) {
fg = get_menuitem_hot_text_color();
bg = get_menuitem_hot_face_color();
}
@ -1005,9 +1005,9 @@ void SkinneableTheme::draw_radio(JWidget widget, JRect clip)
/* mouse */
if (jwidget_is_enabled(widget)) {
if (jwidget_has_mouse(widget))
if (widget->hasMouseOver())
jdraw_rectfill(widget->rc, bg = get_radio_hot_face_color());
else if (jwidget_has_focus(widget))
else if (widget->hasFocus())
jdraw_rectfill(widget->rc, bg = get_radio_focus_face_color());
}
@ -1022,7 +1022,7 @@ void SkinneableTheme::draw_radio(JWidget widget, JRect clip)
icon.x1, icon.y1);
// draw focus
if (jwidget_has_focus(widget)) {
if (widget->hasFocus()) {
draw_bounds_nw(ji_screen,
widget->rc->x1,
widget->rc->y1,
@ -1108,16 +1108,16 @@ void SkinneableTheme::draw_slider(JWidget widget, JRect clip)
int empty_part_nw;
if (isMiniLook) {
full_part_nw = jwidget_has_mouse(widget) ? PART_MINI_SLIDER_FULL_FOCUSED_NW:
PART_MINI_SLIDER_FULL_NW;
empty_part_nw = jwidget_has_mouse(widget) ? PART_MINI_SLIDER_EMPTY_FOCUSED_NW:
PART_MINI_SLIDER_EMPTY_NW;
full_part_nw = widget->hasMouseOver() ? PART_MINI_SLIDER_FULL_FOCUSED_NW:
PART_MINI_SLIDER_FULL_NW;
empty_part_nw = widget->hasMouseOver() ? PART_MINI_SLIDER_EMPTY_FOCUSED_NW:
PART_MINI_SLIDER_EMPTY_NW;
}
else {
full_part_nw = jwidget_has_focus(widget) ? PART_SLIDER_FULL_FOCUSED_NW:
PART_SLIDER_FULL_NW;
empty_part_nw = jwidget_has_focus(widget) ? PART_SLIDER_EMPTY_FOCUSED_NW:
PART_SLIDER_EMPTY_NW;
full_part_nw = widget->hasFocus() ? PART_SLIDER_FULL_FOCUSED_NW:
PART_SLIDER_FULL_NW;
empty_part_nw = widget->hasFocus() ? PART_SLIDER_EMPTY_FOCUSED_NW:
PART_SLIDER_EMPTY_NW;
}
if (value == min)
@ -1184,8 +1184,8 @@ void SkinneableTheme::draw_combobox_entry(JWidget widget, JRect clip)
draw_bounds_nw(ji_screen,
x1, y1, x2, y2,
jwidget_has_focus(widget) ? PART_SUNKEN2_FOCUSED_NW:
PART_SUNKEN2_NORMAL_NW, bg);
widget->hasFocus() ? PART_SUNKEN2_FOCUSED_NW:
PART_SUNKEN2_NORMAL_NW, bg);
/* draw the text */
x = widget->rc->x1 + widget->border_width.l;
@ -1200,7 +1200,7 @@ void SkinneableTheme::draw_combobox_entry(JWidget widget, JRect clip)
/* selected */
if ((c >= selbeg) && (c <= selend)) {
if (jwidget_has_focus(widget))
if (widget->hasFocus())
bg = COLOR_SELECTED;
else
bg = COLOR_DISABLED;
@ -1224,13 +1224,13 @@ void SkinneableTheme::draw_combobox_entry(JWidget widget, JRect clip)
x += w;
/* cursor */
if ((c == cursor) && (state) && (jwidget_has_focus (widget)))
if ((c == cursor) && (state) && (widget->hasFocus()))
draw_entry_cursor(widget, cursor_x, y);
}
/* draw the cursor if it is next of the last character */
if ((c == cursor) && (state) &&
(jwidget_has_focus(widget)) &&
(widget->hasFocus()) &&
(jwidget_is_enabled(widget)))
draw_entry_cursor(widget, x, y);
}
@ -1244,7 +1244,7 @@ void SkinneableTheme::draw_combobox_button(JWidget widget, JRect clip)
/* with mouse */
if (jwidget_is_selected(widget) ||
(jwidget_is_enabled(widget) && jwidget_has_mouse(widget))) {
(jwidget_is_enabled(widget) && widget->hasMouseOver())) {
fg = get_button_hot_text_color();
bg = get_button_hot_face_color();
part_nw = PART_TOOLBUTTON_HOT_NW;
@ -1297,8 +1297,8 @@ void SkinneableTheme::draw_view(JWidget widget, JRect clip)
widget->rc->y1,
widget->rc->x2-1,
widget->rc->y2-1,
jwidget_has_focus(widget) ? PART_SUNKEN_FOCUSED_NW:
PART_SUNKEN_NORMAL_NW,
widget->hasFocus() ? PART_SUNKEN_FOCUSED_NW:
PART_SUNKEN_NORMAL_NW,
COLOR_BACKGROUND);
}
@ -1351,7 +1351,7 @@ void SkinneableTheme::draw_view_scrollbar(JWidget widget, JRect clip)
/* bar-block background */
u1++, v1++, u2--, v2--;
if (jwidget_is_enabled(widget) && jwidget_has_mouse(widget))
if (jwidget_is_enabled(widget) && widget->hasMouseOver())
rectfill(ji_screen, u1, v1, u2, v2, COLOR_HOTFACE);
else
rectfill(ji_screen, u1, v1, u2, v2, BGCOLOR);
@ -1410,7 +1410,7 @@ void SkinneableTheme::draw_frame_button(JWidget widget, JRect clip)
if (widget->isSelected())
part = PART_WINDOW_CLOSE_BUTTON_SELECTED;
else if (jwidget_has_mouse(widget))
else if (widget->hasMouseOver())
part = PART_WINDOW_CLOSE_BUTTON_HOT;
else
part = PART_WINDOW_CLOSE_BUTTON_NORMAL;

View File

@ -267,7 +267,7 @@ bool ColorBar::msg_proc(JMessage msg)
}
case JM_BUTTONPRESSED:
jwidget_capture_mouse(this);
captureMouse();
m_hot_drag = m_hot;
m_hot_drop = m_hot;
@ -401,7 +401,7 @@ bool ColorBar::msg_proc(JMessage msg)
break;
case JM_BUTTONRELEASED:
if (jwidget_has_capture(this)) {
if (hasCapture()) {
/* drag and drop a color */
if (m_hot_drag != m_hot_drop) {
if (m_hot_drop != HOTCOLOR_NONE) {
@ -440,7 +440,7 @@ bool ColorBar::msg_proc(JMessage msg)
m_hot_drag = HOTCOLOR_NONE;
m_hot_drop = HOTCOLOR_NONE;
jwidget_release_mouse(this);
releaseMouse();
}
break;

View File

@ -134,21 +134,19 @@ static bool colorbutton_msg_proc(JWidget widget, JMessage msg)
case JM_SIGNAL:
if (msg->signal.num == JI_SIGNAL_BUTTON_SELECT) {
colorbutton_close_tooltip(widget);
jwidget_hard_capture_mouse(widget);
widget->captureMouse();
return true;
}
break;
case JM_BUTTONPRESSED:
if (jwidget_has_capture(widget) &&
widget->flags & JI_HARDCAPTURE) {
if (widget->hasCapture()) {
return true;
}
break;
case JM_MOTION:
if (jwidget_has_capture(widget) &&
widget->flags & JI_HARDCAPTURE) {
if (widget->hasCapture()) {
JWidget picked = jwidget_pick(ji_get_default_manager(),
msg->mouse.x,
msg->mouse.y);
@ -194,15 +192,12 @@ static bool colorbutton_msg_proc(JWidget widget, JMessage msg)
break;
case JM_BUTTONRELEASED:
if (jwidget_has_capture(widget) &&
widget->flags & JI_HARDCAPTURE) {
jwidget_release_mouse(widget);
}
if (widget->hasCapture())
widget->releaseMouse();
break;
case JM_SETCURSOR:
if (jwidget_has_capture(widget) &&
widget->flags & JI_HARDCAPTURE) {
if (widget->hasCapture()) {
jmouse_set_cursor(JI_CURSOR_EYEDROPPER);
return true;
}
@ -230,7 +225,7 @@ static void colorbutton_draw(JWidget widget)
true, true, true, true,
colorbutton->imgtype,
colorbutton->color,
jwidget_has_mouse(widget), false);
widget->hasMouseOver(), false);
/* draw text */
color_to_formalstring(colorbutton->imgtype,

View File

@ -125,8 +125,8 @@ static bool colorviewer_msg_proc(JWidget widget, JMessage msg)
jrect_shrink(rect, 1);
jdraw_rect(rect,
jwidget_has_focus(widget) ? makecol(0, 0, 0):
makecol(192, 192, 192));
widget->hasFocus() ? makecol(0, 0, 0):
makecol(192, 192, 192));
/* draw color background */
jrect_shrink(rect, 1);

View File

@ -306,11 +306,11 @@ static bool curve_editor_msg_proc(JWidget widget, JMessage msg)
jmouse_set_cursor(JI_CURSOR_HAND);
}
jwidget_capture_mouse(widget);
widget->captureMouse();
/* continue in motion message... */
case JM_MOTION:
if (jwidget_has_capture(widget)) {
if (widget->hasCapture()) {
switch (curve_editor->status) {
case STATUS_SCROLLING: {
@ -391,8 +391,8 @@ static bool curve_editor_msg_proc(JWidget widget, JMessage msg)
break;
case JM_BUTTONRELEASED:
if (jwidget_has_capture(widget)) {
jwidget_release_mouse(widget);
if (widget->hasCapture()) {
widget->releaseMouse();
switch (curve_editor->status) {

View File

@ -62,7 +62,7 @@ void Editor::editor_click_start(int mode, int *x, int *y, int *b)
screen_to_editor(click_start_x, click_start_y, x, y);
*b = click_start_b;
jwidget_capture_mouse(this);
captureMouse();
}
void Editor::editor_click_continue(int mode, int *x, int *y)
@ -79,7 +79,7 @@ void Editor::editor_click_continue(int mode, int *x, int *y)
void Editor::editor_click_done()
{
jwidget_release_mouse(this);
releaseMouse();
clear_keybuf();
}

View File

@ -132,8 +132,8 @@ int editor_type()
void Editor::editor_set_sprite(Sprite* sprite)
{
if (jwidget_has_mouse(this))
jmanager_free_mouse();
if (this->hasMouse())
jmanager_free_mouse(); // TODO Why is this here? Review this code
m_sprite = sprite;
if (m_sprite) {
@ -925,10 +925,10 @@ bool Editor::msg_proc(JMessage msg)
editor_setcursor(msg->mouse.x, msg->mouse.y);
jwidget_release_mouse(this);
releaseMouse();
}
}
else if (!jwidget_has_capture(this)) {
else if (!hasCapture()) {
UIContext* context = UIContext::instance();
Tool* current_tool = context->getSettings()->getCurrentTool();
@ -1038,7 +1038,7 @@ bool Editor::msg_proc(JMessage msg)
}
// Capture the mouse
jwidget_hard_capture_mouse(this);
captureMouse();
}
return true;
@ -1182,7 +1182,7 @@ bool Editor::msg_proc(JMessage msg)
}
editor_setcursor(msg->mouse.x, msg->mouse.y);
jwidget_release_mouse(this);
releaseMouse();
return true;
case JM_KEYPRESSED:
@ -1193,7 +1193,7 @@ bool Editor::msg_proc(JMessage msg)
return true;
}
if (jwidget_has_mouse(this)) {
if (this->hasMouse()) {
switch (msg->key.scancode) {
// Eye-dropper is activated with ALT key
@ -1260,8 +1260,8 @@ bool Editor::msg_proc(JMessage msg)
if (m_state == EDITOR_STATE_STANDBY ||
m_state == EDITOR_STATE_DRAWING ||
m_state == EDITOR_STATE_MOVING_PIXELS) {
// There are and sprite in the editor, there is the mouse inside
if (m_sprite && jwidget_has_mouse(this)) {
// There are and sprite in the editor and the mouse is inside
if (m_sprite && this->hasMouse()) {
int dz = jmouse_z(1) - jmouse_z(0);
WHEEL_ACTION wheelAction = WHEEL_NONE;
bool scrollBigSteps = false;

View File

@ -39,7 +39,7 @@
bool Editor::editor_keys_toset_zoom(int scancode)
{
if ((m_sprite) &&
(jwidget_has_mouse(this)) &&
(this->hasMouse()) &&
!(key_shifts & (KB_SHIFT_FLAG | KB_CTRL_FLAG | KB_ALT_FLAG))) {
JWidget view = jwidget_get_view(this);
JRect vp = jview_get_viewport_position(view);
@ -97,7 +97,7 @@ bool Editor::editor_keys_toset_pensize(int scancode)
IPenSettings* pen = tool_settings->getPen();
if ((m_sprite) &&
(jwidget_has_mouse(this)) &&
(this->hasMouse()) &&
!(key_shifts & (KB_SHIFT_FLAG | KB_CTRL_FLAG | KB_ALT_FLAG))) {
if (scancode == KEY_MINUS_PAD) { // TODO configurable keys
if (pen->getSize() > 1) {

View File

@ -378,10 +378,10 @@ static bool fileview_msg_proc(JWidget widget, JMessage msg)
}
case JM_BUTTONPRESSED:
jwidget_hard_capture_mouse(widget);
widget->captureMouse();
case JM_MOTION:
if (jwidget_has_capture(widget)) {
if (widget->hasCapture()) {
int iw, ih;
int th = jwidget_get_text_height(widget);
int y = widget->rc->y1;
@ -416,13 +416,13 @@ static bool fileview_msg_proc(JWidget widget, JMessage msg)
break;
case JM_BUTTONRELEASED:
if (jwidget_has_capture(widget)) {
jwidget_release_mouse(widget);
if (widget->hasCapture()) {
widget->releaseMouse();
}
break;
case JM_KEYPRESSED:
if (jwidget_has_focus(widget)) {
if (widget->hasFocus()) {
int select = fileview_get_selected_index(widget);
JWidget view = jwidget_get_view(widget);
int bottom = fileview->list.size();

View File

@ -492,11 +492,11 @@ bool PalEdit::msg_proc(JMessage msg)
}
case JM_BUTTONPRESSED:
jwidget_hard_capture_mouse(this);
captureMouse();
/* continue... */
case JM_MOTION:
if (jwidget_has_capture(this)) {
if (hasCapture()) {
JRect cpos = jwidget_get_child_rect(this);
div_t d = div(256, m_columns);
int cols = m_columns;
@ -554,7 +554,7 @@ bool PalEdit::msg_proc(JMessage msg)
break;
case JM_BUTTONRELEASED:
jwidget_release_mouse(this);
releaseMouse();
return true;
}

View File

@ -530,7 +530,7 @@ void ToolBar::onClosePopup()
{
closeTipWindow();
if (!jwidget_has_mouse(this))
if (!hasMouse())
m_tipOpened = false;
m_open_on_hot = false;