还是一堆bug的状态

This commit is contained in:
2026-08-01 20:09:45 +08:00
parent 0df7beda49
commit 8fb9683182
294 changed files with 13678 additions and 10864 deletions
+147
View File
@@ -0,0 +1,147 @@
#include "Qt_Event_Adapter.h"
namespace renderive {
Event_Type Qt_Event_Adapter::map_event_type(QEvent::Type type) {
switch (type) {
case QEvent::MouseMove:
return Event_Type::Pointer_Move;
case QEvent::MouseButtonPress:
return Event_Type::Pointer_Press;
case QEvent::MouseButtonRelease:
return Event_Type::Pointer_Release;
case QEvent::Wheel:
return Event_Type::Wheel;
case QEvent::KeyPress:
return Event_Type::Key_Press;
case QEvent::KeyRelease:
return Event_Type::Key_Release;
case QEvent::Resize:
return Event_Type::Resize;
case QEvent::Show:
return Event_Type::Show;
case QEvent::Hide:
return Event_Type::Hide;
case QEvent::Leave:
return Event_Type::Leave;
default:
return Event_Type::Pointer_Move;
}
}
Pointer_Event Qt_Event_Adapter::to_pointer_event(const QMouseEvent* qt_event, Event_Type type) {
Pointer_Event event(type);
event.position = to_pointf(qt_event->pos());
event.global_position = to_pointf(qt_event->globalPos());
event.button = to_mouse_button(qt_event->button());
event.buttons = to_mouse_buttons(qt_event->buttons());
event.modifiers = to_keyboard_modifiers(qt_event->modifiers());
return event;
}
Wheel_Event Qt_Event_Adapter::to_wheel_event(const QWheelEvent* qt_event) {
Wheel_Event event;
event.position = to_pointf(qt_event->position());
event.global_position = to_pointf(qt_event->globalPosition());
event.button = Mouse_Button::None;
event.buttons = to_mouse_buttons(qt_event->buttons());
event.modifiers = to_keyboard_modifiers(qt_event->modifiers());
event.pixel_delta_x = static_cast<double>(qt_event->pixelDelta().x());
event.pixel_delta_y = static_cast<double>(qt_event->pixelDelta().y());
event.angle_delta_x = static_cast<double>(qt_event->angleDelta().x());
event.angle_delta_y = static_cast<double>(qt_event->angleDelta().y());
return event;
}
Key_Event Qt_Event_Adapter::to_key_event(const QKeyEvent* qt_event, Event_Type type) {
Key_Event event(type);
event.key = to_key(qt_event->key());
event.native_key = qt_event->nativeVirtualKey();
event.modifiers = to_keyboard_modifiers(qt_event->modifiers());
event.auto_repeat = qt_event->isAutoRepeat();
return event;
}
Resize_Event Qt_Event_Adapter::to_resize_event(const QResizeEvent* qt_event) {
Resize_Event event;
event.old_size = to_size(qt_event->oldSize());
event.new_size = to_size(qt_event->size());
return event;
}
PointF Qt_Event_Adapter::to_pointf(const QPointF& p) {
return {p.x(), p.y()};
}
Point Qt_Event_Adapter::to_point(const QPoint& p) {
return {p.x(), p.y()};
}
Size Qt_Event_Adapter::to_size(const QSize& s) {
return {s.width(), s.height()};
}
Mouse_Button Qt_Event_Adapter::to_mouse_button(Qt::MouseButton button) {
switch (button) {
case Qt::LeftButton:
return Mouse_Button::Left;
case Qt::RightButton:
return Mouse_Button::Right;
case Qt::MiddleButton:
return Mouse_Button::Middle;
default:
return Mouse_Button::None;
}
}
std::uint8_t Qt_Event_Adapter::to_mouse_buttons(Qt::MouseButtons buttons) {
std::uint8_t result = 0;
if (buttons & Qt::LeftButton)
result |= 1;
if (buttons & Qt::RightButton)
result |= 2;
if (buttons & Qt::MiddleButton)
result |= 4;
return result;
}
Keyboard_Modifier Qt_Event_Adapter::to_keyboard_modifiers(Qt::KeyboardModifiers modifiers) {
auto result = static_cast<Keyboard_Modifier>(0);
if (modifiers & Qt::ShiftModifier)
result = result | Keyboard_Modifier::Shift;
if (modifiers & Qt::ControlModifier)
result = result | Keyboard_Modifier::Ctrl;
if (modifiers & Qt::AltModifier)
result = result | Keyboard_Modifier::Alt;
if (modifiers & Qt::MetaModifier)
result = result | Keyboard_Modifier::Meta;
return result;
}
Key Qt_Event_Adapter::to_key(int qt_key) {
switch (qt_key) {
case Qt::Key_Escape:
return Key::Escape;
case Qt::Key_Return:
case Qt::Key_Enter:
return Key::Enter;
case Qt::Key_Space:
return Key::Space;
case Qt::Key_Delete:
return Key::Delete;
case Qt::Key_Backspace:
return Key::Backspace;
case Qt::Key_Left:
return Key::Left;
case Qt::Key_Right:
return Key::Right;
case Qt::Key_Up:
return Key::Up;
case Qt::Key_Down:
return Key::Down;
default:
return Key::Unknown;
}
}
} // namespace renderive
+33
View File
@@ -0,0 +1,33 @@
#pragma once
#include "Core/event/Event.h"
#include "Core/event/Key_Event.h"
#include "Core/event/Pointer_Event.h"
#include "Core/event/Resize_Event.h"
#include "Core/event/Wheel_Event.h"
#include <QEvent>
#include <QKeyEvent>
#include <QMouseEvent>
#include <QResizeEvent>
#include <QWheelEvent>
namespace renderive {
struct Qt_Event_Adapter {
static Event_Type map_event_type(QEvent::Type type);
static Pointer_Event to_pointer_event(const QMouseEvent* qt_event, Event_Type type);
static Wheel_Event to_wheel_event(const QWheelEvent* qt_event);
static Key_Event to_key_event(const QKeyEvent* qt_event, Event_Type type);
static Resize_Event to_resize_event(const QResizeEvent* qt_event);
static PointF to_pointf(const QPointF& p);
static Point to_point(const QPoint& p);
static Size to_size(const QSize& s);
static Mouse_Button to_mouse_button(Qt::MouseButton button);
static std::uint8_t to_mouse_buttons(Qt::MouseButtons buttons);
static Keyboard_Modifier to_keyboard_modifiers(Qt::KeyboardModifiers modifiers);
static Key to_key(int qt_key);
};
} // namespace renderive
+18
View File
@@ -0,0 +1,18 @@
#include "Qt_Image_Adapter.h"
namespace renderive {
QImage Qt_Image_Adapter::to_qimage(const Image_View& view) {
if (view.empty())
return {};
return QImage(
reinterpret_cast<const uchar*>(view.data),
view.width,
view.height,
view.stride,
QImage::Format_ARGB32_Premultiplied
);
}
} // namespace renderive
+11
View File
@@ -0,0 +1,11 @@
#pragma once
#include "Core/render/Image_View.h"
#include <QImage>
namespace renderive {
struct Qt_Image_Adapter {
static QImage to_qimage(const Image_View& view);
};
} // namespace renderive
+33
View File
@@ -0,0 +1,33 @@
#include "Qt_Presentation_Sink.h"
#include <QMetaObject>
#include <QWidget>
namespace renderive {
struct Qt_Presentation_Sink::Private {
QPointer<QWidget> widget;
};
Qt_Presentation_Sink::Qt_Presentation_Sink(QWidget* widget)
: d(std::make_unique<Private>()) {
d->widget = widget;
}
Qt_Presentation_Sink::~Qt_Presentation_Sink() = default;
void Qt_Presentation_Sink::request_present(Rect dirty_rect) {
(void)dirty_rect;
if (!d->widget)
return;
QMetaObject::invokeMethod(
d->widget.data(),
[w = QPointer<QWidget>(d->widget)]() {
if (w)
w->update();
},
Qt::QueuedConnection
);
}
} // namespace renderive
+22
View File
@@ -0,0 +1,22 @@
#pragma once
#include "Core/plot/Presentation_Sink.h"
#include <QPointer>
#include <memory>
class QWidget;
namespace renderive {
class Qt_Presentation_Sink final : public Presentation_Sink {
public:
explicit Qt_Presentation_Sink(QWidget* widget);
~Qt_Presentation_Sink() override;
void request_present(Rect dirty_rect) override;
private:
struct Private;
std::unique_ptr<Private> d;
};
} // namespace renderive