| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- #pragma once
- #include "lumacs/ui_interface.hpp"
- #include "lumacs/gtk_renderer.hpp"
- #include "lumacs/window.hpp"
- #include "lumacs/editor_core.hpp"
- #include "lumacs/face.hpp"
- #include "lumacs/gtk_window_controller.hpp" // Include GtkWindowController header
- #include <gtkmm.h>
- #include <pangomm.h>
- #include <memory>
- #include <vector>
- #include <map>
- // Forward declarations
- namespace lumacs {
- class EditorCore;
- class Window;
- }
- // Custom Gtk::ApplicationWindow to make constructor public
- class LumacsWindow : public Gtk::ApplicationWindow {
- public:
- explicit LumacsWindow(const Glib::RefPtr<Gtk::Application>& application);
- };
- namespace lumacs {
- class GtkEditor : public IEditorView {
- public:
- GtkEditor();
- ~GtkEditor() override;
- void init() override;
- void run() override;
- void handle_editor_event(EditorEvent event) override;
- void set_core(EditorCore* core) override;
- void queue_redraw_all_windows(Gtk::Widget* widget);
- private:
- EditorCore* core_;
- std::shared_ptr<Window> cached_active_window_;
- Glib::RefPtr<Gtk::Application> app_;
- Gtk::Window* window_ = nullptr;
- Gtk::DrawingArea* drawing_area_ = nullptr;
- Gtk::Widget* content_widget_ = nullptr;
-
- bool cursor_visible_ = true;
- sigc::connection cursor_timer_connection_;
- std::unique_ptr<GtkRenderer> gtk_renderer_;
- std::vector<std::shared_ptr<GtkWindowController>> window_controllers_;
- protected:
- void on_activate();
- void on_draw(const Cairo::RefPtr<Cairo::Context>& cr, int width, int height);
- bool on_cursor_blink();
- void rebuild_layout();
- Gtk::Widget* create_widget_for_layout_node(std::shared_ptr<LayoutNode> node);
- };
- std::unique_ptr<IEditorView> create_gtk_editor();
- } // namespace lumacs
|