1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-30 14:38:12 +00:00

PaintBrush: Start working on a simple painting application.

This commit is contained in:
Andreas Kling 2019-06-10 19:29:33 +02:00
parent 63f029ef9b
commit d599544890
6 changed files with 114 additions and 0 deletions

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

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

View file

@ -0,0 +1,23 @@
include ../../Makefile.common
OBJS = \
PaintableWidget.o \
main.o
APP = PaintBrush
DEFINES += -DUSERLAND
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 $(APP) $(OBJS) *.d

View file

@ -0,0 +1,49 @@
#include "PaintableWidget.h"
#include <LibGUI/GPainter.h>
#include <SharedGraphics/GraphicsBitmap.h>
PaintableWidget::PaintableWidget(GWidget* parent)
: GWidget(parent)
{
set_fill_with_background_color(true);
set_background_color(Color::LightGray);
m_bitmap = GraphicsBitmap::create(GraphicsBitmap::Format::RGB32, { 600, 400 });
m_bitmap->fill(Color::White);
}
PaintableWidget::~PaintableWidget()
{
}
void PaintableWidget::paint_event(GPaintEvent& event)
{
GPainter painter(*this);
painter.add_clip_rect(event.rect());
painter.blit({ 0, 0 }, *m_bitmap, m_bitmap->rect());
}
void PaintableWidget::mousedown_event(GMouseEvent& event)
{
if (event.button() != GMouseButton::Left)
return;
GPainter painter(*m_bitmap);
painter.set_pixel(event.position(), Color::Black);
update({ event.position(), { 1, 1 } });
}
void PaintableWidget::mouseup_event(GMouseEvent&)
{
}
void PaintableWidget::mousemove_event(GMouseEvent& event)
{
if (!rect().contains(event.position()))
return;
if (event.buttons() & GMouseButton::Left) {
GPainter painter(*m_bitmap);
painter.set_pixel(event.position(), Color::Black);
update({ event.position(), { 1, 1 } });
}
}

View file

@ -0,0 +1,19 @@
#pragma once
#include <LibGUI/GWidget.h>
class PaintableWidget final : public GWidget {
public:
explicit PaintableWidget(GWidget* parent);
virtual ~PaintableWidget() override;
virtual const char* class_name() const override { return "PaintableWidget"; }
private:
virtual void paint_event(GPaintEvent&) override;
virtual void mousedown_event(GMouseEvent&) override;
virtual void mouseup_event(GMouseEvent&) override;
virtual void mousemove_event(GMouseEvent&) override;
RetainPtr<GraphicsBitmap> m_bitmap;
};

View file

@ -0,0 +1,18 @@
#include "PaintableWidget.h"
#include <LibGUI/GApplication.h>
#include <LibGUI/GWindow.h>
int main(int argc, char** argv)
{
GApplication app(argc, argv);
auto* window = new GWindow;
window->set_title("PaintBrush");
window->set_rect(100, 100, 600, 400);
auto* paintable_widget = new PaintableWidget(nullptr);
window->set_main_widget(paintable_widget);
window->show();
return app.exec();
}

View file

@ -71,6 +71,7 @@ cp ../Applications/ProcessManager/ProcessManager mnt/bin/ProcessManager
cp ../Applications/Taskbar/Taskbar mnt/bin/Taskbar
cp ../Applications/Terminal/Terminal mnt/bin/Terminal
cp ../Applications/TextEditor/TextEditor mnt/bin/TextEditor
cp ../Applications/PaintBrush/PaintBrush mnt/bin/PaintBrush
cp ../Demos/HelloWorld/HelloWorld mnt/bin/HelloWorld
cp ../Demos/RetroFetch/RetroFetch mnt/bin/RetroFetch
cp ../Demos/WidgetGallery/WidgetGallery mnt/bin/WidgetGallery
@ -95,6 +96,7 @@ ln -s Taskbar mnt/bin/tb
ln -s VisualBuilder mnt/bin/vb
ln -s WidgetGallery mnt/bin/wg
ln -s TextEditor mnt/bin/te
ln -s PaintBrush mnt/bin/pb
echo "done"
# Run local sync script, if it exists