Skip to content

Commit

Permalink
Add a little About app and hook it up to the system menu's "About..."…
Browse files Browse the repository at this point in the history
… entry.

Added icons and customizable text alignment to GLabel.
  • Loading branch information
awesomekling committed Feb 12, 2019
1 parent d6326d6 commit d74b131
Show file tree
Hide file tree
Showing 11 changed files with 118 additions and 2 deletions.
3 changes: 3 additions & 0 deletions Applications/About/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
*.o
*.d
About
34 changes: 34 additions & 0 deletions Applications/About/Makefile
Original file line number Diff line number Diff line change
@@ -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 changes: 47 additions & 0 deletions Applications/About/main.cpp
Original file line number Diff line number Diff line change
@@ -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();
}
1 change: 1 addition & 0 deletions Applications/FontEditor/FontEditor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ FontEditorWidget::FontEditorWidget(const String& path, RetainPtr<Font>&& edited_
};

auto* info_label = new GLabel(this);
info_label->set_text_alignment(TextAlignment::CenterLeft);
info_label->set_relative_rect({ 5, 110, 100, 20 });

auto* demo_label_1 = new GLabel(this);
Expand Down
Binary file added Base/res/icons/Serenity.rgb
Binary file not shown.
2 changes: 2 additions & 0 deletions Kernel/makeall.sh
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ make -C ../Applications/Launcher clean && \
make -C ../Applications/Launcher && \
make -C ../Applications/FileManager clean && \
make -C ../Applications/FileManager && \
make -C ../Applications/About clean && \
make -C ../Applications/About && \
make clean &&\
make && \
sudo ./sync.sh
Expand Down
1 change: 1 addition & 0 deletions Kernel/sync.sh
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ cp -v ../Applications/FontEditor/FontEditor mnt/bin/FontEditor
cp -v ../Applications/Launcher/Launcher mnt/bin/Launcher
cp -v ../Applications/Clock/Clock mnt/bin/Clock
cp -v ../Applications/FileManager/FileManager mnt/bin/FileManager
cp -v ../Applications/About/About mnt/bin/About
cp -v kernel.map mnt/
sh sync-local.sh
umount mnt
Expand Down
14 changes: 12 additions & 2 deletions LibGUI/GLabel.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#include "GLabel.h"
#include <SharedGraphics/Painter.h>
#include <SharedGraphics/GraphicsBitmap.h>

GLabel::GLabel(GWidget* parent)
: GWidget(parent)
Expand All @@ -10,6 +11,11 @@ GLabel::~GLabel()
{
}

void GLabel::set_icon(RetainPtr<GraphicsBitmap>&& icon)
{
m_icon = move(icon);
}

void GLabel::set_text(String&& text)
{
if (text == m_text)
Expand All @@ -18,11 +24,15 @@ void GLabel::set_text(String&& text)
update();
}

void GLabel::paint_event(GPaintEvent& event)
void GLabel::paint_event(GPaintEvent&)
{
Painter painter(*this);
if (fill_with_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())
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());
}
12 changes: 12 additions & 0 deletions LibGUI/GLabel.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

#include "GWidget.h"
#include <AK/AKString.h>
#include <SharedGraphics/Painter.h>

class GraphicsBitmap;

class GLabel final : public GWidget {
public:
Expand All @@ -11,11 +14,20 @@ class GLabel final : public GWidget {
String text() const { return m_text; }
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:
virtual void paint_event(GPaintEvent&) override;

virtual const char* class_name() const override { return "GLabel"; }

String m_text;
RetainPtr<GraphicsBitmap> m_icon;
TextAlignment m_text_alignment { TextAlignment::Center };
};

1 change: 1 addition & 0 deletions LibGUI/GStatusBar.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ GStatusBar::GStatusBar(GWidget* parent)
set_preferred_size({ 0, 16 });
set_layout(make<GBoxLayout>(Orientation::Horizontal));
m_label = new GLabel(this);
m_label->set_text_alignment(TextAlignment::CenterLeft);
m_label->set_fill_with_background_color(false);
}

Expand Down
5 changes: 5 additions & 0 deletions WindowServer/WSWindowManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,11 @@ WSWindowManager::WSWindowManager()
Process::create_user_process("/bin/Terminal", 100, 100, current->pid(), error);
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());
};
}
Expand Down

0 comments on commit d74b131

Please sign in to comment.