Tôi đang tìm thư viện để viết GUI trên GLFW và OpenGL. Tôi đang làm điều này bởi vì tôi không hài lòng với các ràng buộc thư viện UI phổ biến mà tôi cảm thấy quá cấp bách và tôi cũng muốn kiểm soát chặt chẽ giao diện của giao diện người dùng của mình. Tôi muốn một cách tiếp cận khai báo để định nghĩa giao diện người dùng. Tôi đang thử nghiệm với chuối phản ứng (và phản ứng tạm thời-chuối-wx) để xem nó có đáp ứng được nhu cầu của tôi hay không. Tôi có một vấn đề với việc xác định các vật dụng đệ quy. Đây là trường hợp thử nghiệm đơn giản nhất của tôi:Xử lý các tiện ích GUI đệ quy cùng với chuối phản ứng
- Tiện ích văn bản hiển thị bộ đếm.
- Tiện ích con nút tăng bộ đếm.
- Một nút widget mà không hoạt động (vì vậy nó là màu xám và không đáp ứng với đầu vào tại tất cả) khi bộ đếm là 0 và nếu không hoạt động và reset bộ đếm đến 0.
Các widget đầu tiên và thứ ba có một mối quan hệ đệ quy. Tiện ích đầu tiên trực quan là số stepper
của số union
của các sự kiện được cấp từ hai nút. Tuy nhiên, nút đặt lại là số fmap
của bộ đếm và sau đó luồng sự kiện dựa trên nút đặt lại! Điều gì sẽ được thực hiện?
Ngoài câu hỏi này, tôi lo ngại về xử lý sự kiện: Vì tôi muốn xử lý đầu vào thiết bị và tiêu điểm đầu vào bên trong mã của tôi thay vì dựa vào khung, tôi thấy khó khăn trong việc sắp xếp các sự kiện một cách chính xác theo cách có thể mở rộng. Lý tưởng nhất là tôi sẽ định nghĩa một data
đóng gói cấu trúc phân cấp của một widget, một cách để cài đặt các sự kiện gọi lại giữa các phần tử và sau đó viết một hàm đi qua cấu trúc dữ liệu đó để xác định đầu vào thiết bị và đầu ra đồ họa. Tôi không chắc chắn cách lấy luồng sự kiện và tách luồng sự kiện dễ dàng như các luồng sự kiện có thể được hợp nhất.
Điều gì xảy ra nếu bạn ở trong đơn vị Sự kiện? Tôi đã quan tâm bởi vì nó không có MonadFix cho đệ quy giá trị, do đó, đệ quy tương tự này không thể được thể hiện trong sự hiện diện của chuyển đổi sự kiện năng động. Cấp cho tôi vẫn không hoàn toàn thoải mái với tất cả các ví dụ công cộng. – danharaj
Đối với câu hỏi thứ hai của tôi: 'filterE' et al. làm việc theo hướng sai cho khả năng mở rộng, tôi nghĩ vậy. Họ kéo từ một sự kiện, và điều đó có vẻ cồng kềnh. Ví dụ, chúng ta có cấu trúc cây của các widget gui với một con trỏ để lấy tiêu điểm bàn phím. Chúng ta muốn biến các sự kiện 'eDeviceInput' thành các sự kiện dựa trên con trỏ đó. Với 'filterE', mọi luồng sự kiện người nhận sẽ phải thực hiện bộ lọc riêng của nó trên cây widget và cũng biết vị trí của nó trong cây, làm cho các phép biến đổi bố cục và chuyển đổi sự kiện động cồng kềnh. – danharaj
Loại 'Sự kiện 'không phải là một đơn nguyên. Bạn có thể có nghĩa là đơn vị 'Moment'? Đó là một ví dụ của 'MonadFix' như bạn mong đợi. –