1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 22:07:35 +00:00

VisualBuilder: Start working on an interface builder application.

It's tedious making interfaces programmatically. Let's make a program to
help us with this. :^)
This commit is contained in:
Andreas Kling 2019-04-11 00:05:47 +02:00
parent 0bc72551f4
commit 8268ece1bd
10 changed files with 156 additions and 0 deletions

3
Applications/VisualBuilder/.gitignore vendored Normal file
View file

@ -0,0 +1,3 @@
*.o
*.d
InterfaceEditor

View file

@ -0,0 +1,33 @@
OBJS = \
VBForm.o \
VBWidget.o \
main.o
APP = VisualBuilder
STANDARD_FLAGS = -std=c++17 -Wno-sized-deallocation
WARNING_FLAGS = -Wextra -Wall -Wundef -Wcast-qual -Wwrite-strings -Wimplicit-fallthrough
FLAVOR_FLAGS = -fno-exceptions -fno-rtti
OPTIMIZATION_FLAGS = -Os
INCLUDE_FLAGS = -I../.. -I. -I../../LibC
DEFINES = -DSERENITY -DSANITIZE_PTRS -DUSERLAND
CXXFLAGS = -MMD -MP $(WARNING_FLAGS) $(OPTIMIZATION_FLAGS) $(FLAVOR_FLAGS) $(STANDARD_FLAGS) $(INCLUDE_FLAGS) $(DEFINES)
CXX = i686-pc-serenity-g++
LD = i686-pc-serenity-g++
LDFLAGS = -L../../LibC -L../../LibCore -L../../LibGUI
all: $(APP)
$(APP): $(OBJS)
$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lgui -lcore -lc
.cpp.o:
@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
-include $(OBJS:%.o=%.d)
clean:
@echo "CLEAN"; rm -f $(APPS) $(OBJS) *.d

View file

@ -0,0 +1,25 @@
#include "VBForm.h"
#include <LibGUI/GPainter.h>
VBForm::VBForm(const String& name, GWidget* parent)
: GWidget(parent)
{
set_fill_with_background_color(true);
set_background_color(Color::LightGray);
}
VBForm::~VBForm()
{
}
void VBForm::paint_event(GPaintEvent& event)
{
GPainter painter(*this);
painter.add_clip_rect(event.rect());
for (int y = 0; y < height(); y += m_grid_size) {
for (int x = 0; x < width(); x += m_grid_size) {
painter.set_pixel({ x, y }, Color::Black);
}
}
}

View file

@ -0,0 +1,20 @@
#pragma once
#include <LibGUI/GWidget.h>
#include <AK/Vector.h>
#include "VBWidget.h"
class VBForm : public GWidget {
public:
explicit VBForm(const String& name, GWidget* parent = nullptr);
virtual ~VBForm() override;
protected:
virtual void paint_event(GPaintEvent&) override;
private:
String m_name;
int m_grid_size { 5 };
Vector<VBWidget*> m_widgets;
};

View file

View file

@ -0,0 +1,15 @@
#pragma once
#include <SharedGraphics/Rect.h>
class VBWidget {
public:
VBWidget();
virtual ~VBWidget();
Rect rect() const { return m_rect; }
void set_rect(const Rect& rect) { m_rect = rect; }
private:
Rect m_rect;
};

Binary file not shown.

View file

@ -0,0 +1,56 @@
#include <LibGUI/GWindow.h>
#include <LibGUI/GWidget.h>
#include <LibGUI/GBoxLayout.h>
#include <LibGUI/GApplication.h>
#include <LibGUI/GStatusBar.h>
#include <LibGUI/GToolBar.h>
#include <LibGUI/GMenuBar.h>
#include <LibGUI/GTextEditor.h>
#include <LibGUI/GAction.h>
#include <LibGUI/GFontDatabase.h>
#include <LibCore/CFile.h>
#include <AK/StringBuilder.h>
#include "VBForm.h"
#include "VBWidget.h"
#include <unistd.h>
#include <stdio.h>
#include <signal.h>
#include <fcntl.h>
int main(int argc, char** argv)
{
GApplication app(argc, argv);
auto* form1 = new VBForm("Form1");
auto menubar = make<GMenuBar>();
auto app_menu = make<GMenu>("Visual Builder");
app_menu->add_action(GAction::create("Quit", { Mod_Alt, Key_F4 }, [] (const GAction&) {
GApplication::the().quit(0);
return;
}));
menubar->add_menu(move(app_menu));
auto file_menu = make<GMenu>("File");
menubar->add_menu(move(file_menu));
auto edit_menu = make<GMenu>("Edit");
menubar->add_menu(move(edit_menu));
auto help_menu = make<GMenu>("Help");
help_menu->add_action(GAction::create("About", [] (const GAction&) {
dbgprintf("FIXME: Implement Help/About\n");
}));
menubar->add_menu(move(help_menu));
app.set_menubar(move(menubar));
auto* window = new GWindow;
window->set_title("Form1");
window->set_rect(20, 200, 640, 400);
window->set_main_widget(form1);
window->set_should_exit_event_loop_on_close(true);
window->show();
return app.exec();
}

View file

@ -40,6 +40,8 @@ $make_cmd -C ../Applications/Taskbar clean && \
$make_cmd -C ../Applications/Taskbar && \ $make_cmd -C ../Applications/Taskbar && \
$make_cmd -C ../Applications/Downloader clean && \ $make_cmd -C ../Applications/Downloader clean && \
$make_cmd -C ../Applications/Downloader && \ $make_cmd -C ../Applications/Downloader && \
$make_cmd -C ../Applications/VisualBuilder clean && \
$make_cmd -C ../Applications/VisualBuilder && \
$make_cmd clean &&\ $make_cmd clean &&\
$make_cmd && \ $make_cmd && \
sudo ./sync.sh sudo ./sync.sh

View file

@ -97,6 +97,8 @@ cp -v ../Applications/Taskbar/Taskbar mnt/bin/Taskbar
ln -s Taskbar mnt/bin/tb ln -s Taskbar mnt/bin/tb
cp -v ../Applications/Downloader/Downloader mnt/bin/Downloader cp -v ../Applications/Downloader/Downloader mnt/bin/Downloader
ln -s Downloader mnt/bin/dl ln -s Downloader mnt/bin/dl
cp -v ../Applications/VisualBuilder/VisualBuilder mnt/bin/VisualBuilder
ln -s VisualBuilder mnt/bin/vb
cp -v kernel.map mnt/ cp -v kernel.map mnt/
sh sync-local.sh sh sync-local.sh
umount mnt || ( sleep 0.5 && sync && umount mnt ) umount mnt || ( sleep 0.5 && sync && umount mnt )