/* * Copyright (c) 2024, Tim Flynn <trflynn89@serenityos.org> * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include <AK/ByteBuffer.h> #include <AK/ByteString.h> #include <AK/FlyString.h> #include <AK/NonnullRefPtr.h> #include <AK/RefCounted.h> #include <AK/String.h> #include <AK/Vector.h> #include <LibGfx/Bitmap.h> #include <LibGfx/Point.h> namespace Web::HTML { struct DragDataStoreItem { enum class Kind { Text, File, }; // https://html.spec.whatwg.org/multipage/dnd.html#the-drag-data-item-kind Kind kind { Kind::Text }; // https://html.spec.whatwg.org/multipage/dnd.html#the-drag-data-item-type-string String type_string; ByteBuffer data; ByteString file_name; }; // https://html.spec.whatwg.org/multipage/dnd.html#drag-data-store class DragDataStore : public RefCounted<DragDataStore> { public: enum class Mode { ReadWrite, ReadOnly, Protected, }; static NonnullRefPtr<DragDataStore> create(); ~DragDataStore(); void add_item(DragDataStoreItem item) { m_item_list.append(move(item)); } ReadonlySpan<DragDataStoreItem> item_list() const { return m_item_list; } size_t size() const { return m_item_list.size(); } bool has_text_item() const; Mode mode() const { return m_mode; } void set_mode(Mode mode) { m_mode = mode; } FlyString allowed_effects_state() const { return m_allowed_effects_state; } void set_allowed_effects_state(FlyString allowed_effects_state) { m_allowed_effects_state = move(allowed_effects_state); } private: DragDataStore(); // https://html.spec.whatwg.org/multipage/dnd.html#drag-data-store-item-list Vector<DragDataStoreItem> m_item_list; // https://html.spec.whatwg.org/multipage/dnd.html#drag-data-store-default-feedback String m_default_feedback; // https://html.spec.whatwg.org/multipage/dnd.html#drag-data-store-bitmap RefPtr<Gfx::Bitmap> m_bitmap; // https://html.spec.whatwg.org/multipage/dnd.html#drag-data-store-hot-spot-coordinate Gfx::IntPoint m_hot_spot_coordinate; // https://html.spec.whatwg.org/multipage/dnd.html#drag-data-store-mode Mode m_mode { Mode::Protected }; // https://html.spec.whatwg.org/multipage/dnd.html#drag-data-store-allowed-effects-state FlyString m_allowed_effects_state; }; }