diff --git a/Applications/VisualBuilder/.gitignore b/Applications/VisualBuilder/.gitignore new file mode 100644 index 0000000000..bc36e52322 --- /dev/null +++ b/Applications/VisualBuilder/.gitignore @@ -0,0 +1,3 @@ +*.o +*.d +InterfaceEditor diff --git a/Applications/VisualBuilder/Makefile b/Applications/VisualBuilder/Makefile new file mode 100644 index 0000000000..cacbff9524 --- /dev/null +++ b/Applications/VisualBuilder/Makefile @@ -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 + diff --git a/Applications/VisualBuilder/VBForm.cpp b/Applications/VisualBuilder/VBForm.cpp new file mode 100644 index 0000000000..5f40d8263e --- /dev/null +++ b/Applications/VisualBuilder/VBForm.cpp @@ -0,0 +1,25 @@ +#include "VBForm.h" +#include + +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); + } + } +} diff --git a/Applications/VisualBuilder/VBForm.h b/Applications/VisualBuilder/VBForm.h new file mode 100644 index 0000000000..64bc69dd9e --- /dev/null +++ b/Applications/VisualBuilder/VBForm.h @@ -0,0 +1,20 @@ +#pragma once + +#include +#include +#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 m_widgets; +}; diff --git a/Applications/VisualBuilder/VBWidget.cpp b/Applications/VisualBuilder/VBWidget.cpp new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Applications/VisualBuilder/VBWidget.h b/Applications/VisualBuilder/VBWidget.h new file mode 100644 index 0000000000..231336621c --- /dev/null +++ b/Applications/VisualBuilder/VBWidget.h @@ -0,0 +1,15 @@ +#pragma once + +#include + +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; +}; diff --git a/Applications/VisualBuilder/VisualBuilder b/Applications/VisualBuilder/VisualBuilder new file mode 100755 index 0000000000..4381e1052a Binary files /dev/null and b/Applications/VisualBuilder/VisualBuilder differ diff --git a/Applications/VisualBuilder/main.cpp b/Applications/VisualBuilder/main.cpp new file mode 100644 index 0000000000..0602b39ea6 --- /dev/null +++ b/Applications/VisualBuilder/main.cpp @@ -0,0 +1,56 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "VBForm.h" +#include "VBWidget.h" +#include +#include +#include +#include + +int main(int argc, char** argv) +{ + GApplication app(argc, argv); + + auto* form1 = new VBForm("Form1"); + + auto menubar = make(); + auto app_menu = make("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("File"); + menubar->add_menu(move(file_menu)); + + auto edit_menu = make("Edit"); + menubar->add_menu(move(edit_menu)); + + auto help_menu = make("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(); +} diff --git a/Kernel/makeall.sh b/Kernel/makeall.sh index 5530d0c3af..27244fc2c4 100755 --- a/Kernel/makeall.sh +++ b/Kernel/makeall.sh @@ -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 diff --git a/Kernel/sync.sh b/Kernel/sync.sh index 111dbebeae..5c197616d9 100755 --- a/Kernel/sync.sh +++ b/Kernel/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 )