mirror of
https://github.com/RGBCube/serenity
synced 2025-05-28 05:35:06 +00:00
Add a little About app and hook it up to the system menu's "About..." entry.
Added icons and customizable text alignment to GLabel.
This commit is contained in:
parent
d6326d6c2e
commit
d74b131c27
11 changed files with 118 additions and 2 deletions
3
Applications/About/.gitignore
vendored
Normal file
3
Applications/About/.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
*.o
|
||||||
|
*.d
|
||||||
|
About
|
34
Applications/About/Makefile
Normal file
34
Applications/About/Makefile
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
OBJS = \
|
||||||
|
main.o
|
||||||
|
|
||||||
|
APP = About
|
||||||
|
|
||||||
|
ARCH_FLAGS =
|
||||||
|
STANDARD_FLAGS = -std=c++17 -nostdinc++ -nostdlib -nostdinc
|
||||||
|
USERLAND_FLAGS = -ffreestanding -fno-stack-protector -fno-ident
|
||||||
|
WARNING_FLAGS = -Wextra -Wall -Wundef -Wcast-qual -Wwrite-strings
|
||||||
|
FLAVOR_FLAGS = -march=i386 -m32 -fno-exceptions -fno-rtti -fmerge-all-constants -fno-unroll-loops -fno-pie -fno-pic
|
||||||
|
OPTIMIZATION_FLAGS = -Oz -fno-asynchronous-unwind-tables
|
||||||
|
INCLUDE_FLAGS = -I../.. -I. -I../../LibC
|
||||||
|
|
||||||
|
DEFINES = -DSERENITY -DSANITIZE_PTRS -DUSERLAND
|
||||||
|
|
||||||
|
CXXFLAGS = -MMD -MP $(WARNING_FLAGS) $(OPTIMIZATION_FLAGS) $(USERLAND_FLAGS) $(FLAVOR_FLAGS) $(ARCH_FLAGS) $(STANDARD_FLAGS) $(INCLUDE_FLAGS) $(DEFINES)
|
||||||
|
CXX = clang
|
||||||
|
LD = ld
|
||||||
|
AR = ar
|
||||||
|
LDFLAGS = -static --strip-debug -melf_i386 -e _start --gc-sections
|
||||||
|
|
||||||
|
all: $(APP)
|
||||||
|
|
||||||
|
$(APP): $(OBJS)
|
||||||
|
$(LD) -o $(APP) $(LDFLAGS) $(OBJS) ../../LibGUI/LibGUI.a ../../LibC/LibC.a
|
||||||
|
|
||||||
|
.cpp.o:
|
||||||
|
@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
|
||||||
|
|
||||||
|
-include $(OBJS:%.o=%.d)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@echo "CLEAN"; rm -f $(APPS) $(OBJS) *.d
|
||||||
|
|
47
Applications/About/main.cpp
Normal file
47
Applications/About/main.cpp
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
#include <LibGUI/GApplication.h>
|
||||||
|
#include <LibGUI/GWindow.h>
|
||||||
|
#include <LibGUI/GLabel.h>
|
||||||
|
#include <LibGUI/GButton.h>
|
||||||
|
#include <sys/utsname.h>
|
||||||
|
|
||||||
|
int main(int argc, char** argv)
|
||||||
|
{
|
||||||
|
GApplication app(argc, argv);
|
||||||
|
|
||||||
|
auto* window = new GWindow;
|
||||||
|
window->set_title("About Serenity");
|
||||||
|
window->set_rect(362, 284, 240, 130);
|
||||||
|
window->set_should_exit_app_on_close(true);
|
||||||
|
|
||||||
|
auto* widget = new GWidget;
|
||||||
|
window->set_main_widget(widget);
|
||||||
|
|
||||||
|
auto* icon_label = new GLabel(widget);
|
||||||
|
icon_label->set_icon(GraphicsBitmap::load_from_file("/res/icons/Serenity.rgb", { 32, 32 }));
|
||||||
|
icon_label->set_relative_rect(
|
||||||
|
widget->rect().center().x() - 16,
|
||||||
|
10,
|
||||||
|
32, 32);
|
||||||
|
|
||||||
|
auto* label = new GLabel(widget);
|
||||||
|
label->set_text("Serenity Operating System");
|
||||||
|
label->set_relative_rect(0, 50, widget->width(), 20);
|
||||||
|
|
||||||
|
utsname uts;
|
||||||
|
int rc = uname(&uts);
|
||||||
|
ASSERT(rc == 0);
|
||||||
|
|
||||||
|
auto* version_label = new GLabel(widget);
|
||||||
|
version_label->set_text(String::format("Version %s", uts.release));
|
||||||
|
version_label->set_relative_rect(0, 70, widget->width(), 20);
|
||||||
|
|
||||||
|
auto* quit_button = new GButton(widget);
|
||||||
|
quit_button->set_caption("Okay");
|
||||||
|
quit_button->set_relative_rect(80, 100, widget->width() - 160, 20);
|
||||||
|
quit_button->on_click = [] (GButton&) {
|
||||||
|
GApplication::the().exit(0);
|
||||||
|
};
|
||||||
|
|
||||||
|
window->show();
|
||||||
|
return app.exec();
|
||||||
|
}
|
|
@ -42,6 +42,7 @@ FontEditorWidget::FontEditorWidget(const String& path, RetainPtr<Font>&& edited_
|
||||||
};
|
};
|
||||||
|
|
||||||
auto* info_label = new GLabel(this);
|
auto* info_label = new GLabel(this);
|
||||||
|
info_label->set_text_alignment(TextAlignment::CenterLeft);
|
||||||
info_label->set_relative_rect({ 5, 110, 100, 20 });
|
info_label->set_relative_rect({ 5, 110, 100, 20 });
|
||||||
|
|
||||||
auto* demo_label_1 = new GLabel(this);
|
auto* demo_label_1 = new GLabel(this);
|
||||||
|
|
BIN
Base/res/icons/Serenity.rgb
Normal file
BIN
Base/res/icons/Serenity.rgb
Normal file
Binary file not shown.
|
@ -18,6 +18,8 @@ make -C ../Applications/Launcher clean && \
|
||||||
make -C ../Applications/Launcher && \
|
make -C ../Applications/Launcher && \
|
||||||
make -C ../Applications/FileManager clean && \
|
make -C ../Applications/FileManager clean && \
|
||||||
make -C ../Applications/FileManager && \
|
make -C ../Applications/FileManager && \
|
||||||
|
make -C ../Applications/About clean && \
|
||||||
|
make -C ../Applications/About && \
|
||||||
make clean &&\
|
make clean &&\
|
||||||
make && \
|
make && \
|
||||||
sudo ./sync.sh
|
sudo ./sync.sh
|
||||||
|
|
|
@ -69,6 +69,7 @@ cp -v ../Applications/FontEditor/FontEditor mnt/bin/FontEditor
|
||||||
cp -v ../Applications/Launcher/Launcher mnt/bin/Launcher
|
cp -v ../Applications/Launcher/Launcher mnt/bin/Launcher
|
||||||
cp -v ../Applications/Clock/Clock mnt/bin/Clock
|
cp -v ../Applications/Clock/Clock mnt/bin/Clock
|
||||||
cp -v ../Applications/FileManager/FileManager mnt/bin/FileManager
|
cp -v ../Applications/FileManager/FileManager mnt/bin/FileManager
|
||||||
|
cp -v ../Applications/About/About mnt/bin/About
|
||||||
cp -v kernel.map mnt/
|
cp -v kernel.map mnt/
|
||||||
sh sync-local.sh
|
sh sync-local.sh
|
||||||
umount mnt
|
umount mnt
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include "GLabel.h"
|
#include "GLabel.h"
|
||||||
#include <SharedGraphics/Painter.h>
|
#include <SharedGraphics/Painter.h>
|
||||||
|
#include <SharedGraphics/GraphicsBitmap.h>
|
||||||
|
|
||||||
GLabel::GLabel(GWidget* parent)
|
GLabel::GLabel(GWidget* parent)
|
||||||
: GWidget(parent)
|
: GWidget(parent)
|
||||||
|
@ -10,6 +11,11 @@ GLabel::~GLabel()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GLabel::set_icon(RetainPtr<GraphicsBitmap>&& icon)
|
||||||
|
{
|
||||||
|
m_icon = move(icon);
|
||||||
|
}
|
||||||
|
|
||||||
void GLabel::set_text(String&& text)
|
void GLabel::set_text(String&& text)
|
||||||
{
|
{
|
||||||
if (text == m_text)
|
if (text == m_text)
|
||||||
|
@ -18,11 +24,15 @@ void GLabel::set_text(String&& text)
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLabel::paint_event(GPaintEvent& event)
|
void GLabel::paint_event(GPaintEvent&)
|
||||||
{
|
{
|
||||||
Painter painter(*this);
|
Painter painter(*this);
|
||||||
if (fill_with_background_color())
|
if (fill_with_background_color())
|
||||||
painter.fill_rect({ 0, 0, width(), height() }, background_color());
|
painter.fill_rect({ 0, 0, width(), height() }, background_color());
|
||||||
|
if (m_icon) {
|
||||||
|
auto icon_location = rect().center().translated(-(m_icon->width() / 2), -(m_icon->height() / 2));
|
||||||
|
painter.blit_with_alpha(icon_location, *m_icon, m_icon->rect());
|
||||||
|
}
|
||||||
if (!text().is_empty())
|
if (!text().is_empty())
|
||||||
painter.draw_text({ 4, 4, width(), height() }, text(), TextAlignment::TopLeft, foreground_color());
|
painter.draw_text({ 0, 0, width(), height() }, text(), m_text_alignment, foreground_color());
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,9 @@
|
||||||
|
|
||||||
#include "GWidget.h"
|
#include "GWidget.h"
|
||||||
#include <AK/AKString.h>
|
#include <AK/AKString.h>
|
||||||
|
#include <SharedGraphics/Painter.h>
|
||||||
|
|
||||||
|
class GraphicsBitmap;
|
||||||
|
|
||||||
class GLabel final : public GWidget {
|
class GLabel final : public GWidget {
|
||||||
public:
|
public:
|
||||||
|
@ -11,11 +14,20 @@ public:
|
||||||
String text() const { return m_text; }
|
String text() const { return m_text; }
|
||||||
void set_text(String&&);
|
void set_text(String&&);
|
||||||
|
|
||||||
|
void set_icon(RetainPtr<GraphicsBitmap>&&);
|
||||||
|
const GraphicsBitmap* icon() const { return m_icon.ptr(); }
|
||||||
|
GraphicsBitmap* icon() { return m_icon.ptr(); }
|
||||||
|
|
||||||
|
TextAlignment text_alignment() const { return m_text_alignment; }
|
||||||
|
void set_text_alignment(TextAlignment text_alignment) { m_text_alignment = text_alignment; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
virtual void paint_event(GPaintEvent&) override;
|
virtual void paint_event(GPaintEvent&) override;
|
||||||
|
|
||||||
virtual const char* class_name() const override { return "GLabel"; }
|
virtual const char* class_name() const override { return "GLabel"; }
|
||||||
|
|
||||||
String m_text;
|
String m_text;
|
||||||
|
RetainPtr<GraphicsBitmap> m_icon;
|
||||||
|
TextAlignment m_text_alignment { TextAlignment::Center };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@ GStatusBar::GStatusBar(GWidget* parent)
|
||||||
set_preferred_size({ 0, 16 });
|
set_preferred_size({ 0, 16 });
|
||||||
set_layout(make<GBoxLayout>(Orientation::Horizontal));
|
set_layout(make<GBoxLayout>(Orientation::Horizontal));
|
||||||
m_label = new GLabel(this);
|
m_label = new GLabel(this);
|
||||||
|
m_label->set_text_alignment(TextAlignment::CenterLeft);
|
||||||
m_label->set_fill_with_background_color(false);
|
m_label->set_fill_with_background_color(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -198,6 +198,11 @@ WSWindowManager::WSWindowManager()
|
||||||
Process::create_user_process("/bin/Terminal", 100, 100, current->pid(), error);
|
Process::create_user_process("/bin/Terminal", 100, 100, current->pid(), error);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (item.identifier() == 4) {
|
||||||
|
int error;
|
||||||
|
Process::create_user_process("/bin/About", 100, 100, current->pid(), error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
kprintf("WSMenu 1 item activated: '%s'\n", item.text().characters());
|
kprintf("WSMenu 1 item activated: '%s'\n", item.text().characters());
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue