mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 22:57:44 +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/Downloader clean && \
|
||||
$make_cmd -C ../Applications/Downloader && \
|
||||
$make_cmd -C ../Applications/VisualBuilder clean && \
|
||||
$make_cmd -C ../Applications/VisualBuilder && \
|
||||
$make_cmd clean &&\
|
||||
$make_cmd && \
|
||||
sudo ./sync.sh
|
||||
|
|
|
@ -97,6 +97,8 @@ cp -v ../Applications/Taskbar/Taskbar mnt/bin/Taskbar
|
|||
ln -s Taskbar mnt/bin/tb
|
||||
cp -v ../Applications/Downloader/Downloader mnt/bin/Downloader
|
||||
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/
|
||||
sh sync-local.sh
|
||||
umount mnt || ( sleep 0.5 && sync && umount mnt )
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue