Start of a core library

This commit is contained in:
Daniel Ziltener 2020-09-26 15:02:52 +02:00
parent 80aa4f3039
commit e25192137f
4 changed files with 264 additions and 50 deletions

View File

@ -1,20 +1,9 @@
#!/usr/bin/env bash
BASEDIR="$(pwd)"
if [ ! -f dotherside/lib/src/DosQAbstractItemModel.o ]; then
cd dotherside
git submodule update --init
mkdir build; cd build
CC="${CHICKEN_CC}" CXX="${CHICKEN_CXX}" cmake ..
CC="${CHICKEN_CC}" CXX="${CHICKEN_CXX}" make -j8
cd ../lib/src
ODIR=../../build/lib/CMakeFiles/DOtherSide.dir/src
cp "${ODIR}/DosQAbstractItemModel.cpp.o" DosQAbstractItemModel.o
cp "${ODIR}/DosQDeclarative.cpp.o" DosQDeclarative.o
cp "${ODIR}/DosQMetaObject.cpp.o" DosQMetaObject.o
cp "${ODIR}/DosQObject.cpp.o" DosQObject.o
cp "${ODIR}/DosQObjectImpl.cpp.o" DosQObjectImpl.o
cp "${ODIR}/DosQQuickImageProvider.cpp.o" DosQQuickImageProvider.o
cp "${ODIR}/DOtherSide.cpp.o" DOtherSide.o
cp "${ODIR}/DOtherSideTypesCpp.cpp.o" DOtherSideTypesCpp.o
cd "${BASEDIR}"
fi
cp dotherside/build/lib/*.{so,a}

207
qml.core.scm Normal file
View File

@ -0,0 +1,207 @@
(module (qml core)
*
(import (scheme base))
(import (chicken gc))
(import (chicken string))
(import (qml lowlevel))
(import coops coops-primitive-objects coops-extras)
;; Enums
(define-class <Enum> ()
((value accessor: value)))
(define-class <QEventLoopProcessEventFlag> (<Enum>))
(define (qevent-loop-process-event-flag value)
(case value
((process-all-events:)
(make <QEventLoopProcessEventFlag> 'value DosQEventLoopProcessEventFlagProcessAllEvents))
((exclude-user-input-events:)
(make <QEventLoopProcessEventFlag> 'value DosQEventLoopProcessEventFlagExcludeUserInputEvents))
((process-exclude-socket-notifiers:)
(make <QEventLoopProcessEventFlag> 'value DosQEventLoopProcessEventFlagProcessExcludeSocketNotifiers))
((process-all-events-wait-for-more-events:)
(make <QEventLoopProcessEventFlag> 'value DosQEventLoopProcessEventFlagProcessAllEventsWaitForMoreEvents))))
(define-class <QtConnectionType> (<Enum>))
(define (qt-connection-type value)
(case value
((auto-connection:)
(make <QtConnectionType> 'value DosQtConnectionTypeAutoConnection))
((direct-connection:)
(make <QtConnectionType> 'value DosQtConnectionTypeDirectConnection))
((queued-connection:)
(make <QtConnectionType> 'value DosQtConnectionTypeQueuedConnection))
((blocking-connection:)
(make <QtConnectionType> 'value DosQtConnectionTypeBlockingConnection))
((unique-connection:)
(make <QtConnectionType> 'value DosQtConnectionTypeUniqueConnection))))
;; Helpers
(define (application-dir-path)
(dos_qcoreapplication_application_dir_path))
(define-method (process-events (flag <QEventLoopProcessEventFlag>))
(dos_qcoreapplication_process_events (value flag)))
(define-method (process-events-timed (flag <QEventLoopProcessEventFlag>) (timed <integer>))
(dos_qcoreapplication_process_events_timed (value flag) timed))
(define (gui-application-create)
(dos_qguiapplication_create))
(define (gui-application-exec)
(dos_qguiapplication_exec))
(define (gui-application-quit)
(dos_qguiapplication_quit))
(define (gui-application-delete)
(dos_qguiapplication_delete))
(define (qapplication-create)
(dos_qapplication_create))
(define (qapplication-exec)
(dos_qapplication_exec))
(define (qapplication-quit)
(dos_qapplication_quit))
(define (qapplication-delete)
(dos_qapplication_delete))
(define (qquickstyle-set-style style)
(dos_qquickstyle_set_style style))
(define (qquickstyle-set-fallback-style style)
(dos_qquickstyle_set_fallback_style style))
;; Objects
(define-class <QObject> ()
((ptr accessor: ptr)))
(define-class <QVariant> ()
((ptr accessor: ptr)))
(define-class <QQmlContext> (<QObject>)
((ptr accessor: ptr)))
(define-method (base-url (context <QQmlContext>))
(dos_qqmlcontext_baseUrl (ptr context)))
(define-method (set-property (context <QQmlContext>) (name <string>) (value <QVariant>))
(dos_qqmlcontext_setcontextproperty (ptr context) name (ptr value)))
(define-class <QUrl> ()
((ptr accessor: ptr)))
(define (new-QUrl url)
(let ((qurl (make <QUrl> 'ptr (dos_qurl_create url 0))))
qurl))
(define-method (to-string (qurl <QUrl>))
(dos_qurl_to_string (ptr qurl)))
(define-method (valid? (qurl <QUrl>))
(dos_qurl_isValid (ptr qurl)))
(define-method (delete (qurl <QUrl>))
(dos_qurl_delete (ptr qurl)))
(define-class <QPixmap> ()
((ptr accessor: ptr)))
(define (new-QPixmap)
(make <QPixmap> 'ptr (dos_qpixmap_create)))
(define (new-QPixmap width height)
(make <QPixmap> 'ptr (dos_qpixmap_create_width_and_height width height)))
(define-method (copy (qpix <QPixmap>))
(make <QPixmap> 'ptr (dos_qpixmap_create_qpixmap (ptr qpix))))
(define-method (load (qpix <QPixmap>) (filepath <string>) (format <string>))
(dos_qpixmap_load (ptr qpix) filepath format))
(define-method (load-from-data (qpix <QPixmap>) (data <string>) (len <integer>))
(dos_qpixmap_loadFromData (ptr qpix) data len))
(define-method (fill (qpix <QPixmap>) (r <char>) (g <char>) (b <char>) (a <char>))
(dos_qpixmap_fill (ptr qpix) r g b a))
(define-method (assign (qpix <QPixmap>) (other <QPixmap>))
(dos_qpixmap_assign (ptr qpix) (ptr other)))
(define-method (is-null? (qpix <QPixmap>))
(dos_qpixmap_isNull (ptr qpix)))
(define-method (delete (qpix <QPixmap>))
(dos_qpixmap_delete (ptr qpix)))
(define-class <QQuickImageProvider> ()
((ptr accessor: ptr)))
(define-method (new-QQuickImageProvider callback)
(make <QQuickImageProvider> 'ptr (dos_qquickimageprovider_create callback)))
(define-method (delete (qip <QQuickImageProvider>))
(dos_qquickimageprovider_delete (ptr qip)))
(define-class <QQmlApplicationEngine> (<QObject>)
((ptr accessor: ptr)))
(define (new-QQmlApplicationEngine)
(make <QQmlApplicationEngine> 'ptr (dos_qqmlapplicationengine_create)))
(define-method (load (appengine <QQmlApplicationEngine>) (filePath <string>))
(dos_qqmlapplicationengine_load (ptr appengine) filePath))
(define-method (load-url (appengine <QQmlApplicationEngine>) (qurl <QUrl>))
(dos_qqmlapplicationengine_load_url (ptr appengine) (ptr qurl)))
(define-method (load-data (appengine <QQmlApplicationEngine>) (data <string>))
(dos_qqmlapplicationengine_load_data (ptr appengine) data))
(define-method (add-import-path (appengine <QQmlApplicationEngine>) (import-path <string>))
(dos_qqmlapplicationengine_add_import_path (ptr appengine) import-path))
(define-method (context (appengine <QQmlApplicationEngine>))
(make <QQmlContext> 'ptr (dos_qqmlapplicationengine_context (ptr appengine))))
(define-method (add-image-provider (appengine <QQmlApplicationEngine>) (provider-id <string>) (provider <QQuickImageProvider>))
(dos_qqmlapplicationengine_addImageProvider (ptr appengine) provider-id (ptr provider)))
(define-method (delete (appengine <QQmlApplicationEngine>))
(dos_qqmlapplicationengine_delete (ptr appengine)))
(define-class <QQuickViewResizeMode> (<Enum>))
(define (qquick-view-resize-mode value)
(case value
((size-view-to-root-object:) (make <QQuickViewResizeMode> 'value 0))
((size-root-object-to-view:) (make <QQuickViewResizeMode> 'value 1))))
(define-class <QQuickView> (<QObject>)
((ptr accessor: ptr)))
(define (new-QQuickView)
(make <QQuickView> 'ptr (dos_qquickview_create)))
(define-method (show (qqv <QQuickView>))
(dos_qquickview_show (ptr qqv)))
(define-method (source (qqv <QQuickView>))
(dos_qquickview_source (ptr qqv)))
(define-method (set-source-url (qqv <QQuickView>) (qurl <QUrl>))
(dos_qquickview_set_source_url (ptr qqv) (ptr qurl)))
(define-method (set-source (qqv <QQuickView>) (filename <string>))
(dos_qquickview_set_source (ptr qqv) filename))
(define-method (set-resize-mode (qqv <QQuickView>) (mode <QQuickViewResizeMode>))
(dos_qquickview_set_resize_mode (ptr qqv) (value mode)))
(define-method (root-context (qqv <QQuickView>))
(make <QQmlContext> 'ptr (dos_qquickview_rootContext (ptr qqv))))
(define-method (delete (qqv <QQuickView>))
(dos_qquickview_delete (ptr qqv)))
(define-class <QVariant> ()
((ptr accessor: ptr)))
(define-method (initialize-instance (qv <QVariant>))
(call-next-method)
(set! (ptr qv) (dos_qvariant_create)))
(define-method (qvariant (value <integer>))
(make <QVariant> 'ptr (dos_qvariant_create_int value)))
(define-method (qvariant (value <boolean>))
(make <QVariant> 'ptr (dos_qvariant_create_bool value)))
(define-method (qvariant (value <string>))
(make <QVariant> 'ptr (dos_qvariant_create_string value)))
(define-method (qvariant (value <QObject>))
(make <QVariant> 'ptr (dos_qvariant_create_qobject (ptr value))))
(define-method (qvariant (value <flonum>))
(make <QVariant> 'ptr (dos_qvariant_create_float value)))
(define-method (set (qv <QVariant>) (value <integer>))
(dos_qvariant_setInt (ptr qv) value))
(define-method (set (qv <QVariant>) (value <boolean>))
(dos_qvariant_setBool (ptr qv) value))
(define-method (set (qv <QVariant>) (value <flonum>))
(dos_qvariant_setFloat (ptr qv) value))
(define-method (set (qv <QVariant>) (value <string>))
(dos_qvariant_setString (ptr qv) value))
(define-method (set (qv <QVariant>) (value <QObject>))
(dos_qvariant_setQObject (ptr qv) (ptr value)))
(define-method (to (qv <QVariant>) (target <keyword>))
(case target
((integer:) (dos_qvariant_toInt (ptr qv)))
((boolean:) (dos_qvariant_toBool (ptr qv)))
((string:) (dos_qvariant_toString (ptr qv)))
((flonum:) (dos_qvariant_toFloat (ptr qv)))
((qobject:) (dos_qvariant_toQObject (ptr qv)))))
(define-method (is-null? (qv <QVariant>))
(dos_qvariant_isnull (ptr qv)))
(define-method (assign (qv <QVariant>) (other <QVariant>))
(dos_qvariant_assign (ptr qv) (ptr other)))
(define-method (copy (qv <QVariant>))
(make <QVariant> 'ptr (dos_qvariant_create_qvariant (ptr qv))))
(define-method (delete (qv <QVariant>))
(dos_qvariant_delete (ptr qv))))

63
qml.egg
View File

@ -3,7 +3,7 @@
(synopsis "A Chicken wrapper for DOtherSide")
(category ui)
(license "LGPLv3")
(dependencies r7rs foreigners utf8)
(dependencies coops coops-utils foreigners utf8)
(foreign-dependencies dotherside
Qt5Core
Qt5Widgets
@ -13,29 +13,40 @@
Qt5Test
opengl)
(components
;; (c-object dotherside/lib/src/DosQAbstractItemModel
;; (custom-build "dotherside.build.bash"))
;; (c-object dotherside/lib/src/DosQDeclarative
;; (custom-build "dotherside.build.bash"))
;; (c-object dotherside/lib/src/DosQMetaObject
;; (custom-build "dotherside.build.bash"))
;; (c-object dotherside/lib/src/DosQObject
;; (custom-build "dotherside.build.bash"))
;; (c-object dotherside/lib/src/DosQObjectImpl
;; (custom-build "dotherside.build.bash"))
;; (c-object dotherside/lib/src/DosQQuickImageProvider
;; (custom-build "dotherside.build.bash"))
;; (c-object dotherside/lib/src/DOtherSide
;; (custom-build "dotherside.build.bash"))
;; (c-object dotherside/lib/src/DOtherSideTypes
;; (custom-build "dotherside.build.bash"))
(c-object dotherside/lib/src/DosQAbstractItemModel
(source "dotherside/lib/src/DosQAbstractItemModel.cpp")
(csc-options "-c++" "-Idotherside/lib/include" "-I/usr/include/qt5" "-C" "-fPIC"))
(c-object dotherside/lib/src/DosQDeclarative
(source "dotherside/lib/src/DosQDeclarative.cpp")
(csc-options "-c++" "-Idotherside/lib/include" "-I/usr/include/qt5" "-C" "-fPIC"))
(c-object dotherside/lib/src/DosQMetaObject
(source "dotherside/lib/src/DosQMetaObject.cpp")
(csc-options "-c++" "-Idotherside/lib/include" "-Idotherside/lib/include/Qt"
"-I/usr/include/qt5" "-C" "-fPIC"))
(c-object dotherside/lib/src/DosQObject
(source "dotherside/lib/src/DosQObject.cpp")
(csc-options "-c++" "-Idotherside/lib/include" "-I/usr/include/qt5" "-C" "-fPIC"))
(c-object dotherside/lib/src/DosQObjectImpl
(source "dotherside/lib/src/DosQObjectImpl.cpp")
(csc-options "-c++" "-Idotherside/lib/include" "-I/usr/include/qt5" "-C" "-fPIC"))
(c-object dotherside/lib/src/DosQQuickImageProvider
(source "dotherside/lib/src/DosQQuickImageProvider.cpp")
(csc-options "-c++" "-Idotherside/lib/include" "-I/usr/include/qt5" "-C" "-fPIC"))
(c-object dotherside/lib/src/DOtherSide
(source "dotherside/lib/src/DOtherSide.cpp")
(csc-options "-c++" "-Idotherside/lib/include" "-I/usr/include/qt5" "-C" "-fPIC"))
(c-object dotherside/lib/src/DOtherSideTypesCpp
(source "dotherside/lib/src/DOtherSideTypesCpp.cpp")
(csc-options "-c++" "-Idotherside/lib/include" "-I/usr/include/qt5" "-C" "-fPIC"))
(extension qml.lowlevel
;; (objects dotherside/lib/src/DosQAbstractItemModel
;; dotherside/lib/src/DosQDeclarative
;; dotherside/lib/src/DosQMetaObject
;; dotherside/lib/src/DosQObject
;; dotherside/lib/src/DosQObjectImpl
;; dotherside/lib/src/DosQQuickImageProvider
;; dotherside/lib/src/DOtherSide
;; dotherside/lib/src/DOtherSideTypes)
(csc-options "-c++" "-Idotherside/lib/include" "-Ldotherside/build/lib"))))
(objects dotherside/lib/src/DosQAbstractItemModel
dotherside/lib/src/DosQDeclarative
dotherside/lib/src/DosQMetaObject
dotherside/lib/src/DosQObject
dotherside/lib/src/DosQObjectImpl
dotherside/lib/src/DosQQuickImageProvider
dotherside/lib/src/DOtherSide
dotherside/lib/src/DOtherSideTypesCpp)
(csc-options "-c++" "-Idotherside/lib/include" "-L." "-Wl,libDOtherSide.so" "-rpath" "."))
(extension qml.core
(component-dependencies qml.lowlevel))))

View File

@ -1,9 +1,8 @@
(import (r7rs))
(define-library (qml lowlevel)
(module (qml lowlevel)
*
(import (scheme base))
(import (chicken foreign))
(import foreigners)
(export *)
(begin
(foreign-declare "#include <DOtherSide/DOtherSideTypes.h>")
(foreign-declare "#include <DOtherSide/DOtherSide.h>")
@ -110,20 +109,28 @@
(define-foreign-type DosQAbstractItemModelCallbacks (struct "DosQAbstractItemModelCallbacks"))
(define-foreign-type DosQEventLoopProcessEventFlag (enum "DosQEventLoopProcessEventFlag"))
(define DosQEventLoopProcessEventFlagProcessAllEvents (foreign-value "0x00" byte))
(define DosQEventLoopProcessEventFlagExcludeUserInputEvents (foreign-value "0x01" byte))
(define DosQEventLoopProcessEventFlagProcessExcludeSocketNotifiers (foreign-value "0x02" byte))
(define DosQEventLoopProcessEventFlagProcessAllEventsWaitForMoreEvents (foreign-value "0x03" byte))
(define-foreign-type DosQtConnectionType (enum "DosQtConnectionType"))
(define DosQtConnectionTypeAutoConnection 0)
(define DosQtConnectionTypeDirectConnection 1)
(define DosQtConnectionTypeQueuedConnection 2)
(define DosQtConnectionTypeBlockingConnection 3)
(define DosQtConnectionTypeUniqueConnection (foreign-value "0x80" byte))
;; Functions
;; QCoreApplication
(define dos_qcoreapplication_application_dir_path
(foreign-lambda* c-string ()
"C_return(dos_qcoreapplication_application_dir_path());"))
(foreign-lambda c-string "dos_qcoreapplication_application_dir_path"))
(define dos_qcoreapplication_process_events
(foreign-lambda* void ((DosQEventLoopProcessEventFlag flags))
"dos_qcoreapplication_process_events(flags);"))
(foreign-lambda void "dos_qcoreapplication_process_events"
DosQEventLoopProcessEventFlag))
(define dos_qcoreapplication_process_events_timed
(foreign-lambda* void ((DosQEventLoopProcessEventFlag flags)
(int ms))
"dos_qcoreapplication_process_events_timed(flags, ms);"))
(foreign-lambda void "dos_qcoreapplication_process_events_timed"
DosQEventLoopProcessEventFlag int))
;; QGuiApplication
(define dos_qguiapplication_create
@ -723,5 +730,5 @@
(c-pointer DosQPointer)))
(define dos_qpointer_data
(foreign-lambda (c-pointer DosQObject) "dos_qpointer_data"
(c-pointer DosQPointer)))
))
(c-pointer DosQPointer)))))