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:
parent
0bc72551f4
commit
8268ece1bd
10 changed files with 156 additions and 0 deletions
3
Applications/VisualBuilder/.gitignore
vendored
Normal file
3
Applications/VisualBuilder/.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
*.o
|
||||||
|
*.d
|
||||||
|
InterfaceEditor
|
33
Applications/VisualBuilder/Makefile
Normal file
33
Applications/VisualBuilder/Makefile
Normal 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
|
||||||
|
|
25
Applications/VisualBuilder/VBForm.cpp
Normal file
25
Applications/VisualBuilder/VBForm.cpp
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
20
Applications/VisualBuilder/VBForm.h
Normal file
20
Applications/VisualBuilder/VBForm.h
Normal 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;
|
||||||
|
};
|
0
Applications/VisualBuilder/VBWidget.cpp
Normal file
0
Applications/VisualBuilder/VBWidget.cpp
Normal file
15
Applications/VisualBuilder/VBWidget.h
Normal file
15
Applications/VisualBuilder/VBWidget.h
Normal 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;
|
||||||
|
};
|
BIN
Applications/VisualBuilder/VisualBuilder
Executable file
BIN
Applications/VisualBuilder/VisualBuilder
Executable file
Binary file not shown.
56
Applications/VisualBuilder/main.cpp
Normal file
56
Applications/VisualBuilder/main.cpp
Normal 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();
|
||||||
|
}
|
|
@ -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
|
||||||
|
|
|
@ -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 )
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue