12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- /*
- * 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;
- };
- }
|