forked from aseprite/aseprite
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlabel.cpp
More file actions
87 lines (72 loc) · 1.93 KB
/
label.cpp
File metadata and controls
87 lines (72 loc) · 1.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
// Aseprite UI Library
// Copyright (C) 2018 Igara Studio S.A.
// Copyright (C) 2001-2017 David Capello
//
// This file is released under the terms of the MIT license.
// Read LICENSE.txt for more information.
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "ui/box.h"
#include "ui/button.h"
#include "ui/combobox.h"
#include "ui/label.h"
#include "ui/manager.h"
#include "ui/message.h"
#include "ui/size_hint_event.h"
#include "ui/theme.h"
#include "ui/window.h"
namespace ui {
Label::Label(const std::string& text) : Widget(kLabelWidget), m_buddy(nullptr)
{
enableFlags(IGNORE_MOUSE);
setAlign(LEFT | MIDDLE);
setText(text);
initTheme();
}
Widget* Label::buddy()
{
if (m_buddy || m_buddyId.empty())
return m_buddy;
if (parent()) {
// This can miss some cases where the hierarchy is not direct
setBuddy(parent()->findChild(m_buddyId.c_str()));
}
return m_buddy;
}
void Label::setBuddy(Widget* buddy)
{
m_buddy = buddy;
if (m_buddy)
disableFlags(IGNORE_MOUSE);
}
void Label::setBuddy(const std::string& buddyId)
{
m_buddy = nullptr;
m_buddyId = buddyId;
if (!m_buddyId.empty())
disableFlags(IGNORE_MOUSE);
}
bool Label::onProcessMessage(Message* msg)
{
switch (msg->type()) {
case kMouseDownMessage:
auto* bud = buddy();
if (bud && bud->isVisible() && !bud->hasFocus()) {
if (bud->isEnabled() && (bud->type() == kGridWidget || bud->type() == kBoxWidget)) {
// Iterate through containers until we find something worth focusing
for (auto* child : bud->children()) {
if (child->isVisible() && child->isEnabled() && !child->hasFlags(IGNORE_MOUSE)) {
manager()->setFocus(child, FocusMessage::Source::Buddy);
return true;
}
}
}
manager()->setFocus(bud, FocusMessage::Source::Buddy);
return true;
}
break;
}
return Widget::onProcessMessage(msg);
}
} // namespace ui