/* * Copyright (c) 2024, Tim Flynn * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include #include #include #include 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 { public: enum class Mode { ReadWrite, ReadOnly, Protected, }; static NonnullRefPtr create(); ~DragDataStore(); void add_item(DragDataStoreItem item) { m_item_list.append(move(item)); } ReadonlySpan 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 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 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; }; }