PaintBrush: Add size context menu to SprayTool
This commit is contained in:
parent
24ada6bd1f
commit
933cd3848f
Notes:
sideshowbarker
2024-07-19 13:27:48 +09:00
Author: https://github.com/rburchell Commit: https://github.com/SerenityOS/serenity/commit/933cd3848f3 Pull-request: https://github.com/SerenityOS/serenity/pull/250
2 changed files with 30 additions and 1 deletions
|
@ -3,6 +3,8 @@
|
||||||
#include <AK/Queue.h>
|
#include <AK/Queue.h>
|
||||||
#include <AK/SinglyLinkedList.h>
|
#include <AK/SinglyLinkedList.h>
|
||||||
#include <LibGUI/GPainter.h>
|
#include <LibGUI/GPainter.h>
|
||||||
|
#include <LibGUI/GAction.h>
|
||||||
|
#include <LibGUI/GMenu.h>
|
||||||
#include <SharedGraphics/GraphicsBitmap.h>
|
#include <SharedGraphics/GraphicsBitmap.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <LibM/math.h>
|
#include <LibM/math.h>
|
||||||
|
@ -30,7 +32,8 @@ void SprayTool::paint_it()
|
||||||
auto& bitmap = m_widget->bitmap();
|
auto& bitmap = m_widget->bitmap();
|
||||||
ASSERT(bitmap.bpp() == 32);
|
ASSERT(bitmap.bpp() == 32);
|
||||||
m_widget->update();
|
m_widget->update();
|
||||||
const double base_radius = 15;
|
const double minimal_radius = 10;
|
||||||
|
const double base_radius = minimal_radius * m_thickness;
|
||||||
for (int i = 0; i < 100 + (nrand() * 800); i++) {
|
for (int i = 0; i < 100 + (nrand() * 800); i++) {
|
||||||
double radius = base_radius * nrand();
|
double radius = base_radius * nrand();
|
||||||
double angle = 2 * M_PI * nrand();
|
double angle = 2 * M_PI * nrand();
|
||||||
|
@ -68,3 +71,24 @@ void SprayTool::on_mouseup(GMouseEvent&)
|
||||||
{
|
{
|
||||||
m_timer.stop();
|
m_timer.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SprayTool::on_contextmenu(GContextMenuEvent& event)
|
||||||
|
{
|
||||||
|
if (!m_context_menu) {
|
||||||
|
m_context_menu = make<GMenu>("SprayTool Context Menu");
|
||||||
|
m_context_menu->add_action(GAction::create("1", [this](auto&) {
|
||||||
|
m_thickness = 1;
|
||||||
|
}));
|
||||||
|
m_context_menu->add_action(GAction::create("2", [this](auto&) {
|
||||||
|
m_thickness = 2;
|
||||||
|
}));
|
||||||
|
m_context_menu->add_action(GAction::create("3", [this](auto&) {
|
||||||
|
m_thickness = 3;
|
||||||
|
}));
|
||||||
|
m_context_menu->add_action(GAction::create("4", [this](auto&) {
|
||||||
|
m_thickness = 4;
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
m_context_menu->popup(event.screen_position());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,8 @@
|
||||||
#include <LibGUI/GPainter.h>
|
#include <LibGUI/GPainter.h>
|
||||||
#include <LibCore/CTimer.h>
|
#include <LibCore/CTimer.h>
|
||||||
|
|
||||||
|
class GMenu;
|
||||||
|
|
||||||
class SprayTool final : public Tool {
|
class SprayTool final : public Tool {
|
||||||
public:
|
public:
|
||||||
SprayTool();
|
SprayTool();
|
||||||
|
@ -12,6 +14,7 @@ public:
|
||||||
virtual void on_mousedown(GMouseEvent&) override;
|
virtual void on_mousedown(GMouseEvent&) override;
|
||||||
virtual void on_mouseup(GMouseEvent&) override;
|
virtual void on_mouseup(GMouseEvent&) override;
|
||||||
virtual void on_mousemove(GMouseEvent&) override;
|
virtual void on_mousemove(GMouseEvent&) override;
|
||||||
|
virtual void on_contextmenu(GContextMenuEvent&) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
virtual const char* class_name() const override { return "SprayTool"; }
|
virtual const char* class_name() const override { return "SprayTool"; }
|
||||||
|
@ -19,4 +22,6 @@ private:
|
||||||
CTimer m_timer;
|
CTimer m_timer;
|
||||||
Point m_last_pos;
|
Point m_last_pos;
|
||||||
Color m_color;
|
Color m_color;
|
||||||
|
OwnPtr<GMenu> m_context_menu;
|
||||||
|
int m_thickness { 1 };
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Reference in a new issue