mirror of
				https://github.com/LadybirdBrowser/ladybird.git
				synced 2025-11-04 07:10:57 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			82 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/*
 | 
						|
 * 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;
 | 
						|
};
 | 
						|
 | 
						|
}
 |