Compare commits

...

489 Commits

Author SHA1 Message Date
Simon Edwards
f41edc2ea4 Bump the version 2023-03-07 22:48:15 +01:00
Simon Edwards
30ab4442cf
Merge pull request #999 from nodegui/input_methods
Add Input Method classes and support
2023-03-07 21:50:32 +01:00
Simon Edwards
90e556be6e Code formatting 2023-03-06 20:02:23 +01:00
Simon Edwards
e9ff6a93fb Improve docs for QInputMethodQueryEvent; extract nativeObjectFromVariantType() 2023-03-06 20:01:35 +01:00
Simon Edwards
5879ad7ec4 Use better types inside QInputMethodQueryEvent binding 2023-03-05 16:49:43 +01:00
Simon Edwards
731d186b01 Add QWidget.updateMicroFocus() method 2023-03-05 16:49:37 +01:00
Simon Edwards
47d98500cf Add Input Method classes and support 2023-03-04 10:29:55 +01:00
Simon Edwards
2561fd92f9 Prepare for release 2023-02-16 18:57:43 +01:00
Simon Edwards
9129cdef0d Remove useless app wide setting 2023-02-16 18:57:43 +01:00
Simon Edwards
613ee337aa
Merge pull request #996 from NathanaelA/addTableFeatures
Added clearSelection, selectAll, scrollToBottom, scrollToTop to QTableWidget
2023-02-14 22:31:53 +01:00
Nathanael Anderson
bd6595e40a Added clearSelection, selectAll, scrollToBottom, scrollToTop to QTableWidget 2023-02-14 14:13:36 -06:00
Simon Edwards
d827e51ba4 Bump the version 2023-01-24 22:39:27 +01:00
Simon Edwards
77fd5c5a3f Fix RPATH of the binary module on macos 2023-01-24 22:38:56 +01:00
Simon Edwards
a2e5b73107 Bump version 2023-01-14 11:00:08 +01:00
Simon Edwards
4e42f61faa Add applicationDisplayNameChanged & lastWindowClosed signals to QApplication 2023-01-14 10:59:27 +01:00
Simon Edwards
3a04d14872 Bump the version 2023-01-02 19:33:47 +01:00
Simon Edwards
e18e912d11
Merge pull request #984 from nodegui/qpainter_hidpi
QPainter HiDPI + QWidget methods
2023-01-02 18:41:03 +01:00
Simon Edwards
15478751db Add more QPaintDevice methods to QWidget 2022-12-31 13:54:22 +01:00
Simon Edwards
d715a4299d Add floating point versions of QPainter methods 2022-12-31 13:53:30 +01:00
Simon Edwards
09d450aef4 Attempt 2 at fixing Ubuntu GH workflow 2022-12-28 21:59:18 +01:00
Simon Edwards
e5fd79e4c1 Add OpenGL to Ubuntu GH workflow 2022-12-28 21:55:42 +01:00
Simon Edwards
86fc6689fb Bump the version to 0.58.0-rc1 2022-12-28 21:48:43 +01:00
Simon Edwards
d6ba15df55
Merge pull request #981 from nodegui/qt6
Upgrade to Qt 6.4.1
2022-12-28 21:45:24 +01:00
Simon Edwards
86e9447dd0 Fix the qt home path on the macos build 2022-12-27 11:29:25 +01:00
Simon Edwards
29e919caad Update the jest & friends dependencies 2022-12-26 13:30:48 +01:00
Simon Edwards
88e5149a9f Make eslint command invocation Windows compatible 2022-12-26 13:21:52 +01:00
Simon Edwards
33c0b24731 C++ code lint fixes 2022-12-26 13:20:35 +01:00
Simon Edwards
d4c443607e Make everything use npm and not a mix of tools 2022-12-26 13:08:46 +01:00
Simon Edwards
6422d7faca Give Linux build libEGL 2022-12-26 12:44:57 +01:00
Simon Edwards
1468612a78 Upgrade Ubuntu in CI/CD to 20.04; 18.04 is deprecated 2022-12-26 12:12:16 +01:00
Simon Edwards
bbb0951525 Upgrade to Qt 6.4.1 2022-12-26 11:54:47 +01:00
Simon Edwards
47083b4a86 Bump the version 2022-12-02 17:01:39 +01:00
Simon Edwards
5a51e2748b Also emit the event object after default processing 2022-12-02 17:01:01 +01:00
Atul R
93dbf25938 0.57.2 2022-11-17 20:02:40 +01:00
zecktos
898c7f58c9
fix for linux not finding miniQt (#979)
adding miniQt to the LD_LIBRARY_PATH environment variable fixes the problem with linux not using miniQT when bundled with webpack like in the nodegui-starter template. this fixes https://github.com/nodegui/nodegui-starter/issues/229 fixes https://github.com/nodegui/nodegui/issues/972
2022-11-17 20:02:04 +01:00
Atul R
b7d503fd39
fix breaking build on macos (#970)
* fix breaking build on macos

* 0.57.1

* fix tests
2022-09-04 00:14:10 +02:00
Simon Edwards
95da509b83 Remove unneeded cross-env 2022-08-22 21:30:15 +02:00
Simon Edwards
34c8f511d9 Bump the version 2022-08-16 10:01:32 +02:00
Simon Edwards
3f0d00c83c Add windowStateChanged signal to QWindow 2022-08-16 09:53:36 +02:00
Simon Edwards
79433a5c83 Add horizontalScrollBar() & verticalScrollBar() to QAbstractScrollArea 2022-08-07 23:20:17 +02:00
Simon Edwards
abc1d2cf64 Add many methods to QSize and QSizeF 2022-07-17 09:51:16 +02:00
Simon Edwards
f7c4d5dfae Code formatting for QIcon 2022-07-17 09:25:16 +02:00
Simon Edwards
2305b7072b Bump the version 2022-07-16 09:59:11 +02:00
Simon Edwards
643eff4a90 Update the Getting Started guide 2022-07-04 21:49:37 +02:00
Simon Edwards
e2e06ca027 Fill in most QIcon methods 2022-07-04 21:28:30 +02:00
Simon Edwards
a7df290d58 Update the @nodegui/qode version 2022-07-01 21:42:03 +02:00
Simon Edwards
123524d126 Add done() and accept() to QDialog and subclasses as much as possible
issue #708
2022-06-19 11:05:51 +02:00
Simon Edwards
28b98b055a Bump the version 2022-06-18 20:49:35 +02:00
Simon Edwards
76743cd414 Add sizeHintForIndex() and visualRect() to QAbstractItemView 2022-06-18 20:48:24 +02:00
Simon Edwards
9fcc5e99d3 Add QAbstractItemDelegate to support plugins 2022-06-06 12:25:07 +02:00
Simon Edwards
4a55d9ec45 Tweak some return types in QMainWindow 2022-05-28 10:58:40 +02:00
Simon Edwards
7d690dc75d Bump the version 2022-05-27 20:19:06 +02:00
Simon Edwards
2ece6d5375
Merge pull request #947 from nodegui/qevent_control
Expand event support to grab QEvents after default processing
2022-05-27 18:05:39 +02:00
Simon Edwards
421929c147 Add "Advanced QEvent Handling" guide to the website sidebar 2022-05-26 12:02:07 +02:00
Simon Edwards
755156c19a Add a Guide about advanced QEvent handling 2022-05-26 11:44:02 +02:00
Simon Edwards
43deec1c9e Expand event support to grab QEvents after default processing 2022-05-26 09:44:34 +02:00
Simon Edwards
e20517430e Mention QBoxLayout in the layout guide 2022-05-26 09:31:35 +02:00
Simon Edwards
16940eca53 Add "Understanding Memory" guide to the website sidebar 2022-05-26 09:27:18 +02:00
Simon Edwards
37d000ee44 Add QWidget methods setFocusProxy(), isAncestorOf(), isEnabledTo(), isVisibleTo(), & stackUnder() 2022-05-25 22:33:33 +02:00
Simon Edwards
0db724d40c Add more QWidget methods 2022-05-23 22:02:08 +02:00
Simon Edwards
1da7ae6de3 Bump the version 2022-05-23 18:43:39 +02:00
Simon Edwards
1b3478e0cb
Merge pull request #936 from nodegui/memory
Improve memory management
2022-05-23 18:38:31 +02:00
Simon Edwards
11bf45466d Export wrapperCache in index.ts too 2022-05-21 19:54:12 +02:00
Simon Edwards
b36caeddd2 Add documentation about dealing with memory 2022-05-21 12:47:46 +02:00
Simon Edwards
f606ebdd72 Add _id() to QObject for debugging purposes 2022-05-20 16:31:56 +02:00
Simon Edwards
0f9ad1e028 Add logging/debugging controls for the wrapper lifecycle 2022-05-20 15:25:18 +02:00
Simon Edwards
fcdbfb07c3 Merge branch 'master' into memory 2022-05-19 20:04:52 +02:00
Simon Edwards
06637c6c0f Bump the version 2022-05-19 19:49:57 +02:00
Simon Edwards
c28fd5d5c3 Add QLabel.buddy() 2022-05-19 19:48:23 +02:00
Jake Kerr
d450841001
Expose the QWidget::grab method to script. (#941)
Reference from qt base:
https://code.qt.io/cgit/qt/qtbase.git/tree/src/widgets/kernel/qwidget.cpp#n5247
2022-05-19 18:03:48 +02:00
Simon Edwards
5191892950 Less caching in QMainWindow 2022-05-12 20:49:17 +02:00
Simon Edwards
bfa531f1f4 Massive TS wrapper update 2022-05-11 22:30:42 +02:00
Simon Edwards
6aa3f00fa3 Massive C++ wrapper update 2022-05-09 22:12:52 +02:00
Simon Edwards
f3d7d73acc Add QObject.children() 2022-05-05 19:25:01 +02:00
Simon Edwards
880ea7c998 Add QObject.parent() and infra for correct subclass wrappers 2022-05-05 17:10:40 +02:00
Simon Edwards
bc9bf12e11 Refine the wrapper type registration 2022-05-01 20:23:21 +02:00
Simon Edwards
02f901ddf1 Add QObject.delete() and QObject.deleteLater(), and test QObject deletion 2022-05-01 20:02:02 +02:00
Simon Edwards
cbb3f99dfa Add QObject.parent() and a heap of wrapper management 2022-05-01 11:08:37 +02:00
Simon Edwards
7bf97ef618 Eliminate one template param on WrapperCache::get() 2022-04-30 20:00:03 +02:00
Simon Edwards
1d92cc8f3e Use uint keys inside the C++ wrapper cache 2022-04-30 19:21:20 +02:00
Simon Edwards
9faf63d5d3 Rename QAbstractItemModel.parent() to parentModelIndex()
The signature on `QAbstractItemModel.parent()` conflicts with
`QObject.parent()`. Maybe in C++ you can get away with that,
but in TS it is a huge PITA.
2022-04-30 09:42:18 +02:00
Simon Edwards
7dcbc32540 Remove NodeHeaderView, use QHeaderView 2022-04-29 20:35:00 +02:00
Simon Edwards
387555f3c0 Remove NodeTableView, use QTableView 2022-04-29 20:31:44 +02:00
Simon Edwards
10ebd00cde Remove NodeListView, use QListView 2022-04-29 20:29:29 +02:00
Simon Edwards
fda93e9dd5 Remove NodeTextEdit, use QTextEdit 2022-04-29 20:23:30 +02:00
Simon Edwards
23759b1aaa Remove NodeDialog, use QDialog instead 2022-04-29 20:10:27 +02:00
Simon Edwards
165bb820bc Remove NodeDateTimeEdit, use QDateTimeEdit 2022-04-29 20:05:21 +02:00
Simon Edwards
83e9c09690 Remove NodeLayout, use QLayout instead 2022-04-29 19:55:13 +02:00
Simon Edwards
b7476a4ea1 Remove NodeFrame, use QFrame instead 2022-04-29 19:43:39 +02:00
Simon Edwards
38b12759c6 Remove NodeWidget, just use QWidget 2022-04-29 19:36:46 +02:00
Simon Edwards
c6d30f8f9f Combine NodeObject+QObject; put native field in Component 2022-04-29 13:30:39 +02:00
Simon Edwards
4f40510248 Document and design the case of object creation 2022-04-28 21:18:16 +02:00
Simon Edwards
c733a41d10 Add design documentation for improved memory management 2022-04-28 11:43:27 +02:00
Simon Edwards
81c31f4de3 Fix some uninitialise memory access reported by Valgrind 2022-04-27 10:04:14 +02:00
Simon Edwards
ac1c118ae3 Add QTimerEvent and QObject.startTimer() and QObject.killTimer() 2022-04-19 19:37:26 +02:00
Simon Edwards
7d2dfc1cf2 Add QScreen.grabWindow()
issue #933
2022-04-18 17:43:11 +02:00
Simon Edwards
0c2cf50362 Force the latest bug fix release of qode 2022-04-17 21:23:30 +02:00
Simon Edwards
a485be9c1e Bump the version 2022-04-16 21:51:34 +02:00
Simon Edwards
e2ccec9ba3 Make it possible to set stylesheets and bypass postcss
Sometimes the extra CSS properties produced by postcss are applied to the
normal QWidgets which are not subclassed with the Yoga stuff included.
This produces nasty warnings, regardless of whether you are using Yoga/flex
or not.
2022-04-16 21:49:33 +02:00
Simon Edwards
7d8fb77481 Make QTabBar.setTabButton() accept null 2022-04-16 21:49:08 +02:00
Simon Edwards
4c5ccadfc7 Bump version 2022-04-08 15:52:08 +02:00
Simon Edwards
69d0e2e3cd Add visibility related methods/event to QWindow 2022-04-06 19:31:04 +02:00
Simon Edwards
733c24e6cd Add QMoveEvent 2022-04-05 20:48:21 +02:00
Simon Edwards
4155a1f586 Bump the version 2022-03-12 10:57:20 +01:00
Simon Edwards
34ce565bb8 Fill in most of the QLineEdit methods 2022-03-12 10:56:46 +01:00
Simon Edwards
d805c7c66d Bump the version 2022-03-05 09:32:24 +01:00
Simon Edwards
3291216bbb Fill in more values for QStylePixelMetric 2022-03-02 19:18:37 +01:00
Simon Edwards
eb6754fe8a Fix the default alignment in QGridLayout.addWidget() and QGridLayout.addLayout() 2022-02-13 10:16:58 +01:00
Simon Edwards
b4c9c0d51b Add QWidget.mapTo() and QWidget.mapFrom() 2022-02-12 11:43:51 +01:00
Simon Edwards
8058433031 Bump the version 2022-02-09 19:42:18 +01:00
Simon Edwards
c877a2814e Make QWindow fire QEvents as events; add "window state" methods 2022-02-08 22:19:40 +01:00
Simon Edwards
2865212937 Add QWidget.winId(), useful for forcing window creation 2022-02-06 19:09:27 +01:00
Simon Edwards
ed7da32952 Add alignment parma support to QGridLayout.addWidget() 2022-02-04 16:04:47 +01:00
Simon Edwards
a0b53f2e0c Add some windowing related methods to QWindow 2022-02-04 15:47:31 +01:00
Simon Edwards
714bdcbdbb
Upgrade to Qt 5.15.2 (#915) 2022-02-04 15:42:09 +01:00
Simon Edwards
a2fd884543 Make QLineEdit.setText() accept an empty string 2022-01-23 12:05:31 +01:00
Simon Edwards
93c6c121f6 Bump the version 2022-01-02 20:21:54 +01:00
Simon Edwards
dab7eee4ad Detect Linux correclty in CMakeLists.txt 2022-01-02 20:21:26 +01:00
Simon Edwards
f90ae67864 Bump the version 2022-01-02 11:40:34 +01:00
Simon Edwards
ddb560abbf Fix the 'unique identifier' problem in the GH Action now 2022-01-02 11:39:59 +01:00
Simon Edwards
5de4210cfb Bump the version 2022-01-02 11:33:50 +01:00
Simon Edwards
daf730efd5 Fix the GH action file 2022-01-02 11:33:21 +01:00
Simon Edwards
c61c9c085d Bump the version 2022-01-02 11:22:26 +01:00
Simon Edwards
e0dfc94363 Include the *.lib and *.exp binaries for precompiled Windows
These files are needed by binary plugins which link against the NodeGui binary.
2022-01-02 11:21:09 +01:00
Simon Edwards
9b451ecac3 Bump version 2022-01-01 20:17:38 +01:00
Simon Edwards
26736d06c8
Download prebuilt binary files at npm install time (#906)
Download prebuilt binary files at `npm install` time

issue #904
2022-01-01 19:18:45 +01:00
Simon Edwards
01d3c03fb2 Fix tarball filename problems in release GH Action
issue #904
2021-12-28 17:05:25 +01:00
Simon Edwards
b783bbe6d6 Bump version 2021-12-28 16:26:49 +01:00
Simon Edwards
640c77dd56 Fix ARCHIVE_FILENAME env var use in release.xml
issue #904
2021-12-28 16:25:50 +01:00
Simon Edwards
b6ae8ad1cc Bump version for test release 2021-12-28 16:01:50 +01:00
Simon Edwards
c5e2485e0e Move precompile action into the release GH Action
issue #904
2021-12-28 15:48:03 +01:00
Simon Edwards
de2ce99fdd Add GH Action to create and upload binaries for releases
issue #904
2021-12-28 15:48:03 +01:00
Simon Edwards
0867b96302 Bump version 2021-12-27 13:41:15 +01:00
Simon Edwards
78895a002f Fix QWidget.setEnable()/setDisable() 2021-12-27 13:34:29 +01:00
Simon Edwards
9f9e61289b More QWidget methods and properties 2021-12-26 18:53:49 +01:00
Simon Edwards
69dea9c4c8 Bump the version to 0.43.0 2021-12-11 18:25:08 +01:00
Simon Edwards
94ce790891 Apply code formatting 2021-12-11 15:31:43 +01:00
Simon Edwards
21ed97037a Add QResizeEvent class 2021-12-11 15:31:43 +01:00
Simon Edwards
1ab7d13b96 Add QWidget.setFixedHeight(), QWidget.setFixedWidth(), and QWidget.sizeHint() 2021-12-11 15:31:43 +01:00
Simon Edwards
47b3d514bb Add QWidget.setParent() 2021-12-11 15:31:43 +01:00
Simon Edwards
e653c3ad1d Bump the version to 0.42.0 2021-12-05 09:58:42 +01:00
Simon Edwards
0e33e39759
Remove most unneeded or buggy Napi:HandleScope uses (#895) 2021-12-03 19:02:06 +01:00
Simon Edwards
d11ed993ee
Add signal support to QClipboard (#894)
* Add signal support to `QClipboard`

issue ##713
2021-12-02 20:33:46 +01:00
Simon Edwards
8d4a7f2d00
Merge pull request #886 from nodegui/qscreen_qwindow
Add `QScreen` and `QWindow`, remove the deprecated `QDesktopWidget`
2021-11-26 18:35:17 +01:00
Simon Edwards
06528cdd67 Merge branch 'master' into qscreen_qwindow 2021-11-13 11:39:04 +01:00
Simon Edwards
0d71db9b24 Bump the version to 0.41.0 2021-11-13 11:07:26 +01:00
Simon Edwards
05a5fdd539 Apply code formatting 2021-11-07 21:38:26 +01:00
Andreas Kröhnke
b35f386e46 Add QSplitter 2021-11-07 21:34:38 +01:00
Andrew Wong
59a4f4abb4 Update packaging.md 2021-11-07 21:33:28 +01:00
Simon Edwards
7ae4a5cb7e Wrap some native objects during event dispatch 2021-11-06 20:41:04 +01:00
Simon Edwards
2dc8319b50 Add some tests for the wrapper cache 2021-11-05 21:10:01 +01:00
Simon Edwards
eea4f6fe30 Merge branch 'master' into qscreen_qwindow 2021-11-04 20:47:52 +01:00
Simon Edwards
c44d40b2e5 Fix import weirdness which caused the tests to fail 2021-11-04 20:24:06 +01:00
Simon Edwards
88b2fcbcd1 Treat args to QPainter.translate(), scale(), and rotate() as doubles, not ints
issue #887
2021-11-03 21:21:58 +01:00
Simon Edwards
f7f86d5cfa Pass env to WrapperCache::get() 2021-10-31 17:02:43 +01:00
Simon Edwards
2b2d2a65b2 Make the wrapper cache generic. Apply it to QWindow and QScreen 2021-10-31 09:32:37 +01:00
Simon Edwards
123123605c Make the wrapper cache callback work 2021-10-27 12:20:49 +02:00
Simon Edwards
710cfa3d31 Add wrapper caching. Try it on QScreen. 2021-10-27 10:46:12 +02:00
Simon Edwards
05c690dcd9 Fill in more screen and DPI support in QApplication 2021-10-24 11:19:05 +02:00
Simon Edwards
fa52c674ef Support addEventListener() when the wrapper handles signals 2021-10-23 18:51:17 +02:00
Simon Edwards
8ce6dde45b Add QScreen and QWindow, remove the deprecated QDesktopWidget 2021-10-22 22:15:59 +02:00
Simon Edwards
bfd45b3a54 Add QScreen and QWindow, remove the deprecated QDesktopWidget 2021-10-22 22:13:17 +02:00
Simon Edwards
8ddc4172cd Add more QWidget methods 2021-10-16 16:43:24 +02:00
Simon Edwards
81eeaa3a20 Don't delete QObjects which have a parent
Qt's memory management is built around trees of objects where deleting the root object also deletes the whole tree. Objects with a parent are owned by that parent.
2021-10-16 14:16:34 +02:00
Andreas Kröhnke
47c00fabc1 Add QBrush as an argument to QPainter.setBrush 2021-10-14 20:15:03 +02:00
Simon Edwards
3bbb7da6e7 Bump the version 2021-10-03 22:02:33 +02:00
Simon Edwards
c4d9a93e56 Add many TODO comments, methods, and signals to QComboBox 2021-09-29 21:48:56 +02:00
Simon Edwards
f92bd65407 Bump the version for a bug fix 2021-09-24 20:22:08 +02:00
Simon Edwards
c91856641c Fix QPen being completely broken 2021-09-24 20:21:36 +02:00
Simon Edwards
3479606f83 Put the build time concurrency back on 8 (where it belongs) 2021-09-23 21:50:34 +02:00
Simon Edwards
797835ad79 Bump the version 2021-09-23 21:27:11 +02:00
Simon Edwards
96b3cbe594 Add more QPainter methods 2021-09-23 20:52:23 +02:00
Simon Edwards
3ada99b201 Add TODO comments to QPainter.ts 2021-09-23 20:26:00 +02:00
Simon Edwards
bd6b127358 Add QSizeF and QFontMetricsF 2021-09-20 21:45:14 +02:00
Simon Edwards
481062423e Build code on install, not postinstall 2021-09-18 21:00:02 +02:00
Simon Edwards
328dcea8c8 Remove some dead code in qstyle_wrap.cpp 2021-09-18 10:43:25 +02:00
Nathanael Anderson
f8ed7d3a78 Update Process.md
Delete invalid documentation, as these two values are no longer valid in the later versions of Qode.    There does NOT appear to be a current way to get the currently running QT.
2021-09-18 10:11:24 +02:00
milahu
12d79a62da move to deps 2021-09-18 10:06:15 +02:00
milahu
c7b2e4c8b7 add postcss to devDependencies 2021-09-18 10:06:15 +02:00
Simon Edwards
91d652ed84 Bump our version 2021-09-18 10:02:45 +02:00
Simon Edwards
590385339c Add QStyle.polish(), QStyle.unpolish(), and QWidget.style() 2021-09-13 19:50:53 +02:00
Simon Edwards
44bb1e5f0e QWidget: Add TODO comments, setSizePolicy(), set max/min width/height methods 2021-09-11 12:14:43 +02:00
Simon Edwards
a4a961666a Fill in QFontMetrics methods 2021-09-07 22:46:27 +02:00
Simon Edwards
7af718b834 Add count() to QStackedWidget 2021-09-07 20:32:50 +02:00
Simon Edwards
8060a631b1 Add dumpObjectTree() & dumpObjectTree() to QObject 2021-09-07 20:32:09 +02:00
Simon Edwards
01096abede Fill in the QHeaderView methods 2021-09-02 21:33:09 +02:00
Simon Edwards
8110982412 Format C++ code 2021-09-02 19:15:51 +02:00
Nathanael Anderson
4429959fed Fix QWidgetTableItem Wrapper 2021-09-02 19:10:35 +02:00
Simon Edwards
920e64404d Bump the library version 2021-08-31 19:52:51 +02:00
Simon Edwards
87af1db2bc Fix up QHeaderView failing on the default nodejs MS compiler 2021-08-31 18:30:31 +02:00
Simon Edwards
391971f80b Fix QTableView.verticalHeader() and return the correct header 2021-08-30 19:24:38 +02:00
Simon Edwards
5aab3ed97d Fix yaml problems 2021-08-29 09:49:45 +02:00
Simon Edwards
e6f838375a Update apt package list before installing deps in CI 2021-08-29 09:38:08 +02:00
Simon Edwards
907acb5ad2 Bump version 2021-08-28 22:17:55 +02:00
Simon Edwards
b6fc24d6e0 Update README. Send discussions to GH. 2021-08-28 22:11:10 +02:00
Simon Edwards
1b399ef5be Update README: Bump NodeJs version; Remove Spectrum link 2021-08-28 11:20:54 +02:00
Simon Edwards
c3c597df4d Add QStyleFactory and bits to set the app style 2021-08-28 10:58:40 +02:00
Simon Edwards
25f529757e Add width() and height() to QWidget 2021-08-26 22:19:03 +02:00
Simon Edwards
edf437f056 Fill in QAbstractItemView methods & enums; add QItemSelectionModel 2021-08-26 22:13:35 +02:00
Simon Edwards
8c79f3d093 Fix some freshly created bugs in QAbstractItemModel.ts 2021-08-26 20:17:23 +02:00
Simon Edwards
55217146ae More methods for QAbstractItemModel 2021-08-22 09:48:17 +02:00
Simon Edwards
456824c504 Take example progs out of package.json 2021-08-22 09:48:17 +02:00
Simon Edwards
4f0f64884d Keep backwards compatability with non-virtual connectSignalsToEventEmitter() 2021-08-22 09:48:17 +02:00
Simon Edwards
1f11f1cf8b Make connectSignalsToEventEmitter() virtual to support wrappers on plain Qt widget instances 2021-08-22 09:48:17 +02:00
Simon Edwards
d81b781d1f Warn when using addEventListener() on an instance not from NodeGui 2021-08-22 09:48:17 +02:00
Simon Edwards
053fc9dc65 Add (basic) QHeaderView; Support wrappers on plain Qt widgets 2021-08-22 09:48:17 +02:00
Simon Edwards
11c33771c2 Format some TS code 2021-08-22 09:48:17 +02:00
Simon Edwards
5fd23f0ba3 Tune down eslint regarding unused method parameters 2021-08-22 09:48:17 +02:00
Simon Edwards
c209fe2adc Format cpp code 2021-08-22 09:48:17 +02:00
Simon Edwards
940351acbe Sort and doc the state of QAbstractItemModel and its methods/signals 2021-08-22 09:48:17 +02:00
Simon Edwards
f7a4a4d3d1 Add QAbstractItemModel.buddy() support 2021-08-22 09:48:17 +02:00
Simon Edwards
e81b5ae658 Implement QAbstractItemModel.setData() and 5th tutorial example 2021-08-22 09:48:17 +02:00
Simon Edwards
588093519a Add header model view tutorial example 2021-08-22 09:48:17 +02:00
Simon Edwards
3a83a7fe62 Fix bug in QAbstractItemModel.rowCount() 2021-08-22 09:48:17 +02:00
Simon Edwards
b5a9f30d34 Add the changing data model view example 2021-08-22 09:48:17 +02:00
Simon Edwards
25026a55f7 Add 2nd model view tutorial app 2021-08-22 09:48:17 +02:00
Simon Edwards
467231d4b7 Fix up constructor arg handling in QBrush. 2021-08-22 09:48:17 +02:00
Simon Edwards
3aeb4b09bf Fill in the missing values from ItemDataRole 2021-08-22 09:48:17 +02:00
Simon Edwards
9eed41ecd8 Add bold support to QFont 2021-08-22 09:48:17 +02:00
Simon Edwards
25e0d61e01 Add basic QAbstractItemModel and QAbstractTableModel 2021-08-22 09:48:17 +02:00
Simon Edwards
080bb3626d Add some missing geometry methods to QWidget 2021-08-13 15:53:00 +02:00
Atul R
c26a194694
Upgrade deps and qode (#865)
* bump deps

* fix test

* fix node verison

* 0.36.0

* revert tsconfig

* add env

* fix cmake build for windows

* fix qode bump

* temp fix
2021-08-09 23:44:46 +02:00
Simon Edwards
a577689cd4 Add QFontDatabase.applicationFontFamilies() 2021-08-08 20:45:41 +02:00
Simon Edwards
d3f6d6d092 Implement QGridLayout.addLayout() 2021-08-04 20:31:33 +02:00
Simon Edwards
87e6531c65 Re-use existing JS event emitters when creating JS side wrappers
By not re-using JS event emitters, if a JS/C++ wrapper is created twice for
a `QObject` then any previously registered event handlers will be overwritten
and lost when the `QObject`'s `initNodeEventEmitter()` is called for a 2nd
time.
2021-08-02 17:07:13 +02:00
Simon Edwards
faa6adcb23 Bump the version 2021-07-30 10:04:59 +02:00
Simon Edwards
880a8433cb Add QApplication.setStyleSheet() 2021-07-30 09:34:15 +02:00
Simon Edwards
f319a24ad3 Add QColor.rgb() and QColor.rgba() 2021-07-30 09:34:15 +02:00
Simon Edwards
17462abae7 Add a (basic) QPalette 2021-07-30 09:34:15 +02:00
Simon Edwards
978526c4e6 Bump version 2021-07-19 19:52:32 +02:00
Simon Edwards
2901d09d01
Extra methodsfor QPainter, string lists in QVariant, and default args for QClipboard (#858)
* Add string list support to `QVariant`

* Add more methods to `QPainter`

* Give the `QClipboard` methods default params to match C++ API

* Code style fix for `nutils.cpp`
2021-07-16 21:14:16 +02:00
Shoomba
af64c4820f
bolded the features (#855)
added bold to the features to give contrast
2021-07-12 21:36:12 +02:00
JIBSIL
0d01354737
Update homepage (#854)
* Update homepage

Corrected MacOs to MacOS, Added a missing GUI on the "lets you create truly native apps..." block and corrected some grammar in that block to make it flow better.

* Update CreateNativeApps.js
2021-07-12 21:35:35 +02:00
Simon Edwards
d04364a186
Add QInputEvent methods (#853) 2021-07-11 12:33:17 +02:00
Simon Edwards
4a66c65034
Export SliderAction (#852) 2021-07-11 08:35:17 +02:00
Simon Edwards
4eebad6f5f
Add way for JS to stop event processing in QObject::event() (#850)
This adds a couple small methods on `QObject` which makes it possible for
JS code to indicate to the currently running `QObject::event()` override
method whether it should allow more processing of an event or to stop
processing and not call super class `event()` method. This is Qt recommended
(C++) way of overriding event behaviour and stopping default behaviour.
2021-07-10 20:49:43 +02:00
Atul R
281a89508b
Update README.md 2021-07-10 14:30:29 +02:00
Atul R
f38c50724d 0.33.3 2021-07-10 12:18:45 +02:00
Atul R
76d737340e Adds npm token 2021-07-10 12:18:24 +02:00
Atul R
6edf90ee97 0.33.2 2021-07-10 12:12:16 +02:00
Atul R
1b1647892d fix npm publish command 2021-07-10 12:02:28 +02:00
Atul R
7863875641 update workflow files 2021-07-10 11:54:26 +02:00
Atul R
39edc4e382 fix release job 2021-07-10 11:41:07 +02:00
Atul R
3f26303d6e corrects engine version 2021-07-10 11:36:32 +02:00
Atul R
37fed9dde7 0.33.2 2021-07-10 11:33:40 +02:00
Atul R
d5800fd92f
Adds prepublish (#851) 2021-07-10 11:32:58 +02:00
Atul R
a1070a7c26 change docs command to increase memory to 6.5 gb 2021-07-09 20:05:37 +02:00
Atul R
8549a4e1de update demo 2021-07-09 20:01:38 +02:00
Atul R
06d735fe89 cleans up docs and bumps version 2021-07-09 19:47:56 +02:00
Atul R
bcd1f8ea0b Adds mirror for m1 mac mini qt 2021-07-09 19:36:20 +02:00
Atul R
e6d01fc7f5 update docs 2021-07-09 01:04:06 +02:00
Atul R
4adef0a280
Adds readme for m1 macs (#849)
* Adds readme for m1 macs

* skip webengine

* update docs

* adds qtsvg
2021-07-09 00:48:45 +02:00
Atul R
b8a94d8db5 bumps version 2021-07-08 23:10:56 +02:00
Simon Edwards
1bc346d22c
Add QEvent methods to all subclasses + some random methods (#848)
* Add `clearFocus()` to `QWidget`

* Add `Alignment` param to `QBoxLayout.addWidget()`

* Add `setViewportMargins()` & `viewportMargins()` to `QScrollArea`

* Add `QEvent` methods to all event related subclasses

* Tell C++ that our 0 is zero and not a null pointer
2021-07-08 22:45:41 +02:00
Atul R
1d2a0a6f47 0.32.1 2021-07-04 12:56:28 +02:00
Simon Edwards
f4e0ca1677
More random methods and events (#847)
* Add `maximumViewportSize()`, `setHorizontalScrollBar()` & `setVerticalScrollBar()` to `QAbstractScrollArea`

* Log any JS exceptions thrown during Qt event dispatch

* Add `setData()` & `data()` to `QAction`

* Add `clear()` to `QMenu`

* Add `triggered` event support to `QMenu`

* Code style fixes

* Add `focusWindowChanged` event to `QApplication`

* Add `isActiveWindow()` to `QWidget`
2021-07-04 12:55:41 +02:00
Atul R
b5d7e957cf 0.32.0 2021-06-26 18:41:09 +02:00
Simon Edwards
2b26ea4ddd
Extra font and painter related methods and classes (#845)
* Add `QPaintEvent`

* Add `setStyleName()` to `QFont`

* Add `isFixedPitch()` and `styles()` to `QFontDatabase`

* Add `drawImage()` to `QPainter`

* Add `setFocusPolicy()` to `QWidget`
2021-06-26 18:37:53 +02:00
Atul R
52d122583e 0.31.0 2021-06-19 11:44:44 +02:00
Atul R
8e0e4568fe package lock 2021-06-19 11:43:06 +02:00
Simon Edwards
a59274c371
Extra drawing related methods (#844)
* Add `setPixelSize()` & `pixelSize()` to `QFont`

* Add `xHeight()` to `QFontMetrics`

* Export `QImageFormat`

* Add `drawArc()`, `setFont()`, `setTransform()`, & `fillRect()` to `QPainter`

* Improve `QPainter.setTransform()` docs
2021-06-19 11:34:40 +02:00
Atul R
d0e9f67a25 0.30.3 2021-06-12 18:00:18 +02:00
allcontributors[bot]
b2485f6133
docs: add sedwards2009 as a contributor for code (#838)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2021-06-12 17:51:51 +02:00
Simon Edwards
953b553089
Add extra QMouseEvent and QPainter methods (#837)
* Add `buttons()` to `QMouseEvent`

* Add `beginNativePainting()` and `endNativePainting()` to `QPainter`
2021-06-12 17:51:42 +02:00
allcontributors[bot]
4db29780e0
docs: add stvkoch as a contributor (#821)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2021-03-07 21:32:06 +01:00
Steven Koch
69e6d8d6e2
Add painter.drawPie method and fix painterPath.arcTo arguments (#782) 2021-03-07 21:31:30 +01:00
Atul R
5b8eef255d fix lint 2021-03-07 20:32:00 +01:00
Atul R
a77d2d67f6 0.30.2 2021-03-07 20:27:38 +01:00
Atul R
8f7bde6e0a scrollarea fix 2021-03-07 20:27:31 +01:00
Atul R
b7ad6ed815 bump yoga native 2021-03-07 15:11:54 +01:00
Atul R
99978de2ab
Update README.md 2021-03-05 23:32:46 +01:00
Atul R
37cefe6d61
Update README.md 2021-03-05 23:26:03 +01:00
Atul R
6c016c5913 removes prebuild install 2021-02-25 23:41:35 +01:00
Atul R
a684544982 bumps minor version 2021-02-25 22:50:05 +01:00
4h7l
006d35914a
fix(qimage): fix setPixelColor (#810) 2021-02-25 22:44:22 +01:00
allcontributors[bot]
c85120054e
docs: add wkirby as a contributor (#815)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2021-02-25 22:43:59 +01:00
Wyatt Kirby
3fe8f17f94
Fix incorrect behavior of minimum size for yoga layout (#814) 2021-02-25 22:43:45 +01:00
allcontributors[bot]
273254ff4e
docs: add zhb124404 as a contributor (#809)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2021-02-21 19:45:10 +01:00
zhb124404
8cad4a51e4
Update debugging-in-vscode.md (#808)
Add vscode debug config for Windows
2021-02-21 19:44:00 +01:00
allcontributors[bot]
371b95608d
docs: add Maks-s as a contributor (#804)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2021-02-09 21:48:23 +01:00
Maks
f13673bff1
Add QFontMetrics (issue #799) (#803) 2021-02-09 18:00:20 +01:00
Atul R
2ac83ca857 0.29.0 2021-01-24 19:49:48 +01:00
Atul R
f1b9665c53 Fixes for ts v4 and lint fixes 2021-01-24 19:49:38 +01:00
allcontributors[bot]
bd0804d443
docs: add 4h7l as a contributor (#798)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2021-01-24 18:51:49 +01:00
4h7l
107b57849e
QImage support (#789)
* Add QImage to class list

* implement some methods and constructors

* ignore cmake-build-debug folder

* fix method name

* implement more methods

* Add static QPixmap.fromImage

* implement more methods

* implement other methods

* add API docs
2021-01-24 18:51:17 +01:00
4h7l
7803f64630
export QDesktopWidget (#797) 2021-01-24 18:50:29 +01:00
Atul R
94c3315bf0 0.28.1 2021-01-20 14:18:48 +01:00
allcontributors[bot]
7710efd4db
docs: add rocbear as a contributor (#795)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2021-01-20 14:16:44 +01:00
Ross
c31c67f69e
Add QT_LINK_MIRROR environment variable to allow for choosing binary mirror (#794)
* Add QT_LINK_MIRROR env variable support for binary installation

* Updates docs with QT_LINK_MIRROR usage
2021-01-20 14:15:23 +01:00
Atul R
f50f08f40d update deps 2020-12-11 19:36:55 +05:30
Atul R
d9f035ef44 lint fix 2020-12-11 19:29:17 +05:30
Atul R
6b4f0160d5 0.28.0 2020-12-11 19:25:09 +05:30
allcontributors[bot]
ec1529061b
docs: add NathanaelA as a contributor (#760)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-12-11 19:23:44 +05:30
Nathanael Anderson
65db04d3f9
Add most the missing QTableWidget properties and functions. (#758) 2020-12-11 19:22:51 +05:30
Nathanael Anderson
9b96a443ce
Add the missing QTableWidgetItem properties and functions. (#756) 2020-12-11 00:00:15 +05:30
Atul R
2e0bcc158f 0.27.0 2020-11-25 01:15:09 +05:30
Atul R
91a2161776 update package lock 2020-11-25 01:14:53 +05:30
allcontributors[bot]
7a894873d1
docs: add ran-j as a contributor (#742)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-11-25 01:11:40 +05:30
Ranieri
8b6abd75f8
Add QDesktopWidget (#738)
* Add QDesktopWidget

* Add docs
2020-11-25 01:09:24 +05:30
Vadim Smelyanskiy
4c8610a960
Add build prerequisites for RPM-based distros (issue #705) (#730) 2020-11-13 23:28:26 +01:00
Atul R
31e3abb041 0.26.0 2020-10-18 16:44:11 +02:00
Atul R
43a7da75cd 0.25.0 2020-10-18 16:44:05 +02:00
Ruslan Garifullin
0b5ee00b58
Added QSvgWidget (#710)
* feat: added QSvgWidget

* docs: fix sidebars syntax
2020-10-18 16:37:52 +02:00
Daniel
f1725b991e
upate readme to include necessary linux installtion dependencies (issue #705) (#706) 2020-10-02 09:40:11 +02:00
Atul R
fd02942f4d adds packing docs 2020-09-19 20:53:46 +02:00
Atul R
30ce474aab fix broken links 2020-09-19 20:36:39 +02:00
Atul R
e6ea691385 update package 2020-09-19 20:21:29 +02:00
Atul R
2ceed980b4
adds test docs (#695)
* adds test docs

* update docs

* update api docs

* change to master
2020-09-19 20:12:08 +02:00
Atul R
fa0d3959b6
Update README.md 2020-09-10 20:58:52 +02:00
dependabot-preview[bot]
446b7327e4
[Security] Bump lodash from 4.17.15 to 4.17.20 (#667)
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.15 to 4.17.20. **This update includes security fixes.**
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.15...4.17.20)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-08-17 23:48:47 +02:00
dependabot-preview[bot]
27e3bc1c6d
Bump @types/jest from 26.0.3 to 26.0.10 (#668)
Bumps [@types/jest](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jest) from 26.0.3 to 26.0.10.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/jest)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-08-17 23:48:37 +02:00
allcontributors[bot]
8956692e9b
docs: add ruslang02 as a contributor (#670)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-08-17 23:47:28 +02:00
Ruslan Garifullin
979989e166
Added setFocus to QWidget (nodegui#661) (#669) 2020-08-17 23:47:18 +02:00
allcontributors[bot]
5c368b66e4
docs: add NeryHenrique as a contributor (#665)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-08-13 11:56:21 +02:00
HENRIQUE DE SOUZA NERY
7bcbe2f01d
QTableWidget SelectedRanges function fix (#663)
Co-authored-by: Henrique Nery <hnery@automni.com.br>
2020-08-13 11:55:43 +02:00
allcontributors[bot]
0bd0cf9e65
docs: add dooglio as a contributor (#662)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-08-12 16:04:10 +02:00
Doug Barbieri
fc64e7af99
Add QIcon support to QTreeWidgetItem. (#657)
* Add QIcon support to QTreeWidgetItem.

Signed-off-by: R. Douglas Barbieri <doug@dooglio.net>

* Move to QTreeWidgetItem from QTableWidgetItem...

I made a mistake and added the icon support to `QTableWidgetItem`
instead of the tree widget.

* Ran prettier.

* Add small test for the widget and item.

* Added tree widget test to demo.
2020-08-12 16:03:29 +02:00
Atul R
9946dfa568
Fixes constructor types (#634) 2020-07-15 06:35:31 +02:00
swittk
92b7a9b798
Fixes QTableWidget.setHorizontalHeaderItem crash (#633)
Co-authored-by: Switt Kongdachalert <switt1995@yahoo.com>
2020-07-14 20:51:53 +02:00
Atul R
738590b631 bump version and update docs & deps 2020-07-04 20:03:59 +02:00
swittk
5c62cdcc8a
Implemented QDrag Class (#626)
* Added QWheelEvent

* removed x y

* Added QNativeGestureEvent

* Changed wrong type of QNativeGestureEventWrap value

* Added QTabletEvent

* Fixing build error for QTabletEvent

* adding dropaction

* fix typos

* Added more functions to QPainterPath

* Added more functions to QPainterPath

* Fixed multiple typos

* Fixed multiple typos

* Got QPainterPath additions working.

* Modified QPainterPath to use qreal instead

* Added QPointF, added a few missing methods to QPoint

* Added QRectF

* implemented QRectF

* Added acceptDrops and setAcceptDrops to QWidget, will be useful for addon implementation of Drag and Drop

* Added more methods to QUrl

* Added QMimeData, additional methods to QUrl, and Dropping should now be supported

* refactored

* Fixed more merge conflicts

* Is this my final merge conflict??

* All merge conflicts resolved

* All merge conflicts resolved

* Adds guide for drag and drop

* lint fix

* added preliminary stuff, will need to tweak to make compilable..

* Compile passed, let's see if it works...

* QDrag added, working

* pause a bit, QDrag causes delayed error of 'QPaintDevice: Cannot destroy paint device that is being painted'

* Revert "Implemented QDrag class"

* Disabled problematic functions

* pulling from origin

Co-authored-by: Switt Kongdachalert <switt1995@yahoo.com>
Co-authored-by: Atul R <atulanand94@gmail.com>
2020-07-04 19:58:40 +02:00
allcontributors[bot]
107c4c4a76
docs: add craftingmod as a contributor (#623)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-07-02 19:30:03 +02:00
craftingmod
fa08aecbc2
Add bigobj compiler option to win32 for fixing error C1128 (#622) 2020-07-02 19:29:27 +02:00
Atul R
ca792e2c7f
Adds high dpi scaling (#616) 2020-06-28 17:31:55 +02:00
Shubham Zanwar
c54826de6a
feat: adding ordering and next sibling method to flex layout (#615)
* feat: adding methods to get the child index and next child

* feat: ordering children properly in insert before
2020-06-28 14:01:05 +02:00
Atul R
a79ff1fd38 0.23.1 2020-06-27 17:41:17 +02:00
swittk
3cb3424250
Added QMimeData, additional methods to QUrl, and Dropping should now be supported (#614)
* Added QWheelEvent

* removed x y

* Added QNativeGestureEvent

* Changed wrong type of QNativeGestureEventWrap value

* Added QTabletEvent

* Fixing build error for QTabletEvent

* adding dropaction

* fix typos

* Added more functions to QPainterPath

* Added more functions to QPainterPath

* Fixed multiple typos

* Fixed multiple typos

* Got QPainterPath additions working.

* Modified QPainterPath to use qreal instead

* Added QPointF, added a few missing methods to QPoint

* Added QRectF

* implemented QRectF

* Added acceptDrops and setAcceptDrops to QWidget, will be useful for addon implementation of Drag and Drop

* Added more methods to QUrl

* Added QMimeData, additional methods to QUrl, and Dropping should now be supported

* refactored

* Fixed more merge conflicts

* Is this my final merge conflict??

* All merge conflicts resolved

* All merge conflicts resolved

* Adds guide for drag and drop

* lint fix

Co-authored-by: Switt Kongdachalert <switt1995@yahoo.com>
Co-authored-by: Atul R <atulanand94@gmail.com>
2020-06-27 17:35:31 +02:00
Atul R
f4d656d8ef lint and update docs 2020-06-26 17:05:02 +02:00
Atul R
29aed42c67 0.23.0 2020-06-26 17:02:19 +02:00
dependabot-preview[bot]
fed9590a2c
Bump @types/node from 14.0.12 to 14.0.13 (#603)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 14.0.12 to 14.0.13.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-06-26 16:54:09 +02:00
dependabot-preview[bot]
01aff3edf4
Bump eslint-plugin-prettier from 3.1.3 to 3.1.4 (#604)
Bumps [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier) from 3.1.3 to 3.1.4.
- [Release notes](https://github.com/prettier/eslint-plugin-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-plugin-prettier/blob/master/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-plugin-prettier/compare/v3.1.3...v3.1.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-06-26 16:53:58 +02:00
swittk
3fadf33113
Added setAcceptDrops, acceptDrops to QWidget for creating drag-drop extensions (#613)
* Added QWheelEvent

* removed x y

* Added QNativeGestureEvent

* Changed wrong type of QNativeGestureEventWrap value

* Added QTabletEvent

* Fixing build error for QTabletEvent

* adding dropaction

* fix typos

* Added more functions to QPainterPath

* Added more functions to QPainterPath

* Fixed multiple typos

* Fixed multiple typos

* Got QPainterPath additions working.

* Modified QPainterPath to use qreal instead

* Added QPointF, added a few missing methods to QPoint

* Added QRectF

* implemented QRectF

* Added acceptDrops and setAcceptDrops to QWidget, will be useful for addon implementation of Drag and Drop

Co-authored-by: Switt Kongdachalert <switt1995@yahoo.com>
2020-06-26 16:53:43 +02:00
swittk
b0570fcdc5
Added Support For QTabletEvent and QNativeGestureEvents (#611)
* Added QWheelEvent

* removed x y

* Added QNativeGestureEvent

* Changed wrong type of QNativeGestureEventWrap value

* Added QTabletEvent

* Fixing build error for QTabletEvent

Co-authored-by: Switt Kongdachalert <switt1995@yahoo.com>
2020-06-22 14:47:05 +02:00
allcontributors[bot]
ea984897b9
docs: add swittk as a contributor (#610)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-06-22 09:24:50 +02:00
swittk
2b74e3cd77
Added Support for QWheelEvent (#609)
* Added QWheelEvent

* removed x y

Co-authored-by: Switt Kongdachalert <switt1995@yahoo.com>
2020-06-22 09:24:20 +02:00
Atul R
bf026f6d7d update docs instructions 2020-06-09 21:41:59 +02:00
dependabot-preview[bot]
d3bd896c49
Bump @types/jest from 25.2.3 to 26.0.0 (#600)
Bumps [@types/jest](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jest) from 25.2.3 to 26.0.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/jest)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-06-09 19:46:19 +02:00
Atul R
cb5cab493e lint fix 2020-06-09 19:43:42 +02:00
dependabot-preview[bot]
af3a081a81
Bump @types/jest from 25.2.1 to 25.2.3 (#583)
Bumps [@types/jest](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jest) from 25.2.1 to 25.2.3.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/jest)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-06-09 19:41:39 +02:00
dependabot-preview[bot]
d2b8174476
Bump @types/node from 13.13.11 to 14.0.12 (#599)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 13.13.11 to 14.0.12.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-06-09 19:41:29 +02:00
Atul R
558086655f updates docs and bump version 2020-06-09 19:37:29 +02:00
Adam Gastineau
4ea054084c
Implemented QGridLayout property accessors (#598)
* Implemented QGridLayout property accessors

* Remove unnecessary demo code

* Minor formatting changes
2020-06-09 16:15:02 +02:00
Akiva Levy
ad134527d4
Fix missing include of cstdint in yoga event.h (#593)
This is a short-term fix until [PR #1009][1] is approved and merged into
Yoga. Once merged, the latest version of Yoga may be included, as this
will be no longer necessary. The effects of this issue can be seen in
NodeGUI's [issue 591][2].

[1]: https://github.com/facebook/yoga/pull/1009
[2]: https://github.com/nodegui/nodegui/issues/591
2020-06-05 08:05:22 +02:00
allcontributors[bot]
8962d6b4cf
docs: add agg23 as a contributor (#585)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-05-25 16:09:00 +02:00
Adam Gastineau
cab30f4822
Added support for setRow/ColumnCount (#578) 2020-05-25 16:08:28 +02:00
Atul R
a0b28d00e8 update docs 2020-05-24 13:28:46 +02:00
Pierre Grimaud
4c5f4890f6
Fix typos (#577) 2020-05-24 13:04:42 +02:00
Atul R
c33c375fb2 0.21.0 2020-05-23 23:31:37 +02:00
Atul R
3ef59ba3ba change plugin to macro 2020-05-23 23:31:25 +02:00
allcontributors[bot]
2f8bd4d281
docs: add jardenliu as a contributor (#575)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-05-22 16:50:31 +02:00
流君酱
fa7ddaa531
added support for QWidget::maximumSize && QWidget::minimumSize (#574) 2020-05-22 16:49:38 +02:00
Atul R
1bd0a5ca10
Upgrade deps (#562)
* upgrade qode

* 0.20.0

* dep updates

* formatting and fix exports

* fix type rename
2020-05-13 09:15:46 +02:00
Vijay Prasanna
f8a3f4186c
Fix a typo. (#560) 2020-05-12 19:06:51 +02:00
allcontributors[bot]
a98f76f6e3
docs: add stevo2588 as a contributor (#559)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-05-12 09:44:02 +02:00
Stephen A
b4c8cf61e7
add QPainterPath and additional QPainter functions (#552) 2020-05-12 09:43:32 +02:00
Michelangelo
4215695759
add cmake and make installation instructions (#532) 2020-05-12 09:42:11 +02:00
allcontributors[bot]
69d2bfa1ba
docs: add MihkelBaranov as a contributor (#550)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-05-08 09:12:12 +02:00
Mihkel
17239ae5cf
added support for QWidget::removeAction #548 (#549) 2020-05-08 08:40:00 +02:00
Subhadip Naskar
2ab8484794
Additional dependencies on Ubuntu (#542)
https://stackoverflow.com/questions/58787687/qt-5-12-failed-to-find-gl-gl-h-in-usr-include-libdrm
2020-05-01 09:41:42 +02:00
allcontributors[bot]
4a0d1f09f6
docs: add Singha360 as a contributor (#525)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-04-19 10:08:03 +02:00
Singha360
5f2bc51bbc
Added method to set column width to QTreeWidget (#523)
* Fixed slight error in dependencies installation command (Ubuntu)

* Implemented setColumnWidth method for QTreeWidget

* Added an example of using setColumnWidth method

* Fixed doc error for setColumnWidth method.
2020-04-19 10:07:40 +02:00
mspencer92
e8c97e1938
Added fromString functions to QDate, QTime, and QDateTime (#518)
Added fromString functions to QDate, QTime, and QDateTime and added a demo on how to show and sort QDate and QTime in a QTreeWidget.
2020-04-14 19:16:02 +02:00
feng8848
527a18a1e5
fix issue #503 (#519)
* fix issue #481

* fix lint

* Add QTextEdit and QTextBrowser

* Add QGraphicsBlurEffect

* Add QGraphicsDropShadowEffect

Co-authored-by: wuxiaofeng <wuxiaofeng@erayt.com>
2020-04-14 19:10:34 +02:00
Atul R
e0cddc9a7b bring back event loop activator 2020-04-13 23:34:58 +02:00
Atul R
a746c341ae update docs 2020-04-13 23:20:16 +02:00
Solant
300925260e
Set cursor (#505)
* implemented QCursor setter for QWidget::setCursor method

* sorted includes, removed console.log statement from tests
2020-04-13 10:18:30 +02:00
Solant
0043c50f32
Fixed return type of QMouseEvent.button() method (#500) 2020-04-11 15:02:06 +02:00
Daaniiieel
d01aaa0e1f
Update QTreeWidget documentation (#501)
The code block wasn't ended properly, resulting in the latter documentation being in the code block.
2020-04-11 15:01:51 +02:00
feng8848
e1906ff533
Add QTextEdit and QTextBrowser (#495)
* fix issue #481

* fix lint

* Add QTextEdit and QTextBrowser

Co-authored-by: wuxiaofeng <wuxiaofeng@erayt.com>
2020-04-06 19:30:12 +02:00
mspencer92
7836aadd71
Fix bug in QDialog (#485)
QDialog should return DialogCode either Rejected or Accepted.
2020-04-05 10:05:35 +02:00
Atul R
cca5baa447 0.18.2 2020-04-01 11:56:28 +02:00
Atul R
e5d8c5cb48 Merge branch 'master' of https://github.com/nodegui/nodegui 2020-04-01 11:56:07 +02:00
feng8848
44e64b007b
fix issue #481 (#483)
Co-authored-by: wuxiaofeng <wuxiaofeng@erayt.com>
2020-04-01 11:54:38 +02:00
Atul R
c54822686e
Update README.md 2020-03-30 23:57:56 +02:00
Atul R
1d5e322c39 Patch version with docs search 2020-03-30 23:52:34 +02:00
dependabot-preview[bot]
8856611706
Bump @typescript-eslint/eslint-plugin from 2.24.0 to 2.26.0 (#482)
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 2.24.0 to 2.26.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v2.26.0/packages/eslint-plugin)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-30 23:51:12 +02:00
dependabot-preview[bot]
7037da7834
Bump @typescript-eslint/parser from 2.24.0 to 2.25.0 (#478)
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 2.24.0 to 2.25.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v2.25.0/packages/parser)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-30 20:06:36 +02:00
dependabot-preview[bot]
672a0a98e8
Bump ts-jest from 25.2.1 to 25.3.0 (#479)
Bumps [ts-jest](https://github.com/kulshekhar/ts-jest) from 25.2.1 to 25.3.0.
- [Release notes](https://github.com/kulshekhar/ts-jest/releases)
- [Changelog](https://github.com/kulshekhar/ts-jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/kulshekhar/ts-jest/compare/25.2.1...v25.3.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-30 20:06:26 +02:00
dependabot-preview[bot]
62b4e94b91
Bump jest from 25.1.0 to 25.2.4 (#480)
Bumps [jest](https://github.com/facebook/jest) from 25.1.0 to 25.2.4.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v25.1.0...v25.2.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-30 20:06:15 +02:00
dependabot-preview[bot]
f48eaa0e04
Bump @types/node from 13.9.3 to 13.9.5 (#477)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 13.9.3 to 13.9.5.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-30 20:05:40 +02:00
feng8848
e09333c948
fix issue #473 (#475)
* fix issue #473

* fix ts lint

Co-authored-by: wuxiaofeng <wuxiaofeng@erayt.com>
2020-03-30 20:05:27 +02:00
mspencer92
117be556cf
Update QTreeWidget (#474)
* Update QTreeWidget

Fixed a bug with QTreeWidget::currentItem() crashing when nothing is selected and added QTreeWidget::takeTopLevelItem() and QTreeWidget::clear()

* Fix garbage collection

* Fix garbage collection
2020-03-30 20:03:24 +02:00
Atul R
3e0d2c35cd
More docs (#471)
* Adds image example

* fix mouse typo

* Adds scrolla area and networking examples

* Adds a link to awesome repo
2020-03-28 23:53:20 +01:00
Atul R
cf0877c777 0.18.0 2020-03-28 23:52:47 +01:00
Atul R
72f6733cfe Adds a link to awesome repo 2020-03-28 23:52:19 +01:00
Atul R
3f258453da Adds scrolla area and networking examples 2020-03-28 23:46:58 +01:00
Atul R
4d4589a1b8 fix mouse typo 2020-03-28 23:14:50 +01:00
Atul R
73dcc40929 Adds image example 2020-03-28 23:09:16 +01:00
Atul R
7b8a3b8088
Update docs 14 (#470)
* Adds docs for handling events

* updates docs to latest version

* adds more text

* fixes docs

* upgrade yarn lock
2020-03-28 20:46:26 +01:00
feng8848
0ec2b3f2cb
Export more class (#469)
* Add QDoubleSpinBox

* Add QBrush

* Add QListView and improve QListWidget

* Add QErrorMessage

* Add QFontDialog

* Add QProgressDialog

* Add QLCDNumber

Co-authored-by: wuxiaofeng <wuxiaofeng@erayt.com>
2020-03-28 18:15:23 +01:00
feng8848
5e241f43b0
Add QBrush (#468)
* Add QDoubleSpinBox

* Add QBrush

Co-authored-by: wuxiaofeng <wuxiaofeng@erayt.com>
2020-03-27 17:24:25 +01:00
dependabot-preview[bot]
05ba79d185
Bump prettier from 1.19.1 to 2.0.2 (#466)
Bumps [prettier](https://github.com/prettier/prettier) from 1.19.1 to 2.0.2.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/master/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/1.19.1...2.0.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-25 22:08:22 +01:00
mspencer92
6bc7f12746
Added QStandardModel (#467)
* Added QStandardModel

* Update demo.ts
2020-03-25 22:06:53 +01:00
Atul R
de688c6f7f 0.17.0 2020-03-24 20:39:42 +01:00
Atul R
e283488256 cleanup eslint fixes 2020-03-24 20:39:24 +01:00
Atul R
c499645797 cleanup memory for scrollarea
Adds basic format
2020-03-24 20:35:29 +01:00
mspencer92
e0dad876ec
Added more functions for QTreeWidget and QTreeWidgetItem and added a function to sort and filter QTreeWidget (#465) 2020-03-24 20:31:50 +01:00
dependabot-preview[bot]
a6b200b44a
Bump @typescript-eslint/parser from 2.23.0 to 2.24.0 (#457)
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 2.23.0 to 2.24.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v2.24.0/packages/parser)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-24 20:17:34 +01:00
dependabot-preview[bot]
adeac3e16b
Bump @typescript-eslint/eslint-plugin from 2.23.0 to 2.24.0 (#456)
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 2.23.0 to 2.24.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v2.24.0/packages/eslint-plugin)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-24 20:17:17 +01:00
dependabot-preview[bot]
f15f55d20a
Bump prettier from 1.19.1 to 2.0.1 (#458)
Bumps [prettier](https://github.com/prettier/prettier) from 1.19.1 to 2.0.1.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/master/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/1.19.1...2.0.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-24 20:17:04 +01:00
dependabot-preview[bot]
f62bff78c9
Bump @types/node from 13.9.1 to 13.9.3 (#459)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 13.9.1 to 13.9.3.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-24 20:16:53 +01:00
dependabot-preview[bot]
42804bf56d
Bump eslint-config-prettier from 6.10.0 to 6.10.1 (#460)
Bumps [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) from 6.10.0 to 6.10.1.
- [Release notes](https://github.com/prettier/eslint-config-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-config-prettier/blob/master/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-config-prettier/compare/v6.10.0...v6.10.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-24 20:16:42 +01:00
dependabot-preview[bot]
8b6b66e766
Bump typedoc from 0.17.0 to 0.17.3 (#461)
Bumps [typedoc](https://github.com/TypeStrong/TypeDoc) from 0.17.0 to 0.17.3.
- [Release notes](https://github.com/TypeStrong/TypeDoc/releases)
- [Commits](https://github.com/TypeStrong/TypeDoc/compare/0.17.0...0.17.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-24 20:16:22 +01:00
feng8848
cf4e221fdf
Add QDoubleSpinBox (#463)
Co-authored-by: wuxiaofeng <wuxiaofeng@erayt.com>
2020-03-24 20:15:57 +01:00
Vincent Mathis
67a7302595
Fixed a broken url to native widgets (#464) 2020-03-24 17:04:59 +01:00
Shubham Zanwar
3b53e8b69d
tabs: adding insertTab function to insert tabs at a given index (#462)
* add cpp method to insert tab at a given index

* add ts method to insert tab at given index

* add insert tab demo

* fixing lint issues in cpp code

* fix: passing the native widgets to insertTab
2020-03-23 13:34:41 +01:00
feng8848
d80d27a10c
Add QColorDialog (#455)
* fix issue #439

* Add QTabBar

* Add QColorDialog

Co-authored-by: wuxiaofeng <wuxiaofeng@erayt.com>
2020-03-22 10:49:21 +01:00
mspencer92
38b8c9536d
Added QTreeWidget functions (#452)
https://github.com/nodegui/nodegui/issues/231#issuecomment-601390056
2020-03-20 09:43:54 +01:00
Atul R
c7428f2d55
Adds a new maintainer
Adds @feng8848  as a maintainer
2020-03-17 08:28:14 +01:00
feng8848
d7060f3256
Add QTabBar (#451)
* fix issue #439

* Add QTabBar

Co-authored-by: wuxiaofeng <wuxiaofeng@erayt.com>
2020-03-17 08:25:54 +01:00
Atul R
50f43d955a
adds memoization and perf fixes (#450)
* adds memoization and perf fixes

* 0.16.1
2020-03-17 00:17:15 +01:00
dependabot-preview[bot]
d1cabf3a4d
Bump typedoc from 0.16.11 to 0.17.0 (#449)
Bumps [typedoc](https://github.com/TypeStrong/TypeDoc) from 0.16.11 to 0.17.0.
- [Release notes](https://github.com/TypeStrong/TypeDoc/releases)
- [Commits](https://github.com/TypeStrong/TypeDoc/compare/v0.16.11...0.17)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-16 23:40:03 +01:00
nilchu
c57a6048cf
Fix example in documentation (#447) 2020-03-16 11:12:54 +01:00
Atul R
dda2debf36
Delete FUNDING.yml 2020-03-15 14:48:32 +01:00
Atul R
863e72a256 Fix docs website 2020-03-15 12:35:48 +01:00
Atul R
8d435bc1b1 0.16.0 2020-03-14 19:31:58 +01:00
Atul R
22b28f8cd4
Adds pixmap support to clipboard (#445)
* adds pixmap setters and getters to qclipboard

* upgrade deps

* Adds  inlinestylesheet fix on objectname test
2020-03-14 19:29:26 +01:00
dependabot[bot]
c37b23eca9
Bump acorn from 6.4.0 to 6.4.1 in /website (#444)
Bumps [acorn](https://github.com/acornjs/acorn) from 6.4.0 to 6.4.1.
- [Release notes](https://github.com/acornjs/acorn/releases)
- [Commits](https://github.com/acornjs/acorn/compare/6.4.0...6.4.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-03-14 16:55:03 +01:00
dependabot-preview[bot]
b9f2035b7c
Merge pull request #443 from nodegui/dependabot/npm_and_yarn/acorn-6.4.1 2020-03-13 21:06:41 +00:00
dependabot-preview[bot]
f01f8b4fca
[Security] Bump acorn from 6.4.0 to 6.4.1
Bumps [acorn](https://github.com/acornjs/acorn) from 6.4.0 to 6.4.1. **This update includes a security fix.**
- [Release notes](https://github.com/acornjs/acorn/releases)
- [Commits](https://github.com/acornjs/acorn/compare/6.4.0...6.4.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-03-13 20:58:58 +00:00
Atul R
5c840fe9ba 0.15.5 2020-03-13 21:40:10 +01:00
Atul R
86b8dd966e Adds repolish for setObjectName 2020-03-13 21:39:59 +01:00
Atul R
b53cd1cb2b 0.15.4 2020-03-13 20:57:13 +01:00
Atul R
65da42e1f3 stylesheet performance fix 2020-03-13 20:38:04 +01:00
feng8848
2359ca8838
fix issue #439 (#440)
Co-authored-by: wuxiaofeng <wuxiaofeng@erayt.com>
2020-03-12 16:21:56 +01:00
Atul R
8e574ba33d
Update README.md 2020-03-10 13:24:44 +01:00
Atul R
e1e9858876
Update README.md 2020-03-10 13:23:23 +01:00
dependabot-preview[bot]
3b521eb57f
Merge pull request #438 from nodegui/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-2.22.0 2020-03-09 11:37:06 +00:00
dependabot-preview[bot]
66a4b3b68b
Merge pull request #437 from nodegui/dependabot/npm_and_yarn/types/node-13.9.0 2020-03-09 11:36:46 +00:00
dependabot-preview[bot]
ee260724ae
Merge pull request #436 from nodegui/dependabot/npm_and_yarn/typescript-eslint/parser-2.22.0 2020-03-09 11:35:51 +00:00
dependabot-preview[bot]
645b7c2e7c
Merge pull request #435 from nodegui/dependabot/npm_and_yarn/cross-env-7.0.2 2020-03-09 11:34:35 +00:00
dependabot-preview[bot]
953d057876
Merge pull request #434 from nodegui/dependabot/npm_and_yarn/types/jest-25.1.4 2020-03-09 11:33:44 +00:00
dependabot-preview[bot]
1d33eec01f
Bump @typescript-eslint/eslint-plugin from 2.21.0 to 2.22.0
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 2.21.0 to 2.22.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v2.22.0/packages/eslint-plugin)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-03-09 11:28:58 +00:00
dependabot-preview[bot]
114d20d97a
Bump @types/node from 13.7.7 to 13.9.0
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 13.7.7 to 13.9.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-03-09 11:28:01 +00:00
dependabot-preview[bot]
257a9c73d1
Bump @typescript-eslint/parser from 2.21.0 to 2.22.0
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 2.21.0 to 2.22.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v2.22.0/packages/parser)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-03-09 11:27:22 +00:00
dependabot-preview[bot]
01e8fa5407
Bump cross-env from 7.0.0 to 7.0.2
Bumps [cross-env](https://github.com/kentcdodds/cross-env) from 7.0.0 to 7.0.2.
- [Release notes](https://github.com/kentcdodds/cross-env/releases)
- [Changelog](https://github.com/kentcdodds/cross-env/blob/master/CHANGELOG.md)
- [Commits](https://github.com/kentcdodds/cross-env/compare/v7.0.0...v7.0.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-03-09 11:26:43 +00:00
dependabot-preview[bot]
fc3a12c7aa
Bump @types/jest from 25.1.3 to 25.1.4
Bumps [@types/jest](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jest) from 25.1.3 to 25.1.4.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/jest)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-03-09 11:25:22 +00:00
Atul R
a454a7dafe bumps artifact installer 2020-03-08 17:18:53 +01:00
Atul R
c742712f6f
Qwidget wrap fix (#433)
* skip setting up miniqt if customQt is on

* adds opengl context

* adds NodeWidgetWrap

* changed the mode of qode.js to make it executable

* 0.15.3
2020-03-08 16:47:56 +01:00
master-atul
110cb80e82 Fix qode shared library in windows
0.15.2
2020-03-07 11:10:05 +01:00
Atul R
efdbb3e6c7 bump package-lock
0.15.1
2020-03-07 10:42:02 +01:00
Atul R
86c3ef089c
Integration with Qode 2.0 (#400)
* Moves qt integration solely to the nodegui core addon

* Adds lint fixes

* moved to integration core

* cleans up export snippet

* revert package.json

* Add exit if app->exec finishes.

* lint fix

* Makes QApplication custom

* adds qobject to wrap of qapp

* Adds working qt run looper

* Adds font default

* Adds qt installer

* Updates qode integration to v2.0.1

* fix cpp lints

* Fixes lint and deps

* Adds miniqt installation

* adds setup mini qt script

* skips tests due to issues with jest

* fix config and download path for linux and windows

* Adds multiple artifact downloader

* fix qt config and compilation

* Fixes qode path for windows (now it can load dll's easily)

* Add compilation

* fix windows path setup

* use scripts directly

* enabled tests back

* fix ubuntu deps

* update to alpha release

* fix workflow

* adds more artifacts and funding field

* change to alpha v2

* update prebuild yml

* revert build action

* disabling prebuild for now

* switch to stable release 5.14.1

* version bump
2020-03-07 10:28:30 +01:00
dependabot-preview[bot]
bbf3cfd9bd
Merge pull request #428 from nodegui/dependabot/npm_and_yarn/typescript-3.8.3 2020-03-02 11:45:06 +00:00
dependabot-preview[bot]
1bb7296d53
Merge pull request #431 from nodegui/dependabot/npm_and_yarn/types/node-13.7.7 2020-03-02 11:39:10 +00:00
dependabot-preview[bot]
b3dc796d73
Bump typescript from 3.8.2 to 3.8.3
Bumps [typescript](https://github.com/Microsoft/TypeScript) from 3.8.2 to 3.8.3.
- [Release notes](https://github.com/Microsoft/TypeScript/releases)
- [Commits](https://github.com/Microsoft/TypeScript/compare/v3.8.2...v3.8.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-03-02 11:38:09 +00:00
dependabot-preview[bot]
a513680769
Merge pull request #430 from nodegui/dependabot/npm_and_yarn/typescript-eslint/parser-2.21.0 2020-03-02 11:37:56 +00:00
dependabot-preview[bot]
7b04f14c2a
Merge pull request #429 from nodegui/dependabot/npm_and_yarn/typedoc-plugin-markdown-2.2.17 2020-03-02 11:37:49 +00:00
dependabot-preview[bot]
ded3c79d50
Merge pull request #427 from nodegui/dependabot/npm_and_yarn/cmake-js-6.1.0 2020-03-02 11:36:31 +00:00
dependabot-preview[bot]
2795a051eb
Merge pull request #426 from nodegui/dependabot/npm_and_yarn/typedoc-0.16.11 2020-03-02 11:35:47 +00:00
dependabot-preview[bot]
35c6f57a89
Merge pull request #424 from nodegui/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-2.21.0 2020-03-02 11:35:25 +00:00
dependabot-preview[bot]
f7d554fea5
Bump @types/node from 13.7.4 to 13.7.7
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 13.7.4 to 13.7.7.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-03-02 11:31:13 +00:00
dependabot-preview[bot]
8f3cae7792
Bump @typescript-eslint/parser from 2.20.0 to 2.21.0
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 2.20.0 to 2.21.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v2.21.0/packages/parser)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-03-02 11:30:34 +00:00
dependabot-preview[bot]
ae342db18d
Bump typedoc-plugin-markdown from 2.2.16 to 2.2.17
Bumps [typedoc-plugin-markdown](https://github.com/tom-grey/typedoc-plugin-markdown) from 2.2.16 to 2.2.17.
- [Release notes](https://github.com/tom-grey/typedoc-plugin-markdown/releases)
- [Commits](https://github.com/tom-grey/typedoc-plugin-markdown/commits/v2.2.17)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-03-02 11:30:02 +00:00
dependabot-preview[bot]
32638ce7d4
Bump cmake-js from 6.0.0 to 6.1.0
Bumps [cmake-js](https://github.com/unbornchikken/cmake-js) from 6.0.0 to 6.1.0.
- [Release notes](https://github.com/unbornchikken/cmake-js/releases)
- [Changelog](https://github.com/cmake-js/cmake-js/blob/master/changelog.md)
- [Commits](https://github.com/unbornchikken/cmake-js/compare/v6.0.0...v6.1.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-03-02 11:29:11 +00:00
dependabot-preview[bot]
c2d25d7a28
Bump typedoc from 0.16.10 to 0.16.11
Bumps [typedoc](https://github.com/TypeStrong/TypeDoc) from 0.16.10 to 0.16.11.
- [Release notes](https://github.com/TypeStrong/TypeDoc/releases)
- [Commits](https://github.com/TypeStrong/TypeDoc/compare/v0.16.10...v0.16.11)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-03-02 11:28:30 +00:00
dependabot-preview[bot]
90743d5b78
Bump @typescript-eslint/eslint-plugin from 2.20.0 to 2.21.0
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 2.20.0 to 2.21.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v2.21.0/packages/eslint-plugin)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-03-02 11:27:27 +00:00
Atul R
07d70e6321
Add more tabwidgets methods (#422)
* add qtabwidget indexOf

* Adds setTabIcon
2020-02-27 01:06:34 +01:00
Shubham Zanwar
57cf0d4836
improv: adding the ability to change the tab text (#421)
* adding the setTabText to the QTabWidgetWrap definition

* implementing the setTabText funciton in the cpp module

* implementing the setTabText in the ts module

* adding a demo for the tab text change feature

* fixing lint issues

* exporting the QSettings enums
2020-02-25 09:36:58 +01:00
feng8848
9e1e8e576c
Add QFrame and other improvements (#420) 2020-02-25 08:50:53 +01:00
dependabot-preview[bot]
07aae3b04a
Merge pull request #418 from nodegui/dependabot/npm_and_yarn/husky-4.2.3 2020-02-24 11:35:41 +00:00
dependabot-preview[bot]
beee2bd39a
Merge pull request #417 from nodegui/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-2.20.0 2020-02-24 11:34:00 +00:00
dependabot-preview[bot]
850ee61614
Merge pull request #416 from nodegui/dependabot/npm_and_yarn/typedoc-0.16.10 2020-02-24 11:33:53 +00:00
dependabot-preview[bot]
ce4931ca06
Merge pull request #415 from nodegui/dependabot/npm_and_yarn/types/jest-25.1.3 2020-02-24 11:33:02 +00:00
dependabot-preview[bot]
070c5362c3
Merge pull request #414 from nodegui/dependabot/npm_and_yarn/types/node-13.7.4 2020-02-24 11:32:01 +00:00
dependabot-preview[bot]
88f5eafb45
Merge pull request #412 from nodegui/dependabot/npm_and_yarn/typescript-eslint/parser-2.20.0 2020-02-24 11:31:12 +00:00
dependabot-preview[bot]
954f3fdef5
Merge pull request #413 from nodegui/dependabot/npm_and_yarn/typescript-3.8.2 2020-02-24 11:30:53 +00:00
dependabot-preview[bot]
98edc7cc1b
Merge pull request #411 from nodegui/dependabot/npm_and_yarn/ts-jest-25.2.1 2020-02-24 11:30:22 +00:00
dependabot-preview[bot]
3a056a21ae
Bump husky from 4.2.1 to 4.2.3
Bumps [husky](https://github.com/typicode/husky) from 4.2.1 to 4.2.3.
- [Release notes](https://github.com/typicode/husky/releases)
- [Changelog](https://github.com/typicode/husky/blob/master/CHANGELOG.md)
- [Commits](https://github.com/typicode/husky/compare/v4.2.1...v4.2.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-02-24 11:27:17 +00:00
dependabot-preview[bot]
82cef67c71
Bump @typescript-eslint/eslint-plugin from 2.19.0 to 2.20.0
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 2.19.0 to 2.20.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v2.20.0/packages/eslint-plugin)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-02-24 11:27:09 +00:00
dependabot-preview[bot]
8bc23853fc
Bump typedoc from 0.16.9 to 0.16.10
Bumps [typedoc](https://github.com/TypeStrong/TypeDoc) from 0.16.9 to 0.16.10.
- [Release notes](https://github.com/TypeStrong/TypeDoc/releases)
- [Commits](https://github.com/TypeStrong/TypeDoc/compare/v0.16.9...v0.16.10)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-02-24 11:26:04 +00:00
dependabot-preview[bot]
92f64c4645
Bump @types/jest from 25.1.2 to 25.1.3
Bumps [@types/jest](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jest) from 25.1.2 to 25.1.3.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/jest)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-02-24 11:25:27 +00:00
dependabot-preview[bot]
b4637a808b
Bump @types/node from 13.7.0 to 13.7.4
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 13.7.0 to 13.7.4.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-02-24 11:24:55 +00:00
dependabot-preview[bot]
9cc5865a0d
Bump typescript from 3.7.5 to 3.8.2
Bumps [typescript](https://github.com/Microsoft/TypeScript) from 3.7.5 to 3.8.2.
- [Release notes](https://github.com/Microsoft/TypeScript/releases)
- [Commits](https://github.com/Microsoft/TypeScript/compare/v3.7.5...v3.8.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-02-24 11:24:21 +00:00
dependabot-preview[bot]
be3f728e3a
Bump @typescript-eslint/parser from 2.19.0 to 2.20.0
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 2.19.0 to 2.20.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v2.20.0/packages/parser)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-02-24 11:23:38 +00:00
dependabot-preview[bot]
b0c924f9c7
Bump ts-jest from 25.2.0 to 25.2.1
Bumps [ts-jest](https://github.com/kulshekhar/ts-jest) from 25.2.0 to 25.2.1.
- [Release notes](https://github.com/kulshekhar/ts-jest/releases)
- [Changelog](https://github.com/kulshekhar/ts-jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/kulshekhar/ts-jest/compare/v25.2.0...25.2.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-02-24 11:22:57 +00:00
allcontributors[bot]
aa7bbfc26f
docs: add shubhamzanwar as a contributor (#407)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]
2020-02-20 08:33:41 +01:00
Shubham Zanwar
5415fa3576
improv: return the index of the last added tab (#405)
* widgets(tabs): return the index of the last added tab

* widgets(tabs): returning the index of the newly added tab

* demo: using the tab component in the demo to verify

* lint: fixing lint
2020-02-20 08:32:44 +01:00
feng8848
cf7d241b51
Add QTableView support (#406)
* Add QTableView support

* Fix template to move public expanded methods to private

Co-authored-by: Atul R <atulanand94@gmail.com>
2020-02-20 07:53:31 +01:00
feng8848
ab6c28166e
Add QPicture and other improvements (#399) 2020-02-17 20:45:57 +01:00
allcontributors[bot]
d6d19ad3cf
docs: add Solant as a contributor (#402)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]
2020-02-17 20:45:03 +01:00
Solant
07ac11c6ab
Qsettings (#401)
* initial qsettings implementation

* fix qsettings object constructor initialization

* added sync method

* added setValue method

* implemented value method

* pass actual app name and org name

* accept any value that can be converted to QVariant in setValue method

* implemented value method with proper QVariant wrap

* added tests

* removed testing data, fixed warning

* fixed cpp linting
2020-02-17 20:44:29 +01:00
dependabot-preview[bot]
b09b1cf0e0
Merge pull request #393 from nodegui/dependabot/npm_and_yarn/types/jest-25.1.2 2020-02-11 01:32:33 +00:00
dependabot-preview[bot]
5244a15e70
Merge pull request #396 from nodegui/dependabot/npm_and_yarn/typescript-eslint/parser-2.19.0 2020-02-10 11:31:47 +00:00
dependabot-preview[bot]
4f43a92380
Merge pull request #395 from nodegui/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-2.19.0 2020-02-10 11:31:19 +00:00
dependabot-preview[bot]
96399541b6
Merge pull request #394 from nodegui/dependabot/npm_and_yarn/ts-jest-25.2.0 2020-02-10 11:30:51 +00:00
dependabot-preview[bot]
bd44c40fdf
Bump @typescript-eslint/parser from 2.18.0 to 2.19.0
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 2.18.0 to 2.19.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v2.19.0/packages/parser)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-02-10 11:24:50 +00:00
dependabot-preview[bot]
f7c386f480
Bump @typescript-eslint/eslint-plugin from 2.18.0 to 2.19.0
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 2.18.0 to 2.19.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v2.19.0/packages/eslint-plugin)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-02-10 11:24:15 +00:00
dependabot-preview[bot]
06d322e6cf
Bump ts-jest from 25.1.0 to 25.2.0
Bumps [ts-jest](https://github.com/kulshekhar/ts-jest) from 25.1.0 to 25.2.0.
- [Release notes](https://github.com/kulshekhar/ts-jest/releases)
- [Changelog](https://github.com/kulshekhar/ts-jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/kulshekhar/ts-jest/compare/v25.1.0...v25.2.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-02-10 11:23:42 +00:00
dependabot-preview[bot]
7228dacb91
Bump @types/jest from 25.1.1 to 25.1.2
Bumps [@types/jest](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jest) from 25.1.1 to 25.1.2.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/jest)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-02-10 11:22:55 +00:00
780 changed files with 112221 additions and 17687 deletions

View File

@ -211,6 +211,197 @@
"contributions": [ "contributions": [
"code" "code"
] ]
},
{
"login": "Solant",
"name": "Solant",
"avatar_url": "https://avatars2.githubusercontent.com/u/5971578?v=4",
"profile": "https://github.com/Solant",
"contributions": [
"code"
]
},
{
"login": "shubhamzanwar",
"name": "Shubham Zanwar",
"avatar_url": "https://avatars0.githubusercontent.com/u/15626155?v=4",
"profile": "https://github.com/shubhamzanwar",
"contributions": [
"code"
]
},
{
"login": "Singha360",
"name": "Singha360",
"avatar_url": "https://avatars1.githubusercontent.com/u/35334787?v=4",
"profile": "https://github.com/Singha360",
"contributions": [
"code"
]
},
{
"login": "MihkelBaranov",
"name": "Mihkel",
"avatar_url": "https://avatars3.githubusercontent.com/u/3790782?v=4",
"profile": "http://wellenline.com",
"contributions": [
"code"
]
},
{
"login": "stevo2588",
"name": "Stephen A",
"avatar_url": "https://avatars1.githubusercontent.com/u/3278045?v=4",
"profile": "https://github.com/stevo2588",
"contributions": [
"code"
]
},
{
"login": "jardenliu",
"name": "流君酱",
"avatar_url": "https://avatars1.githubusercontent.com/u/15191056?v=4",
"profile": "http://liujunjiang.com",
"contributions": [
"code"
]
},
{
"login": "agg23",
"name": "Adam Gastineau",
"avatar_url": "https://avatars1.githubusercontent.com/u/238679?v=4",
"profile": "https://github.com/agg23",
"contributions": [
"code"
]
},
{
"login": "swittk",
"name": "swittk",
"avatar_url": "https://avatars2.githubusercontent.com/u/5000572?v=4",
"profile": "https://github.com/swittk",
"contributions": [
"code"
]
},
{
"login": "craftingmod",
"name": "craftingmod",
"avatar_url": "https://avatars2.githubusercontent.com/u/9389278?v=4",
"profile": "https://github.com/craftingmod",
"contributions": [
"code"
]
},
{
"login": "dooglio",
"name": "Doug Barbieri",
"avatar_url": "https://avatars1.githubusercontent.com/u/643129?v=4",
"profile": "http://www.m2osw.com",
"contributions": [
"code"
]
},
{
"login": "NeryHenrique",
"name": "HENRIQUE DE SOUZA NERY",
"avatar_url": "https://avatars0.githubusercontent.com/u/6879141?v=4",
"profile": "https://github.com/NeryHenrique",
"contributions": [
"code"
]
},
{
"login": "ruslang02",
"name": "Ruslan Garifullin",
"avatar_url": "https://avatars0.githubusercontent.com/u/25264730?v=4",
"profile": "https://ruslang.xyz",
"contributions": [
"code"
]
},
{
"login": "ran-j",
"name": "Ranieri",
"avatar_url": "https://avatars0.githubusercontent.com/u/17410205?v=4",
"profile": "https://github.com/ran-j",
"contributions": [
"code",
"doc"
]
},
{
"login": "NathanaelA",
"name": "Nathanael Anderson",
"avatar_url": "https://avatars3.githubusercontent.com/u/850871?v=4",
"profile": "https://master-technology.com",
"contributions": [
"code"
]
},
{
"login": "rocbear",
"name": "Ross",
"avatar_url": "https://avatars0.githubusercontent.com/u/4415071?v=4",
"profile": "https://ubiq.co.za",
"contributions": [
"code",
"doc"
]
},
{
"login": "4h7l",
"name": "4h7l",
"avatar_url": "https://avatars.githubusercontent.com/u/69183283?v=4",
"profile": "https://github.com/4h7l",
"contributions": [
"code"
]
},
{
"login": "Maks-s",
"name": "Maks",
"avatar_url": "https://avatars.githubusercontent.com/u/26678512?v=4",
"profile": "https://github.com/Maks-s",
"contributions": [
"code"
]
},
{
"login": "zhb124404",
"name": "zhb124404",
"avatar_url": "https://avatars.githubusercontent.com/u/16805041?v=4",
"profile": "https://github.com/zhb124404",
"contributions": [
"doc"
]
},
{
"login": "wkirby",
"name": "Wyatt Kirby",
"avatar_url": "https://avatars.githubusercontent.com/u/579688?v=4",
"profile": "http://www.apsis.io",
"contributions": [
"code"
]
},
{
"login": "stvkoch",
"name": "Steven Koch",
"avatar_url": "https://avatars.githubusercontent.com/u/14454?v=4",
"profile": "https://stvkoch.github.io.",
"contributions": [
"code"
]
},
{
"login": "sedwards2009",
"name": "Simon Edwards",
"avatar_url": "https://avatars.githubusercontent.com/u/6926644?v=4",
"profile": "https://github.com/sedwards2009",
"contributions": [
"code"
]
} }
], ],
"contributorsPerLine": 7, "contributorsPerLine": 7,

View File

@ -12,7 +12,6 @@ module.exports = {
parser: '@typescript-eslint/parser', // Specifies the ESLint parser parser: '@typescript-eslint/parser', // Specifies the ESLint parser
extends: [ extends: [
'plugin:@typescript-eslint/recommended', // Uses the recommended rules from the @typescript-eslint/eslint-plugin 'plugin:@typescript-eslint/recommended', // Uses the recommended rules from the @typescript-eslint/eslint-plugin
'prettier/@typescript-eslint', // Uses eslint-config-prettier to disable ESLint rules from @typescript-eslint/eslint-plugin that would conflict with prettier
'plugin:prettier/recommended', // Enables eslint-plugin-prettier and eslint-config-prettier. This will display prettier errors as ESLint errors. Make sure this is always the last configuration in the extends array. 'plugin:prettier/recommended', // Enables eslint-plugin-prettier and eslint-config-prettier. This will display prettier errors as ESLint errors. Make sure this is always the last configuration in the extends array.
], ],
parserOptions: { parserOptions: {
@ -23,6 +22,7 @@ module.exports = {
'@typescript-eslint/camelcase': 0, '@typescript-eslint/camelcase': 0,
'@typescript-eslint/no-var-requires': 0, '@typescript-eslint/no-var-requires': 0,
'@typescript-eslint/no-explicit-any': 0, '@typescript-eslint/no-explicit-any': 0,
'@typescript-eslint/no-unused-vars': ['warn', { args: 'none' }],
}, },
}, },
], ],

9
.github/FUNDING.yml vendored
View File

@ -1,9 +0,0 @@
# These are supported funding model platforms
github: [master-atul] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
issuehunt: nodegui/nodegui
ko_fi: atul94 # Replace with a single Ko-fi username
custom: # Replace with a single custom sponsorship URL

46
.github/workflows/docs.yml vendored Normal file
View File

@ -0,0 +1,46 @@
name: documentation
on:
push:
branches:
- master
jobs:
gh-release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: '16.x'
- name: Add key to allow access to repository
env:
SSH_AUTH_SOCK: /tmp/ssh_agent.sock
run: |
mkdir -p ~/.ssh
ssh-keyscan github.com >> ~/.ssh/known_hosts
echo "${{ secrets.GH_PAGES_DEPLOY }}" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
cat <<EOT >> ~/.ssh/config
Host github.com
HostName github.com
IdentityFile ~/.ssh/id_rsa
EOT
- name: Release to GitHub Pages
env:
USE_SSH: true
GIT_USER: git
run: |
git config --global user.email "actions@gihub.com"
git config --global user.name "gh-actions"
yarn install --ignore-scripts
npm run docs
cd website
if [ -e yarn.lock ]; then
yarn install --frozen-lockfile
elif [ -e package-lock.json ]; then
npm ci
else
npm i
fi
yarn deploy

View File

@ -7,17 +7,20 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
os: [ubuntu-18.04] os: [ubuntu-20.04]
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
steps: steps:
- uses: actions/checkout@master - uses: actions/checkout@v2
- uses: actions/setup-node@master - uses: actions/setup-node@v2
with: with:
node-version: '13.x' node-version: '16.x'
- name: Install ubuntu deps
if: contains(matrix.os, 'ubuntu-20.04')
run: sudo apt install mesa-common-dev libglu1-mesa-dev libegl1 libopengl-dev
- name: Install deps - name: Install deps
run: npm install --ignore-scripts run: npm install
- name: Build nodegui - name: Build nodegui
run: npx tsc run: npm run build
- name: Archive using npm pack - name: Archive using npm pack
run: npm --no-git-tag-version version 0.0.0-latest-master && npm pack run: npm --no-git-tag-version version 0.0.0-latest-master && npm pack
- uses: actions/upload-artifact@v1 - uses: actions/upload-artifact@v1

View File

@ -1,35 +0,0 @@
on:
repository_dispatch:
types: [on-demand-build]
release:
types: [published, created, prereleased]
jobs:
build:
strategy:
fail-fast: false
matrix:
os: [ubuntu-18.04, windows-latest, macos-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v2
with:
ref: ${{ github.ref }}
- uses: actions/setup-node@master
with:
node-version: '13.x'
- name: Install deps
run: npm install
env:
SKIP_BUILD: 1
- name: Change version if master
if: contains(github.event.client_payload.tag, '0.0.0-latest-master')
run: npm --no-git-tag-version version 0.0.0-latest-master
- name: Prebuild binary
run: npx prebuild --all --backend=cmake-js --strip --runtime=napi --include-regex="\.[n,e,l][a-z]*$"
- name: Release
uses: softprops/action-gh-release@master
with:
files: prebuilds/@nodegui/*.tar.gz
tag_name: ${{ github.event.release.tag_name || github.event.client_payload.tag }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

97
.github/workflows/release.yml vendored Normal file
View File

@ -0,0 +1,97 @@
name: Build and Deploy to npm
on:
release:
types: [published]
jobs:
precompile:
if: contains(github.event.release.tag_name, 'v0.0.0-latest-master') == false
strategy:
matrix:
include:
- os: ubuntu-20.04
platform: linux
arch: x64
- os: windows-latest
platform: win32
arch: x64
- os: macos-latest
platform: darwin
arch: x64
runs-on: ${{ matrix.os }}
env:
ARCHIVE_FILENAME: nodegui-binary-${{github.event.release.tag_name}}-${{ matrix.platform }}-${{ matrix.arch }}.tar.gz
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: '16.x'
- name: Install ubuntu deps
if: contains(matrix.os, 'ubuntu-20.04')
run: sudo apt install mesa-common-dev libglu1-mesa-dev libegl1 libopengl-dev
- name: Install deps
run: npm install
- name: Build nodegui
run: npm run build
env:
CMAKE_BUILD_PARALLEL_LEVEL: 8
- name: Compress files
if: ${{!contains(matrix.os, 'windows-latest')}}
uses: a7ul/tar-action@v1.0.2
id: compress
with:
command: c
cwd: ./build/Release
files: |
./nodegui_core.node
outPath: ${{ env.ARCHIVE_FILENAME }}
- name: Compress files (Windows)
if: contains(matrix.os, 'windows-latest')
uses: a7ul/tar-action@v1.0.2
id: compress-windows
with:
command: c
cwd: ./build/Release
files: |
./nodegui_core.node
./nodegui_core.lib
./nodegui_core.exp
outPath: ${{ env.ARCHIVE_FILENAME }}
- uses: actions/upload-artifact@v1
with:
name: ${{ env.ARCHIVE_FILENAME }}
path: ${{ env.ARCHIVE_FILENAME }}
- name: Upload release binaries
uses: alexellis/upload-assets@0.2.2
env:
GITHUB_TOKEN: ${{ github.token }}
with:
asset_paths: '["${{ env.ARCHIVE_FILENAME }}"]'
publish-npm-package:
needs: precompile
if: contains(github.event.release.tag_name, 'v0.0.0-latest-master') == false
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: '16.x'
- name: Install ubuntu deps
run: sudo apt update
- run: sudo apt install mesa-common-dev libglu1-mesa-dev
- run: npm install
- run: echo '//registry.npmjs.org/:_authToken=${NPM_TOKEN}' >> .npmrc
- run: npm publish --access=public
env:
NPM_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }}
CMAKE_BUILD_PARALLEL_LEVEL: 8

View File

@ -6,17 +6,22 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
os: [ubuntu-18.04, windows-latest, macos-latest] os: [ubuntu-20.04, windows-latest, macos-latest]
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
steps: steps:
- uses: actions/checkout@master - uses: actions/checkout@v2
- uses: actions/setup-node@master - uses: actions/setup-node@v2
with: with:
node-version: '13.x' node-version: '16.x'
- name: Install ubuntu deps
if: contains(matrix.os, 'ubuntu-20.04')
run: sudo apt install mesa-common-dev libglu1-mesa-dev libegl1 libopengl-dev
- name: Install deps - name: Install deps
run: npm install run: npm install
- name: Build nodegui - name: Build nodegui
run: npm run build run: npm run build
env:
CMAKE_BUILD_PARALLEL_LEVEL: 8
- name: Run tests - name: Run tests
run: npm run test run: npm run test
- name: Run linters for cpp - name: Run linters for cpp

2
.gitignore vendored
View File

@ -8,3 +8,5 @@ coverage
.DS_Store .DS_Store
/.idea/ /.idea/
/prebuilds /prebuilds
miniqt
cmake-build-debug

View File

@ -8,3 +8,4 @@ extras/*
src/* src/*
!src/cpp !src/cpp
prebuilds/* prebuilds/*
miniqt/

View File

@ -3,6 +3,7 @@ cmake_minimum_required(VERSION 3.1)
include(./config/common.cmake) include(./config/common.cmake)
include(./config/qt.cmake) include(./config/qt.cmake)
include(./config/napi.cmake) include(./config/napi.cmake)
include(./config/qode.cmake)
# --------------------------------------- # ---------------------------------------
@ -10,11 +11,16 @@ set(CORE_WIDGETS_ADDON "nodegui_core")
project(${CORE_WIDGETS_ADDON}) project(${CORE_WIDGETS_ADDON})
set(CMAKE_BUILD_WITH_INSTALL_RPATH ON)
# Note: CMake+moc also use this list when finding files which `moc` applied.
add_library(${CORE_WIDGETS_ADDON} SHARED add_library(${CORE_WIDGETS_ADDON} SHARED
"${CMAKE_JS_SRC}" "${CMAKE_JS_SRC}"
"${PROJECT_SOURCE_DIR}/src/cpp/main.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/main.cpp"
# core internals # core internals
"${PROJECT_SOURCE_DIR}/src/cpp/lib/Extras/Utils/nutils.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/Extras/Utils/nutils.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/core/Integration/integration.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/core/FlexLayout/flexutils.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/core/FlexLayout/flexutils.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/core/FlexLayout/flexlayout.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/core/FlexLayout/flexlayout.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/core/FlexLayout/flexitem.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/core/FlexLayout/flexitem.cpp"
@ -22,6 +28,8 @@ add_library(${CORE_WIDGETS_ADDON} SHARED
"${PROJECT_SOURCE_DIR}/src/cpp/lib/core/Events/eventsmap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/core/Events/eventsmap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/core/Events/eventwidget.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/core/Events/eventwidget.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/core/YogaWidget/yogawidget.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/core/YogaWidget/yogawidget.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/core/WrapperCache/wrappercache.h"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/core/WrapperCache/wrappercache.cpp"
# core deps # core deps
"${PROJECT_SOURCE_DIR}/src/cpp/include/deps/yoga/log.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/deps/yoga/log.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/deps/yoga/Utils.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/deps/yoga/Utils.cpp"
@ -36,54 +44,97 @@ add_library(${CORE_WIDGETS_ADDON} SHARED
"${PROJECT_SOURCE_DIR}/src/cpp/include/deps/yoga/event/event.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/deps/yoga/event/event.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/deps/yoga/internal/experiments.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/deps/yoga/internal/experiments.cpp"
# wrapped cpps # wrapped cpps
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QBrush/qbrush_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QPen/qpen_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QColor/qcolor_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QColor/qcolor_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QApplication/qapplication_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QApplication/qapplication_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QClipboard/qclipboard_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QClipboard/qclipboard_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QDrag/qdrag_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QEvent/QMouseEvent/qmouseevent_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QEvent/QMouseEvent/qmouseevent_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QEvent/QMoveEvent/qmoveevent_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QEvent/QWheelEvent/qwheelevent_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QEvent/QNativeGestureEvent/qnativegestureevent_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QEvent/QPaintEvent/qpaintevent_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QEvent/QTabletEvent/qtabletevent_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QEvent/QTimerEvent/qtimerevent_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QEvent/QDropEvent/qdropevent_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QEvent/QDragMoveEvent/qdragmoveevent_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QEvent/QDragLeaveEvent/qdragleaveevent_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QEvent/QResizeEvent/qresizeevent_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QEvent/QInputMethodEvent/qinputmethodevent_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QEvent/QInputMethodQueryEvent/qinputmethodqueryevent_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QFontDatabase/qfontdatabase_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QFontDatabase/qfontdatabase_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QFontMetrics/qfontmetrics_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QFontMetricsF/qfontmetricsf_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QPicture/qpicture_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QPixmap/qpixmap_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QPixmap/qpixmap_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QIcon/qicon_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QIcon/qicon_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QImage/qimage_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QFont/qfont_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QFont/qfont_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QCursor/qcursor_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QCursor/qcursor_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QKeySequence/qkeysequence_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QKeySequence/qkeysequence_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QMovie/qmovie_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QMovie/qmovie_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QPalette/qpalette_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QScreen/qscreen_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QStyle/qstyle_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QStyle/qstyle_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QWindow/qwindow_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QAbstractItemModel/qabstractitemmodel_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QDate/qdate_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QDate/qdate_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QDateTime/qdatetime_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QDateTime/qdatetime_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QItemSelectionModel/qitemselectionmodel_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QModelIndex/qmodelindex_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QModelIndex/qmodelindex_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QObject/qobject_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QObject/qobject_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QVariant/qvariant_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QVariant/qvariant_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QSize/qsize_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QSize/qsize_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QSizeF/qsizef_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QSettings/qsettings_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QRect/qrect_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QRect/qrect_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QRectF/qrectf_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QPoint/qpoint_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QPoint/qpoint_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QPointF/qpointf_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QTime/qtime_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QTime/qtime_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QUrl/qurl_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QUrl/qurl_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QMimeData/qmimedata_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QWidget/qwidget_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QWidget/qwidget_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QDialog/qdialog_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QDialog/qdialog_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QBoxLayout/qboxlayout_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QBoxLayout/qboxlayout_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QCalendarWidget/qcalendarwidget_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QCalendarWidget/qcalendarwidget_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QColorDialog/qcolordialog_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QComboBox/qcombobox_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QComboBox/qcombobox_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QDateEdit/qdateedit_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QDateEdit/qdateedit_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QDateTimeEdit/qdatetimeedit_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QDateTimeEdit/qdatetimeedit_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QDoubleSpinBox/qdoublespinbox_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QErrorMessage/qerrormessage_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QFileDialog/qfiledialog_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QFileDialog/qfiledialog_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QFontDialog/qfontdialog_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QFrame/qframe_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QGraphicsBlurEffect/qgraphicsblureffect_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QGraphicsDropShadowEffect/qgraphicsdropshadoweffect_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QHeaderView/qheaderview_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QListView/qlistview_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QListWidget/qlistwidget_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QListWidget/qlistwidget_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QListWidgetItem/qlistwidgetitem_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QListWidgetItem/qlistwidgetitem_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QTableView/qtableview_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QTableWidget/qtablewidget_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QTableWidget/qtablewidget_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QTableWidgetItem/qtablewidgetitem_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QTableWidgetItem/qtablewidgetitem_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QPainter/qpainter_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QPainter/qpainter_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QPainterPath/qpainterpath_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QGridLayout/qgridlayout_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QGridLayout/qgridlayout_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QDial/qdial_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QDial/qdial_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QLabel/qlabel_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QLabel/qlabel_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QLayout/qlayout_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QLayout/qlayout_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QLCDNumber/qlcdnumber_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QMainWindow/qmainwindow_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QMainWindow/qmainwindow_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QPushButton/qpushbutton_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QPushButton/qpushbutton_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QToolButton/qtoolbutton_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QToolButton/qtoolbutton_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QSpinBox/qspinbox_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QSpinBox/qspinbox_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QCheckBox/qcheckbox_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QCheckBox/qcheckbox_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QProgressBar/qprogressbar_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QProgressBar/qprogressbar_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QProgressDialog/qprogressdialog_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QRadioButton/qradiobutton_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QRadioButton/qradiobutton_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QStackedWidget/qstackedwidget_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QStackedWidget/qstackedwidget_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QTabBar/qtabbar_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QTabWidget/qtabwidget_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QTabWidget/qtabwidget_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QLineEdit/qlineedit_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QLineEdit/qlineedit_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp"
@ -104,24 +155,47 @@ add_library(${CORE_WIDGETS_ADDON} SHARED
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QButtonGroup/qbuttongroup_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QButtonGroup/qbuttongroup_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QStatusBar/qstatusbar_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QStatusBar/qstatusbar_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/core/FlexLayout/flexlayout_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/core/FlexLayout/flexlayout_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QTextBrowser/qtextbrowser_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QTextEdit/qtextedit_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QStandardItemModel/qstandarditemmodel_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QStandardItem/qstandarditem_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QSvgWidget/qsvgwidget_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QStyleFactory/qstylefactory_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QSplitter/qsplitter_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QAbstractItemDelegate/qabstractitemdelegate_wrap.cpp"
# Custom widgets (include them for automoc since they contain Q_OBJECT) # Custom widgets (include them for automoc since they contain Q_OBJECT)
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtCore/QAbstractItemModel/nabstractitemmodel.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtCore/QItemSelectionModel/nitemselectionmodel.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtCore/QObject/nobject.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtCore/QObject/nobject.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/core/FlexLayout/flexlayout.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/core/FlexLayout/flexlayout.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtGui/QMovie/nmovie.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtGui/QMovie/nmovie.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtGui/QApplication/napplication.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtGui/QDrag/ndrag.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QWidget/nwidget.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QWidget/nwidget.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QDialog/ndialog.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QDialog/ndialog.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QLabel/nlabel.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QLabel/nlabel.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QCalendarWidget/ncalendarwidget.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QCalendarWidget/ncalendarwidget.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QCheckBox/ncheckbox.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QCheckBox/ncheckbox.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QColorDialog/ncolordialog.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QDateEdit/ndateedit.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QDateEdit/ndateedit.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QDateTimeEdit/ndatetimeedit.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QDateTimeEdit/ndatetimeedit.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QDial/ndial.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QDial/ndial.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QDoubleSpinBox/ndoublespinbox.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QErrorMessage/nerrormessage.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QFileDialog/nfiledialog.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QFileDialog/nfiledialog.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QFontDialog/nfontdialog.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QFrame/nframe.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QGraphicsBlurEffect/ngraphicsblureffect.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QGraphicsDropShadowEffect/ngraphicsdropshadoweffect.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QLCDNumber/nlcdnumber.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QListView/nlistview.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QListWidget/nlistwidget.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QListWidget/nlistwidget.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QTableView/ntableview.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QTableWidget/ntablewidget.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QTableWidget/ntablewidget.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QLineEdit/nlineedit.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QLineEdit/nlineedit.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QMainWindow/nmainwindow.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QMainWindow/nmainwindow.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QProgressBar/nprogressbar.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QProgressBar/nprogressbar.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QProgressDialog/nprogressdialog.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QPushButton/npushbutton.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QPushButton/npushbutton.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QMessageBox/nmessagebox.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QMessageBox/nmessagebox.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QInputDialog/ninputdialog.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QInputDialog/ninputdialog.hpp"
@ -132,6 +206,7 @@ add_library(${CORE_WIDGETS_ADDON} SHARED
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QScrollArea/nscrollarea.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QScrollArea/nscrollarea.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QScrollBar/nscrollbar.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QScrollBar/nscrollbar.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QStackedWidget/nstackedwidget.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QStackedWidget/nstackedwidget.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QTabBar/ntabbar.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QTabWidget/ntabwidget.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QTabWidget/ntabwidget.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QSystemTrayIcon/nsystemtrayicon.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QSystemTrayIcon/nsystemtrayicon.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QAction/naction.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QAction/naction.hpp"
@ -148,12 +223,23 @@ add_library(${CORE_WIDGETS_ADDON} SHARED
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QTreeWidget/ntreewidget.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QTreeWidget/ntreewidget.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QButtonGroup/nbuttongroup.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QButtonGroup/nbuttongroup.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QStatusBar/nstatusbar.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QStatusBar/nstatusbar.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QStandardItemModel/nstandarditemmodel.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QTextBrowser/ntextbrowser.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QTextEdit/ntextedit.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QSvgWidget/nsvgwidget.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QHeaderView/nheaderview.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QSplitter/nsplitter.hpp"
# Test
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/test/CacheTestQObject.h"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/test/CacheTestQObject.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/test/cachetestqobject_wrap.cpp"
) )
AddCommonConfig(${CORE_WIDGETS_ADDON}) AddCommonConfig(${CORE_WIDGETS_ADDON})
AddQtSupport(${CORE_WIDGETS_ADDON}) AddQtSupport(${CORE_WIDGETS_ADDON})
AddNapiSupport(${CORE_WIDGETS_ADDON}) AddNapiSupport(${CORE_WIDGETS_ADDON})
AddQodeSupport(${CORE_WIDGETS_ADDON})
target_include_directories(${CORE_WIDGETS_ADDON} PRIVATE target_include_directories(${CORE_WIDGETS_ADDON} PRIVATE
"${CMAKE_JS_INC}" "${CMAKE_JS_INC}"
@ -164,15 +250,34 @@ target_include_directories(${CORE_WIDGETS_ADDON} PRIVATE
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui"
) )
target_link_libraries(${CORE_WIDGETS_ADDON} PRIVATE
"${CMAKE_JS_LIB}"
)
if (WIN32) if (WIN32)
add_definitions(/bigobj)
target_compile_definitions(${CORE_WIDGETS_ADDON} PRIVATE target_compile_definitions(${CORE_WIDGETS_ADDON} PRIVATE
ENABLE_DLL_EXPORT=1 ENABLE_DLL_EXPORT=1
) )
target_compile_options(${CORE_WIDGETS_ADDON} PRIVATE "/MP4") target_compile_options(${CORE_WIDGETS_ADDON} PRIVATE "/MP")
endif() endif()
if (UNIX AND NOT APPLE)
# Set the RPATH in the binary to a relative one to allow it to find our Qt
# libraries regardless of where the base installation directory is.
file(RELATIVE_PATH QT_LIBRARY_REL_PATH "${CMAKE_BINARY_DIR}/Release" "${QT_CMAKE_HOME_DIR}/../..")
set_target_properties(${CORE_WIDGETS_ADDON} PROPERTIES INSTALL_RPATH "\$ORIGIN/${QT_LIBRARY_REL_PATH}")
set_target_properties(${CORE_WIDGETS_ADDON} PROPERTIES BUILD_WITH_INSTALL_RPATH TRUE)
endif()
if (APPLE)
set(CMAKE_MACOSX_RPATH ON)
file(RELATIVE_PATH QT_LIBRARY_REL_PATH "${CMAKE_BINARY_DIR}/Release" "${QT_CMAKE_HOME_DIR}/../..")
set_target_properties(${CORE_WIDGETS_ADDON} PROPERTIES INSTALL_RPATH "@loader_path/${QT_LIBRARY_REL_PATH}")
endif()
target_link_libraries(${CORE_WIDGETS_ADDON} PRIVATE
"${CMAKE_JS_LIB}"
Qt6::Widgets
Qt6::Core
Qt6::Gui
Qt6::Svg
Qt6::SvgWidgets
)

250
README.md
View File

@ -1,18 +1,21 @@
# NodeGui # NodeGui
[![Join the NodeGUI community on Spectrum](https://withspectrum.github.io/badge/badge.svg)](https://spectrum.chat/nodegui) [![All Contributors](https://img.shields.io/badge/All_contributors-66-orange.svg)](#contributors)
[![All Contributors](https://img.shields.io/badge/all_contributors-16-orange.svg?style=flat-square)](#contributors)
[![JS Party #96](https://img.shields.io/badge/JS%20Party-%2396-FFCD00.svg)](https://changelog.com/jsparty/96) [![JS Party #96](https://img.shields.io/badge/JS%20Party-%2396-FFCD00.svg)](https://changelog.com/jsparty/96)
[![Build and Test status](https://github.com/nodegui/nodegui/workflows/.github/workflows/test.yml/badge.svg)](https://github.com/nodegui/nodegui/actions) [![Build and Test status](https://github.com/nodegui/nodegui/workflows/.github/workflows/test.yml/badge.svg)](https://github.com/nodegui/nodegui/actions)
[![Discuss on GitHub](https://img.shields.io/badge/Discuss%20on-GitHub-blue)](https://github.com/nodegui/nodegui/discussions)
Build **performant**, **native** and **cross-platform** desktop applications with **Node.js** and **CSS like styling**.🚀 Build **performant**, **native** and **cross-platform** desktop applications with **Node.js** and **CSS like styling**.🚀
NodeGUI is powered by **Qt5** 💚 which makes it CPU and memory efficient as compared to other chromium based solutions like electron. NodeGUI is powered by **Qt6** 💚 which makes it CPU and memory efficient as compared to other chromium based solutions like Electron.
If you are looking for **React** based version, check out: **[React NodeGUI](https://github.com/nodegui/react-nodegui)**. <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/a/a7/React-icon.svg/1024px-React-icon.svg.png" alt="" width="25"> If you are looking for **React** based version, check out: **[React NodeGUI](https://github.com/nodegui/react-nodegui)**.
Visit: https://nodegui.github.io/nodegui for docs. <img src="https://vuejs.org/images/logo.png" alt="" width="25" /> If you are looking for **Vue** based version, check out: **[Vue NodeGUI](https://github.com/nodegui/vue-nodegui)**.
<img src="https://github.com/sveltejs/branding/raw/master/svelte-logo.png" alt="" width="25" /> If you are looking for **Svelte** based version, check out: **[Svelte NodeGUI](https://github.com/nodegui/svelte-nodegui)**
Visit https://nodegui.github.io/nodegui for docs.
<img alt="logo" src="https://github.com/nodegui/nodegui/raw/master/extras/logo/nodegui.png" height="200" /> <img alt="logo" src="https://github.com/nodegui/nodegui/raw/master/extras/logo/nodegui.png" height="200" />
@ -27,9 +30,7 @@ Visit: https://nodegui.github.io/nodegui for docs.
<div style="display:inline; margin: 0 auto;"><img alt="kitchen" src="https://github.com/nodegui/nodegui/raw/master/extras/assets/kitchen.png" height="280" /><img alt="demo_mac" src="https://github.com/nodegui/examples/raw/master/react-nodegui/weather-app-widget/weather_widget_mac.png" height="280" /><img alt="demo_win" src="https://github.com/nodegui/examples/raw/master/react-nodegui/image-view/image_view_win.jpg" height="280" /> <div style="display:inline; margin: 0 auto;"><img alt="kitchen" src="https://github.com/nodegui/nodegui/raw/master/extras/assets/kitchen.png" height="280" /><img alt="demo_mac" src="https://github.com/nodegui/examples/raw/master/react-nodegui/weather-app-widget/weather_widget_mac.png" height="280" /><img alt="demo_win" src="https://github.com/nodegui/examples/raw/master/react-nodegui/image-view/image_view_win.jpg" height="280" />
</div> </div>
**More screenshots?** ### Code Examples
### More Examples:
https://github.com/nodegui/examples https://github.com/nodegui/examples
@ -37,33 +38,35 @@ https://github.com/nodegui/examples
## Features ## Features
- 🧬 Cross platform. Should work on major Linux flavours, Windows and MacOS. - 🧬 **Cross platform.** Works on major Linux flavours, Windows, and MacOS.
- 📉 Low CPU and memory footprint. Current CPU stays at 0% on idle and memory usage is under 20mb for a hello world program. - 📉 **Low CPU and memory** footprint. Current CPU stays at 0% on idle and memory usage is under 20MB for a Hello World program.
- 💅 Styling with CSS (includes actual cascading). Also has full support for Flexbox layout (thanks to Yoga). - 💅 **Styling with CSS** (includes actual cascading). Also has full support for Flexbox layout (thanks to Yoga).
- ✅ Complete Nodejs api support (Currently runs on Node v12.x - and is easily upgradable). Hence has access to all nodejs compatible npm modules. - ✅ **Complete Nodejs API support** (Currently runs on Node v16.x - and is easily upgradable). Hence has access to all Nodejs compatible NPM modules.
- 🎪 Native widget event listener support. Supports all events available from Qt / NodeJs. - 🎪 **Native widget event listener support.** Supports all events available from Qt / NodeJs.
- 💸 Can be used for Commercial applications. - 💸 **Can be used for Commercial applications.**
- 🕵️‍♂️ Good Devtools support. - 🕵️‍♂️ **Good Devtools support.**
- 📚 Good documentation and website. - 📚 **Good documentation and website.**
- 🧙‍♂️ Good documentation for contributors. - 🧙‍♂️ **Good documentation for contributors.**
- 🦹🏻‍♀️ Good support for dark mode (Thanks to QT). - 🦹🏻‍♀️ **Good support for dark mode (Thanks to Qt).**
- 🏅First class Typescript support. (Works on regular JS projects too 😉). - 🏅**First class Typescript support.** (Works on regular JS projects too 😉).
## Getting Started ## Getting Started
- Check out [nodegui-starter](https://github.com/nodegui/nodegui-starter) to get up and running with your own React NodeGUI app! - Check out [nodegui-starter](https://github.com/nodegui/nodegui-starter) to get up and running with your own React NodeGUI app!
- Read through the [docs](https://nodegui.github.io/nodegui). - Read through the [docs](https://nodegui.github.io/nodegui).
- Checkout the examples: https://github.com/nodegui/examples . - Checkout the examples: https://github.com/nodegui/examples .
- [Tutorial: Build a native Meme Search Desktop app with Javascript (NodeGui) and Giphy API](https://www.sitepoint.com/build-native-desktop-gif-searcher-app-using-nodegui/)
## Installation ## Installation
#### To install latest stable release: To install latest stable release:
``` ```
npm install @nodegui/nodegui npm install @nodegui/nodegui
``` ```
#### To install the latest version available on master branch: To install the latest version available on master branch:
``` ```
npm install https://github.com/nodegui/nodegui/releases/download/v0.0.0-latest-master/nodegui-master.tgz npm install https://github.com/nodegui/nodegui/releases/download/v0.0.0-latest-master/nodegui-master.tgz
@ -75,12 +78,25 @@ or a shorter version:
npm i http://master-release.nodegui.org npm i http://master-release.nodegui.org
``` ```
**Community guides** If the installation fails to download the Qt binaries, a mirror can be used by setting the following environment variable and running the install command again:
```sh
QT_LINK_MIRROR=<alternative domain> # eg. QT_LINK_MIRROR=https://qt-mirror.dannhauer.de
npm install @nodegui/nodegui
```
See [FAQs](https://github.com/nodegui/nodegui/tree/master/website/docs/faq.md#why-does-installation-fail-at-minimal-qt-setup) for more details.
## Community guides
- [Tutorial: Build a native Meme Search Desktop app with Javascript (NodeGui) and Giphy API](https://www.sitepoint.com/build-native-desktop-gif-searcher-app-using-nodegui/)
- https://blog.logrocket.com/electron-alternatives-exploring-nodegui-and-react-nodegui/ - Electron alternatives: Exploring NodeGUI and React NodeGUI by [Siegfried Grimbeek](https://blog.logrocket.com/author/siegfriedgrimbeek/). - https://blog.logrocket.com/electron-alternatives-exploring-nodegui-and-react-nodegui/ - Electron alternatives: Exploring NodeGUI and React NodeGUI by [Siegfried Grimbeek](https://blog.logrocket.com/author/siegfriedgrimbeek/).
- https://hibbard.eu/node-gui/ - Excellent guide from [James Hibbard](https://github.com/jameshibbard). - https://hibbard.eu/node-gui/ - Excellent guide from [James Hibbard](https://github.com/jameshibbard).
**Talks/Podcasts** ## Talks/Podcasts
- [NodeGui and React NodeGui at KarmaJS Nov 2019 meetup: https://www.youtube.com/watch?v=8jH5gaEEDv4](https://www.youtube.com/watch?v=8jH5gaEEDv4) - [NodeGui and React NodeGui at KarmaJS Nov 2019 meetup: https://www.youtube.com/watch?v=8jH5gaEEDv4](https://www.youtube.com/watch?v=8jH5gaEEDv4)
@ -96,15 +112,116 @@ Looking to contribute? If you wish to implement a new widget/add more features a
Please read https://github.com/nodegui/.github/blob/master/CONTRIBUTING.md Please read https://github.com/nodegui/.github/blob/master/CONTRIBUTING.md
## Building
`npm run build` ## Building from source
Optionally set `QT_INSTALL_DIR='/path/to/qt'` environment variable to build using your own version of Qt. This section is useful for those wanting to work on NodeGui itself.
### Required tooling
NodeGui requires CMake and Compilation Tools as it is a wrapper for a native C++ widget toolkit QT.
Detailed instructions here: https://www.sitepoint.com/build-native-desktop-gif-searcher-app-using-nodegui/
TL;DR:
**MacOS**
```
brew install cmake
brew install make
```
**Windows**
https://cmake.org/download/
**Linux (Debian/Ubuntu)**
```
sudo apt-get install pkg-config build-essential
sudo apt-get install cmake make
sudo apt-get install mesa-common-dev libglu1-mesa-dev
```
**Linux (Fedora/RHEL/CentOS)**
```
sudo dnf groupinstall "Development Tools" "Development Libraries"
sudo dnf groupinstall "C Development Tools and Libraries"
sudo dnf install mesa-libGL mesa-libGL-devel
```
### Building
Once you have cloned this git repository, run this to build:
```
npm install
npm run build
```
The last step will takes some time to run as it builds the C++ binaries at the core of NodeGui.
### Using your own custom Qt installation (Optional)
**Compiling Qt from source**
You will need to download and install Qt from source since there are no binaries from Qt for M1 yet.
(https://www.reddit.com/r/QtFramework/comments/ll58wg/how_to_build_qt_creator_for_macos_arm64_a_guide/)
```
git clone git://code.qt.io/qt/qt5.git
cd qt5
git checkout 5.15
./init-repository --module-subset=essential -f
git submodule init qtsvg
git submodule update qtsvg
cd ..
mkdir qt5-5.15-macOS-release
cd qt5-5.15-macOS-release
../qt5/configure -release QMAKE_APPLE_DEVICE_ARCHS=arm64 -opensource -confirm-license -nomake examples -nomake tests -skip qt3d -skip webengine -skip qtactiveqt -skip qtcanvas3d -skip qtdeclarative -skip qtdatavis3d -skip qtdoc -skip qtgamepad -skip qtcharts -skip qtgraphicaleffects -skip qtlocation -skip qtpurchasing -skip qtquickcontrols -skip qtquickcontrols2 -skip qtremoteobjects -skip qtscxml -skip qtsensors -skip qtserialbus -skip qtserialport -skip qtspeech -skip qtvirtualkeyboard -skip qtscript
make -j15
make install
```
This should install Qt into something like this `/usr/local/Qt-5.15.3` (your directory can change. This will be displayed when running make)
**Pointing nodegui to use your custom Qt installation**
Now just set `export QT_INSTALL_DIR=<your qt path>` . In the above example it would look something like this `export QT_INSTALL_DIR=/usr/local/Qt-5.15.3`. Add this in your .zshrc or .bashrc so that you dont need to repeat this process again.
Now just `rm -rf node_modules` and do `npm install` again.
The logs should say something like `CustomQt detected at <your qt path>. Hence, skipping Mini Qt installation`.
### Running example programs
A number of small programs to show different parts of the Qt API are in `src/examples`. They can be run directly with:
```
npm run qode dist/examples/modelview_1_readonly.js
```
## Updating docs
`npm run docs`
then followed by:
`cd website && GIT_USER=<your_git_username> yarn deploy`
## Funding ## Funding
NodeGUI is an open source project and requires your support. If you like this project, please consider supporting my work by clicking on the Sponsor button on this Github repository or via Ko-Fi. NodeGui is an open source project and requires your support. If you like this project, please consider supporting my work by clicking on the Sponsor button on this Github repository or via Ko-Fi.
Alternatively, Issues on NodeGui can be funded by anyone via Issuehunt and the amount will be distributed to respective contributors. Alternatively, Issues on NodeGui can be funded by anyone via Issuehunt and the amount will be distributed to respective contributors.
<p> <p>
@ -146,7 +263,7 @@ People maintaining this project.
<table> <table>
<tr> <tr>
<td align="center"><a href="https://blog.atulr.com"><img src="https://avatars2.githubusercontent.com/u/4029423?v=4" width="100px;" alt="Atul R"/><br /><sub><b>Atul R</b></sub></a></td> <td align="center"><a href="https://blog.atulr.com"><img src="https://avatars2.githubusercontent.com/u/4029423?v=4" width="100px;" alt="Atul R"/><br /><sub><b>Atul R</b></sub></a></td>
<td align="center"><a href="https://github.com/dimitarnestorov"><img src="https://avatars3.githubusercontent.com/u/8790386?s=460&v=4" width="100px;" alt="Dimitar"/><br /><sub><b>Dimitar Nestorov</b></sub></a></td> <td align="center"><a href="https://github.com/sedwards2009"><img src="https://avatars.githubusercontent.com/u/6926644?v=4" width="100px;" alt="Simon Edwards"/><br /><sub><b>Simon Edwards</b></sub></a></td>
</tr> </tr>
</table> </table>
@ -159,39 +276,66 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
<!-- markdownlint-disable --> <!-- markdownlint-disable -->
<table> <table>
<tr> <tr>
<td align="center"><a href="https://lramage.gitlab.io"><img src="https://avatars1.githubusercontent.com/u/43783393?v=4" width="100px;" alt=""/><br /><sub><b>Lucas Ramage</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=oxr463" title="Documentation">📖</a></td> <td align="center"><a href="https://lramage.gitlab.io"><img src="https://avatars1.githubusercontent.com/u/43783393?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucas Ramage</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=oxr463" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/gamtiq"><img src="https://avatars3.githubusercontent.com/u/1177323?v=4" width="100px;" alt=""/><br /><sub><b>Denis Sikuler</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=gamtiq" title="Documentation">📖</a></td> <td align="center"><a href="https://github.com/gamtiq"><img src="https://avatars3.githubusercontent.com/u/1177323?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Denis Sikuler</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=gamtiq" title="Documentation">📖</a></td>
<td align="center"><a href="https://twitter.com/nahueljo"><img src="https://avatars1.githubusercontent.com/u/1612488?v=4" width="100px;" alt=""/><br /><sub><b>Nahuel José</b></sub></a><br /><a href="#question-Naahuel" title="Answering Questions">💬</a></td> <td align="center"><a href="https://twitter.com/nahueljo"><img src="https://avatars1.githubusercontent.com/u/1612488?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Nahuel José</b></sub></a><br /><a href="#question-Naahuel" title="Answering Questions">💬</a></td>
<td align="center"><a href="https://github.com/kakulgupta"><img src="https://avatars3.githubusercontent.com/u/10727047?v=4" width="100px;" alt=""/><br /><sub><b>Kakul Gupta</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=kakulgupta" title="Code">💻</a></td> <td align="center"><a href="https://github.com/kakulgupta"><img src="https://avatars3.githubusercontent.com/u/10727047?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Kakul Gupta</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=kakulgupta" title="Code">💻</a></td>
<td align="center"><a href="http://rahulgaba.com"><img src="https://avatars3.githubusercontent.com/u/7898942?v=4" width="100px;" alt=""/><br /><sub><b>Rahul Gaba</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=rgabs" title="Code">💻</a></td> <td align="center"><a href="http://rahulgaba.com"><img src="https://avatars3.githubusercontent.com/u/7898942?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Rahul Gaba</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=rgabs" title="Code">💻</a></td>
<td align="center"><a href="http://uriziel.pl"><img src="https://avatars1.githubusercontent.com/u/568207?v=4" width="100px;" alt=""/><br /><sub><b>Paweł Borecki</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=Uriziel01" title="Code">💻</a></td> <td align="center"><a href="http://uriziel.pl"><img src="https://avatars1.githubusercontent.com/u/568207?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Paweł Borecki</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=Uriziel01" title="Code">💻</a></td>
<td align="center"><a href="http://marcus-sa.me"><img src="https://avatars0.githubusercontent.com/u/8391194?v=4" width="100px;" alt=""/><br /><sub><b>Marcus S. Abildskov</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=marcus-sa" title="Tests">⚠️</a></td> <td align="center"><a href="http://marcus-sa.me"><img src="https://avatars0.githubusercontent.com/u/8391194?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Marcus S. Abildskov</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=marcus-sa" title="Tests">⚠️</a></td>
</tr> </tr>
<tr> <tr>
<td align="center"><a href="http://www.mad3linux.org"><img src="https://avatars3.githubusercontent.com/u/508624?v=4" width="100px;" alt=""/><br /><sub><b>Átila Camurça Alves</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=atilacamurca" title="Documentation">📖</a></td> <td align="center"><a href="http://www.mad3linux.org"><img src="https://avatars3.githubusercontent.com/u/508624?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Átila Camurça Alves</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=atilacamurca" title="Documentation">📖</a></td>
<td align="center"><a href="http://hibbard.eu"><img src="https://avatars2.githubusercontent.com/u/1940994?v=4" width="100px;" alt=""/><br /><sub><b>James Hibbard</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=jameshibbard" title="Code">💻</a></td> <td align="center"><a href="http://hibbard.eu"><img src="https://avatars2.githubusercontent.com/u/1940994?v=4?s=100" width="100px;" alt=""/><br /><sub><b>James Hibbard</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=jameshibbard" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/soonoo"><img src="https://avatars2.githubusercontent.com/u/5436405?v=4" width="100px;" alt=""/><br /><sub><b>Soonwoo Hong</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=soonoo" title="Code">💻</a></td> <td align="center"><a href="https://github.com/soonoo"><img src="https://avatars2.githubusercontent.com/u/5436405?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Soonwoo Hong</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=soonoo" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/illBeRoy"><img src="https://avatars2.githubusercontent.com/u/6681893?v=4" width="100px;" alt=""/><br /><sub><b>Roy Sommer</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=illBeRoy" title="Code">💻</a></td> <td align="center"><a href="https://github.com/illBeRoy"><img src="https://avatars2.githubusercontent.com/u/6681893?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Roy Sommer</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=illBeRoy" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/paulocoghi"><img src="https://avatars1.githubusercontent.com/u/378397?v=4" width="100px;" alt=""/><br /><sub><b>Paulo Coghi</b></sub></a><br /><a href="#ideas-paulocoghi" title="Ideas, Planning, & Feedback">🤔</a></td> <td align="center"><a href="https://github.com/paulocoghi"><img src="https://avatars1.githubusercontent.com/u/378397?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Paulo Coghi</b></sub></a><br /><a href="#ideas-paulocoghi" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center"><a href="https://balthild.com"><img src="https://avatars2.githubusercontent.com/u/2662758?v=4" width="100px;" alt=""/><br /><sub><b>Balthild Ires</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=balthild" title="Code">💻</a></td> <td align="center"><a href="https://balthild.com"><img src="https://avatars2.githubusercontent.com/u/2662758?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Balthild Ires</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=balthild" title="Code">💻</a></td>
<td align="center"><a href="https://dimitarnestorov.com"><img src="https://avatars0.githubusercontent.com/u/8790386?v=4" width="100px;" alt=""/><br /><sub><b>Dimitar Nestorov</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=dimitarnestorov" title="Code">💻</a></td> <td align="center"><a href="https://dimitarnestorov.com"><img src="https://avatars0.githubusercontent.com/u/8790386?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Dimitar Nestorov</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=dimitarnestorov" title="Code">💻</a></td>
</tr> </tr>
<tr> <tr>
<td align="center"><a href="https://www.greatapes.fi"><img src="https://avatars3.githubusercontent.com/u/3404389?v=4" width="100px;" alt=""/><br /><sub><b>Mikko Sairio</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=msairio" title="Code">💻</a></td> <td align="center"><a href="https://www.greatapes.fi"><img src="https://avatars3.githubusercontent.com/u/3404389?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Mikko Sairio</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=msairio" title="Code">💻</a></td>
<td align="center"><a href="http://blog.pepf.nl"><img src="https://avatars1.githubusercontent.com/u/1265435?v=4" width="100px;" alt=""/><br /><sub><b>Pepijn</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=pepf" title="Code">💻</a></td> <td align="center"><a href="http://blog.pepf.nl"><img src="https://avatars1.githubusercontent.com/u/1265435?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Pepijn</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=pepf" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/slidinghotdog"><img src="https://avatars3.githubusercontent.com/u/33790211?v=4" width="100px;" alt=""/><br /><sub><b>slidinghotdog</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=slidinghotdog" title="Code">💻</a></td> <td align="center"><a href="https://github.com/slidinghotdog"><img src="https://avatars3.githubusercontent.com/u/33790211?v=4?s=100" width="100px;" alt=""/><br /><sub><b>slidinghotdog</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=slidinghotdog" title="Code">💻</a></td>
<td align="center"><a href="http://www.bundyo.org"><img src="https://avatars1.githubusercontent.com/u/98318?v=4" width="100px;" alt=""/><br /><sub><b>Bundyo (Kamen Bundev)</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=bundyo" title="Code">💻</a></td> <td align="center"><a href="http://www.bundyo.org"><img src="https://avatars1.githubusercontent.com/u/98318?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Bundyo (Kamen Bundev)</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=bundyo" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/feng8848"><img src="https://avatars2.githubusercontent.com/u/40539968?v=4" width="100px;" alt=""/><br /><sub><b>feng8848</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=feng8848" title="Code">💻</a></td> <td align="center"><a href="https://github.com/feng8848"><img src="https://avatars2.githubusercontent.com/u/40539968?v=4?s=100" width="100px;" alt=""/><br /><sub><b>feng8848</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=feng8848" title="Code">💻</a></td>
<td align="center"><a href="https://karelov.info"><img src="https://avatars3.githubusercontent.com/u/2384454?v=4" width="100px;" alt=""/><br /><sub><b>Maksim Karelov</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=Ty3uK" title="Code">💻</a></td> <td align="center"><a href="https://karelov.info"><img src="https://avatars3.githubusercontent.com/u/2384454?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Maksim Karelov</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=Ty3uK" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/mspencer92"><img src="https://avatars2.githubusercontent.com/u/1910455?v=4" width="100px;" alt=""/><br /><sub><b>mspencer92</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=mspencer92" title="Code">💻</a></td> <td align="center"><a href="https://github.com/mspencer92"><img src="https://avatars2.githubusercontent.com/u/1910455?v=4?s=100" width="100px;" alt=""/><br /><sub><b>mspencer92</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=mspencer92" title="Code">💻</a></td>
</tr> </tr>
<tr> <tr>
<td align="center"><a href="https://github.com/blncd2020"><img src="https://avatars1.githubusercontent.com/u/59541979?v=4" width="100px;" alt=""/><br /><sub><b>blncd2020</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=blncd2020" title="Documentation">📖</a></td> <td align="center"><a href="https://github.com/blncd2020"><img src="https://avatars1.githubusercontent.com/u/59541979?v=4?s=100" width="100px;" alt=""/><br /><sub><b>blncd2020</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=blncd2020" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/gluaxspeed"><img src="https://avatars2.githubusercontent.com/u/16431709?v=4" width="100px;" alt=""/><br /><sub><b>gluaxspeed</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=gluaxspeed" title="Code">💻</a></td> <td align="center"><a href="https://github.com/gluaxspeed"><img src="https://avatars2.githubusercontent.com/u/16431709?v=4?s=100" width="100px;" alt=""/><br /><sub><b>gluaxspeed</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=gluaxspeed" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/Solant"><img src="https://avatars2.githubusercontent.com/u/5971578?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Solant</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=Solant" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/shubhamzanwar"><img src="https://avatars0.githubusercontent.com/u/15626155?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Shubham Zanwar</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=shubhamzanwar" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/Singha360"><img src="https://avatars1.githubusercontent.com/u/35334787?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Singha360</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=Singha360" title="Code">💻</a></td>
<td align="center"><a href="http://wellenline.com"><img src="https://avatars3.githubusercontent.com/u/3790782?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Mihkel</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=MihkelBaranov" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/stevo2588"><img src="https://avatars1.githubusercontent.com/u/3278045?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Stephen A</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=stevo2588" title="Code">💻</a></td>
</tr>
<tr>
<td align="center"><a href="http://liujunjiang.com"><img src="https://avatars1.githubusercontent.com/u/15191056?v=4?s=100" width="100px;" alt=""/><br /><sub><b>流君酱</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=jardenliu" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/agg23"><img src="https://avatars1.githubusercontent.com/u/238679?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Adam Gastineau</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=agg23" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/swittk"><img src="https://avatars2.githubusercontent.com/u/5000572?v=4?s=100" width="100px;" alt=""/><br /><sub><b>swittk</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=swittk" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/craftingmod"><img src="https://avatars2.githubusercontent.com/u/9389278?v=4?s=100" width="100px;" alt=""/><br /><sub><b>craftingmod</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=craftingmod" title="Code">💻</a></td>
<td align="center"><a href="http://www.m2osw.com"><img src="https://avatars1.githubusercontent.com/u/643129?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Doug Barbieri</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=dooglio" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/NeryHenrique"><img src="https://avatars0.githubusercontent.com/u/6879141?v=4?s=100" width="100px;" alt=""/><br /><sub><b>HENRIQUE DE SOUZA NERY</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=NeryHenrique" title="Code">💻</a></td>
<td align="center"><a href="https://ruslang.xyz"><img src="https://avatars0.githubusercontent.com/u/25264730?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Ruslan Garifullin</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=ruslang02" title="Code">💻</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/ran-j"><img src="https://avatars0.githubusercontent.com/u/17410205?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Ranieri</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=ran-j" title="Code">💻</a> <a href="https://github.com/nodegui/nodegui/commits?author=ran-j" title="Documentation">📖</a></td>
<td align="center"><a href="https://master-technology.com"><img src="https://avatars3.githubusercontent.com/u/850871?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Nathanael Anderson</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=NathanaelA" title="Code">💻</a></td>
<td align="center"><a href="https://ubiq.co.za"><img src="https://avatars0.githubusercontent.com/u/4415071?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Ross</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=rocbear" title="Code">💻</a> <a href="https://github.com/nodegui/nodegui/commits?author=rocbear" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/4h7l"><img src="https://avatars.githubusercontent.com/u/69183283?v=4?s=100" width="100px;" alt=""/><br /><sub><b>4h7l</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=4h7l" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/Maks-s"><img src="https://avatars.githubusercontent.com/u/26678512?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Maks</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=Maks-s" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/zhb124404"><img src="https://avatars.githubusercontent.com/u/16805041?v=4?s=100" width="100px;" alt=""/><br /><sub><b>zhb124404</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=zhb124404" title="Documentation">📖</a></td>
<td align="center"><a href="http://www.apsis.io"><img src="https://avatars.githubusercontent.com/u/579688?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Wyatt Kirby</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=wkirby" title="Code">💻</a></td>
</tr>
<tr>
<td align="center"><a href="https://stvkoch.github.io."><img src="https://avatars.githubusercontent.com/u/14454?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Steven Koch</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=stvkoch" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/sedwards2009"><img src="https://avatars.githubusercontent.com/u/6926644?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Simon Edwards</b></sub></a><br /><a href="https://github.com/nodegui/nodegui/commits?author=sedwards2009" title="Code">💻</a></td>
</tr> </tr>
</table> </table>
<!-- markdownlint-enable --> <!-- markdownlint-restore -->
<!-- prettier-ignore-end --> <!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END --> <!-- ALL-CONTRIBUTORS-LIST:END -->

View File

@ -1,17 +1,21 @@
set(CMAKE_INCLUDE_CURRENT_DIR ON)
find_program(CCACHE_PROGRAM ccache) find_program(CCACHE_PROGRAM ccache)
if(CCACHE_PROGRAM) if(CCACHE_PROGRAM)
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}") set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}")
endif() endif()
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.9" CACHE STRING "Minimum OS X deployment version") set(CMAKE_OSX_DEPLOYMENT_TARGET "10.13" CACHE STRING "Minimum OS X deployment version")
function(AddCommonConfig addonName) function(AddCommonConfig addonName)
target_compile_features(${addonName} PRIVATE target_compile_features(${addonName} PRIVATE
cxx_constexpr
cxx_inheriting_constructors cxx_inheriting_constructors
cxx_lambdas cxx_lambdas
cxx_auto_type cxx_auto_type
cxx_variadic_templates cxx_variadic_templates
cxx_variable_templates cxx_variable_templates
cxx_std_17
) )
if(napi_build_version) if(napi_build_version)

View File

@ -11,7 +11,7 @@ include("${PLUGIN_CMAKE_DIR}/common.cmake")
include("${PLUGIN_CMAKE_DIR}/qt.cmake") include("${PLUGIN_CMAKE_DIR}/qt.cmake")
include("${PLUGIN_CMAKE_DIR}/napi.cmake") include("${PLUGIN_CMAKE_DIR}/napi.cmake")
function(AddPluginConfig addonName) macro(AddPluginConfig addonName)
AddCommonConfig(${addonName}) AddCommonConfig(${addonName})
AddQtSupport(${addonName}) AddQtSupport(${addonName})
AddNapiSupport(${addonName}) AddNapiSupport(${addonName})
@ -29,5 +29,5 @@ function(AddPluginConfig addonName)
"${NODEGUI_ROOT}/src/cpp/include/nodegui" "${NODEGUI_ROOT}/src/cpp/include/nodegui"
) )
endfunction(AddPluginConfig addonName) endmacro(AddPluginConfig addonName)

24
config/qode.cmake Normal file
View File

@ -0,0 +1,24 @@
# Adds Qode shared binary support
set(QODE_CONFIG_FILE @nodegui/qode/src/config.js)
macro(AddQodeSupport addonName)
if (WIN32)
execute_process(COMMAND node -p "require('${QODE_CONFIG_FILE}').extractDir"
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE QODE_BINARY_DIR
)
string(REPLACE "\n" "" QODE_BINARY_DIR "${QODE_BINARY_DIR}")
string(REPLACE "\"" "" QODE_BINARY_DIR "${QODE_BINARY_DIR}")
message(STATUS "Using Qode installation for ${addonName} QODE_BINARY_DIR:${QODE_BINARY_DIR}")
target_link_libraries(${CORE_WIDGETS_ADDON} PRIVATE
"${QODE_BINARY_DIR}\\node.lib"
)
endif()
endmacro(AddQodeSupport addonName)

View File

@ -1,79 +1,25 @@
# Adds Qt support # Adds Qt support
# make sure you include this at the top of whichever Cmakelist file you are going to use. # make sure you include this at the top of whichever Cmakelist file you are going to use.
# Need for automatic moc. Moc executable path is set in qt.cmake # Need for automatic moc.
set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(QT_VERSION_MAJOR 5)
set(QT_VERSION_MINOR 13)
add_executable(Qt5::moc IMPORTED)
function(AddQtSupport addonName) set(CMAKE_AUTOMOC ON)
execute_process(COMMAND node -p "require('@nodegui/qode').qtHome" set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
set(QTCONFIG_FILE ${CMAKE_CURRENT_LIST_DIR}/qtConfig.js)
macro(AddQtSupport addonName)
execute_process(COMMAND node -p "require('${QTCONFIG_FILE}').qtCmakeDir"
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE QT_HOME_DIR OUTPUT_VARIABLE QT_CMAKE_HOME_DIR
) )
if(DEFINED ENV{QT_INSTALL_DIR}) string(REPLACE "\n" "" QT_CMAKE_HOME_DIR "${QT_CMAKE_HOME_DIR}")
# Allows to use custom Qt installation via QT_INSTALL_DIR env variable string(REPLACE "\"" "" QT_CMAKE_HOME_DIR "${QT_CMAKE_HOME_DIR}")
message(STATUS "Using Custom QT installation for ${addonName} QT_INSTALL_DIR:$ENV{QT_INSTALL_DIR}")
set(QT_HOME_DIR "$ENV{QT_INSTALL_DIR}")
endif()
string(REPLACE "\n" "" QT_HOME_DIR "${QT_HOME_DIR}") message(STATUS "Using Qt installation for ${addonName} QT_CMAKE_HOME_DIR:${QT_CMAKE_HOME_DIR}")
string(REPLACE "\"" "" QT_HOME_DIR "${QT_HOME_DIR}")
if(APPLE) list(APPEND CMAKE_PREFIX_PATH "${QT_CMAKE_HOME_DIR}/../../..")
set(CUSTOM_QT_MOC_PATH "${QT_HOME_DIR}/bin/moc") find_package(Qt6 REQUIRED COMPONENTS Widgets Gui Core Svg SvgWidgets)
target_include_directories(${addonName} PRIVATE endmacro(AddQtSupport addonName)
"${QT_HOME_DIR}/include"
"${QT_HOME_DIR}/lib/QtCore.framework/Versions/5/Headers"
"${QT_HOME_DIR}/lib/QtGui.framework/Versions/5/Headers"
"${QT_HOME_DIR}/lib/QtWidgets.framework/Versions/5/Headers"
)
target_link_libraries(${addonName} PRIVATE
"${QT_HOME_DIR}/lib/QtCore.framework/Versions/5/QtCore"
"${QT_HOME_DIR}/lib/QtGui.framework/Versions/5/QtGui"
"${QT_HOME_DIR}/lib/QtWidgets.framework/Versions/5/QtWidgets"
)
endif()
if (WIN32)
set(CUSTOM_QT_MOC_PATH "${QT_HOME_DIR}\\bin\\moc.exe")
target_include_directories(${addonName} PRIVATE
"${QT_HOME_DIR}\\include"
"${QT_HOME_DIR}\\include\\QtCore"
"${QT_HOME_DIR}\\include\\QtGui"
"${QT_HOME_DIR}\\include\\QtWidgets"
)
target_link_libraries(${addonName} PRIVATE
"${QT_HOME_DIR}\\lib\\Qt5Core.lib"
"${QT_HOME_DIR}\\lib\\Qt5Gui.lib"
"${QT_HOME_DIR}\\lib\\Qt5Widgets.lib"
)
endif()
if(UNIX AND NOT APPLE)
set(LINUX TRUE)
endif()
if(LINUX)
set(CUSTOM_QT_MOC_PATH "${QT_HOME_DIR}/bin/moc")
target_include_directories(${addonName} PRIVATE
"${QT_HOME_DIR}/include"
"${QT_HOME_DIR}/include/QtCore"
"${QT_HOME_DIR}/include/QtGui"
"${QT_HOME_DIR}/include/QtWidgets"
)
target_link_libraries(${addonName} PRIVATE
"${QT_HOME_DIR}/lib/libQt5Core.so"
"${QT_HOME_DIR}/lib/libQt5Gui.so"
"${QT_HOME_DIR}/lib/libQt5Widgets.so"
)
endif()
# set custom moc executable location
set_target_properties(Qt5::moc PROPERTIES IMPORTED_LOCATION "${CUSTOM_QT_MOC_PATH}")
endfunction(AddQtSupport addonName)

102
config/qtConfig.js Normal file
View File

@ -0,0 +1,102 @@
const os = require('os');
const path = require('path');
const fs = require('fs');
const SETUP_DIR = path.resolve(__dirname, '..', 'miniqt');
const QT_VERSION = '6.4.1';
const MIRROR = Boolean(process.env.QT_LINK_MIRROR) ? process.env.QT_LINK_MIRROR : 'https://download.qt.io';
const checkIfExists = (fullPath) => {
return () => fs.existsSync(fullPath);
};
function getMiniQtConfig() {
switch (os.platform()) {
case 'darwin': {
const qtHome = path.resolve(SETUP_DIR, QT_VERSION, 'macos');
return {
qtHome,
artifacts: [
{
name: 'Qt Base',
link: `${MIRROR}/online/qtsdkrepository/mac_x64/desktop/qt6_641/qt.qt6.641.clang_64/6.4.1-0-202211101256qtbase-MacOS-MacOS_12-Clang-MacOS-MacOS_12-X86_64-ARM64.7z`,
skipSetup: checkIfExists(path.resolve(qtHome, 'plugins', 'platforms', 'libqcocoa.dylib')),
},
{
name: 'Qt Svg',
link: `${MIRROR}/online/qtsdkrepository/mac_x64/desktop/qt6_641/qt.qt6.641.clang_64/6.4.1-0-202211101256qtsvg-MacOS-MacOS_12-Clang-MacOS-MacOS_12-X86_64-ARM64.7z`,
skipSetup: checkIfExists(path.resolve(qtHome, 'lib', 'QtSvg.framework', 'QtSvg')),
},
{
name: 'Qt Tools',
link: `${MIRROR}/online/qtsdkrepository/mac_x64/desktop/qt6_641/qt.qt6.641.clang_64/6.4.1-0-202211101256qttools-MacOS-MacOS_12-Clang-MacOS-MacOS_12-X86_64-ARM64.7z`,
skipSetup: checkIfExists(path.resolve(qtHome, 'bin', 'macdeployqt')),
},
],
};
}
case 'win32': {
const qtHome = path.resolve(SETUP_DIR, QT_VERSION, 'msvc2019_64');
return {
qtHome,
artifacts: [
{
name: 'Qt Base',
link: `${MIRROR}/online/qtsdkrepository/windows_x86/desktop/qt6_641/qt.qt6.641.win64_msvc2019_64/6.4.1-0-202211101254qtbase-Windows-Windows_10_21H2-MSVC2019-Windows-Windows_10_21H2-X86_64.7z`,
skipSetup: checkIfExists(path.resolve(qtHome, 'bin', 'Qt6Core.dll')),
},
{
name: 'Qt SVG',
link: `${MIRROR}/online/qtsdkrepository/windows_x86/desktop/qt6_641/qt.qt6.641.win64_msvc2019_64/6.4.1-0-202211101254qtsvg-Windows-Windows_10_21H2-MSVC2019-Windows-Windows_10_21H2-X86_64.7z`,
skipSetup: checkIfExists(path.resolve(qtHome, 'bin', 'Qt6Svg.dll')),
},
{
name: 'Qt Tools',
link: `${MIRROR}/online/qtsdkrepository/windows_x86/desktop/qt6_641/qt.qt6.641.win64_msvc2019_64/6.4.1-0-202211101254qttools-Windows-Windows_10_21H2-MSVC2019-Windows-Windows_10_21H2-X86_64.7z`,
skipSetup: checkIfExists(path.resolve(qtHome, 'bin', 'windeployqt.exe')),
},
],
};
}
case 'linux': {
const qtHome = path.resolve(SETUP_DIR, QT_VERSION, 'gcc_64');
return {
qtHome,
artifacts: [
{
name: 'Qt Base',
link: `${MIRROR}/online/qtsdkrepository/linux_x64/desktop/qt6_641/qt.qt6.641.gcc_64/6.4.1-0-202211101305qtbase-Linux-RHEL_8_4-GCC-Linux-RHEL_8_4-X86_64.7z`,
skipSetup: checkIfExists(path.resolve(qtHome, 'bin', 'moc')),
},
{
name: 'Qt SVG',
link: `${MIRROR}/online/qtsdkrepository/linux_x64/desktop/qt6_641/qt.qt6.641.gcc_64/6.4.1-0-202211101305qtsvg-Linux-RHEL_8_4-GCC-Linux-RHEL_8_4-X86_64.7z`,
skipSetup: checkIfExists(path.resolve(qtHome, 'lib', 'libQt6Svg.so')),
},
{
name: 'Qt ICU',
link: `${MIRROR}/online/qtsdkrepository/linux_x64/desktop/qt6_641/qt.qt6.641.gcc_64/6.4.1-0-202211101305icu-linux-Rhel7.2-x64.7z`,
skipSetup: checkIfExists(path.resolve(qtHome, 'lib', 'libicuuc.so')),
},
],
};
}
}
}
const miniQt = {
...getMiniQtConfig(),
version: QT_VERSION,
setupDir: SETUP_DIR,
};
const useCustomQt = Boolean(process.env.QT_INSTALL_DIR);
const qtHome = useCustomQt ? process.env.QT_INSTALL_DIR : miniQt.qtHome;
const qtCmakeDir = path.resolve(qtHome, 'lib', 'cmake', 'Qt6');
module.exports = {
qtHome,
miniQt,
qtCmakeDir,
useCustomQt,
};

View File

@ -11,6 +11,6 @@ module.exports = {
transform: { transform: {
'^.+\\.tsx?$': 'ts-jest', '^.+\\.tsx?$': 'ts-jest',
}, },
globalSetup: './config/tests/setup.js', globalSetup: './scripts/tests/setup.js',
globalTeardown: './config/tests/teardown.js', globalTeardown: './scripts/tests/teardown.js',
}; };

16459
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,54 +1,71 @@
{ {
"name": "@nodegui/nodegui", "name": "@nodegui/nodegui",
"version": "0.13.4", "version": "0.59.0",
"description": "A cross platform library to build native desktop apps.", "description": "A cross-platform library to build native desktop apps.",
"main": "dist/index.js", "main": "dist/index.js",
"typings": "dist/index.d.ts", "typings": "dist/index.d.ts",
"author": "Atul R <atulanand94@gmail.com>", "author": "Atul R <atulanand94@gmail.com>",
"license": "MIT", "license": "MIT",
"private": false, "private": false,
"scripts": { "bin": {
"dev": "npm run build && qode dist/demo.js", "qode": "scripts/qode.js"
"build": "tsc && npm run build:addon",
"postinstall": "cross-env node ./scripts/skip.js || npm run prebuild:install || npm run build:addon",
"build:addon": "cross-env CMAKE_BUILD_PARALLEL_LEVEL=8 cmake-js compile",
"prebuild:install": "prebuild-install --backend=cmake-js --runtime=napi --verbose",
"test": "qode ./node_modules/jest/bin/jest -i",
"lint:cpp": "clang-format -i --glob=src/cpp/**/*.[h,c]*",
"lint:ts": "tsc --noEmit && cross-env eslint './src/**/*.{ts,tsx,js,jsx}' --fix",
"docs": "typedoc && node ./website/docs/scripts/fixdocs.js"
}, },
"funding": {
"url": "https://github.com/sponsors/a7ul"
},
"scripts": {
"dev": "npm run build && node ./scripts/qode.js dist/demo.js",
"demo": "node ./scripts/qode.js dist/demo.js",
"build": "tsc && npm run build:addon",
"install": "npm run setupqt && (node ./scripts/skip.js || npm run setupbinary || npm run build:addon)",
"setupqt": "node ./scripts/setupMiniQt.js",
"setupbinary": "node ./scripts/setupBinary.js",
"build:addon": "cross-env CMAKE_BUILD_PARALLEL_LEVEL=8 cmake-js compile",
"test": "node ./scripts/qode.js ./node_modules/jest/bin/jest -i",
"lint:cpp": "clang-format -i --glob=src/cpp/**/*.[h,c]*",
"lint:ts": "tsc --noEmit && eslint ./src --fix",
"docs": "typedoc && node ./website/docs/scripts/fixdocs.js",
"qode": "node ./scripts/qode.js",
"prepublishOnly": "npm run build"
},
"engines": {
"node": ">=14.x.x"
},
"engineStrict": false,
"dependencies": { "dependencies": {
"@nodegui/qode": "^1.0.6", "@nodegui/artifact-installer": "^1.1.0",
"cmake-js": "^6.0.0", "@nodegui/qode": "^18.12.1",
"cross-env": "^7.0.0", "cmake-js": "^6.2.1",
"cuid": "^2.1.6", "cross-env": "^7.0.3",
"node-addon-api": "^2.0.0", "cuid": "^2.1.8",
"manage-path": "^2.0.0",
"memoize-one": "^5.2.1",
"node-addon-api": "^4.0.0",
"postcss": "^7.0.17",
"postcss-nodegui-autoprefixer": "0.0.7", "postcss-nodegui-autoprefixer": "0.0.7",
"prebuild-install": "^5.3.3" "tar": "^6.0.1"
}, },
"devDependencies": { "devDependencies": {
"@types/bindings": "^1.3.0", "@types/bindings": "^1.5.1",
"@types/jest": "^25.1.1", "@types/jest": "29.2.4",
"@types/node": "^13.1.2", "@types/node": "^16.4.13",
"@typescript-eslint/eslint-plugin": "^2.10.0", "@typescript-eslint/eslint-plugin": "^4.29.0",
"@typescript-eslint/parser": "^2.10.0", "@typescript-eslint/parser": "^4.29.0",
"clang-format": "^1.3.0", "clang-format": "^1.5.0",
"eslint": "^6.6.0", "eslint": "^7.32.0",
"eslint-config-prettier": "^6.5.0", "eslint-config-prettier": "^8.3.0",
"eslint-plugin-prettier": "^3.1.1", "eslint-plugin-prettier": "^3.4.0",
"husky": "^4.0.10", "husky": "^7.0.1",
"jest": "^25.1.0", "jest": "29.3.1",
"prebuild": "^10.0.0", "prettier": "^2.3.2",
"prettier": "^1.18.2", "ts-jest": "29.0.3",
"ts-jest": "^25.0.0", "typedoc": "^0.17.8",
"typedoc": "^0.16.7", "typedoc-plugin-markdown": "^2.4.2",
"typedoc-plugin-markdown": "^2.2.14", "typescript": "^4.3.5"
"typescript": "^3.7.3"
}, },
"binary": { "binary": {
"napi_versions": [ "napi_versions": [
3 4
] ]
}, },
"husky": { "husky": {

40
scripts/qode.js Executable file
View File

@ -0,0 +1,40 @@
#!/usr/bin/env node
var os = require('os');
var path = require('path');
var qodeConfig = require('@nodegui/qode');
var managePath = require('manage-path');
var qtConfig = require('../config/qtConfig');
var proc = require('child_process');
// Add Qt's bin to the path of Qode so that it can find the dll's
var alterPath = managePath(process.env);
alterPath.unshift(path.join(qtConfig.qtHome, 'bin'));
// Add Qt's lib to LD_LIBRARY_PATH so linux can find the libs when bundled with webpack
if(os.platform == 'linux') {
var oldLD_PATH = process.env.LD_LIBRARY_PATH ?? "";
process.env.LD_LIBRARY_PATH = oldLD_PATH + ":" + path.join(qtConfig.qtHome, 'lib');
}
var child = proc.spawn(qodeConfig.qodePath, process.argv.slice(2), {
stdio: 'inherit',
windowsHide: false,
env: process.env,
});
child.on('close', function(code) {
process.exit(code);
});
const handleTerminationSignal = function(signal) {
process.on(signal, function signalHandler() {
if (!child.killed) {
child.kill(signal);
}
});
};
handleTerminationSignal('SIGINT');
handleTerminationSignal('SIGTERM');

39
scripts/setupBinary.js Normal file
View File

@ -0,0 +1,39 @@
#!/usr/bin/env node
const os = require('os');
const fs = require('fs');
const path = require('path');
const { setupArtifact } = require('@nodegui/artifact-installer');
const tar = require('tar');
const SETUP_DIR = path.resolve(__dirname, '..', 'build', 'Release');
const packageJson = require('../package');
async function setupBinary() {
const packageVersion = packageJson.version;
const tarballName = `nodegui-binary-v${packageVersion}-${os.platform()}-${os.arch()}.tar.gz`;
const url = `https://github.com/nodegui/nodegui/releases/download/v${packageVersion}/${tarballName}`;
await setupArtifact({
outDir: SETUP_DIR,
id: 'nodegui-core',
displayName: `Precompiled NodeGui binary`,
downloadLink: url,
skipSetup: () => false,
});
const tarPath = path.join(SETUP_DIR, tarballName.slice(0, -3));
tar.extract({
cwd: SETUP_DIR,
file: tarPath,
sync: true,
});
fs.unlinkSync(tarPath);
}
setupBinary()
.catch((err) => {
console.error(err);
process.exit(1);
})
.then(() => {
process.exit(0);
});

29
scripts/setupMiniQt.js Normal file
View File

@ -0,0 +1,29 @@
#!/usr/bin/env node
const { setupArtifact } = require('@nodegui/artifact-installer');
const { miniQt, useCustomQt, qtHome } = require('../config/qtConfig');
async function setupQt() {
return Promise.all(
miniQt.artifacts.map(async (artifact) =>
setupArtifact({
outDir: miniQt.setupDir,
id: 'nodegui-mini-qt',
displayName: `${artifact.name} for Minimal Qt: ${miniQt.version} installation`,
downloadLink: artifact.link,
skipSetup: artifact.skipSetup,
}),
),
);
}
if (!useCustomQt) {
console.log(`Minimal Qt ${miniQt.version} setup:`);
setupQt().catch((err) => {
console.error(err);
process.exit(1);
});
} else {
console.log(`CustomQt detected at ${qtHome} . Hence, skipping Mini Qt installation...`);
}

View File

@ -0,0 +1,67 @@
/*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#pragma once
#include <cstdint>
#include <cstdio>
#include "YGEnums.h"
namespace facebook {
namespace yoga {
namespace detail {
constexpr size_t log2ceilFn(size_t n) {
return n < 1 ? 0 : (1 + log2ceilFn(n / 2));
}
constexpr int mask(size_t bitWidth, size_t index) {
return ((1 << bitWidth) - 1) << index;
}
// The number of bits necessary to represent enums defined with YG_ENUM_SEQ_DECL
template <typename Enum>
constexpr size_t bitWidthFn() {
static_assert(enums::count<Enum>() > 0,
"Enums must have at least one entries");
return log2ceilFn(enums::count<Enum>() - 1);
}
template <typename Enum>
constexpr Enum getEnumData(int flags, size_t index) {
return static_cast<Enum>((flags & mask(bitWidthFn<Enum>(), index)) >> index);
}
template <typename Enum>
void setEnumData(uint32_t& flags, size_t index, int newValue) {
flags = (flags & ~mask(bitWidthFn<Enum>(), index)) |
((newValue << index) & (mask(bitWidthFn<Enum>(), index)));
}
template <typename Enum>
void setEnumData(uint8_t& flags, size_t index, int newValue) {
flags = (flags & ~mask(bitWidthFn<Enum>(), index)) |
((newValue << index) & (mask(bitWidthFn<Enum>(), index)));
}
constexpr bool getBooleanData(int flags, size_t index) {
return (flags >> index) & 1;
}
inline void setBooleanData(uint8_t& flags, size_t index, bool value) {
if (value) {
flags |= 1 << index;
} else {
flags &= ~(1 << index);
}
}
} // namespace detail
} // namespace yoga
} // namespace facebook

View File

@ -1,144 +0,0 @@
/*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#pragma once
#include <yoga/YGEnums.h>
#include <cstddef>
#include <limits>
#include <type_traits>
namespace facebook {
namespace yoga {
namespace detail {
constexpr size_t log2ceil(size_t n) {
return n < 1 ? 0 : (1 + log2ceil(n / 2));
}
// The number of bits necessary to represent enums defined with YG_ENUM_SEQ_DECL
template <typename Enum>
constexpr size_t bitWidth() {
static_assert(enums::count<Enum>() > 0,
"Enums must have at least one entries");
return log2ceil(enums::count<Enum>() - 1);
}
// Number of bits needed for a boolean
template <>
constexpr size_t bitWidth<bool>() {
return 1;
}
template <typename U, typename... Ts>
struct BitTraits {};
template <typename U>
struct BitTraits<U> {
// Base cases
static constexpr size_t width(size_t) { return 0; }
static constexpr size_t shift(size_t) { return 0; }
};
template <typename U, typename T, typename... Ts>
struct BitTraits<U, T, Ts...> {
using Rest = BitTraits<U, Ts...>;
static constexpr size_t width(size_t idx) {
return idx == 0 ? bitWidth<T>() : Rest::width(idx - 1);
}
static constexpr size_t shift(size_t idx) {
return idx == 0 ? Rest::width(0) + Rest::shift(0) : Rest::shift(idx - 1);
}
static constexpr U mask(size_t idx) {
return ((U{1} << width(idx)) - 1) << shift(idx);
}
};
template <size_t Idx, typename T, typename... Ts>
struct IndexedType {
using Type = typename IndexedType<Idx - 1, Ts...>::Type;
};
template <typename T, typename... Ts>
struct IndexedType<0, T, Ts...> {
using Type = T;
};
} // namespace detail
template <typename Storage, typename... Fields>
class Bitfield {
static_assert(std::is_integral<Storage>::value,
"Bitfield needs an integral storage type");
static_assert(std::is_unsigned<Storage>::value,
"Bitfield needs an unsigned storage type");
static_assert(sizeof...(Fields) > 0, "Bitfield needs at least one member");
using BitTraits = detail::BitTraits<Storage, Fields...>;
#if !defined(_MSC_VER) || _MSC_VER > 1914
static_assert(BitTraits::shift(0) + BitTraits::width(0) <=
std::numeric_limits<Storage>::digits,
"Specified storage type is too narrow to hold all types");
#endif
template <size_t Idx>
using TypeAt = typename detail::IndexedType<Idx, Fields...>::Type;
template <size_t Idx, typename Value, typename... Values>
static constexpr Storage initStorage(Value value, Values... values) {
return ((value << BitTraits::shift(Idx)) & BitTraits::mask(Idx)) |
initStorage<Idx + 1, Values...>(values...);
}
template <size_t Idx>
static constexpr Storage initStorage() {
return Storage{0};
}
Storage storage_ = 0;
public:
template <size_t Idx>
class Ref {
Bitfield& bitfield_;
public:
Ref(Bitfield& bitfield) : bitfield_(bitfield) {}
Ref& operator=(TypeAt<Idx> value) {
bitfield_.storage_ =
(bitfield_.storage_ & ~BitTraits::mask(Idx)) |
((value << BitTraits::shift(Idx)) & BitTraits::mask(Idx));
return *this;
}
operator TypeAt<Idx>() const {
return const_cast<const Bitfield&>(bitfield_).at<Idx>();
}
};
constexpr Bitfield() = default;
constexpr Bitfield(Fields... values) : storage_{initStorage<0>(values...)} {}
template <size_t Idx>
constexpr TypeAt<Idx> at() const {
return static_cast<TypeAt<Idx>>((storage_ & BitTraits::mask(Idx)) >>
BitTraits::shift(Idx));
}
template <size_t Idx>
Ref<Idx> at() {
return {*this};
}
};
} // namespace yoga
} // namespace facebook

View File

@ -7,6 +7,8 @@
#include "Utils.h" #include "Utils.h"
#include <stdexcept>
using namespace facebook; using namespace facebook;
YGFlexDirection YGFlexDirectionCross(const YGFlexDirection flexDirection, YGFlexDirection YGFlexDirectionCross(const YGFlexDirection flexDirection,
@ -51,6 +53,13 @@ bool YGFloatsEqual(const float a, const float b) {
return yoga::isUndefined(a) && yoga::isUndefined(b); return yoga::isUndefined(a) && yoga::isUndefined(b);
} }
bool YGDoubleEqual(const double a, const double b) {
if (!yoga::isUndefined(a) && !yoga::isUndefined(b)) {
return fabs(a - b) < 0.0001f;
}
return yoga::isUndefined(a) && yoga::isUndefined(b);
}
float YGFloatSanitize(const float val) { float YGFloatSanitize(const float val) {
return yoga::isUndefined(val) ? 0 : val; return yoga::isUndefined(val) ? 0 : val;
} }
@ -64,3 +73,7 @@ YGFloatOptional YGFloatOptionalMax(YGFloatOptional op1, YGFloatOptional op2) {
} }
return op1.isUndefined() ? op2 : op1; return op1.isUndefined() ? op2 : op1;
} }
void throwLogicalErrorWithMessage(const char* message) {
throw std::logic_error(message);
}

View File

@ -63,6 +63,8 @@ inline bool YGValueEqual(facebook::yoga::detail::CompactValue a,
// difference between two floats is less than 0.0001f or both are undefined. // difference between two floats is less than 0.0001f or both are undefined.
bool YGFloatsEqual(const float a, const float b); bool YGFloatsEqual(const float a, const float b);
bool YGDoubleEqual(const double a, const double b);
float YGFloatMax(const float a, const float b); float YGFloatMax(const float a, const float b);
YGFloatOptional YGFloatOptionalMax(const YGFloatOptional op1, YGFloatOptional YGFloatOptionalMax(const YGFloatOptional op1,
@ -133,3 +135,5 @@ inline YGFloatOptional YGResolveValueMargin(yoga::detail::CompactValue value,
const float ownerSize) { const float ownerSize) {
return value.isAuto() ? YGFloatOptional{0} : YGResolveValue(value, ownerSize); return value.isAuto() ? YGFloatOptional{0} : YGResolveValue(value, ownerSize);
} }
void throwLogicalErrorWithMessage(const char* message);

View File

@ -179,6 +179,8 @@ const char* YGOverflowToString(const YGOverflow value) {
const char* YGPositionTypeToString(const YGPositionType value) { const char* YGPositionTypeToString(const YGPositionType value) {
switch (value) { switch (value) {
case YGPositionTypeStatic:
return "static";
case YGPositionTypeRelative: case YGPositionTypeRelative:
return "relative"; return "relative";
case YGPositionTypeAbsolute: case YGPositionTypeAbsolute:

View File

@ -90,7 +90,8 @@ YG_ENUM_SEQ_DECL(YGNodeType, YGNodeTypeDefault, YGNodeTypeText)
YG_ENUM_SEQ_DECL(YGOverflow, YGOverflowVisible, YGOverflowHidden, YG_ENUM_SEQ_DECL(YGOverflow, YGOverflowVisible, YGOverflowHidden,
YGOverflowScroll) YGOverflowScroll)
YG_ENUM_SEQ_DECL(YGPositionType, YGPositionTypeRelative, YGPositionTypeAbsolute) YG_ENUM_SEQ_DECL(YGPositionType, YGPositionTypeStatic, YGPositionTypeRelative,
YGPositionTypeAbsolute)
YG_ENUM_DECL(YGPrintOptions, YGPrintOptionsLayout = 1, YGPrintOptionsStyle = 2, YG_ENUM_DECL(YGPrintOptions, YGPrintOptionsLayout = 1, YGPrintOptionsStyle = 2,
YGPrintOptionsChildren = 4) YGPrintOptionsChildren = 4)

View File

@ -6,10 +6,12 @@
*/ */
#pragma once #pragma once
#include "Bitfield.h" #include "BitUtils.h"
#include "YGFloatOptional.h" #include "YGFloatOptional.h"
#include "Yoga-internal.h" #include "Yoga-internal.h"
using namespace facebook::yoga;
struct YGLayout { struct YGLayout {
std::array<float, 4> position = {}; std::array<float, 4> position = {};
std::array<float, 2> dimensions = {{YGUndefined, YGUndefined}}; std::array<float, 2> dimensions = {{YGUndefined, YGUndefined}};
@ -18,12 +20,14 @@ struct YGLayout {
std::array<float, 4> padding = {}; std::array<float, 4> padding = {};
private: private:
static constexpr size_t directionIdx = 0; static constexpr size_t directionOffset = 0;
static constexpr size_t didUseLegacyFlagIdx = 1; static constexpr size_t didUseLegacyFlagOffset =
static constexpr size_t doesLegacyStretchFlagAffectsLayoutIdx = 2; directionOffset + facebook::yoga::detail::bitWidthFn<YGDirection>();
static constexpr size_t hadOverflowIdx = 3; static constexpr size_t doesLegacyStretchFlagAffectsLayoutOffset =
facebook::yoga::Bitfield<uint8_t, YGDirection, bool, bool, bool> flags_ = { didUseLegacyFlagOffset + 1;
YGDirectionInherit, false, false, false}; static constexpr size_t hadOverflowOffset =
doesLegacyStretchFlagAffectsLayoutOffset + 1;
uint8_t flags = 0;
public: public:
uint32_t computedFlexBasisGeneration = 0; uint32_t computedFlexBasisGeneration = 0;
@ -32,7 +36,7 @@ struct YGLayout {
// Instead of recomputing the entire layout every single time, we cache some // Instead of recomputing the entire layout every single time, we cache some
// information to break early when nothing changed // information to break early when nothing changed
uint32_t generationCount = 0; uint32_t generationCount = 0;
YGDirection lastOwnerDirection = (YGDirection)-1; YGDirection lastOwnerDirection = YGDirectionInherit;
uint32_t nextCachedMeasurementsIndex = 0; uint32_t nextCachedMeasurementsIndex = 0;
std::array<YGCachedMeasurement, YG_MAX_CACHED_RESULT_COUNT> std::array<YGCachedMeasurement, YG_MAX_CACHED_RESULT_COUNT>
@ -41,27 +45,41 @@ struct YGLayout {
YGCachedMeasurement cachedLayout = YGCachedMeasurement(); YGCachedMeasurement cachedLayout = YGCachedMeasurement();
YGDirection direction() const { return flags_.at<directionIdx>(); } YGDirection direction() const {
decltype(flags_)::Ref<directionIdx> direction() { return facebook::yoga::detail::getEnumData<YGDirection>(flags,
return flags_.at<directionIdx>(); directionOffset);
} }
bool didUseLegacyFlag() const { return flags_.at<didUseLegacyFlagIdx>(); } void setDirection(YGDirection direction) {
decltype(flags_)::Ref<didUseLegacyFlagIdx> didUseLegacyFlag() { facebook::yoga::detail::setEnumData<YGDirection>(flags, directionOffset,
return flags_.at<didUseLegacyFlagIdx>(); direction);
}
bool didUseLegacyFlag() const {
return facebook::yoga::detail::getBooleanData(flags,
didUseLegacyFlagOffset);
}
void setDidUseLegacyFlag(bool val) {
facebook::yoga::detail::setBooleanData(flags, didUseLegacyFlagOffset, val);
} }
bool doesLegacyStretchFlagAffectsLayout() const { bool doesLegacyStretchFlagAffectsLayout() const {
return flags_.at<doesLegacyStretchFlagAffectsLayoutIdx>(); return facebook::yoga::detail::getBooleanData(
} flags, doesLegacyStretchFlagAffectsLayoutOffset);
decltype(flags_)::Ref<doesLegacyStretchFlagAffectsLayoutIdx>
doesLegacyStretchFlagAffectsLayout() {
return flags_.at<doesLegacyStretchFlagAffectsLayoutIdx>();
} }
bool hadOverflow() const { return flags_.at<hadOverflowIdx>(); } void setDoesLegacyStretchFlagAffectsLayout(bool val) {
decltype(flags_)::Ref<hadOverflowIdx> hadOverflow() { facebook::yoga::detail::setBooleanData(
return flags_.at<hadOverflowIdx>(); flags, doesLegacyStretchFlagAffectsLayoutOffset, val);
}
bool hadOverflow() const {
return facebook::yoga::detail::getBooleanData(flags, hadOverflowOffset);
}
void setHadOverflow(bool hadOverflow) {
facebook::yoga::detail::setBooleanData(flags, hadOverflowOffset,
hadOverflow);
} }
bool operator==(YGLayout layout) const; bool operator==(YGLayout layout) const;

View File

@ -18,7 +18,7 @@ using facebook::yoga::detail::CompactValue;
YGNode::YGNode(YGNode&& node) { YGNode::YGNode(YGNode&& node) {
context_ = node.context_; context_ = node.context_;
flags_ = node.flags_; flags = node.flags;
measure_ = node.measure_; measure_ = node.measure_;
baseline_ = node.baseline_; baseline_ = node.baseline_;
print_ = node.print_; print_ = node.print_;
@ -31,7 +31,7 @@ YGNode::YGNode(YGNode&& node) {
config_ = node.config_; config_ = node.config_;
resolvedDimensions_ = node.resolvedDimensions_; resolvedDimensions_ = node.resolvedDimensions_;
for (auto c : children_) { for (auto c : children_) {
c->setOwner(c); c->setOwner(this);
} }
} }
@ -44,7 +44,7 @@ YGNode::YGNode(const YGNode& node, YGConfigRef config) : YGNode{node} {
void YGNode::print(void* printContext) { void YGNode::print(void* printContext) {
if (print_.noContext != nullptr) { if (print_.noContext != nullptr) {
if (flags_.at<printUsesContext_>()) { if (facebook::yoga::detail::getBooleanData(flags, printUsesContext_)) {
print_.withContext(this, printContext); print_.withContext(this, printContext);
} else { } else {
print_.noContext(this); print_.noContext(this);
@ -140,14 +140,14 @@ YGFloatOptional YGNode::getMarginForAxis(const YGFlexDirection axis,
YGSize YGNode::measure(float width, YGMeasureMode widthMode, float height, YGSize YGNode::measure(float width, YGMeasureMode widthMode, float height,
YGMeasureMode heightMode, void* layoutContext) { YGMeasureMode heightMode, void* layoutContext) {
return flags_.at<measureUsesContext_>() return facebook::yoga::detail::getBooleanData(flags, measureUsesContext_)
? measure_.withContext(this, width, widthMode, height, heightMode, ? measure_.withContext(this, width, widthMode, height, heightMode,
layoutContext) layoutContext)
: measure_.noContext(this, width, widthMode, height, heightMode); : measure_.noContext(this, width, widthMode, height, heightMode);
} }
float YGNode::baseline(float width, float height, void* layoutContext) { float YGNode::baseline(float width, float height, void* layoutContext) {
return flags_.at<baselineUsesContext_>() return facebook::yoga::detail::getBooleanData(flags, baselineUsesContext_)
? baseline_.withContext(this, width, height, layoutContext) ? baseline_.withContext(this, width, height, layoutContext)
: baseline_.noContext(this, width, height); : baseline_.noContext(this, width, height);
} }
@ -158,7 +158,7 @@ void YGNode::setMeasureFunc(decltype(YGNode::measure_) measureFunc) {
if (measureFunc.noContext == nullptr) { if (measureFunc.noContext == nullptr) {
// TODO: t18095186 Move nodeType to opt-in function and mark appropriate // TODO: t18095186 Move nodeType to opt-in function and mark appropriate
// places in Litho // places in Litho
flags_.at<nodeType_>() = YGNodeTypeDefault; setNodeType(YGNodeTypeDefault);
} else { } else {
YGAssertWithNode( YGAssertWithNode(
this, children_.size() == 0, this, children_.size() == 0,
@ -173,14 +173,14 @@ void YGNode::setMeasureFunc(decltype(YGNode::measure_) measureFunc) {
} }
void YGNode::setMeasureFunc(YGMeasureFunc measureFunc) { void YGNode::setMeasureFunc(YGMeasureFunc measureFunc) {
flags_.at<measureUsesContext_>() = false; facebook::yoga::detail::setBooleanData(flags, measureUsesContext_, false);
decltype(YGNode::measure_) m; decltype(YGNode::measure_) m;
m.noContext = measureFunc; m.noContext = measureFunc;
setMeasureFunc(m); setMeasureFunc(m);
} }
YOGA_EXPORT void YGNode::setMeasureFunc(MeasureWithContextFn measureFunc) { YOGA_EXPORT void YGNode::setMeasureFunc(MeasureWithContextFn measureFunc) {
flags_.at<measureUsesContext_>() = true; facebook::yoga::detail::setBooleanData(flags, measureUsesContext_, true);
decltype(YGNode::measure_) m; decltype(YGNode::measure_) m;
m.withContext = measureFunc; m.withContext = measureFunc;
setMeasureFunc(m); setMeasureFunc(m);
@ -199,10 +199,10 @@ void YGNode::insertChild(YGNodeRef child, uint32_t index) {
} }
void YGNode::setDirty(bool isDirty) { void YGNode::setDirty(bool isDirty) {
if (isDirty == flags_.at<isDirty_>()) { if (isDirty == facebook::yoga::detail::getBooleanData(flags, isDirty_)) {
return; return;
} }
flags_.at<isDirty_>() = isDirty; facebook::yoga::detail::setBooleanData(flags, isDirty_, isDirty);
if (isDirty && dirtied_) { if (isDirty && dirtied_) {
dirtied_(this); dirtied_(this);
} }
@ -223,7 +223,7 @@ void YGNode::removeChild(uint32_t index) {
} }
void YGNode::setLayoutDirection(YGDirection direction) { void YGNode::setLayoutDirection(YGDirection direction) {
layout_.direction() = direction; layout_.setDirection(direction);
} }
void YGNode::setLayoutMargin(float margin, int index) { void YGNode::setLayoutMargin(float margin, int index) {
@ -261,7 +261,7 @@ void YGNode::setLayoutMeasuredDimension(float measuredDimension, int index) {
} }
void YGNode::setLayoutHadOverflow(bool hadOverflow) { void YGNode::setLayoutHadOverflow(bool hadOverflow) {
layout_.hadOverflow() = hadOverflow; layout_.setHadOverflow(hadOverflow);
} }
void YGNode::setLayoutDimension(float dimension, int index) { void YGNode::setLayoutDimension(float dimension, int index) {
@ -294,6 +294,9 @@ void YGNode::setPosition(const YGDirection direction, const float mainSize,
const YGFlexDirection crossAxis = const YGFlexDirection crossAxis =
YGFlexDirectionCross(mainAxis, directionRespectingRoot); YGFlexDirectionCross(mainAxis, directionRespectingRoot);
// Here we should check for `YGPositionTypeStatic` and in this case zero inset
// properties (left, right, top, bottom, begin, end).
// https://www.w3.org/TR/css-position-3/#valdef-position-static
const YGFloatOptional relativePositionMain = const YGFloatOptional relativePositionMain =
relativePosition(mainAxis, mainSize); relativePosition(mainAxis, mainSize);
const YGFloatOptional relativePositionCross = const YGFloatOptional relativePositionCross =
@ -338,7 +341,9 @@ YGValue YGNode::resolveFlexBasisPtr() const {
return flexBasis; return flexBasis;
} }
if (!style_.flex().isUndefined() && style_.flex().unwrap() > 0.0f) { if (!style_.flex().isUndefined() && style_.flex().unwrap() > 0.0f) {
return flags_.at<useWebDefaults_>() ? YGValueAuto : YGValueZero; return facebook::yoga::detail::getBooleanData(flags, useWebDefaults_)
? YGValueAuto
: YGValueZero;
} }
return YGValueAuto; return YGValueAuto;
} }
@ -377,7 +382,7 @@ void YGNode::cloneChildrenIfNeeded(void* cloneContext) {
} }
void YGNode::markDirtyAndPropogate() { void YGNode::markDirtyAndPropogate() {
if (!flags_.at<isDirty_>()) { if (!facebook::yoga::detail::getBooleanData(flags, isDirty_)) {
setDirty(true); setDirty(true);
setLayoutComputedFlexBasis(YGFloatOptional()); setLayoutComputedFlexBasis(YGFloatOptional());
if (owner_) { if (owner_) {
@ -387,7 +392,7 @@ void YGNode::markDirtyAndPropogate() {
} }
void YGNode::markDirtyAndPropogateDownwards() { void YGNode::markDirtyAndPropogateDownwards() {
flags_.at<isDirty_>() = true; facebook::yoga::detail::setBooleanData(flags, isDirty_, true);
for_each(children_.begin(), children_.end(), [](YGNodeRef childNode) { for_each(children_.begin(), children_.end(), [](YGNodeRef childNode) {
childNode->markDirtyAndPropogateDownwards(); childNode->markDirtyAndPropogateDownwards();
}); });
@ -414,16 +419,17 @@ float YGNode::resolveFlexShrink() const {
if (!style_.flexShrink().isUndefined()) { if (!style_.flexShrink().isUndefined()) {
return style_.flexShrink().unwrap(); return style_.flexShrink().unwrap();
} }
if (!flags_.at<useWebDefaults_>() && !style_.flex().isUndefined() && if (!facebook::yoga::detail::getBooleanData(flags, useWebDefaults_) &&
style_.flex().unwrap() < 0.0f) { !style_.flex().isUndefined() && style_.flex().unwrap() < 0.0f) {
return -style_.flex().unwrap(); return -style_.flex().unwrap();
} }
return flags_.at<useWebDefaults_>() ? kWebDefaultFlexShrink return facebook::yoga::detail::getBooleanData(flags, useWebDefaults_)
: kDefaultFlexShrink; ? kWebDefaultFlexShrink
: kDefaultFlexShrink;
} }
bool YGNode::isNodeFlexible() { bool YGNode::isNodeFlexible() {
return ((style_.positionType() == YGPositionTypeRelative) && return ((style_.positionType() != YGPositionTypeAbsolute) &&
(resolveFlexGrow() != 0 || resolveFlexShrink() != 0)); (resolveFlexGrow() != 0 || resolveFlexShrink() != 0));
} }
@ -518,11 +524,11 @@ bool YGNode::didUseLegacyFlag() {
void YGNode::setLayoutDoesLegacyFlagAffectsLayout( void YGNode::setLayoutDoesLegacyFlagAffectsLayout(
bool doesLegacyFlagAffectsLayout) { bool doesLegacyFlagAffectsLayout) {
layout_.doesLegacyStretchFlagAffectsLayout() = doesLegacyFlagAffectsLayout; layout_.setDoesLegacyStretchFlagAffectsLayout(doesLegacyFlagAffectsLayout);
} }
void YGNode::setLayoutDidUseLegacyFlag(bool didUseLegacyFlag) { void YGNode::setLayoutDidUseLegacyFlag(bool didUseLegacyFlag) {
layout_.didUseLegacyFlag() = didUseLegacyFlag; layout_.setDidUseLegacyFlag(didUseLegacyFlag);
} }
bool YGNode::isLayoutTreeEqualToNode(const YGNode& node) const { bool YGNode::isLayoutTreeEqualToNode(const YGNode& node) const {
@ -557,7 +563,8 @@ void YGNode::reset() {
clearChildren(); clearChildren();
auto webDefaults = flags_.at<useWebDefaults_>(); auto webDefaults =
facebook::yoga::detail::getBooleanData(flags, useWebDefaults_);
*this = YGNode{getConfig()}; *this = YGNode{getConfig()};
if (webDefaults) { if (webDefaults) {
useWebDefaults(); useWebDefaults();

View File

@ -6,11 +6,14 @@
*/ */
#pragma once #pragma once
#ifdef __cplusplus
#include <stdio.h> #include <stdio.h>
#include <cstdint> #include <cstdint>
#include "Bitfield.h" #include "BitUtils.h"
#include "CompactValue.h" #include "CompactValue.h"
#include "YGConfig.h" #include "YGConfig.h"
#include "YGLayout.h" #include "YGLayout.h"
@ -37,10 +40,7 @@ struct YOGA_EXPORT YGNode {
static constexpr size_t useWebDefaults_ = 7; static constexpr size_t useWebDefaults_ = 7;
void* context_ = nullptr; void* context_ = nullptr;
using Flags = facebook::yoga::Bitfield<uint8_t, bool, bool, bool, YGNodeType, uint8_t flags = 1;
bool, bool, bool, bool>;
Flags flags_ = {true, false, false, YGNodeTypeDefault,
false, false, false, false};
uint8_t reserved_ = 0; uint8_t reserved_ = 0;
union { union {
YGMeasureFunc noContext; YGMeasureFunc noContext;
@ -71,13 +71,13 @@ struct YOGA_EXPORT YGNode {
void setBaselineFunc(decltype(baseline_)); void setBaselineFunc(decltype(baseline_));
void useWebDefaults() { void useWebDefaults() {
flags_.at<useWebDefaults_>() = true; facebook::yoga::detail::setBooleanData(flags, useWebDefaults_, true);
style_.flexDirection() = YGFlexDirectionRow; style_.flexDirection() = YGFlexDirectionRow;
style_.alignContent() = YGAlignStretch; style_.alignContent() = YGAlignStretch;
} }
// DANGER DANGER DANGER! // DANGER DANGER DANGER!
// If the the node assigned to has children, we'd either have to deallocate // If the node assigned to has children, we'd either have to deallocate
// them (potentially incorrect) or ignore them (danger of leaks). Only ever // them (potentially incorrect) or ignore them (danger of leaks). Only ever
// use this after checking that there are no children. // use this after checking that there are no children.
// DO NOT CHANGE THE VISIBILITY OF THIS METHOD! // DO NOT CHANGE THE VISIBILITY OF THIS METHOD!
@ -115,9 +115,13 @@ struct YOGA_EXPORT YGNode {
void print(void*); void print(void*);
bool getHasNewLayout() const { return flags_.at<hasNewLayout_>(); } bool getHasNewLayout() const {
return facebook::yoga::detail::getBooleanData(flags, hasNewLayout_);
}
YGNodeType getNodeType() const { return flags_.at<nodeType_>(); } YGNodeType getNodeType() const {
return facebook::yoga::detail::getEnumData<YGNodeType>(flags, nodeType_);
}
bool hasMeasureFunc() const noexcept { return measure_.noContext != nullptr; } bool hasMeasureFunc() const noexcept { return measure_.noContext != nullptr; }
@ -143,7 +147,9 @@ struct YOGA_EXPORT YGNode {
uint32_t getLineIndex() const { return lineIndex_; } uint32_t getLineIndex() const { return lineIndex_; }
bool isReferenceBaseline() { return flags_.at<isReferenceBaseline_>(); } bool isReferenceBaseline() {
return facebook::yoga::detail::getBooleanData(flags, isReferenceBaseline_);
}
// returns the YGNodeRef that owns this YGNode. An owner is used to identify // returns the YGNodeRef that owns this YGNode. An owner is used to identify
// the YogaTree that a YGNode belongs to. This method will return the parent // the YogaTree that a YGNode belongs to. This method will return the parent
@ -176,7 +182,9 @@ struct YOGA_EXPORT YGNode {
YGConfigRef getConfig() const { return config_; } YGConfigRef getConfig() const { return config_; }
bool isDirty() const { return flags_.at<isDirty_>(); } bool isDirty() const {
return facebook::yoga::detail::getBooleanData(flags, isDirty_);
}
std::array<YGValue, 2> getResolvedDimensions() const { std::array<YGValue, 2> getResolvedDimensions() const {
return resolvedDimensions_; return resolvedDimensions_;
@ -215,19 +223,22 @@ struct YOGA_EXPORT YGNode {
void setPrintFunc(YGPrintFunc printFunc) { void setPrintFunc(YGPrintFunc printFunc) {
print_.noContext = printFunc; print_.noContext = printFunc;
flags_.at<printUsesContext_>() = false; facebook::yoga::detail::setBooleanData(flags, printUsesContext_, false);
} }
void setPrintFunc(PrintWithContextFn printFunc) { void setPrintFunc(PrintWithContextFn printFunc) {
print_.withContext = printFunc; print_.withContext = printFunc;
flags_.at<printUsesContext_>() = true; facebook::yoga::detail::setBooleanData(flags, printUsesContext_, true);
} }
void setPrintFunc(std::nullptr_t) { setPrintFunc(YGPrintFunc{nullptr}); } void setPrintFunc(std::nullptr_t) { setPrintFunc(YGPrintFunc{nullptr}); }
void setHasNewLayout(bool hasNewLayout) { void setHasNewLayout(bool hasNewLayout) {
flags_.at<hasNewLayout_>() = hasNewLayout; facebook::yoga::detail::setBooleanData(flags, hasNewLayout_, hasNewLayout);
} }
void setNodeType(YGNodeType nodeType) { flags_.at<nodeType_>() = nodeType; } void setNodeType(YGNodeType nodeType) {
return facebook::yoga::detail::setEnumData<YGNodeType>(flags, nodeType_,
nodeType);
}
void setMeasureFunc(YGMeasureFunc measureFunc); void setMeasureFunc(YGMeasureFunc measureFunc);
void setMeasureFunc(MeasureWithContextFn); void setMeasureFunc(MeasureWithContextFn);
@ -236,11 +247,11 @@ struct YOGA_EXPORT YGNode {
} }
void setBaselineFunc(YGBaselineFunc baseLineFunc) { void setBaselineFunc(YGBaselineFunc baseLineFunc) {
flags_.at<baselineUsesContext_>() = false; facebook::yoga::detail::setBooleanData(flags, baselineUsesContext_, false);
baseline_.noContext = baseLineFunc; baseline_.noContext = baseLineFunc;
} }
void setBaselineFunc(BaselineWithContextFn baseLineFunc) { void setBaselineFunc(BaselineWithContextFn baseLineFunc) {
flags_.at<baselineUsesContext_>() = true; facebook::yoga::detail::setBooleanData(flags, baselineUsesContext_, true);
baseline_.withContext = baseLineFunc; baseline_.withContext = baseLineFunc;
} }
void setBaselineFunc(std::nullptr_t) { void setBaselineFunc(std::nullptr_t) {
@ -256,7 +267,8 @@ struct YOGA_EXPORT YGNode {
void setLineIndex(uint32_t lineIndex) { lineIndex_ = lineIndex; } void setLineIndex(uint32_t lineIndex) { lineIndex_ = lineIndex; }
void setIsReferenceBaseline(bool isReferenceBaseline) { void setIsReferenceBaseline(bool isReferenceBaseline) {
flags_.at<isReferenceBaseline_>() = isReferenceBaseline; facebook::yoga::detail::setBooleanData(flags, isReferenceBaseline_,
isReferenceBaseline);
} }
void setOwner(YGNodeRef owner) { owner_ = owner; } void setOwner(YGNodeRef owner) { owner_ = owner; }
@ -310,3 +322,5 @@ struct YOGA_EXPORT YGNode {
bool isLayoutTreeEqualToNode(const YGNode& node) const; bool isLayoutTreeEqualToNode(const YGNode& node) const;
void reset(); void reset();
}; };
#endif

View File

@ -6,12 +6,15 @@
*/ */
#pragma once #pragma once
#ifdef __cplusplus
#include <algorithm> #include <algorithm>
#include <array> #include <array>
#include <cstdint> #include <cstdint>
#include <type_traits> #include <type_traits>
#include "Bitfield.h" #include "BitUtils.h"
#include "CompactValue.h" #include "CompactValue.h"
#include "YGEnums.h" #include "YGEnums.h"
#include "YGFloatOptional.h" #include "YGFloatOptional.h"
@ -28,6 +31,19 @@ class YOGA_EXPORT YGStyle {
using Dimensions = Values<YGDimension>; using Dimensions = Values<YGDimension>;
using Edges = Values<YGEdge>; using Edges = Values<YGEdge>;
template <typename T>
struct BitfieldRef {
YGStyle& style;
size_t offset;
operator T() const {
return facebook::yoga::detail::getEnumData<T>(style.flags, offset);
}
BitfieldRef<T>& operator=(T x) {
facebook::yoga::detail::setEnumData<T>(style.flags, offset, x);
return *this;
}
};
template <typename T, T YGStyle::*Prop> template <typename T, T YGStyle::*Prop>
struct Ref { struct Ref {
YGStyle& style; YGStyle& style;
@ -56,35 +72,41 @@ class YOGA_EXPORT YGStyle {
style.*Prop = values; style.*Prop = values;
return *this; return *this;
} }
operator const Values<Idx>&() const { return style.*Prop; } operator const Values<Idx> &() const { return style.*Prop; }
Ref operator[](Idx idx) { return {style, idx}; } Ref operator[](Idx idx) { return {style, idx}; }
CompactValue operator[](Idx idx) const { return (style.*Prop)[idx]; } CompactValue operator[](Idx idx) const { return (style.*Prop)[idx]; }
}; };
YGStyle() = default; YGStyle() {
alignContent() = YGAlignFlexStart;
alignItems() = YGAlignStretch;
}
~YGStyle() = default; ~YGStyle() = default;
private: private:
static constexpr size_t directionIdx = 0; static constexpr size_t directionOffset = 0;
static constexpr size_t flexDirectionIdx = 1; static constexpr size_t flexdirectionOffset =
static constexpr size_t justifyContentIdx = 2; directionOffset + facebook::yoga::detail::bitWidthFn<YGDirection>();
static constexpr size_t alignContentIdx = 3; static constexpr size_t justifyContentOffset =
static constexpr size_t alignItemsIdx = 4; flexdirectionOffset +
static constexpr size_t alignSelfIdx = 5; facebook::yoga::detail::bitWidthFn<YGFlexDirection>();
static constexpr size_t positionTypeIdx = 6; static constexpr size_t alignContentOffset =
static constexpr size_t flexWrapIdx = 7; justifyContentOffset + facebook::yoga::detail::bitWidthFn<YGJustify>();
static constexpr size_t overflowIdx = 8; static constexpr size_t alignItemsOffset =
static constexpr size_t displayIdx = 9; alignContentOffset + facebook::yoga::detail::bitWidthFn<YGAlign>();
using Flags = static constexpr size_t alignSelfOffset =
facebook::yoga::Bitfield<uint32_t, YGDirection, YGFlexDirection, alignItemsOffset + facebook::yoga::detail::bitWidthFn<YGAlign>();
YGJustify, YGAlign, YGAlign, YGAlign, static constexpr size_t positionTypeOffset =
YGPositionType, YGWrap, YGOverflow, YGDisplay>; alignSelfOffset + facebook::yoga::detail::bitWidthFn<YGAlign>();
static constexpr size_t flexWrapOffset =
positionTypeOffset + facebook::yoga::detail::bitWidthFn<YGPositionType>();
static constexpr size_t overflowOffset =
flexWrapOffset + facebook::yoga::detail::bitWidthFn<YGWrap>();
static constexpr size_t displayOffset =
overflowOffset + facebook::yoga::detail::bitWidthFn<YGOverflow>();
uint32_t flags = 0;
Flags flags_ = {YGDirectionInherit, YGFlexDirectionColumn,
YGJustifyFlexStart, YGAlignFlexStart,
YGAlignStretch, YGAlignAuto,
YGPositionTypeRelative, YGWrapNoWrap,
YGOverflowVisible, YGDisplayFlex};
YGFloatOptional flex_ = {}; YGFloatOptional flex_ = {};
YGFloatOptional flexGrow_ = {}; YGFloatOptional flexGrow_ = {};
YGFloatOptional flexShrink_ = {}; YGFloatOptional flexShrink_ = {};
@ -103,45 +125,68 @@ class YOGA_EXPORT YGStyle {
// for library users needing a type // for library users needing a type
using ValueRepr = std::remove_reference<decltype(margin_[0])>::type; using ValueRepr = std::remove_reference<decltype(margin_[0])>::type;
YGDirection direction() const { return flags_.at<directionIdx>(); } YGDirection direction() const {
Flags::Ref<directionIdx> direction() { return flags_.at<directionIdx>(); } return facebook::yoga::detail::getEnumData<YGDirection>(flags,
directionOffset);
}
BitfieldRef<YGDirection> direction() { return {*this, directionOffset}; }
YGFlexDirection flexDirection() const { YGFlexDirection flexDirection() const {
return flags_.at<flexDirectionIdx>(); return facebook::yoga::detail::getEnumData<YGFlexDirection>(
flags, flexdirectionOffset);
} }
Flags::Ref<flexDirectionIdx> flexDirection() { BitfieldRef<YGFlexDirection> flexDirection() {
return flags_.at<flexDirectionIdx>(); return {*this, flexdirectionOffset};
} }
YGJustify justifyContent() const { return flags_.at<justifyContentIdx>(); } YGJustify justifyContent() const {
Flags::Ref<justifyContentIdx> justifyContent() { return facebook::yoga::detail::getEnumData<YGJustify>(flags,
return flags_.at<justifyContentIdx>(); justifyContentOffset);
}
BitfieldRef<YGJustify> justifyContent() {
return {*this, justifyContentOffset};
} }
YGAlign alignContent() const { return flags_.at<alignContentIdx>(); } YGAlign alignContent() const {
Flags::Ref<alignContentIdx> alignContent() { return facebook::yoga::detail::getEnumData<YGAlign>(flags,
return flags_.at<alignContentIdx>(); alignContentOffset);
}
BitfieldRef<YGAlign> alignContent() { return {*this, alignContentOffset}; }
YGAlign alignItems() const {
return facebook::yoga::detail::getEnumData<YGAlign>(flags,
alignItemsOffset);
}
BitfieldRef<YGAlign> alignItems() { return {*this, alignItemsOffset}; }
YGAlign alignSelf() const {
return facebook::yoga::detail::getEnumData<YGAlign>(flags, alignSelfOffset);
}
BitfieldRef<YGAlign> alignSelf() { return {*this, alignSelfOffset}; }
YGPositionType positionType() const {
return facebook::yoga::detail::getEnumData<YGPositionType>(
flags, positionTypeOffset);
}
BitfieldRef<YGPositionType> positionType() {
return {*this, positionTypeOffset};
} }
YGAlign alignItems() const { return flags_.at<alignItemsIdx>(); } YGWrap flexWrap() const {
Flags::Ref<alignItemsIdx> alignItems() { return flags_.at<alignItemsIdx>(); } return facebook::yoga::detail::getEnumData<YGWrap>(flags, flexWrapOffset);
YGAlign alignSelf() const { return flags_.at<alignSelfIdx>(); }
Flags::Ref<alignSelfIdx> alignSelf() { return flags_.at<alignSelfIdx>(); }
YGPositionType positionType() const { return flags_.at<positionTypeIdx>(); }
Flags::Ref<positionTypeIdx> positionType() {
return flags_.at<positionTypeIdx>();
} }
BitfieldRef<YGWrap> flexWrap() { return {*this, flexWrapOffset}; }
YGWrap flexWrap() const { return flags_.at<flexWrapIdx>(); } YGOverflow overflow() const {
Flags::Ref<flexWrapIdx> flexWrap() { return flags_.at<flexWrapIdx>(); } return facebook::yoga::detail::getEnumData<YGOverflow>(flags,
overflowOffset);
}
BitfieldRef<YGOverflow> overflow() { return {*this, overflowOffset}; }
YGOverflow overflow() const { return flags_.at<overflowIdx>(); } YGDisplay display() const {
Flags::Ref<overflowIdx> overflow() { return flags_.at<overflowIdx>(); } return facebook::yoga::detail::getEnumData<YGDisplay>(flags, displayOffset);
}
YGDisplay display() const { return flags_.at<displayIdx>(); } BitfieldRef<YGDisplay> display() { return {*this, displayOffset}; }
Flags::Ref<displayIdx> display() { return flags_.at<displayIdx>(); }
YGFloatOptional flex() const { return flex_; } YGFloatOptional flex() const { return flex_; }
Ref<YGFloatOptional, &YGStyle::flex_> flex() { return {*this}; } Ref<YGFloatOptional, &YGStyle::flex_> flex() { return {*this}; }
@ -189,3 +234,5 @@ YOGA_EXPORT bool operator==(const YGStyle& lhs, const YGStyle& rhs);
YOGA_EXPORT inline bool operator!=(const YGStyle& lhs, const YGStyle& rhs) { YOGA_EXPORT inline bool operator!=(const YGStyle& lhs, const YGStyle& rhs) {
return !(lhs == rhs); return !(lhs == rhs);
} }
#endif

View File

@ -12,6 +12,13 @@
#include "YGEnums.h" #include "YGEnums.h"
#include "YGMacros.h" #include "YGMacros.h"
#if defined(_MSC_VER) && defined(__clang__)
#define COMPILING_WITH_CLANG_ON_WINDOWS
#endif
#if defined(COMPILING_WITH_CLANG_ON_WINDOWS)
#include <limits>
constexpr float YGUndefined = std::numeric_limits<float>::quiet_NaN();
#else
YG_EXTERN_C_BEGIN YG_EXTERN_C_BEGIN
// Not defined in MSVC++ // Not defined in MSVC++
@ -21,6 +28,7 @@ static const uint32_t __nan = 0x7fc00000;
#endif #endif
#define YGUndefined NAN #define YGUndefined NAN
#endif
typedef struct YGValue { typedef struct YGValue {
float value; float value;
@ -31,7 +39,10 @@ YOGA_EXPORT extern const YGValue YGValueAuto;
YOGA_EXPORT extern const YGValue YGValueUndefined; YOGA_EXPORT extern const YGValue YGValueUndefined;
YOGA_EXPORT extern const YGValue YGValueZero; YOGA_EXPORT extern const YGValue YGValueZero;
#if !defined(COMPILING_WITH_CLANG_ON_WINDOWS)
YG_EXTERN_C_END YG_EXTERN_C_END
#endif
#undef COMPILING_WITH_CLANG_ON_WINDOWS
#ifdef __cplusplus #ifdef __cplusplus

View File

@ -51,10 +51,10 @@ struct YGCachedMeasurement {
float computedHeight; float computedHeight;
YGCachedMeasurement() YGCachedMeasurement()
: availableWidth(0), : availableWidth(-1),
availableHeight(0), availableHeight(-1),
widthMeasureMode((YGMeasureMode)-1), widthMeasureMode(YGMeasureModeUndefined),
heightMeasureMode((YGMeasureMode)-1), heightMeasureMode(YGMeasureModeUndefined),
computedWidth(-1), computedWidth(-1),
computedHeight(-1) {} computedHeight(-1) {}

View File

@ -228,9 +228,6 @@ YOGA_EXPORT YGNodeRef YGNodeClone(YGNodeRef oldNode) {
static YGConfigRef YGConfigClone(const YGConfig& oldConfig) { static YGConfigRef YGConfigClone(const YGConfig& oldConfig) {
const YGConfigRef config = new YGConfig(oldConfig); const YGConfigRef config = new YGConfig(oldConfig);
YGAssert(config != nullptr, "Could not allocate memory for config"); YGAssert(config != nullptr, "Could not allocate memory for config");
if (config == nullptr) {
abort();
}
gConfigInstanceCount++; gConfigInstanceCount++;
return config; return config;
} }
@ -354,6 +351,12 @@ YOGA_EXPORT void YGNodeInsertChild(const YGNodeRef owner, const YGNodeRef child,
owner->markDirtyAndPropogate(); owner->markDirtyAndPropogate();
} }
YOGA_EXPORT void YGNodeSwapChild(const YGNodeRef owner, const YGNodeRef child,
const uint32_t index) {
owner->replaceChild(child, index);
child->setOwner(owner);
}
YOGA_EXPORT void YGNodeRemoveChild(const YGNodeRef owner, YOGA_EXPORT void YGNodeRemoveChild(const YGNodeRef owner,
const YGNodeRef excludedChild) { const YGNodeRef excludedChild) {
if (YGNodeGetChildCount(owner) == 0) { if (YGNodeGetChildCount(owner) == 0) {
@ -1018,7 +1021,7 @@ static bool YGIsBaselineLayout(const YGNodeRef node) {
const uint32_t childCount = YGNodeGetChildCount(node); const uint32_t childCount = YGNodeGetChildCount(node);
for (uint32_t i = 0; i < childCount; i++) { for (uint32_t i = 0; i < childCount; i++) {
const YGNodeRef child = YGNodeGetChild(node, i); const YGNodeRef child = YGNodeGetChild(node, i);
if (child->getStyle().positionType() == YGPositionTypeRelative && if (child->getStyle().positionType() != YGPositionTypeAbsolute &&
child->getStyle().alignSelf() == YGAlignBaseline) { child->getStyle().alignSelf() == YGAlignBaseline) {
return true; return true;
} }
@ -1474,22 +1477,29 @@ static void YGNodeAbsoluteLayoutChild(
} }
static void YGNodeWithMeasureFuncSetMeasuredDimensions( static void YGNodeWithMeasureFuncSetMeasuredDimensions(
const YGNodeRef node, const float availableWidth, const YGNodeRef node, float availableWidth, float availableHeight,
const float availableHeight, const YGMeasureMode widthMeasureMode, const YGMeasureMode widthMeasureMode, const YGMeasureMode heightMeasureMode,
const YGMeasureMode heightMeasureMode, const float ownerWidth, const float ownerWidth, const float ownerHeight,
const float ownerHeight, LayoutData& layoutMarkerData, LayoutData& layoutMarkerData, void* const layoutContext,
void* const layoutContext, const LayoutPassReason reason) { const LayoutPassReason reason) {
YGAssertWithNode(node, node->hasMeasureFunc(), YGAssertWithNode(node, node->hasMeasureFunc(),
"Expected node to have custom measure function"); "Expected node to have custom measure function");
if (widthMeasureMode == YGMeasureModeUndefined) {
availableWidth = YGUndefined;
}
if (heightMeasureMode == YGMeasureModeUndefined) {
availableHeight = YGUndefined;
}
const float paddingAndBorderAxisRow = const float paddingAndBorderAxisRow =
YGNodePaddingAndBorderForAxis(node, YGFlexDirectionRow, availableWidth); YGNodePaddingAndBorderForAxis(node, YGFlexDirectionRow, ownerWidth);
const float paddingAndBorderAxisColumn = YGNodePaddingAndBorderForAxis( const float paddingAndBorderAxisColumn =
node, YGFlexDirectionColumn, availableWidth); YGNodePaddingAndBorderForAxis(node, YGFlexDirectionColumn, ownerWidth);
const float marginAxisRow = const float marginAxisRow =
node->getMarginForAxis(YGFlexDirectionRow, availableWidth).unwrap(); node->getMarginForAxis(YGFlexDirectionRow, ownerWidth).unwrap();
const float marginAxisColumn = const float marginAxisColumn =
node->getMarginForAxis(YGFlexDirectionColumn, availableWidth).unwrap(); node->getMarginForAxis(YGFlexDirectionColumn, ownerWidth).unwrap();
// We want to make sure we don't call measure with negative size // We want to make sure we don't call measure with negative size
const float innerWidth = YGFloatIsUndefined(availableWidth) const float innerWidth = YGFloatIsUndefined(availableWidth)
@ -1641,15 +1651,17 @@ static void YGZeroOutLayoutRecursivly(const YGNodeRef node,
static float YGNodeCalculateAvailableInnerDim(const YGNodeConstRef node, static float YGNodeCalculateAvailableInnerDim(const YGNodeConstRef node,
YGFlexDirection axis, YGFlexDirection axis,
float availableDim, float availableDim,
float ownerDim) { float ownerDim,
float ownerDimForMarginPadding) {
YGFlexDirection direction = YGFlexDirection direction =
YGFlexDirectionIsRow(axis) ? YGFlexDirectionRow : YGFlexDirectionColumn; YGFlexDirectionIsRow(axis) ? YGFlexDirectionRow : YGFlexDirectionColumn;
YGDimension dimension = YGDimension dimension =
YGFlexDirectionIsRow(axis) ? YGDimensionWidth : YGDimensionHeight; YGFlexDirectionIsRow(axis) ? YGDimensionWidth : YGDimensionHeight;
const float margin = node->getMarginForAxis(direction, ownerDim).unwrap(); const float margin =
node->getMarginForAxis(direction, ownerDimForMarginPadding).unwrap();
const float paddingAndBorder = const float paddingAndBorder =
YGNodePaddingAndBorderForAxis(node, direction, ownerDim); YGNodePaddingAndBorderForAxis(node, direction, ownerDimForMarginPadding);
float availableInnerDim = availableDim - margin - paddingAndBorder; float availableInnerDim = availableDim - margin - paddingAndBorder;
// Max dimension overrides predefined dimension value; Min dimension in turn // Max dimension overrides predefined dimension value; Min dimension in turn
@ -2043,7 +2055,8 @@ static void YGDistributeFreeSpaceFirstPass(
// first and second passes. // first and second passes.
deltaFreeSpace += boundMainSize - childFlexBasis; deltaFreeSpace += boundMainSize - childFlexBasis;
collectedFlexItemsValues.totalFlexShrinkScaledFactors -= collectedFlexItemsValues.totalFlexShrinkScaledFactors -=
flexShrinkScaledFactor; (-currentRelativeChild->resolveFlexShrink() *
currentRelativeChild->getLayout().computedFlexBasis.unwrap());
} }
} }
} else if (!YGFloatIsUndefined( } else if (!YGFloatIsUndefined(
@ -2172,7 +2185,7 @@ static void YGJustifyMainAxis(
for (uint32_t i = startOfLineIndex; for (uint32_t i = startOfLineIndex;
i < collectedFlexItemsValues.endOfLineIndex; i++) { i < collectedFlexItemsValues.endOfLineIndex; i++) {
const YGNodeRef child = node->getChild(i); const YGNodeRef child = node->getChild(i);
if (child->getStyle().positionType() == YGPositionTypeRelative) { if (child->getStyle().positionType() != YGPositionTypeAbsolute) {
if (child->marginLeadingValue(mainAxis).unit == YGUnitAuto) { if (child->marginLeadingValue(mainAxis).unit == YGUnitAuto) {
numberOfAutoMarginsOnCurrentLine++; numberOfAutoMarginsOnCurrentLine++;
} }
@ -2255,7 +2268,7 @@ static void YGJustifyMainAxis(
// Now that we placed the element, we need to update the variables. // Now that we placed the element, we need to update the variables.
// We need to do that only for relative elements. Absolute elements do not // We need to do that only for relative elements. Absolute elements do not
// take part in that phase. // take part in that phase.
if (childStyle.positionType() == YGPositionTypeRelative) { if (childStyle.positionType() != YGPositionTypeAbsolute) {
if (child->marginLeadingValue(mainAxis).unit == YGUnitAuto) { if (child->marginLeadingValue(mainAxis).unit == YGUnitAuto) {
collectedFlexItemsValues.mainDim += collectedFlexItemsValues.mainDim +=
collectedFlexItemsValues.remainingFreeSpace / collectedFlexItemsValues.remainingFreeSpace /
@ -2549,9 +2562,9 @@ static void YGNodelayoutImpl(
// STEP 2: DETERMINE AVAILABLE SIZE IN MAIN AND CROSS DIRECTIONS // STEP 2: DETERMINE AVAILABLE SIZE IN MAIN AND CROSS DIRECTIONS
float availableInnerWidth = YGNodeCalculateAvailableInnerDim( float availableInnerWidth = YGNodeCalculateAvailableInnerDim(
node, YGFlexDirectionRow, availableWidth, ownerWidth); node, YGFlexDirectionRow, availableWidth, ownerWidth, ownerWidth);
float availableInnerHeight = YGNodeCalculateAvailableInnerDim( float availableInnerHeight = YGNodeCalculateAvailableInnerDim(
node, YGFlexDirectionColumn, availableHeight, ownerHeight); node, YGFlexDirectionColumn, availableHeight, ownerHeight, ownerWidth);
float availableInnerMainDim = float availableInnerMainDim =
isMainAxisRow ? availableInnerWidth : availableInnerHeight; isMainAxisRow ? availableInnerWidth : availableInnerHeight;
@ -2895,7 +2908,7 @@ static void YGNodelayoutImpl(
if (child->getStyle().display() == YGDisplayNone) { if (child->getStyle().display() == YGDisplayNone) {
continue; continue;
} }
if (child->getStyle().positionType() == YGPositionTypeRelative) { if (child->getStyle().positionType() != YGPositionTypeAbsolute) {
if (child->getLineIndex() != i) { if (child->getLineIndex() != i) {
break; break;
} }
@ -2937,7 +2950,7 @@ static void YGNodelayoutImpl(
if (child->getStyle().display() == YGDisplayNone) { if (child->getStyle().display() == YGDisplayNone) {
continue; continue;
} }
if (child->getStyle().positionType() == YGPositionTypeRelative) { if (child->getStyle().positionType() != YGPositionTypeAbsolute) {
switch (YGNodeAlignItem(node, child)) { switch (YGNodeAlignItem(node, child)) {
case YGAlignFlexStart: { case YGAlignFlexStart: {
child->setLayoutPosition( child->setLayoutPosition(
@ -3108,7 +3121,7 @@ static void YGNodelayoutImpl(
if (performLayout && node->getStyle().flexWrap() == YGWrapWrapReverse) { if (performLayout && node->getStyle().flexWrap() == YGWrapWrapReverse) {
for (uint32_t i = 0; i < childCount; i++) { for (uint32_t i = 0; i < childCount; i++) {
const YGNodeRef child = YGNodeGetChild(node, i); const YGNodeRef child = YGNodeGetChild(node, i);
if (child->getStyle().positionType() == YGPositionTypeRelative) { if (child->getStyle().positionType() != YGPositionTypeAbsolute) {
child->setLayoutPosition( child->setLayoutPosition(
node->getLayout().measuredDimensions[dim[crossAxis]] - node->getLayout().measuredDimensions[dim[crossAxis]] -
child->getLayout().position[pos[crossAxis]] - child->getLayout().position[pos[crossAxis]] -
@ -3210,14 +3223,14 @@ static inline bool YGMeasureModeNewMeasureSizeIsStricterAndStillValid(
(lastComputedSize <= size || YGFloatsEqual(size, lastComputedSize)); (lastComputedSize <= size || YGFloatsEqual(size, lastComputedSize));
} }
YOGA_EXPORT float YGRoundValueToPixelGrid(const float value, YOGA_EXPORT float YGRoundValueToPixelGrid(const double value,
const float pointScaleFactor, const double pointScaleFactor,
const bool forceCeil, const bool forceCeil,
const bool forceFloor) { const bool forceFloor) {
double scaledValue = ((double)value) * pointScaleFactor; double scaledValue = ((double)value) * pointScaleFactor;
// We want to calculate `fractial` such that `floor(scaledValue) = scaledValue // We want to calculate `fractial` such that `floor(scaledValue) = scaledValue
// - fractial`. // - fractial`.
float fractial = fmodf(scaledValue, 1.0f); double fractial = fmod(scaledValue, 1.0f);
if (fractial < 0) { if (fractial < 0) {
// This branch is for handling negative numbers for `value`. // This branch is for handling negative numbers for `value`.
// //
@ -3236,10 +3249,10 @@ YOGA_EXPORT float YGRoundValueToPixelGrid(const float value,
// - Finding the `floor`: -2.2 - fractial2 = -2.2 - 0.8 = -3 // - Finding the `floor`: -2.2 - fractial2 = -2.2 - 0.8 = -3
++fractial; ++fractial;
} }
if (YGFloatsEqual(fractial, 0)) { if (YGDoubleEqual(fractial, 0)) {
// First we check if the value is already rounded // First we check if the value is already rounded
scaledValue = scaledValue - fractial; scaledValue = scaledValue - fractial;
} else if (YGFloatsEqual(fractial, 1.0f)) { } else if (YGDoubleEqual(fractial, 1.0f)) {
scaledValue = scaledValue - fractial + 1.0f; scaledValue = scaledValue - fractial + 1.0f;
} else if (forceCeil) { } else if (forceCeil) {
// Next we check if we need to use forced rounding // Next we check if we need to use forced rounding
@ -3250,7 +3263,7 @@ YOGA_EXPORT float YGRoundValueToPixelGrid(const float value,
// Finally we just round the value // Finally we just round the value
scaledValue = scaledValue - fractial + scaledValue = scaledValue - fractial +
(!YGFloatIsUndefined(fractial) && (!YGFloatIsUndefined(fractial) &&
(fractial > 0.5f || YGFloatsEqual(fractial, 0.5f)) (fractial > 0.5f || YGDoubleEqual(fractial, 0.5f))
? 1.0f ? 1.0f
: 0.0f); : 0.0f);
} }
@ -3350,8 +3363,10 @@ bool YGLayoutNodeInternal(
if (needToVisitNode) { if (needToVisitNode) {
// Invalidate the cached results. // Invalidate the cached results.
layout->nextCachedMeasurementsIndex = 0; layout->nextCachedMeasurementsIndex = 0;
layout->cachedLayout.widthMeasureMode = (YGMeasureMode)-1; layout->cachedLayout.availableWidth = -1;
layout->cachedLayout.heightMeasureMode = (YGMeasureMode)-1; layout->cachedLayout.availableHeight = -1;
layout->cachedLayout.widthMeasureMode = YGMeasureModeUndefined;
layout->cachedLayout.heightMeasureMode = YGMeasureModeUndefined;
layout->cachedLayout.computedWidth = -1; layout->cachedLayout.computedWidth = -1;
layout->cachedLayout.computedHeight = -1; layout->cachedLayout.computedHeight = -1;
} }
@ -3552,24 +3567,24 @@ YOGA_EXPORT void YGConfigSetPointScaleFactor(const YGConfigRef config,
} }
static void YGRoundToPixelGrid(const YGNodeRef node, static void YGRoundToPixelGrid(const YGNodeRef node,
const float pointScaleFactor, const double pointScaleFactor,
const float absoluteLeft, const double absoluteLeft,
const float absoluteTop) { const double absoluteTop) {
if (pointScaleFactor == 0.0f) { if (pointScaleFactor == 0.0f) {
return; return;
} }
const float nodeLeft = node->getLayout().position[YGEdgeLeft]; const double nodeLeft = node->getLayout().position[YGEdgeLeft];
const float nodeTop = node->getLayout().position[YGEdgeTop]; const double nodeTop = node->getLayout().position[YGEdgeTop];
const float nodeWidth = node->getLayout().dimensions[YGDimensionWidth]; const double nodeWidth = node->getLayout().dimensions[YGDimensionWidth];
const float nodeHeight = node->getLayout().dimensions[YGDimensionHeight]; const double nodeHeight = node->getLayout().dimensions[YGDimensionHeight];
const float absoluteNodeLeft = absoluteLeft + nodeLeft; const double absoluteNodeLeft = absoluteLeft + nodeLeft;
const float absoluteNodeTop = absoluteTop + nodeTop; const double absoluteNodeTop = absoluteTop + nodeTop;
const float absoluteNodeRight = absoluteNodeLeft + nodeWidth; const double absoluteNodeRight = absoluteNodeLeft + nodeWidth;
const float absoluteNodeBottom = absoluteNodeTop + nodeHeight; const double absoluteNodeBottom = absoluteNodeTop + nodeHeight;
// If a node has a custom measure function we never want to round down its // If a node has a custom measure function we never want to round down its
// size as this could lead to unwanted text truncation. // size as this could lead to unwanted text truncation.
@ -3587,11 +3602,11 @@ static void YGRoundToPixelGrid(const YGNodeRef node,
// whole number, we don't have any fraction To verify if the result is close // whole number, we don't have any fraction To verify if the result is close
// to whole number we want to check both floor and ceil numbers // to whole number we want to check both floor and ceil numbers
const bool hasFractionalWidth = const bool hasFractionalWidth =
!YGFloatsEqual(fmodf(nodeWidth * pointScaleFactor, 1.0), 0) && !YGDoubleEqual(fmod(nodeWidth * pointScaleFactor, 1.0), 0) &&
!YGFloatsEqual(fmodf(nodeWidth * pointScaleFactor, 1.0), 1.0); !YGDoubleEqual(fmod(nodeWidth * pointScaleFactor, 1.0), 1.0);
const bool hasFractionalHeight = const bool hasFractionalHeight =
!YGFloatsEqual(fmodf(nodeHeight * pointScaleFactor, 1.0), 0) && !YGDoubleEqual(fmod(nodeHeight * pointScaleFactor, 1.0), 0) &&
!YGFloatsEqual(fmodf(nodeHeight * pointScaleFactor, 1.0), 1.0); !YGDoubleEqual(fmod(nodeHeight * pointScaleFactor, 1.0), 1.0);
node->setLayoutDimension( node->setLayoutDimension(
YGRoundValueToPixelGrid(absoluteNodeRight, pointScaleFactor, YGRoundValueToPixelGrid(absoluteNodeRight, pointScaleFactor,
@ -3773,6 +3788,7 @@ YOGA_EXPORT void YGConfigSetShouldDiffLayoutWithoutLegacyStretchBehaviour(
void YGAssert(const bool condition, const char* message) { void YGAssert(const bool condition, const char* message) {
if (!condition) { if (!condition) {
Log::log(YGNodeRef{nullptr}, YGLogLevelFatal, nullptr, "%s\n", message); Log::log(YGNodeRef{nullptr}, YGLogLevelFatal, nullptr, "%s\n", message);
throwLogicalErrorWithMessage(message);
} }
} }
@ -3780,6 +3796,7 @@ void YGAssertWithNode(const YGNodeRef node, const bool condition,
const char* message) { const char* message) {
if (!condition) { if (!condition) {
Log::log(node, YGLogLevelFatal, nullptr, "%s\n", message); Log::log(node, YGLogLevelFatal, nullptr, "%s\n", message);
throwLogicalErrorWithMessage(message);
} }
} }
@ -3787,6 +3804,7 @@ void YGAssertWithConfig(const YGConfigRef config, const bool condition,
const char* message) { const char* message) {
if (!condition) { if (!condition) {
Log::log(config, YGLogLevelFatal, nullptr, "%s\n", message); Log::log(config, YGLogLevelFatal, nullptr, "%s\n", message);
throwLogicalErrorWithMessage(message);
} }
} }

View File

@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the * This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree. * LICENSE file in the root directory of this source tree.
*/ */
// v1.18.0
#pragma once #pragma once
#include <assert.h> #include <assert.h>
@ -59,6 +59,9 @@ WIN_EXPORT void YGNodeReset(YGNodeRef node);
WIN_EXPORT void YGNodeInsertChild(YGNodeRef node, YGNodeRef child, WIN_EXPORT void YGNodeInsertChild(YGNodeRef node, YGNodeRef child,
uint32_t index); uint32_t index);
WIN_EXPORT void YGNodeSwapChild(YGNodeRef node, YGNodeRef child,
uint32_t index);
WIN_EXPORT void YGNodeRemoveChild(YGNodeRef node, YGNodeRef child); WIN_EXPORT void YGNodeRemoveChild(YGNodeRef node, YGNodeRef child);
WIN_EXPORT void YGNodeRemoveAllChildren(YGNodeRef node); WIN_EXPORT void YGNodeRemoveAllChildren(YGNodeRef node);
WIN_EXPORT YGNodeRef YGNodeGetChild(YGNodeRef node, uint32_t index); WIN_EXPORT YGNodeRef YGNodeGetChild(YGNodeRef node, uint32_t index);
@ -298,7 +301,7 @@ WIN_EXPORT YGConfigRef YGConfigGetDefault(void);
WIN_EXPORT void YGConfigSetContext(YGConfigRef config, void* context); WIN_EXPORT void YGConfigSetContext(YGConfigRef config, void* context);
WIN_EXPORT void* YGConfigGetContext(YGConfigRef config); WIN_EXPORT void* YGConfigGetContext(YGConfigRef config);
WIN_EXPORT float YGRoundValueToPixelGrid(float value, float pointScaleFactor, WIN_EXPORT float YGRoundValueToPixelGrid(double value, double pointScaleFactor,
bool forceCeil, bool forceFloor); bool forceCeil, bool forceFloor);
YG_EXTERN_C_END YG_EXTERN_C_END

View File

@ -9,7 +9,6 @@
#include <atomic> #include <atomic>
#include <memory> #include <memory>
#include <stdexcept>
namespace facebook { namespace facebook {
namespace yoga { namespace yoga {

View File

@ -7,6 +7,7 @@
#pragma once #pragma once
#include <stdint.h>
#include <yoga/YGEnums.h> #include <yoga/YGEnums.h>
#include <array> #include <array>

View File

@ -21,10 +21,6 @@ void vlog(YGConfig* config, YGNode* node, YGLogLevel level, void* context,
const char* format, va_list args) { const char* format, va_list args) {
YGConfig* logConfig = config != nullptr ? config : YGConfigGetDefault(); YGConfig* logConfig = config != nullptr ? config : YGConfigGetDefault();
logConfig->log(logConfig, node, level, context, format, args); logConfig->log(logConfig, node, level, context, format, args);
if (level == YGLogLevelFatal) {
abort();
}
} }
} // namespace } // namespace

View File

@ -0,0 +1,10 @@
#ifdef _WINDLL
#ifdef ENABLE_DLL_EXPORT
#define DLL_EXPORT __declspec(dllexport)
#else
#define DLL_EXPORT __declspec(dllimport)
#endif
#else
#define DLL_EXPORT
#endif

View File

@ -1,20 +1,11 @@
#pragma once #pragma once
#ifdef _WINDLL
#ifdef ENABLE_DLL_EXPORT
#define DLL_EXPORT __declspec(dllexport)
#else
#define DLL_EXPORT __declspec(dllimport)
#endif
#else
#define DLL_EXPORT
#endif
#include <napi.h> #include <napi.h>
#include <QPointer> #include <QPointer>
#include <QVariant> #include <QVariant>
#include "Extras/Export/export.h"
#include "core/FlexLayout/flexutils.h" #include "core/FlexLayout/flexutils.h"
#include "deps/yoga/YGNode.h" #include "deps/yoga/YGNode.h"
@ -22,18 +13,17 @@ namespace extrautils {
DLL_EXPORT QVariant* convertToQVariant(Napi::Env& env, Napi::Value& value); DLL_EXPORT QVariant* convertToQVariant(Napi::Env& env, Napi::Value& value);
DLL_EXPORT bool isNapiValueInt(Napi::Env& env, Napi::Value& num); DLL_EXPORT bool isNapiValueInt(Napi::Env& env, Napi::Value& num);
DLL_EXPORT std::string getNapiObjectClassName(Napi::Object& object); DLL_EXPORT std::string getNapiObjectClassName(Napi::Object& object);
DLL_EXPORT void* configureQWidget(QWidget* widget, YGNodeRef node, DLL_EXPORT void* configureQWidget(QWidget* widget, bool isLeafNode = false);
bool isLeafNode = false);
DLL_EXPORT void* configureQObject(QObject* object); DLL_EXPORT void* configureQObject(QObject* object);
DLL_EXPORT void* configureComponent(void* component); DLL_EXPORT void* configureComponent(void* component);
DLL_EXPORT uint64_t hashPointerTo53bit(const void* input);
template <typename T> template <typename T>
void safeDelete(QPointer<T>& component) { void safeDelete(QPointer<T>& component) {
if (!component.isNull()) { if (!component.isNull() && component->QObject::parent() == nullptr) {
delete component; delete component;
} }
} }
void initAppSettings();
} // namespace extrautils } // namespace extrautils
class DLL_EXPORT NUtilsWrap : public Napi::ObjectWrap<NUtilsWrap> { class DLL_EXPORT NUtilsWrap : public Napi::ObjectWrap<NUtilsWrap> {

View File

@ -0,0 +1,217 @@
#pragma once
#include <QAbstractItemModel>
#include "Extras/Export/export.h"
#include "QtCore/QModelIndex/qmodelindex_wrap.h"
#include "QtCore/QObject/qobject_macro.h"
#include "core/NodeWidget/nodewidget.h"
#include "napi.h"
class DLL_EXPORT NAbstractItemModel : public QAbstractItemModel,
public EventWidget {
Q_OBJECT
EVENTWIDGET_IMPLEMENTATIONS(QAbstractItemModel)
public:
Napi::FunctionReference dispatchOnNode;
virtual void connectSignalsToEventEmitter(){
// Qt Connects: Implement all signal connects here
QOBJECT_SIGNALS}
QModelIndex index(int row, int column,
const QModelIndex& parent = QModelIndex()) const override {
Napi::Env env = this->dispatchOnNode.Env();
Napi::HandleScope scope(env);
auto parentModelIndexWrap = QModelIndexWrap::constructor.New(
{Napi::External<QModelIndex>::New(env, new QModelIndex(parent))});
Napi::Value modelIndexNapiWrap = this->dispatchOnNode.Call(
{Napi::String::New(env, "index"), Napi::Value::From(env, row),
Napi::Value::From(env, column), parentModelIndexWrap});
QModelIndexWrap* modelIndexWrap = Napi::ObjectWrap<QModelIndexWrap>::Unwrap(
modelIndexNapiWrap.As<Napi::Object>());
QModelIndex* newIndex = modelIndexWrap->getInternalInstance();
return *newIndex;
}
QObject* parent() const { return nullptr; }
QModelIndex parent(const QModelIndex& child) const override {
Napi::Env env = this->dispatchOnNode.Env();
Napi::HandleScope scope(env);
auto childModelIndexWrap = QModelIndexWrap::constructor.New(
{Napi::External<QModelIndex>::New(env, new QModelIndex(child))});
Napi::Value modelIndexNapiWrap = this->dispatchOnNode.Call(
{Napi::String::New(env, "parent"), childModelIndexWrap});
QModelIndexWrap* modelIndexWrap = Napi::ObjectWrap<QModelIndexWrap>::Unwrap(
modelIndexNapiWrap.As<Napi::Object>());
QModelIndex* parentIndex = modelIndexWrap->getInternalInstance();
return *parentIndex;
}
int rowCount(const QModelIndex& parent = QModelIndex()) const override {
Napi::Env env = this->dispatchOnNode.Env();
Napi::HandleScope scope(env);
auto modelIndexWrap = QModelIndexWrap::constructor.New(
{Napi::External<QModelIndex>::New(env, new QModelIndex(parent))});
Napi::Value result = this->dispatchOnNode.Call(
{Napi::String::New(env, "rowCount"), modelIndexWrap});
return result.As<Napi::Number>().Int32Value();
}
int columnCount(const QModelIndex& parent = QModelIndex()) const override {
Napi::Env env = this->dispatchOnNode.Env();
Napi::HandleScope scope(env);
auto modelIndexWrap = QModelIndexWrap::constructor.New(
{Napi::External<QModelIndex>::New(env, new QModelIndex(parent))});
Napi::Value result = this->dispatchOnNode.Call(
{Napi::String::New(env, "columnCount"), modelIndexWrap});
return result.As<Napi::Number>().Int32Value();
}
QVariant data(const QModelIndex& index,
int role = Qt::DisplayRole) const override {
Napi::Env env = this->dispatchOnNode.Env();
Napi::HandleScope scope(env);
auto modelIndexWrap = QModelIndexWrap::constructor.New(
{Napi::External<QModelIndex>::New(env, new QModelIndex(index))});
auto roleValue = Napi::Value::From(env, role);
Napi::Value variantJsObject = this->dispatchOnNode.Call(
{Napi::String::New(env, "data"), modelIndexWrap, roleValue});
QVariantWrap* variantWrap = Napi::ObjectWrap<QVariantWrap>::Unwrap(
variantJsObject.As<Napi::Object>());
QVariant* variant = variantWrap->getInternalInstance();
return *variant;
}
Qt::ItemFlags flags(const QModelIndex& index) const override {
Napi::Env env = this->dispatchOnNode.Env();
Napi::HandleScope scope(env);
auto modelIndexWrap = QModelIndexWrap::constructor.New(
{Napi::External<QModelIndex>::New(env, new QModelIndex(index))});
Napi::Value numberJs = this->dispatchOnNode.Call(
{Napi::String::New(env, "flags"), modelIndexWrap});
auto result =
static_cast<Qt::ItemFlags>(numberJs.As<Napi::Number>().Uint32Value());
return result;
}
QVariant headerData(int section, Qt::Orientation orientation,
int role = Qt::DisplayRole) const override {
Napi::Env env = this->dispatchOnNode.Env();
Napi::HandleScope scope(env);
auto sectionValue = Napi::Value::From(env, static_cast<int>(section));
auto orientationValue =
Napi::Value::From(env, static_cast<int>(orientation));
auto roleValue = Napi::Value::From(env, static_cast<int>(role));
Napi::Value variantJsObject =
this->dispatchOnNode.Call({Napi::String::New(env, "headerData"),
sectionValue, orientationValue, roleValue});
QVariantWrap* variantWrap = Napi::ObjectWrap<QVariantWrap>::Unwrap(
variantJsObject.As<Napi::Object>());
QVariant* variant = variantWrap->getInternalInstance();
return *variant;
}
bool setData(const QModelIndex& index, const QVariant& value,
int role = Qt::EditRole) override {
Napi::Env env = this->dispatchOnNode.Env();
Napi::HandleScope scope(env);
auto modelIndexWrap = QModelIndexWrap::constructor.New(
{Napi::External<QModelIndex>::New(env, new QModelIndex(index))});
auto valueWrap = QVariantWrap::constructor.New(
{Napi::External<QVariant>::New(env, new QVariant(value))});
auto roleValue = Napi::Value::From(env, role);
Napi::Value booleanJs =
this->dispatchOnNode.Call({Napi::String::New(env, "setData"),
modelIndexWrap, valueWrap, roleValue});
return booleanJs.As<Napi::Boolean>().Value();
}
QModelIndex _protected_createIndex(int row, int column) const {
return createIndex(row, column);
}
QModelIndex buddy(const QModelIndex& index) const override {
Napi::Env env = this->dispatchOnNode.Env();
Napi::HandleScope scope(env);
auto indexWrap = QModelIndexWrap::constructor.New(
{Napi::External<QModelIndex>::New(env, new QModelIndex(index))});
Napi::Value buddyIndexNapiWrap =
this->dispatchOnNode.Call({Napi::String::New(env, "buddy"), indexWrap});
QModelIndexWrap* buddyIndexWrap = Napi::ObjectWrap<QModelIndexWrap>::Unwrap(
buddyIndexNapiWrap.As<Napi::Object>());
QModelIndex* buddyIndex = buddyIndexWrap->getInternalInstance();
return *buddyIndex;
}
void _protected_beginResetModel() { beginResetModel(); }
void _protected_endResetModel() { endResetModel(); }
void _protected_beginInsertColumns(const QModelIndex& parent, int first,
int last) {
beginInsertColumns(parent, first, last);
}
void _protected_beginInsertRows(const QModelIndex& parent, int first,
int last) {
beginInsertRows(parent, first, last);
}
bool _protected_beginMoveColumns(const QModelIndex& sourceParent,
int sourceFirst, int sourceLast,
const QModelIndex& destinationParent,
int destinationChild) {
return beginMoveColumns(sourceParent, sourceFirst, sourceLast,
destinationParent, destinationChild);
}
bool _protected_beginMoveRows(const QModelIndex& sourceParent,
int sourceFirst, int sourceLast,
const QModelIndex& destinationParent,
int destinationChild) {
return beginMoveRows(sourceParent, sourceFirst, sourceLast,
destinationParent, destinationChild);
}
void _protected_beginRemoveColumns(const QModelIndex& parent, int first,
int last) {
beginRemoveColumns(parent, first, last);
}
void _protected_beginRemoveRows(const QModelIndex& parent, int first,
int last) {
beginRemoveRows(parent, first, last);
}
void _protected_endInsertColumns() { endInsertColumns(); }
void _protected_endInsertRows() { endInsertRows(); }
void _protected_endMoveColumns() { endMoveColumns(); }
void _protected_endMoveRows() { endMoveRows(); }
void _protected_endRemoveColumns() { endRemoveColumns(); }
void _protected_endRemoveRows() { endRemoveRows(); }
};

View File

@ -0,0 +1,48 @@
#pragma once
#include <napi.h>
#include <QPointer>
#include "Extras/Export/export.h"
#include "QtCore/QObject/qobject_macro.h"
#include "nabstractitemmodel.hpp"
class DLL_EXPORT QAbstractItemModelWrap
: public Napi::ObjectWrap<QAbstractItemModelWrap> {
QOBJECT_WRAPPED_METHODS_DECLARATION
private:
QPointer<NAbstractItemModel> instance;
public:
static Napi::Object init(Napi::Env env, Napi::Object exports);
QAbstractItemModelWrap(const Napi::CallbackInfo& info);
~QAbstractItemModelWrap();
NAbstractItemModel* getInternalInstance();
// class constructor
static Napi::FunctionReference constructor;
// wrapped methods
Napi::Value initNodeDispatcher(const Napi::CallbackInfo& info);
Napi::Value hasIndex(const Napi::CallbackInfo& info);
Napi::Value createIndex(const Napi::CallbackInfo& info);
Napi::Value _super_flags(const Napi::CallbackInfo& info);
Napi::Value emitDataChanged(const Napi::CallbackInfo& info);
Napi::Value checkIndex(const Napi::CallbackInfo& info);
Napi::Value _super_buddy(const Napi::CallbackInfo& info);
Napi::Value beginInsertColumns(const Napi::CallbackInfo& info);
Napi::Value beginInsertRows(const Napi::CallbackInfo& info);
Napi::Value beginMoveColumns(const Napi::CallbackInfo& info);
Napi::Value beginMoveRows(const Napi::CallbackInfo& info);
Napi::Value beginRemoveColumns(const Napi::CallbackInfo& info);
Napi::Value beginRemoveRows(const Napi::CallbackInfo& info);
Napi::Value beginResetModel(const Napi::CallbackInfo& info);
Napi::Value endResetModel(const Napi::CallbackInfo& info);
Napi::Value endInsertColumns(const Napi::CallbackInfo& info);
Napi::Value endInsertRows(const Napi::CallbackInfo& info);
Napi::Value endMoveColumns(const Napi::CallbackInfo& info);
Napi::Value endMoveRows(const Napi::CallbackInfo& info);
Napi::Value endRemoveColumns(const Napi::CallbackInfo& info);
Napi::Value endRemoveRows(const Napi::CallbackInfo& info);
};

View File

@ -5,7 +5,7 @@
#include <QDate> #include <QDate>
#include "Extras/Utils/nutils.h" #include "Extras/Export/export.h"
#include "core/Component/component_macro.h" #include "core/Component/component_macro.h"
class DLL_EXPORT QDateWrap : public Napi::ObjectWrap<QDateWrap> { class DLL_EXPORT QDateWrap : public Napi::ObjectWrap<QDateWrap> {
@ -43,5 +43,6 @@ DLL_EXPORT Napi::Value currentDate(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value fromJulianDay(const Napi::CallbackInfo& info); DLL_EXPORT Napi::Value fromJulianDay(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value isLeapYear(const Napi::CallbackInfo& info); DLL_EXPORT Napi::Value isLeapYear(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value isValid(const Napi::CallbackInfo& info); DLL_EXPORT Napi::Value isValid(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value fromString(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value fromQVariant(const Napi::CallbackInfo& info); DLL_EXPORT Napi::Value fromQVariant(const Napi::CallbackInfo& info);
} // namespace StaticDateWrapMethods } // namespace StaticDateWrapMethods

View File

@ -5,7 +5,7 @@
#include <QDateTime> #include <QDateTime>
#include "Extras/Utils/nutils.h" #include "Extras/Export/export.h"
#include "core/Component/component_macro.h" #include "core/Component/component_macro.h"
class DLL_EXPORT QDateTimeWrap : public Napi::ObjectWrap<QDateTimeWrap> { class DLL_EXPORT QDateTimeWrap : public Napi::ObjectWrap<QDateTimeWrap> {
@ -55,5 +55,6 @@ DLL_EXPORT Napi::Value currentDateTime(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value currentDateTimeUtc(const Napi::CallbackInfo& info); DLL_EXPORT Napi::Value currentDateTimeUtc(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value currentMSecsSinceEpoch(const Napi::CallbackInfo& info); DLL_EXPORT Napi::Value currentMSecsSinceEpoch(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value currentSecsSinceEpoch(const Napi::CallbackInfo& info); DLL_EXPORT Napi::Value currentSecsSinceEpoch(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value fromString(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value fromQVariant(const Napi::CallbackInfo& info); DLL_EXPORT Napi::Value fromQVariant(const Napi::CallbackInfo& info);
} // namespace StaticDateTimeWrapMethods } // namespace StaticDateTimeWrapMethods

View File

@ -0,0 +1,20 @@
#pragma once
#include <QItemSelectionModel>
#include "Extras/Export/export.h"
#include "QtCore/QObject/qobject_macro.h"
#include "core/NodeWidget/nodewidget.h"
#include "napi.h"
class DLL_EXPORT NItemSelectionModel : public QItemSelectionModel,
public EventWidget {
Q_OBJECT
EVENTWIDGET_IMPLEMENTATIONS(QItemSelectionModel)
public:
Napi::FunctionReference dispatchOnNode;
virtual void connectSignalsToEventEmitter() {
// Qt Connects: Implement all signal connects here
QOBJECT_SIGNALS
}
};

View File

@ -0,0 +1,43 @@
#pragma once
#include <napi.h>
#include <QPointer>
#include "Extras/Export/export.h"
#include "QtCore/QObject/qobject_macro.h"
#include "nitemselectionmodel.hpp"
class DLL_EXPORT QItemSelectionModelWrap
: public Napi::ObjectWrap<QItemSelectionModelWrap> {
QOBJECT_WRAPPED_METHODS_DECLARATION
private:
QPointer<QItemSelectionModel> instance;
public:
static Napi::Object init(Napi::Env env, Napi::Object exports);
QItemSelectionModelWrap(const Napi::CallbackInfo& info);
~QItemSelectionModelWrap();
QItemSelectionModel* getInternalInstance();
// class constructor
static Napi::FunctionReference constructor;
// wrapped methods
Napi::Value columnIntersectsSelection(const Napi::CallbackInfo& info);
Napi::Value currentIndex(const Napi::CallbackInfo& info);
Napi::Value hasSelection(const Napi::CallbackInfo& info);
Napi::Value isColumnSelected(const Napi::CallbackInfo& info);
Napi::Value isRowSelected(const Napi::CallbackInfo& info);
Napi::Value isSelected(const Napi::CallbackInfo& info);
Napi::Value rowIntersectsSelection(const Napi::CallbackInfo& info);
Napi::Value clear(const Napi::CallbackInfo& info);
Napi::Value clearCurrentIndex(const Napi::CallbackInfo& info);
Napi::Value clearSelection(const Napi::CallbackInfo& info);
Napi::Value reset(const Napi::CallbackInfo& info);
Napi::Value select(const Napi::CallbackInfo& info);
Napi::Value setCurrentIndex(const Napi::CallbackInfo& info);
Napi::Value selectedColumns(const Napi::CallbackInfo& info);
Napi::Value selectedIndexes(const Napi::CallbackInfo& info);
Napi::Value selectedRows(const Napi::CallbackInfo& info);
};

View File

@ -0,0 +1,43 @@
#pragma once
#include <napi.h>
#include <QMimeData>
#include "Extras/Export/export.h"
#include "QtCore/QObject/qobject_macro.h"
class DLL_EXPORT QMimeDataWrap : public Napi::ObjectWrap<QMimeDataWrap> {
QOBJECT_WRAPPED_METHODS_DECLARATION
private:
QPointer<QMimeData> instance;
public:
static Napi::Object init(Napi::Env env, Napi::Object exports);
QMimeDataWrap(const Napi::CallbackInfo& info);
~QMimeDataWrap();
QMimeData* getInternalInstance();
// class constructor
static Napi::FunctionReference constructor;
static void cloneFromMimeDataToData(QMimeData* fromData, QMimeData* toData);
void cloneFromMimeData(QMimeData* data);
// wrapped methods
Napi::Value clear(const Napi::CallbackInfo& info);
Napi::Value hasColor(const Napi::CallbackInfo& info);
Napi::Value hasHtml(const Napi::CallbackInfo& info);
Napi::Value hasImage(const Napi::CallbackInfo& info);
Napi::Value hasText(const Napi::CallbackInfo& info);
Napi::Value hasUrls(const Napi::CallbackInfo& info);
Napi::Value html(const Napi::CallbackInfo& info);
Napi::Value removeFormat(const Napi::CallbackInfo& info);
// Will need implementation with Buffer or UInt8Array
// Napi::Value setData(const Napi::CallbackInfo& info);
Napi::Value setHtml(const Napi::CallbackInfo& info);
Napi::Value setText(const Napi::CallbackInfo& info);
Napi::Value setUrls(const Napi::CallbackInfo& info);
Napi::Value text(const Napi::CallbackInfo& info);
Napi::Value urls(const Napi::CallbackInfo& info);
};

View File

@ -4,7 +4,7 @@
#include <QModelIndex> #include <QModelIndex>
#include "Extras/Utils/nutils.h" #include "Extras/Export/export.h"
#include "core/Component/component_macro.h" #include "core/Component/component_macro.h"
class DLL_EXPORT QModelIndexWrap : public Napi::ObjectWrap<QModelIndexWrap> { class DLL_EXPORT QModelIndexWrap : public Napi::ObjectWrap<QModelIndexWrap> {

View File

@ -1,7 +1,7 @@
#pragma once #pragma once
#include <QObject> #include <QObject>
#include "Extras/Utils/nutils.h" #include "Extras/Export/export.h"
#include "QtCore/QObject/qobject_macro.h" #include "QtCore/QObject/qobject_macro.h"
#include "core/Events/eventwidget.h" #include "core/Events/eventwidget.h"
#include "core/Events/eventwidget_macro.h" #include "core/Events/eventwidget_macro.h"
@ -12,5 +12,5 @@ class DLL_EXPORT NObject : public QObject, public EventWidget {
public: public:
using QObject::QObject; using QObject::QObject;
void connectSignalsToEventEmitter() { QOBJECT_SIGNALS } virtual void connectSignalsToEventEmitter() { QOBJECT_SIGNALS }
}; };

View File

@ -5,28 +5,33 @@
#include "Extras/Utils/nutils.h" #include "Extras/Utils/nutils.h"
#include "QtCore/QVariant/qvariant_wrap.h" #include "QtCore/QVariant/qvariant_wrap.h"
#include "core/Events/eventwidget_macro.h" #include "core/Events/eventwidget_macro.h"
/* #include "core/WrapperCache/wrappercache.h"
This macro adds common QObject exported methods /*
The exported methods are taken into this macro to avoid writing them in each This macro adds common QObject exported methods
and every widget we export. The exported methods are taken into this macro to avoid writing them in each
and every widget we export.
*/ */
#ifndef QOBJECT_WRAPPED_METHODS_DECLARATION #ifndef QOBJECT_WRAPPED_METHODS_DECLARATION_WITH_EVENT_SOURCE
#define QOBJECT_WRAPPED_METHODS_DECLARATION \ #define QOBJECT_WRAPPED_METHODS_DECLARATION_WITH_EVENT_SOURCE(source) \
\ \
EVENTWIDGET_WRAPPED_METHODS_DECLARATION \ EVENTWIDGET_WRAPPED_METHODS_DECLARATION_WITH_EVENT_SOURCE(source) \
\ \
Napi::Value __id__(const Napi::CallbackInfo& info) { \
Napi::Env env = info.Env(); \
return Napi::Value::From( \
env, extrautils::hashPointerTo53bit( \
static_cast<QObject*>(this->instance.data()))); \
} \
Napi::Value inherits(const Napi::CallbackInfo& info) { \ Napi::Value inherits(const Napi::CallbackInfo& info) { \
Napi::Env env = info.Env(); \ Napi::Env env = info.Env(); \
Napi::HandleScope scope(env); \
Napi::String className = info[0].As<Napi::String>(); \ Napi::String className = info[0].As<Napi::String>(); \
bool doesIt = this->instance->inherits(className.Utf8Value().c_str()); \ bool doesIt = this->instance->inherits(className.Utf8Value().c_str()); \
return Napi::Value::From(env, doesIt); \ return Napi::Value::From(env, doesIt); \
} \ } \
Napi::Value setProperty(const Napi::CallbackInfo& info) { \ Napi::Value setProperty(const Napi::CallbackInfo& info) { \
Napi::Env env = info.Env(); \ Napi::Env env = info.Env(); \
Napi::HandleScope scope(env); \
Napi::String name = info[0].As<Napi::String>(); \ Napi::String name = info[0].As<Napi::String>(); \
Napi::Value value = info[1]; \ Napi::Value value = info[1]; \
auto variant = \ auto variant = \
@ -37,7 +42,6 @@
} \ } \
Napi::Value property(const Napi::CallbackInfo& info) { \ Napi::Value property(const Napi::CallbackInfo& info) { \
Napi::Env env = info.Env(); \ Napi::Env env = info.Env(); \
Napi::HandleScope scope(env); \
Napi::String name = info[0].As<Napi::String>(); \ Napi::String name = info[0].As<Napi::String>(); \
Napi::Value value = info[1]; \ Napi::Value value = info[1]; \
QVariant* variant = \ QVariant* variant = \
@ -48,7 +52,6 @@
} \ } \
Napi::Value setObjectName(const Napi::CallbackInfo& info) { \ Napi::Value setObjectName(const Napi::CallbackInfo& info) { \
Napi::Env env = info.Env(); \ Napi::Env env = info.Env(); \
Napi::HandleScope scope(env); \
Napi::String objectName = info[0].As<Napi::String>(); \ Napi::String objectName = info[0].As<Napi::String>(); \
this->instance->setObjectName( \ this->instance->setObjectName( \
QString::fromStdString(objectName.Utf8Value())); \ QString::fromStdString(objectName.Utf8Value())); \
@ -56,29 +59,120 @@
} \ } \
Napi::Value objectName(const Napi::CallbackInfo& info) { \ Napi::Value objectName(const Napi::CallbackInfo& info) { \
Napi::Env env = info.Env(); \ Napi::Env env = info.Env(); \
Napi::HandleScope scope(env); \
QString objectName = this->instance->objectName(); \ QString objectName = this->instance->objectName(); \
return Napi::String::New(env, objectName.toStdString()); \ return Napi::String::New(env, objectName.toStdString()); \
} \
Napi::Value dumpObjectTree(const Napi::CallbackInfo& info) { \
Napi::Env env = info.Env(); \
this->instance->dumpObjectTree(); \
return env.Null(); \
} \
Napi::Value dumpObjectInfo(const Napi::CallbackInfo& info) { \
Napi::Env env = info.Env(); \
this->instance->dumpObjectInfo(); \
return env.Null(); \
} \
Napi::Value __external_qobject__(const Napi::CallbackInfo& info) { \
Napi::Env env = info.Env(); \
return Napi::External<QObject>::New( \
env, static_cast<QObject*>(this->instance)); \
} \
Napi::Value startTimer(const Napi::CallbackInfo& info) { \
Napi::Env env = info.Env(); \
int interval = info[0].As<Napi::Number>().Int32Value(); \
Qt::TimerType timerType = \
static_cast<Qt::TimerType>(info[1].As<Napi::Number>().Int32Value()); \
int result = this->instance->startTimer(interval, timerType); \
return Napi::Value::From(env, result); \
} \
Napi::Value killTimer(const Napi::CallbackInfo& info) { \
Napi::Env env = info.Env(); \
int id = info[0].As<Napi::Number>().Int32Value(); \
this->instance->killTimer(id); \
return env.Null(); \
} \
Napi::Value parent(const Napi::CallbackInfo& info) { \
Napi::Env env = info.Env(); \
QObject* parent = this->instance->parent(); \
if (parent) { \
return WrapperCache::instance.getWrapper(env, parent); \
} else { \
return env.Null(); \
} \
} \
Napi::Value deleteLater(const Napi::CallbackInfo& info) { \
Napi::Env env = info.Env(); \
this->instance->deleteLater(); \
return env.Null(); \
} \
Napi::Value deleteObject(const Napi::CallbackInfo& info) { \
Napi::Env env = info.Env(); \
delete static_cast<QObject*>(this->instance); \
return env.Null(); \
} \
Napi::Value children(const Napi::CallbackInfo& info) { \
Napi::Env env = info.Env(); \
QObjectList children = this->instance->children(); \
Napi::Array resultArrayNapi = Napi::Array::New(env, children.size()); \
for (int i = 0; i < children.size(); i++) { \
resultArrayNapi[i] = \
WrapperCache::instance.getWrapper(env, children[i]); \
} \
return resultArrayNapi; \
} }
// Ideally this macro below should go in
// QOBJECT_WRAPPED_METHODS_DECLARATION_WITH_EVENT_SOURCE but some wrappers
// need their own setParent()` implementation which handles different
// arguments.
#define QOBJECT_SET_PARENT_IMPL \
Napi::Value setParent(const Napi::CallbackInfo& info) { \
Napi::Env env = info.Env(); \
if (info[0].IsNull()) { \
this->instance->setParent(nullptr); \
} else { \
QObject* parentObject = info[0].As<Napi::External<QObject>>().Data(); \
this->instance->setParent(parentObject); \
} \
return env.Null(); \
}
#endif // QOBJECT_WRAPPED_METHODS_DECLARATION_WITH_EVENT_SOURCE
#ifndef QOBJECT_WRAPPED_METHODS_DECLARATION
#define QOBJECT_WRAPPED_METHODS_DECLARATION \
QOBJECT_WRAPPED_METHODS_DECLARATION_WITH_EVENT_SOURCE(this->instance.data()) \
QOBJECT_SET_PARENT_IMPL
#endif // QOBJECT_WRAPPED_METHODS_DECLARATION #endif // QOBJECT_WRAPPED_METHODS_DECLARATION
#ifndef QOBJECT_WRAPPED_METHODS_EXPORT_DEFINE #ifndef QOBJECT_WRAPPED_METHODS_EXPORT_DEFINE
#define QOBJECT_WRAPPED_METHODS_EXPORT_DEFINE(ComponentWrapName) \ #define QOBJECT_WRAPPED_METHODS_EXPORT_DEFINE(ComponentWrapName) \
\ \
EVENTWIDGET_WRAPPED_METHODS_EXPORT_DEFINE(ComponentWrapName) \ EVENTWIDGET_WRAPPED_METHODS_EXPORT_DEFINE(ComponentWrapName) \
\ \
InstanceMethod("inherits", &ComponentWrapName::inherits), \ InstanceMethod("__id__", &ComponentWrapName::__id__), \
InstanceMethod("setProperty", &ComponentWrapName::setProperty), \ InstanceMethod("__external_qobject__", \
InstanceMethod("property", &ComponentWrapName::property), \ &ComponentWrapName::__external_qobject__), \
InstanceMethod("setObjectName", &ComponentWrapName::setObjectName), \ InstanceMethod("inherits", &ComponentWrapName::inherits), \
InstanceMethod("objectName", &ComponentWrapName::objectName), InstanceMethod("setProperty", &ComponentWrapName::setProperty), \
InstanceMethod("property", &ComponentWrapName::property), \
InstanceMethod("setObjectName", &ComponentWrapName::setObjectName), \
InstanceMethod("objectName", &ComponentWrapName::objectName), \
InstanceMethod("dumpObjectTree", &ComponentWrapName::dumpObjectTree), \
InstanceMethod("dumpObjectInfo", &ComponentWrapName::dumpObjectInfo), \
InstanceMethod("setParent", &ComponentWrapName::setParent), \
InstanceMethod("startTimer", &ComponentWrapName::startTimer), \
InstanceMethod("killTimer", &ComponentWrapName::killTimer), \
InstanceMethod("parent", &ComponentWrapName::parent), \
InstanceMethod("deleteLater", &ComponentWrapName::deleteLater), \
InstanceMethod("delete", &ComponentWrapName::deleteObject), \
InstanceMethod("children", &ComponentWrapName::children),
#endif // QOBJECT_WRAPPED_METHODS_EXPORT_DEFINE #endif // QOBJECT_WRAPPED_METHODS_EXPORT_DEFINE
#ifndef QOBJECT_SIGNALS #ifndef QOBJECT_SIGNALS_ON_TARGET
#define QOBJECT_SIGNALS \ #define QOBJECT_SIGNALS_ON_TARGET(target) \
QObject::connect(this, &QObject::objectNameChanged, \ QObject::connect(target, &QObject::objectNameChanged, \
[=](const QString& objectName) { \ [=](const QString& objectName) { \
Napi::Env env = this->emitOnNode.Env(); \ Napi::Env env = this->emitOnNode.Env(); \
Napi::HandleScope scope(env); \ Napi::HandleScope scope(env); \
@ -86,5 +180,28 @@
{Napi::String::New(env, "objectNameChanged"), \ {Napi::String::New(env, "objectNameChanged"), \
Napi::Value::From(env, objectName.toStdString())}); \ Napi::Value::From(env, objectName.toStdString())}); \
}); });
#endif // QOBJECT_SIGNALS_ON_TARGET
#ifndef QOBJECT_SIGNALS
#define QOBJECT_SIGNALS QOBJECT_SIGNALS_ON_TARGET(this)
#endif // QOBJECT_SIGNALS #endif // QOBJECT_SIGNALS
/*
Macro to register a function to wrap QObject pointers of a
given subclass to wrapper instances. First parameter is the
plain name of the QObject subclass (no quotes), seconds is the
name of the wrapper class.
*/
#ifndef QOBJECT_REGISTER_WRAPPER
#define QOBJECT_REGISTER_WRAPPER(qobjectType, ComponentWrapName) \
WrapperCache::instance.registerWrapper( \
QString(#qobjectType), \
[](Napi::Env env, QObject* qobject) -> Napi::Object { \
qobjectType* exactQObject = dynamic_cast<qobjectType*>(qobject); \
Napi::Object wrapper = ComponentWrapName::constructor.New( \
{Napi::External<QObject>::New(env, exactQObject)}); \
return wrapper; \
});
#endif // QOBJECT_REGISTER_WRAPPER
#include "QtCore/QObject/qobject_wrap.h"

View File

@ -4,21 +4,22 @@
#include <QPointer> #include <QPointer>
#include "Extras/Utils/nutils.h" #include "Extras/Export/export.h"
#include "QtCore/QObject/nobject.hpp" #include "QtCore/QObject/nobject.hpp"
#include "QtCore/QObject/qobject_macro.h" #include "QtCore/QObject/qobject_macro.h"
class DLL_EXPORT QObjectWrap : public Napi::ObjectWrap<QObjectWrap> { class DLL_EXPORT QObjectWrap : public Napi::ObjectWrap<QObjectWrap> {
QOBJECT_WRAPPED_METHODS_DECLARATION QOBJECT_WRAPPED_METHODS_DECLARATION
private: private:
QPointer<NObject> instance; QPointer<QObject> instance;
public: public:
static Napi::Object init(Napi::Env env, Napi::Object exports); static Napi::Object init(Napi::Env env, Napi::Object exports);
QObjectWrap(const Napi::CallbackInfo& info); QObjectWrap(const Napi::CallbackInfo& info);
~QObjectWrap(); ~QObjectWrap();
NObject* getInternalInstance(); QObject* getInternalInstance();
// class constructor // class constructor
static Napi::FunctionReference constructor; static Napi::FunctionReference constructor;
static Napi::Object wrapFunc(Napi::Env env, QObject* qobject);
// wrapped methods // wrapped methods
}; };

View File

@ -4,7 +4,7 @@
#include <QPoint> #include <QPoint>
#include "Extras/Utils/nutils.h" #include "Extras/Export/export.h"
#include "core/Component/component_macro.h" #include "core/Component/component_macro.h"
class DLL_EXPORT QPointWrap : public Napi::ObjectWrap<QPointWrap> { class DLL_EXPORT QPointWrap : public Napi::ObjectWrap<QPointWrap> {
@ -23,6 +23,9 @@ class DLL_EXPORT QPointWrap : public Napi::ObjectWrap<QPointWrap> {
Napi::Value setY(const Napi::CallbackInfo& info); Napi::Value setY(const Napi::CallbackInfo& info);
Napi::Value x(const Napi::CallbackInfo& info); Napi::Value x(const Napi::CallbackInfo& info);
Napi::Value y(const Napi::CallbackInfo& info); Napi::Value y(const Napi::CallbackInfo& info);
Napi::Value isNull(const Napi::CallbackInfo& info);
Napi::Value manhattanLength(const Napi::CallbackInfo& info);
Napi::Value transposed(const Napi::CallbackInfo& info);
}; };
namespace StaticQPointWrapMethods { namespace StaticQPointWrapMethods {

View File

@ -0,0 +1,38 @@
#pragma once
#include <napi.h>
#include <QPointF>
#include "Extras/Export/export.h"
#include "core/Component/component_macro.h"
class DLL_EXPORT QPointFWrap : public Napi::ObjectWrap<QPointFWrap> {
COMPONENT_WRAPPED_METHODS_DECLARATION
private:
std::unique_ptr<QPointF> instance;
public:
static Napi::Object init(Napi::Env env, Napi::Object exports);
QPointFWrap(const Napi::CallbackInfo& info);
~QPointFWrap();
QPointF* getInternalInstance();
// class constructor
static Napi::FunctionReference constructor;
// wrapped methods
Napi::Value dotProduct(const Napi::CallbackInfo& info);
Napi::Value isNull(const Napi::CallbackInfo& info);
Napi::Value manhattanLength(const Napi::CallbackInfo& info);
Napi::Value setX(const Napi::CallbackInfo& info);
Napi::Value setY(const Napi::CallbackInfo& info);
Napi::Value toPoint(const Napi::CallbackInfo& info);
Napi::Value transposed(const Napi::CallbackInfo& info);
Napi::Value x(const Napi::CallbackInfo& info);
Napi::Value y(const Napi::CallbackInfo& info);
};
namespace StaticQPointFWrapMethods {
DLL_EXPORT Napi::Value dotProduct(const Napi::CallbackInfo& info);
} // namespace StaticQPointFWrapMethods

View File

@ -4,7 +4,7 @@
#include <QRect> #include <QRect>
#include "Extras/Utils/nutils.h" #include "Extras/Export/export.h"
#include "core/Component/component_macro.h" #include "core/Component/component_macro.h"
class DLL_EXPORT QRectWrap : public Napi::ObjectWrap<QRectWrap> { class DLL_EXPORT QRectWrap : public Napi::ObjectWrap<QRectWrap> {

View File

@ -0,0 +1,82 @@
#pragma once
#include <napi.h>
#include <QRectF>
#include "Extras/Export/export.h"
#include "core/Component/component_macro.h"
class DLL_EXPORT QRectFWrap : public Napi::ObjectWrap<QRectFWrap> {
COMPONENT_WRAPPED_METHODS_DECLARATION
private:
std::unique_ptr<QRectF> instance;
public:
static Napi::Object init(Napi::Env env, Napi::Object exports);
QRectFWrap(const Napi::CallbackInfo& info);
~QRectFWrap();
QRectF* getInternalInstance();
// class constructor
static Napi::FunctionReference constructor;
// wrapped methods
Napi::Value adjust(const Napi::CallbackInfo& info);
Napi::Value adjusted(const Napi::CallbackInfo& info);
Napi::Value bottom(const Napi::CallbackInfo& info);
Napi::Value bottomLeft(const Napi::CallbackInfo& info);
Napi::Value bottomRight(const Napi::CallbackInfo& info);
Napi::Value center(const Napi::CallbackInfo& info);
Napi::Value contains(const Napi::CallbackInfo& info);
Napi::Value contains_QRect(const Napi::CallbackInfo& info);
Napi::Value contains_QPoint(const Napi::CallbackInfo& info);
Napi::Value height(const Napi::CallbackInfo& info);
Napi::Value intersected(const Napi::CallbackInfo& info);
Napi::Value intersects(const Napi::CallbackInfo& info);
Napi::Value isEmpty(const Napi::CallbackInfo& info);
Napi::Value isNull(const Napi::CallbackInfo& info);
Napi::Value isValid(const Napi::CallbackInfo& info);
Napi::Value left(const Napi::CallbackInfo& info);
Napi::Value moveBottom(const Napi::CallbackInfo& info);
Napi::Value moveBottomLeft(const Napi::CallbackInfo& info);
Napi::Value moveBottomRight(const Napi::CallbackInfo& info);
Napi::Value moveCenter(const Napi::CallbackInfo& info);
Napi::Value moveLeft(const Napi::CallbackInfo& info);
Napi::Value moveRight(const Napi::CallbackInfo& info);
Napi::Value moveTo(const Napi::CallbackInfo& info);
Napi::Value moveTo_QPoint(const Napi::CallbackInfo& info);
Napi::Value moveTop(const Napi::CallbackInfo& info);
Napi::Value moveTopLeft(const Napi::CallbackInfo& info);
Napi::Value moveTopRight(const Napi::CallbackInfo& info);
Napi::Value normalized(const Napi::CallbackInfo& info);
Napi::Value right(const Napi::CallbackInfo& info);
Napi::Value setBottom(const Napi::CallbackInfo& info);
Napi::Value setBottomLeft(const Napi::CallbackInfo& info);
Napi::Value setBottomRight(const Napi::CallbackInfo& info);
Napi::Value setCoords(const Napi::CallbackInfo& info);
Napi::Value setHeight(const Napi::CallbackInfo& info);
Napi::Value setLeft(const Napi::CallbackInfo& info);
Napi::Value setRect(const Napi::CallbackInfo& info);
Napi::Value setRight(const Napi::CallbackInfo& info);
Napi::Value setTop(const Napi::CallbackInfo& info);
Napi::Value setTopLeft(const Napi::CallbackInfo& info);
Napi::Value setTopRight(const Napi::CallbackInfo& info);
Napi::Value setWidth(const Napi::CallbackInfo& info);
Napi::Value setX(const Napi::CallbackInfo& info);
Napi::Value setY(const Napi::CallbackInfo& info);
Napi::Value toAlignedRect(const Napi::CallbackInfo& info);
Napi::Value toRect(const Napi::CallbackInfo& info);
Napi::Value top(const Napi::CallbackInfo& info);
Napi::Value topLeft(const Napi::CallbackInfo& info);
Napi::Value topRight(const Napi::CallbackInfo& info);
Napi::Value translate(const Napi::CallbackInfo& info);
Napi::Value translate_QPoint(const Napi::CallbackInfo& info);
Napi::Value translated(const Napi::CallbackInfo& info);
Napi::Value translated_QPoint(const Napi::CallbackInfo& info);
Napi::Value transposed(const Napi::CallbackInfo& info);
Napi::Value united(const Napi::CallbackInfo& info);
Napi::Value width(const Napi::CallbackInfo& info);
Napi::Value x(const Napi::CallbackInfo& info);
Napi::Value y(const Napi::CallbackInfo& info);
};

View File

@ -0,0 +1,25 @@
#pragma once
#include <napi.h>
#include <QSettings>
#include "Extras/Utils/nutils.h"
#include "core/Component/component_macro.h"
class DLL_EXPORT QSettingsWrap : public Napi::ObjectWrap<QSettingsWrap> {
COMPONENT_WRAPPED_METHODS_DECLARATION
private:
std::unique_ptr<QSettings> instance;
public:
~QSettingsWrap();
QSettings* getInternalInstance();
QSettingsWrap(const Napi::CallbackInfo& info);
Napi::Value sync(const Napi::CallbackInfo& info);
Napi::Value setValue(const Napi::CallbackInfo& info);
Napi::Value value(const Napi::CallbackInfo& info);
static Napi::Object init(Napi::Env env, Napi::Object exports);
static Napi::FunctionReference constructor;
};

View File

@ -4,7 +4,7 @@
#include <QSize> #include <QSize>
#include "Extras/Utils/nutils.h" #include "Extras/Export/export.h"
#include "core/Component/component_macro.h" #include "core/Component/component_macro.h"
class DLL_EXPORT QSizeWrap : public Napi::ObjectWrap<QSizeWrap> { class DLL_EXPORT QSizeWrap : public Napi::ObjectWrap<QSizeWrap> {
@ -19,9 +19,18 @@ class DLL_EXPORT QSizeWrap : public Napi::ObjectWrap<QSizeWrap> {
~QSizeWrap(); ~QSizeWrap();
QSize* getInternalInstance(); QSize* getInternalInstance();
// Wrapped methods // Wrapped methods
Napi::Value boundedTo(const Napi::CallbackInfo& info);
Napi::Value expandedTo(const Napi::CallbackInfo& info);
Napi::Value height(const Napi::CallbackInfo& info);
Napi::Value isEmpty(const Napi::CallbackInfo& info);
Napi::Value isNull(const Napi::CallbackInfo& info);
Napi::Value isValid(const Napi::CallbackInfo& info);
Napi::Value scale(const Napi::CallbackInfo& info);
Napi::Value scaled(const Napi::CallbackInfo& info);
Napi::Value setHeight(const Napi::CallbackInfo& info); Napi::Value setHeight(const Napi::CallbackInfo& info);
Napi::Value setWidth(const Napi::CallbackInfo& info); Napi::Value setWidth(const Napi::CallbackInfo& info);
Napi::Value height(const Napi::CallbackInfo& info); Napi::Value transpose(const Napi::CallbackInfo& info);
Napi::Value transposed(const Napi::CallbackInfo& info);
Napi::Value width(const Napi::CallbackInfo& info); Napi::Value width(const Napi::CallbackInfo& info);
}; };

View File

@ -0,0 +1,40 @@
#pragma once
#include <napi.h>
#include <QSizeF>
#include "Extras/Export/export.h"
#include "core/Component/component_macro.h"
class DLL_EXPORT QSizeFWrap : public Napi::ObjectWrap<QSizeFWrap> {
COMPONENT_WRAPPED_METHODS_DECLARATION
private:
std::unique_ptr<QSizeF> instance;
public:
static Napi::FunctionReference constructor;
static Napi::Object init(Napi::Env env, Napi::Object exports);
QSizeFWrap(const Napi::CallbackInfo& info);
~QSizeFWrap();
QSizeF* getInternalInstance();
// Wrapped methods
Napi::Value boundedTo(const Napi::CallbackInfo& info);
Napi::Value expandedTo(const Napi::CallbackInfo& info);
Napi::Value height(const Napi::CallbackInfo& info);
Napi::Value isEmpty(const Napi::CallbackInfo& info);
Napi::Value isNull(const Napi::CallbackInfo& info);
Napi::Value isValid(const Napi::CallbackInfo& info);
Napi::Value scale(const Napi::CallbackInfo& info);
Napi::Value scaled(const Napi::CallbackInfo& info);
Napi::Value setHeight(const Napi::CallbackInfo& info);
Napi::Value setWidth(const Napi::CallbackInfo& info);
Napi::Value toSize(const Napi::CallbackInfo& info);
Napi::Value transpose(const Napi::CallbackInfo& info);
Napi::Value transposed(const Napi::CallbackInfo& info);
Napi::Value width(const Napi::CallbackInfo& info);
};
namespace StaticQSizeFWrapMethods {
DLL_EXPORT Napi::Value fromQVariant(const Napi::CallbackInfo& info);
} // namespace StaticQSizeFWrapMethods

View File

@ -5,7 +5,7 @@
#include <QTime> #include <QTime>
#include "Extras/Utils/nutils.h" #include "Extras/Export/export.h"
#include "core/Component/component_macro.h" #include "core/Component/component_macro.h"
class DLL_EXPORT QTimeWrap : public Napi::ObjectWrap<QTimeWrap> { class DLL_EXPORT QTimeWrap : public Napi::ObjectWrap<QTimeWrap> {
@ -42,5 +42,6 @@ namespace StaticTimeWrapMethods {
DLL_EXPORT Napi::Value currentTime(const Napi::CallbackInfo& info); DLL_EXPORT Napi::Value currentTime(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value fromMSecsSinceStartOfDay(const Napi::CallbackInfo& info); DLL_EXPORT Napi::Value fromMSecsSinceStartOfDay(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value isValid(const Napi::CallbackInfo& info); DLL_EXPORT Napi::Value isValid(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value fromString(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value fromQVariant(const Napi::CallbackInfo& info); DLL_EXPORT Napi::Value fromQVariant(const Napi::CallbackInfo& info);
} // namespace StaticTimeWrapMethods } // namespace StaticTimeWrapMethods

View File

@ -4,7 +4,7 @@
#include <QUrl> #include <QUrl>
#include "Extras/Utils/nutils.h" #include "Extras/Export/export.h"
#include "core/Component/component_macro.h" #include "core/Component/component_macro.h"
class DLL_EXPORT QUrlWrap : public Napi::ObjectWrap<QUrlWrap> { class DLL_EXPORT QUrlWrap : public Napi::ObjectWrap<QUrlWrap> {
@ -21,8 +21,49 @@ class DLL_EXPORT QUrlWrap : public Napi::ObjectWrap<QUrlWrap> {
// Wrapped methods // Wrapped methods
Napi::Value setUrl(const Napi::CallbackInfo& info); Napi::Value setUrl(const Napi::CallbackInfo& info);
Napi::Value toString(const Napi::CallbackInfo& info); Napi::Value toString(const Napi::CallbackInfo& info);
Napi::Value adjusted(const Napi::CallbackInfo& info);
Napi::Value authority(const Napi::CallbackInfo& info);
Napi::Value clear(const Napi::CallbackInfo& info);
Napi::Value errorString(const Napi::CallbackInfo& info);
Napi::Value fileName(const Napi::CallbackInfo& info);
Napi::Value fragment(const Napi::CallbackInfo& info);
Napi::Value hasFragment(const Napi::CallbackInfo& info);
Napi::Value hasQuery(const Napi::CallbackInfo& info);
Napi::Value host(const Napi::CallbackInfo& info);
Napi::Value isEmpty(const Napi::CallbackInfo& info);
Napi::Value isLocalFile(const Napi::CallbackInfo& info);
Napi::Value isParentOf(const Napi::CallbackInfo& info);
Napi::Value isRelative(const Napi::CallbackInfo& info);
Napi::Value isValid(const Napi::CallbackInfo& info);
Napi::Value matches(const Napi::CallbackInfo& info);
Napi::Value password(const Napi::CallbackInfo& info);
Napi::Value path(const Napi::CallbackInfo& info);
Napi::Value port(const Napi::CallbackInfo& info);
Napi::Value query(const Napi::CallbackInfo& info);
Napi::Value resolved(const Napi::CallbackInfo& info);
Napi::Value scheme(const Napi::CallbackInfo& info);
Napi::Value setAuthority(const Napi::CallbackInfo& info);
Napi::Value setFragment(const Napi::CallbackInfo& info);
Napi::Value setHost(const Napi::CallbackInfo& info);
Napi::Value setPassword(const Napi::CallbackInfo& info);
Napi::Value setPath(const Napi::CallbackInfo& info);
Napi::Value setPort(const Napi::CallbackInfo& info);
Napi::Value setQuery(const Napi::CallbackInfo& info);
Napi::Value setScheme(const Napi::CallbackInfo& info);
Napi::Value setUserInfo(const Napi::CallbackInfo& info);
Napi::Value setUserName(const Napi::CallbackInfo& info);
Napi::Value swap(const Napi::CallbackInfo& info);
Napi::Value toDisplayString(const Napi::CallbackInfo& info);
Napi::Value toLocalFile(const Napi::CallbackInfo& info);
Napi::Value toString_withOpts(const Napi::CallbackInfo& info);
Napi::Value url(const Napi::CallbackInfo& info);
Napi::Value userInfo(const Napi::CallbackInfo& info);
Napi::Value userName(const Napi::CallbackInfo& info);
}; };
namespace StaticQUrlWrapMethods { namespace StaticQUrlWrapMethods {
DLL_EXPORT Napi::Value fromQVariant(const Napi::CallbackInfo& info); DLL_EXPORT Napi::Value fromQVariant(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value fromLocalFile(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value fromUserInput(const Napi::CallbackInfo& info);
} // namespace StaticQUrlWrapMethods } // namespace StaticQUrlWrapMethods

View File

@ -4,7 +4,7 @@
#include <QSharedPointer> #include <QSharedPointer>
#include "Extras/Utils/nutils.h" #include "Extras/Export/export.h"
#include "core/Component/component_macro.h" #include "core/Component/component_macro.h"
class DLL_EXPORT QVariantWrap : public Napi::ObjectWrap<QVariantWrap> { class DLL_EXPORT QVariantWrap : public Napi::ObjectWrap<QVariantWrap> {
@ -22,9 +22,10 @@ class DLL_EXPORT QVariantWrap : public Napi::ObjectWrap<QVariantWrap> {
Napi::Value toInt(const Napi::CallbackInfo& info); Napi::Value toInt(const Napi::CallbackInfo& info);
Napi::Value toDouble(const Napi::CallbackInfo& info); Napi::Value toDouble(const Napi::CallbackInfo& info);
Napi::Value toBool(const Napi::CallbackInfo& info); Napi::Value toBool(const Napi::CallbackInfo& info);
Napi::Value toStringList(const Napi::CallbackInfo& info);
// wrapped methods // wrapped methods
}; };
namespace StaticQVariantWrapMethods { namespace StaticQVariantWrapMethods {
DLL_EXPORT Napi::Value converToQVariant(const Napi::CallbackInfo& info); DLL_EXPORT Napi::Value convertToQVariant(const Napi::CallbackInfo& info);
} // namespace StaticQVariantWrapMethods } // namespace StaticQVariantWrapMethods

View File

@ -0,0 +1,67 @@
#pragma once
#include <QApplication>
#include <QGuiApplication>
#include <QWindow>
#include "Extras/Export/export.h"
#include "QtCore/QObject/qobject_macro.h"
#include "QtGui/QScreen/qscreen_wrap.h"
#include "core/WrapperCache/wrappercache.h"
#include "napi.h"
class DLL_EXPORT NApplication : public QApplication, public EventWidget {
Q_OBJECT
EVENTWIDGET_IMPLEMENTATIONS(QApplication)
public:
using QApplication::QApplication; // inherit all constructors of QApplication
virtual void connectSignalsToEventEmitter() {
// Qt Connects: Implement all signal connects here
QOBJECT_SIGNALS
QObject::connect(
this, &QGuiApplication::applicationDisplayNameChanged, [=]() {
Napi::Env env = this->emitOnNode.Env();
Napi::HandleScope scope(env);
this->emitOnNode.Call(
{Napi::String::New(env, "applicationDisplayNameChanged")});
});
QObject::connect(
this, &QGuiApplication::focusWindowChanged, [=](QWindow* focusWindow) {
Napi::Env env = this->emitOnNode.Env();
Napi::HandleScope scope(env);
this->emitOnNode.Call({Napi::String::New(env, "focusWindowChanged")});
});
QObject::connect(this, &QGuiApplication::lastWindowClosed, [=]() {
Napi::Env env = this->emitOnNode.Env();
Napi::HandleScope scope(env);
this->emitOnNode.Call({Napi::String::New(env, "lastWindowClosed")});
});
QObject::connect(
this, &QGuiApplication::primaryScreenChanged, [=](QScreen* screen) {
Napi::Env env = this->emitOnNode.Env();
Napi::HandleScope scope(env);
auto instance = WrapperCache::instance.getWrapper(env, screen, true);
this->emitOnNode.Call(
{Napi::String::New(env, "primaryScreenChanged"), instance});
});
QObject::connect(this, &QGuiApplication::screenAdded, [=](QScreen* screen) {
Napi::Env env = this->emitOnNode.Env();
Napi::HandleScope scope(env);
auto instance = WrapperCache::instance.getWrapper(env, screen, true);
this->emitOnNode.Call({Napi::String::New(env, "screenAdded"), instance});
});
QObject::connect(
this, &QGuiApplication::screenRemoved, [=](QScreen* screen) {
Napi::Env env = this->emitOnNode.Env();
Napi::HandleScope scope(env);
auto instance = WrapperCache::instance.getWrapper(env, screen, true);
this->emitOnNode.Call(
{Napi::String::New(env, "screenRemoved"), instance});
});
}
};

View File

@ -2,19 +2,17 @@
#include <napi.h> #include <napi.h>
#include <QApplication>
#include <QPointer> #include <QPointer>
#include "Extras/Utils/nutils.h" #include "Extras/Export/export.h"
#include "core/Component/component_macro.h" #include "QtCore/QObject/qobject_macro.h"
#include "napplication.hpp"
class DLL_EXPORT QApplicationWrap : public Napi::ObjectWrap<QApplicationWrap> { class DLL_EXPORT QApplicationWrap : public Napi::ObjectWrap<QApplicationWrap> {
COMPONENT_WRAPPED_METHODS_DECLARATION QOBJECT_WRAPPED_METHODS_DECLARATION
private: private:
QPointer<QApplication> instance; QPointer<NApplication> instance;
static int argc;
static char** argv;
bool _wasManuallyCreated = false; bool _wasManuallyCreated = false;
public: public:
@ -22,7 +20,7 @@ class DLL_EXPORT QApplicationWrap : public Napi::ObjectWrap<QApplicationWrap> {
static Napi::Object init(Napi::Env env, Napi::Object exports); static Napi::Object init(Napi::Env env, Napi::Object exports);
QApplicationWrap(const Napi::CallbackInfo& info); QApplicationWrap(const Napi::CallbackInfo& info);
~QApplicationWrap(); ~QApplicationWrap();
QApplication* getInternalInstance(); NApplication* getInternalInstance();
// Wrapped methods // Wrapped methods
Napi::Value processEvents(const Napi::CallbackInfo& info); Napi::Value processEvents(const Napi::CallbackInfo& info);
Napi::Value exec(const Napi::CallbackInfo& info); Napi::Value exec(const Napi::CallbackInfo& info);
@ -30,10 +28,16 @@ class DLL_EXPORT QApplicationWrap : public Napi::ObjectWrap<QApplicationWrap> {
Napi::Value exit(const Napi::CallbackInfo& info); Napi::Value exit(const Napi::CallbackInfo& info);
Napi::Value setQuitOnLastWindowClosed(const Napi::CallbackInfo& info); Napi::Value setQuitOnLastWindowClosed(const Napi::CallbackInfo& info);
Napi::Value quitOnLastWindowClosed(const Napi::CallbackInfo& info); Napi::Value quitOnLastWindowClosed(const Napi::CallbackInfo& info);
Napi::Value palette(const Napi::CallbackInfo& info);
Napi::Value setStyleSheet(const Napi::CallbackInfo& info);
Napi::Value devicePixelRatio(const Napi::CallbackInfo& info);
}; };
namespace StaticQApplicationWrapMethods { namespace StaticQApplicationWrapMethods {
DLL_EXPORT Napi::Value instance(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value clipboard(const Napi::CallbackInfo& info); DLL_EXPORT Napi::Value clipboard(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value instance(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value primaryScreen(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value screens(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value setStyle(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value style(const Napi::CallbackInfo& info); DLL_EXPORT Napi::Value style(const Napi::CallbackInfo& info);
} // namespace StaticQApplicationWrapMethods } // namespace StaticQApplicationWrapMethods

View File

@ -0,0 +1,33 @@
#pragma once
#include <napi.h>
#include <QBrush>
#include "Extras/Export/export.h"
#include "core/Component/component_macro.h"
class DLL_EXPORT QBrushWrap : public Napi::ObjectWrap<QBrushWrap> {
COMPONENT_WRAPPED_METHODS_DECLARATION
private:
std::unique_ptr<QBrush> instance;
public:
static Napi::FunctionReference constructor;
static Napi::Object init(Napi::Env env, Napi::Object exports);
QBrushWrap(const Napi::CallbackInfo& info);
~QBrushWrap();
QBrush* getInternalInstance();
// Wrapped methods
Napi::Value isOpaque(const Napi::CallbackInfo& info);
Napi::Value setColor(const Napi::CallbackInfo& info);
Napi::Value color(const Napi::CallbackInfo& info);
Napi::Value setStyle(const Napi::CallbackInfo& info);
Napi::Value style(const Napi::CallbackInfo& info);
Napi::Value setTexture(const Napi::CallbackInfo& info);
Napi::Value texture(const Napi::CallbackInfo& info);
};
namespace StaticQBrushWrapMethods {
Napi::Value fromQVariant(const Napi::CallbackInfo& info);
} // namespace StaticQBrushWrapMethods

View File

@ -3,23 +3,34 @@
#include <napi.h> #include <napi.h>
#include <QClipboard> #include <QClipboard>
#include <QPointer>
#include "Extras/Utils/nutils.h" #include "Extras/Export/export.h"
#include "core/Component/component_macro.h" #include "QtCore/QObject/qobject_macro.h"
class DLL_EXPORT QClipboardWrap : public Napi::ObjectWrap<QClipboardWrap> { class DLL_EXPORT QClipboardWrap : public Napi::ObjectWrap<QClipboardWrap>,
COMPONENT_WRAPPED_METHODS_DECLARATION public EventWidget {
QOBJECT_WRAPPED_METHODS_DECLARATION_WITH_EVENT_SOURCE(this)
// Note: We don't use EVENTWIDGET_IMPLEMENTATIONS() here because this class
// doesn't handle any QEvents.
QOBJECT_SET_PARENT_IMPL
private: private:
QClipboard* instance; QPointer<QClipboard> instance;
public: public:
static Napi::FunctionReference constructor; static Napi::FunctionReference constructor;
static Napi::Object init(Napi::Env env, Napi::Object exports); static Napi::Object init(Napi::Env env, Napi::Object exports);
QClipboardWrap(const Napi::CallbackInfo& info); QClipboardWrap(const Napi::CallbackInfo& info);
QClipboard* getInternalInstance(); QClipboard* getInternalInstance();
virtual void connectSignalsToEventEmitter();
// Wrapped methods // Wrapped methods
Napi::Value clear(const Napi::CallbackInfo& info); Napi::Value clear(const Napi::CallbackInfo& info);
Napi::Value setText(const Napi::CallbackInfo& info); Napi::Value setText(const Napi::CallbackInfo& info);
Napi::Value text(const Napi::CallbackInfo& info); Napi::Value text(const Napi::CallbackInfo& info);
Napi::Value setPixmap(const Napi::CallbackInfo& info);
Napi::Value pixmap(const Napi::CallbackInfo& info);
}; };

View File

@ -4,7 +4,7 @@
#include <QColor> #include <QColor>
#include "Extras/Utils/nutils.h" #include "Extras/Export/export.h"
#include "core/Component/component_macro.h" #include "core/Component/component_macro.h"
class DLL_EXPORT QColorWrap : public Napi::ObjectWrap<QColorWrap> { class DLL_EXPORT QColorWrap : public Napi::ObjectWrap<QColorWrap> {
@ -27,6 +27,8 @@ class DLL_EXPORT QColorWrap : public Napi::ObjectWrap<QColorWrap> {
Napi::Value blue(const Napi::CallbackInfo& info); Napi::Value blue(const Napi::CallbackInfo& info);
Napi::Value setAlpha(const Napi::CallbackInfo& info); Napi::Value setAlpha(const Napi::CallbackInfo& info);
Napi::Value alpha(const Napi::CallbackInfo& info); Napi::Value alpha(const Napi::CallbackInfo& info);
Napi::Value rgb(const Napi::CallbackInfo& info);
Napi::Value rgba(const Napi::CallbackInfo& info);
}; };
namespace StaticQColorWrapMethods { namespace StaticQColorWrapMethods {

View File

@ -4,7 +4,7 @@
#include <QCursor> #include <QCursor>
#include "Extras/Utils/nutils.h" #include "Extras/Export/export.h"
#include "core/Component/component_macro.h" #include "core/Component/component_macro.h"
class DLL_EXPORT QCursorWrap : public Napi::ObjectWrap<QCursorWrap> { class DLL_EXPORT QCursorWrap : public Napi::ObjectWrap<QCursorWrap> {

View File

@ -0,0 +1,25 @@
#pragma once
#include <QDrag>
#include "Extras/Export/export.h"
#include "QtCore/QObject/qobject_macro.h"
#include "core/Events/eventwidget.h"
#include "core/Events/eventwidget_macro.h"
class DLL_EXPORT NDrag : public QDrag, public EventWidget {
Q_OBJECT
EVENTWIDGET_IMPLEMENTATIONS(QDrag)
public:
using QDrag::QDrag;
virtual void connectSignalsToEventEmitter() {
QOBJECT_SIGNALS
QObject::connect(this, &QDrag::actionChanged, [=](Qt::DropAction action) {
Napi::Env env = this->emitOnNode.Env();
Napi::HandleScope scope(env);
this->emitOnNode.Call(
{Napi::String::New(env, "actionChanged"),
Napi::Number::From(env, static_cast<int>(action))});
});
}
};

View File

@ -0,0 +1,53 @@
#pragma once
#include <napi.h>
#include <QDrag>
#include "Extras/Export/export.h"
#include "QtGui/QDrag/ndrag.hpp"
#include "core/Component/component_macro.h"
/*
- Note that setMimeData() assigns ownership of the QMimeData object to the QDrag
object.
- The QDrag must be constructed on the heap with a parent QObject to ensure that
Qt can clean up after the drag and drop operation has been completed
*/
class DLL_EXPORT QDragWrap : public Napi::ObjectWrap<QDragWrap> {
COMPONENT_WRAPPED_METHODS_DECLARATION
private:
// A guarded pointer, QPointer<T>, behaves like a normal C++ pointer T *,
// except that it is automatically cleared when the referenced object is
// destroyed (unlike normal C++ pointers, which become "dangling pointers" in
// such cases). T must be a subclass of QObject.
QPointer<QDrag> instance;
public:
static Napi::Object init(Napi::Env env, Napi::Object exports);
QDragWrap(const Napi::CallbackInfo& info);
~QDragWrap();
QDrag* getInternalInstance();
// class constructor
static Napi::FunctionReference constructor;
// wrapped methods
Napi::Value defaultAction(const Napi::CallbackInfo& info);
Napi::Value dragCursor(const Napi::CallbackInfo& info);
Napi::Value exec(const Napi::CallbackInfo& info);
Napi::Value hotSpot(const Napi::CallbackInfo& info);
Napi::Value pixmap(const Napi::CallbackInfo& info);
Napi::Value setDragCursor(const Napi::CallbackInfo& info);
Napi::Value setHotSpot(const Napi::CallbackInfo& info);
Napi::Value setPixmap(const Napi::CallbackInfo& info);
Napi::Value supportedActions(const Napi::CallbackInfo& info);
Napi::Value mimeData(const Napi::CallbackInfo& info);
Napi::Value setMimeData(const Napi::CallbackInfo& info);
Napi::Value source(const Napi::CallbackInfo& info);
Napi::Value target(const Napi::CallbackInfo& info);
};
namespace StaticQDragWrapMethods {
DLL_EXPORT Napi::Value cancel(const Napi::CallbackInfo& info);
}

View File

@ -0,0 +1,27 @@
#pragma once
#include <napi.h>
#include <QDragLeaveEvent>
#include "Extras/Export/export.h"
#include "QtGui/QEvent/QEvent/qevent_macro.h"
#include "core/Component/component_macro.h"
class DLL_EXPORT QDragLeaveEventWrap
: public Napi::ObjectWrap<QDragLeaveEventWrap> {
COMPONENT_WRAPPED_METHODS_DECLARATION
QEVENT_WRAPPED_METHODS_DECLARATION
private:
QDragLeaveEvent* instance;
public:
static Napi::Object init(Napi::Env env, Napi::Object exports);
QDragLeaveEventWrap(const Napi::CallbackInfo& info);
~QDragLeaveEventWrap();
QDragLeaveEvent* getInternalInstance();
// class constructor
static Napi::FunctionReference constructor;
// wrapped methods (none)
};

View File

@ -0,0 +1,49 @@
#pragma once
#include <napi.h>
#include <QDragMoveEvent>
#include "Extras/Export/export.h"
#include "core/Component/component_macro.h"
class DLL_EXPORT QDragMoveEventWrap
: public Napi::ObjectWrap<QDragMoveEventWrap> {
COMPONENT_WRAPPED_METHODS_DECLARATION
private:
QDragMoveEvent* instance;
public:
static Napi::Object init(Napi::Env env, Napi::Object exports);
QDragMoveEventWrap(const Napi::CallbackInfo& info);
~QDragMoveEventWrap();
QDragMoveEvent* getInternalInstance();
// class constructor
static Napi::FunctionReference constructor;
// methods of QDragMoveEvent itself
// Napi::Value accept(const Napi::CallbackInfo& info); //already in qevent
Napi::Value answerRect(const Napi::CallbackInfo& info);
// Napi::Value ignore(const Napi::CallbackInfo& info); //already in qevent
// methods copied from QDropEvent
Napi::Value acceptProposedAction(const Napi::CallbackInfo& info);
Napi::Value dropAction(const Napi::CallbackInfo& info);
Napi::Value keyboardModifiers(const Napi::CallbackInfo& info);
Napi::Value mouseButtons(const Napi::CallbackInfo& info);
Napi::Value mimeData(const Napi::CallbackInfo& info);
Napi::Value pos(const Napi::CallbackInfo& info);
Napi::Value possibleActions(const Napi::CallbackInfo& info);
Napi::Value proposedAction(const Napi::CallbackInfo& info);
Napi::Value setDropAction(const Napi::CallbackInfo& info);
// Methods from QEvent (Not using macro because accept and ignore are
// overloaded)
Napi::Value accept(const Napi::CallbackInfo& info);
Napi::Value ignore(const Napi::CallbackInfo& info);
Napi::Value isAccepted(const Napi::CallbackInfo& info);
Napi::Value setAccepted(const Napi::CallbackInfo& info);
Napi::Value spontaneous(const Napi::CallbackInfo& info);
Napi::Value _type(const Napi::CallbackInfo& info);
};

View File

@ -0,0 +1,37 @@
#pragma once
#include <napi.h>
#include <QDropEvent>
#include "Extras/Export/export.h"
#include "QtGui/QEvent/QEvent/qevent_macro.h"
#include "core/Component/component_macro.h"
class DLL_EXPORT QDropEventWrap : public Napi::ObjectWrap<QDropEventWrap> {
COMPONENT_WRAPPED_METHODS_DECLARATION
private:
QDropEvent* instance;
public:
static Napi::Object init(Napi::Env env, Napi::Object exports);
QDropEventWrap(const Napi::CallbackInfo& info);
~QDropEventWrap();
QDropEvent* getInternalInstance();
// class constructor
static Napi::FunctionReference constructor;
// wrapped methods
Napi::Value acceptProposedAction(const Napi::CallbackInfo& info);
Napi::Value dropAction(const Napi::CallbackInfo& info);
Napi::Value keyboardModifiers(const Napi::CallbackInfo& info);
Napi::Value mouseButtons(const Napi::CallbackInfo& info);
Napi::Value mimeData(const Napi::CallbackInfo& info);
Napi::Value pos(const Napi::CallbackInfo& info);
Napi::Value possibleActions(const Napi::CallbackInfo& info);
Napi::Value proposedAction(const Napi::CallbackInfo& info);
Napi::Value setDropAction(const Napi::CallbackInfo& info);
// Methods from QEvent
QEVENT_WRAPPED_METHODS_DECLARATION
};

View File

@ -0,0 +1,46 @@
#ifndef QEVENT_WRAPPED_METHODS_DECLARATION
#define QEVENT_WRAPPED_METHODS_DECLARATION \
Napi::Value accept(const Napi::CallbackInfo& info) { \
Napi::Env env = info.Env(); \
this->instance->accept(); \
return env.Null(); \
} \
Napi::Value ignore(const Napi::CallbackInfo& info) { \
Napi::Env env = info.Env(); \
this->instance->ignore(); \
return env.Null(); \
} \
Napi::Value isAccepted(const Napi::CallbackInfo& info) { \
Napi::Env env = info.Env(); \
bool v = this->instance->isAccepted(); \
return Napi::Boolean::From(env, v); \
} \
Napi::Value setAccepted(const Napi::CallbackInfo& info) { \
Napi::Env env = info.Env(); \
bool v = info[0].As<Napi::Boolean>().Value(); \
this->instance->setAccepted(v); \
return env.Null(); \
} \
Napi::Value spontaneous(const Napi::CallbackInfo& info) { \
Napi::Env env = info.Env(); \
bool v = this->instance->spontaneous(); \
return Napi::Boolean::From(env, v); \
} \
Napi::Value _type(const Napi::CallbackInfo& info) { \
Napi::Env env = info.Env(); \
int v = static_cast<int>(this->instance->type()); \
return Napi::Number::From(env, v); \
}
#endif
#ifndef QEVENT_WRAPPED_METHODS_EXPORT_DEFINE
#define QEVENT_WRAPPED_METHODS_EXPORT_DEFINE(WidgetWrapName) \
InstanceMethod("accept", &WidgetWrapName::accept), \
InstanceMethod("ignore", &WidgetWrapName::ignore), \
InstanceMethod("isAccepted", &WidgetWrapName::isAccepted), \
InstanceMethod("setAccepted", &WidgetWrapName::setAccepted), \
InstanceMethod("spontaneous", &WidgetWrapName::spontaneous), \
InstanceMethod( \
"_type", \
&WidgetWrapName::_type), // Rename to _type to prevent conflict
#endif

View File

@ -0,0 +1,19 @@
#ifndef QINPUTEVENT_WRAPPED_METHODS_DECLARATION
#define QINPUTEVENT_WRAPPED_METHODS_DECLARATION \
Napi::Value modifiers(const Napi::CallbackInfo& info) { \
Napi::Env env = info.Env(); \
uint v = static_cast<uint>(this->instance->modifiers()); \
return Napi::Number::From(env, v); \
} \
Napi::Value timestamp(const Napi::CallbackInfo& info) { \
Napi::Env env = info.Env(); \
ulong timestamp = this->instance->timestamp(); \
return Napi::Number::From(env, timestamp); \
}
#endif
#ifndef QINPUTEVENT_WRAPPED_METHODS_EXPORT_DEFINE
#define QINPUTEVENT_WRAPPED_METHODS_EXPORT_DEFINE(WidgetWrapName) \
InstanceMethod("modifiers", &WidgetWrapName::modifiers), \
InstanceMethod("timestamp", &WidgetWrapName::timestamp),
#endif

View File

@ -0,0 +1,32 @@
#pragma once
#include <napi.h>
#include <QInputMethodEvent>
#include "Extras/Export/export.h"
#include "QtGui/QEvent/QEvent/qevent_macro.h"
#include "core/Component/component_macro.h"
class DLL_EXPORT QInputMethodEventWrap
: public Napi::ObjectWrap<QInputMethodEventWrap> {
COMPONENT_WRAPPED_METHODS_DECLARATION
QEVENT_WRAPPED_METHODS_DECLARATION
private:
QInputMethodEvent* instance;
public:
static Napi::Object init(Napi::Env env, Napi::Object exports);
QInputMethodEventWrap(const Napi::CallbackInfo& info);
~QInputMethodEventWrap();
QInputMethodEvent* getInternalInstance();
// class constructor
static Napi::FunctionReference constructor;
// wrapped methods
Napi::Value commitString(const Napi::CallbackInfo& info);
Napi::Value preeditString(const Napi::CallbackInfo& info);
Napi::Value replacementLength(const Napi::CallbackInfo& info);
Napi::Value replacementStart(const Napi::CallbackInfo& info);
Napi::Value setCommitString(const Napi::CallbackInfo& info);
};

View File

@ -0,0 +1,30 @@
#pragma once
#include <napi.h>
#include <QInputMethodQueryEvent>
#include "Extras/Export/export.h"
#include "QtGui/QEvent/QEvent/qevent_macro.h"
#include "core/Component/component_macro.h"
class DLL_EXPORT QInputMethodQueryEventWrap
: public Napi::ObjectWrap<QInputMethodQueryEventWrap> {
COMPONENT_WRAPPED_METHODS_DECLARATION
QEVENT_WRAPPED_METHODS_DECLARATION
private:
QInputMethodQueryEvent* instance;
public:
static Napi::Object init(Napi::Env env, Napi::Object exports);
QInputMethodQueryEventWrap(const Napi::CallbackInfo& info);
~QInputMethodQueryEventWrap();
QInputMethodQueryEvent* getInternalInstance();
// class constructor
static Napi::FunctionReference constructor;
// wrapped methods
Napi::Value queries(const Napi::CallbackInfo& info);
Napi::Value setValue(const Napi::CallbackInfo& info);
Napi::Value value(const Napi::CallbackInfo& info);
};

View File

@ -4,11 +4,15 @@
#include <QKeyEvent> #include <QKeyEvent>
#include "Extras/Utils/nutils.h" #include "Extras/Export/export.h"
#include "QtGui/QEvent/QEvent/qevent_macro.h"
#include "QtGui/QEvent/QInputEvent/qinputevent_macro.h"
#include "core/Component/component_macro.h" #include "core/Component/component_macro.h"
class DLL_EXPORT QKeyEventWrap : public Napi::ObjectWrap<QKeyEventWrap> { class DLL_EXPORT QKeyEventWrap : public Napi::ObjectWrap<QKeyEventWrap> {
COMPONENT_WRAPPED_METHODS_DECLARATION COMPONENT_WRAPPED_METHODS_DECLARATION
QEVENT_WRAPPED_METHODS_DECLARATION
QINPUTEVENT_WRAPPED_METHODS_DECLARATION
private: private:
QKeyEvent* instance; QKeyEvent* instance;
@ -23,7 +27,6 @@ class DLL_EXPORT QKeyEventWrap : public Napi::ObjectWrap<QKeyEventWrap> {
// wrapped methods // wrapped methods
Napi::Value text(const Napi::CallbackInfo& info); Napi::Value text(const Napi::CallbackInfo& info);
Napi::Value key(const Napi::CallbackInfo& info); Napi::Value key(const Napi::CallbackInfo& info);
Napi::Value modifiers(const Napi::CallbackInfo& info);
Napi::Value count(const Napi::CallbackInfo& info); Napi::Value count(const Napi::CallbackInfo& info);
Napi::Value isAutoRepeat(const Napi::CallbackInfo& info); Napi::Value isAutoRepeat(const Napi::CallbackInfo& info);
}; };

View File

@ -4,11 +4,15 @@
#include <QMouseEvent> #include <QMouseEvent>
#include "Extras/Utils/nutils.h" #include "Extras/Export/export.h"
#include "QtGui/QEvent/QEvent/qevent_macro.h"
#include "QtGui/QEvent/QInputEvent/qinputevent_macro.h"
#include "core/Component/component_macro.h" #include "core/Component/component_macro.h"
class DLL_EXPORT QMouseEventWrap : public Napi::ObjectWrap<QMouseEventWrap> { class DLL_EXPORT QMouseEventWrap : public Napi::ObjectWrap<QMouseEventWrap> {
COMPONENT_WRAPPED_METHODS_DECLARATION COMPONENT_WRAPPED_METHODS_DECLARATION
QEVENT_WRAPPED_METHODS_DECLARATION
QINPUTEVENT_WRAPPED_METHODS_DECLARATION
private: private:
QMouseEvent* instance; QMouseEvent* instance;
@ -22,6 +26,7 @@ class DLL_EXPORT QMouseEventWrap : public Napi::ObjectWrap<QMouseEventWrap> {
static Napi::FunctionReference constructor; static Napi::FunctionReference constructor;
// wrapped methods // wrapped methods
Napi::Value button(const Napi::CallbackInfo& info); Napi::Value button(const Napi::CallbackInfo& info);
Napi::Value buttons(const Napi::CallbackInfo& info);
Napi::Value x(const Napi::CallbackInfo& info); Napi::Value x(const Napi::CallbackInfo& info);
Napi::Value y(const Napi::CallbackInfo& info); Napi::Value y(const Napi::CallbackInfo& info);
Napi::Value globalX(const Napi::CallbackInfo& info); Napi::Value globalX(const Napi::CallbackInfo& info);

View File

@ -0,0 +1,28 @@
#pragma once
#include <napi.h>
#include <QMoveEvent>
#include "Extras/Export/export.h"
#include "QtGui/QEvent/QEvent/qevent_macro.h"
#include "core/Component/component_macro.h"
class DLL_EXPORT QMoveEventWrap : public Napi::ObjectWrap<QMoveEventWrap> {
COMPONENT_WRAPPED_METHODS_DECLARATION
QEVENT_WRAPPED_METHODS_DECLARATION
private:
QMoveEvent* instance;
public:
static Napi::Object init(Napi::Env env, Napi::Object exports);
QMoveEventWrap(const Napi::CallbackInfo& info);
~QMoveEventWrap();
QMoveEvent* getInternalInstance();
// class constructor
static Napi::FunctionReference constructor;
// wrapped methods
Napi::Value oldPos(const Napi::CallbackInfo& info);
Napi::Value pos(const Napi::CallbackInfo& info);
};

View File

@ -0,0 +1,36 @@
#pragma once
#include <napi.h>
#include <QNativeGestureEvent>
#include "Extras/Export/export.h"
#include "QtGui/QEvent/QEvent/qevent_macro.h"
#include "QtGui/QEvent/QInputEvent/qinputevent_macro.h"
#include "core/Component/component_macro.h"
class DLL_EXPORT QNativeGestureEventWrap
: public Napi::ObjectWrap<QNativeGestureEventWrap> {
COMPONENT_WRAPPED_METHODS_DECLARATION
QEVENT_WRAPPED_METHODS_DECLARATION
QINPUTEVENT_WRAPPED_METHODS_DECLARATION
private:
QNativeGestureEvent* instance;
public:
static Napi::Object init(Napi::Env env, Napi::Object exports);
QNativeGestureEventWrap(const Napi::CallbackInfo& info);
~QNativeGestureEventWrap();
QNativeGestureEvent* getInternalInstance();
// class constructor
static Napi::FunctionReference constructor;
// wrapped methods
Napi::Value gestureType(const Napi::CallbackInfo& info);
Napi::Value globalPos(const Napi::CallbackInfo& info);
Napi::Value localPos(const Napi::CallbackInfo& info);
Napi::Value pos(const Napi::CallbackInfo& info);
Napi::Value screenPos(const Napi::CallbackInfo& info);
Napi::Value windowPos(const Napi::CallbackInfo& info);
Napi::Value value(const Napi::CallbackInfo& info);
};

View File

@ -0,0 +1,25 @@
#pragma once
#include <napi.h>
#include <QPaintEvent>
#include "Extras/Export/export.h"
#include "core/Component/component_macro.h"
class DLL_EXPORT QPaintEventWrap : public Napi::ObjectWrap<QPaintEventWrap> {
COMPONENT_WRAPPED_METHODS_DECLARATION
private:
QPaintEvent* instance;
public:
static Napi::Object init(Napi::Env env, Napi::Object exports);
QPaintEventWrap(const Napi::CallbackInfo& info);
~QPaintEventWrap();
QPaintEvent* getInternalInstance();
// class constructor
static Napi::FunctionReference constructor;
// wrapped methods
Napi::Value rect(const Napi::CallbackInfo& info);
};

View File

@ -0,0 +1,28 @@
#pragma once
#include <napi.h>
#include <QResizeEvent>
#include "Extras/Export/export.h"
#include "QtGui/QEvent/QEvent/qevent_macro.h"
#include "core/Component/component_macro.h"
class DLL_EXPORT QResizeEventWrap : public Napi::ObjectWrap<QResizeEventWrap> {
COMPONENT_WRAPPED_METHODS_DECLARATION
QEVENT_WRAPPED_METHODS_DECLARATION
private:
QResizeEvent* instance;
public:
static Napi::Object init(Napi::Env env, Napi::Object exports);
QResizeEventWrap(const Napi::CallbackInfo& info);
~QResizeEventWrap();
QResizeEvent* getInternalInstance();
// class constructor
static Napi::FunctionReference constructor;
// wrapped methods
Napi::Value oldSize(const Napi::CallbackInfo& info);
Napi::Value size(const Napi::CallbackInfo& info);
};

View File

@ -0,0 +1,48 @@
#pragma once
#include <napi.h>
#include <QTabletEvent>
#include "Extras/Export/export.h"
#include "QtGui/QEvent/QEvent/qevent_macro.h"
#include "QtGui/QEvent/QInputEvent/qinputevent_macro.h"
#include "core/Component/component_macro.h"
class DLL_EXPORT QTabletEventWrap : public Napi::ObjectWrap<QTabletEventWrap> {
COMPONENT_WRAPPED_METHODS_DECLARATION
QEVENT_WRAPPED_METHODS_DECLARATION
QINPUTEVENT_WRAPPED_METHODS_DECLARATION
private:
QTabletEvent* instance;
public:
static Napi::Object init(Napi::Env env, Napi::Object exports);
QTabletEventWrap(const Napi::CallbackInfo& info);
~QTabletEventWrap();
QTabletEvent* getInternalInstance();
// class constructor
static Napi::FunctionReference constructor;
// wrapped methods
Napi::Value button(const Napi::CallbackInfo& info);
Napi::Value buttons(const Napi::CallbackInfo& info);
// Somehow this method isn't found on build?
// Napi::Value deviceType(const Napi::CallbackInfo& info);
Napi::Value globalPos(const Napi::CallbackInfo& info);
Napi::Value globalPosF(const Napi::CallbackInfo& info);
Napi::Value globalX(const Napi::CallbackInfo& info);
Napi::Value globalY(const Napi::CallbackInfo& info);
Napi::Value pointerType(const Napi::CallbackInfo& info);
Napi::Value pos(const Napi::CallbackInfo& info);
Napi::Value posF(const Napi::CallbackInfo& info);
Napi::Value pressure(const Napi::CallbackInfo& info);
Napi::Value rotation(const Napi::CallbackInfo& info);
Napi::Value tangentialPressure(const Napi::CallbackInfo& info);
Napi::Value uniqueId(const Napi::CallbackInfo& info);
Napi::Value x(const Napi::CallbackInfo& info);
Napi::Value xTilt(const Napi::CallbackInfo& info);
Napi::Value y(const Napi::CallbackInfo& info);
Napi::Value yTilt(const Napi::CallbackInfo& info);
Napi::Value z(const Napi::CallbackInfo& info);
};

View File

@ -0,0 +1,27 @@
#pragma once
#include <napi.h>
#include <QTimerEvent>
#include "Extras/Export/export.h"
#include "QtGui/QEvent/QEvent/qevent_macro.h"
#include "core/Component/component_macro.h"
class DLL_EXPORT QTimerEventWrap : public Napi::ObjectWrap<QTimerEventWrap> {
COMPONENT_WRAPPED_METHODS_DECLARATION
QEVENT_WRAPPED_METHODS_DECLARATION
private:
QTimerEvent* instance;
public:
static Napi::Object init(Napi::Env env, Napi::Object exports);
QTimerEventWrap(const Napi::CallbackInfo& info);
~QTimerEventWrap();
QTimerEvent* getInternalInstance();
// class constructor
static Napi::FunctionReference constructor;
// wrapped methods
Napi::Value timerId(const Napi::CallbackInfo& info);
};

View File

@ -0,0 +1,35 @@
#pragma once
#include <napi.h>
#include <QWheelEvent>
#include "Extras/Export/export.h"
#include "QtGui/QEvent/QEvent/qevent_macro.h"
#include "QtGui/QEvent/QInputEvent/qinputevent_macro.h"
#include "core/Component/component_macro.h"
class DLL_EXPORT QWheelEventWrap : public Napi::ObjectWrap<QWheelEventWrap> {
COMPONENT_WRAPPED_METHODS_DECLARATION
QEVENT_WRAPPED_METHODS_DECLARATION
QINPUTEVENT_WRAPPED_METHODS_DECLARATION
private:
QWheelEvent* instance;
public:
static Napi::Object init(Napi::Env env, Napi::Object exports);
QWheelEventWrap(const Napi::CallbackInfo& info);
~QWheelEventWrap();
QWheelEvent* getInternalInstance();
// class constructor
static Napi::FunctionReference constructor;
// wrapped methods
Napi::Value angleDelta(const Napi::CallbackInfo& info);
Napi::Value buttons(const Napi::CallbackInfo& info);
Napi::Value globalPosition(const Napi::CallbackInfo& info);
Napi::Value inverted(const Napi::CallbackInfo& info);
Napi::Value phase(const Napi::CallbackInfo& info);
Napi::Value pixelDelta(const Napi::CallbackInfo& info);
Napi::Value position(const Napi::CallbackInfo& info);
};

View File

@ -4,7 +4,7 @@
#include <QFont> #include <QFont>
#include "Extras/Utils/nutils.h" #include "Extras/Export/export.h"
#include "core/Component/component_macro.h" #include "core/Component/component_macro.h"
class DLL_EXPORT QFontWrap : public Napi::ObjectWrap<QFontWrap> { class DLL_EXPORT QFontWrap : public Napi::ObjectWrap<QFontWrap> {
@ -18,11 +18,15 @@ class DLL_EXPORT QFontWrap : public Napi::ObjectWrap<QFontWrap> {
~QFontWrap(); ~QFontWrap();
QFont* getInternalInstance(); QFont* getInternalInstance();
// Wrapped methods // Wrapped methods
Napi::Value bold(const Napi::CallbackInfo& info);
Napi::Value setBold(const Napi::CallbackInfo& info);
Napi::Value setCapitalization(const Napi::CallbackInfo& info); Napi::Value setCapitalization(const Napi::CallbackInfo& info);
Napi::Value capitalization(const Napi::CallbackInfo& info); Napi::Value capitalization(const Napi::CallbackInfo& info);
Napi::Value setFamily(const Napi::CallbackInfo& info); Napi::Value setFamily(const Napi::CallbackInfo& info);
Napi::Value family(const Napi::CallbackInfo& info); Napi::Value family(const Napi::CallbackInfo& info);
Napi::Value setPixelSize(const Napi::CallbackInfo& info);
Napi::Value setPointSize(const Napi::CallbackInfo& info); Napi::Value setPointSize(const Napi::CallbackInfo& info);
Napi::Value pixelSize(const Napi::CallbackInfo& info);
Napi::Value pointSize(const Napi::CallbackInfo& info); Napi::Value pointSize(const Napi::CallbackInfo& info);
Napi::Value setStretch(const Napi::CallbackInfo& info); Napi::Value setStretch(const Napi::CallbackInfo& info);
Napi::Value stretch(const Napi::CallbackInfo& info); Napi::Value stretch(const Napi::CallbackInfo& info);
@ -30,6 +34,7 @@ class DLL_EXPORT QFontWrap : public Napi::ObjectWrap<QFontWrap> {
Napi::Value weight(const Napi::CallbackInfo& info); Napi::Value weight(const Napi::CallbackInfo& info);
Napi::Value setItalic(const Napi::CallbackInfo& info); Napi::Value setItalic(const Napi::CallbackInfo& info);
Napi::Value italic(const Napi::CallbackInfo& info); Napi::Value italic(const Napi::CallbackInfo& info);
Napi::Value setStyleName(const Napi::CallbackInfo& info);
Napi::Value toString(const Napi::CallbackInfo& info); Napi::Value toString(const Napi::CallbackInfo& info);
COMPONENT_WRAPPED_METHODS_DECLARATION COMPONENT_WRAPPED_METHODS_DECLARATION
}; };

View File

@ -4,7 +4,7 @@
#include <QFontDatabase> #include <QFontDatabase>
#include "Extras/Utils/nutils.h" #include "Extras/Export/export.h"
#include "core/Component/component_macro.h" #include "core/Component/component_macro.h"
class DLL_EXPORT QFontDatabaseWrap class DLL_EXPORT QFontDatabaseWrap
@ -22,11 +22,14 @@ class DLL_EXPORT QFontDatabaseWrap
// Wrapped methods // Wrapped methods
Napi::Value bold(const Napi::CallbackInfo& info); Napi::Value bold(const Napi::CallbackInfo& info);
Napi::Value families(const Napi::CallbackInfo& info); Napi::Value families(const Napi::CallbackInfo& info);
Napi::Value isFixedPitch(const Napi::CallbackInfo& info);
Napi::Value italic(const Napi::CallbackInfo& info); Napi::Value italic(const Napi::CallbackInfo& info);
Napi::Value styles(const Napi::CallbackInfo& info);
Napi::Value weight(const Napi::CallbackInfo& info); Napi::Value weight(const Napi::CallbackInfo& info);
}; };
namespace StaticQFontDatabaseWrapMethods { namespace StaticQFontDatabaseWrapMethods {
DLL_EXPORT Napi::Value addApplicationFont(const Napi::CallbackInfo& info); DLL_EXPORT Napi::Value addApplicationFont(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value applicationFontFamilies(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value removeApplicationFont(const Napi::CallbackInfo& info); DLL_EXPORT Napi::Value removeApplicationFont(const Napi::CallbackInfo& info);
} // namespace StaticQFontDatabaseWrapMethods } // namespace StaticQFontDatabaseWrapMethods

View File

@ -0,0 +1,48 @@
#pragma once
#include <napi.h>
#include <QFontMetrics>
#include "Extras/Export/export.h"
#include "core/Component/component_macro.h"
class DLL_EXPORT QFontMetricsWrap : public Napi::ObjectWrap<QFontMetricsWrap> {
COMPONENT_WRAPPED_METHODS_DECLARATION
private:
std::unique_ptr<QFontMetrics> instance;
public:
static Napi::FunctionReference constructor;
static Napi::Object init(Napi::Env env, Napi::Object exports);
QFontMetricsWrap(const Napi::CallbackInfo& info);
QFontMetrics* getInternalInstance();
// Wrapped methods
Napi::Value ascent(const Napi::CallbackInfo& info);
Napi::Value averageCharWidth(const Napi::CallbackInfo& info);
Napi::Value capHeight(const Napi::CallbackInfo& info);
Napi::Value descent(const Napi::CallbackInfo& info);
Napi::Value fontDpi(const Napi::CallbackInfo& info);
Napi::Value height(const Napi::CallbackInfo& info);
Napi::Value horizontalAdvance(const Napi::CallbackInfo& info);
Napi::Value inFont(const Napi::CallbackInfo& info);
Napi::Value leading(const Napi::CallbackInfo& info);
Napi::Value leftBearing(const Napi::CallbackInfo& info);
Napi::Value lineSpacing(const Napi::CallbackInfo& info);
Napi::Value lineWidth(const Napi::CallbackInfo& info);
Napi::Value overlinePos(const Napi::CallbackInfo& info);
Napi::Value rightBearing(const Napi::CallbackInfo& info);
Napi::Value size(const Napi::CallbackInfo& info);
Napi::Value strikeOutPos(const Napi::CallbackInfo& info);
Napi::Value swap(const Napi::CallbackInfo& info);
Napi::Value underlinePos(const Napi::CallbackInfo& info);
Napi::Value xHeight(const Napi::CallbackInfo& info);
Napi::Value maxWidth(const Napi::CallbackInfo& info);
Napi::Value minLeftBearing(const Napi::CallbackInfo& info);
Napi::Value minRightBearing(const Napi::CallbackInfo& info);
Napi::Value inFontUcs4(const Napi::CallbackInfo& info);
Napi::Value boundingRect(const Napi::CallbackInfo& info);
Napi::Value tightBoundingRect(const Napi::CallbackInfo& info);
Napi::Value elidedText(const Napi::CallbackInfo& info);
};

View File

@ -0,0 +1,49 @@
#pragma once
#include <napi.h>
#include <QFontMetricsF>
#include "Extras/Export/export.h"
#include "core/Component/component_macro.h"
class DLL_EXPORT QFontMetricsFWrap
: public Napi::ObjectWrap<QFontMetricsFWrap> {
COMPONENT_WRAPPED_METHODS_DECLARATION
private:
std::unique_ptr<QFontMetricsF> instance;
public:
static Napi::FunctionReference constructor;
static Napi::Object init(Napi::Env env, Napi::Object exports);
QFontMetricsFWrap(const Napi::CallbackInfo& info);
QFontMetricsF* getInternalInstance();
// Wrapped methods
Napi::Value ascent(const Napi::CallbackInfo& info);
Napi::Value averageCharWidth(const Napi::CallbackInfo& info);
Napi::Value capHeight(const Napi::CallbackInfo& info);
Napi::Value descent(const Napi::CallbackInfo& info);
Napi::Value fontDpi(const Napi::CallbackInfo& info);
Napi::Value height(const Napi::CallbackInfo& info);
Napi::Value horizontalAdvance(const Napi::CallbackInfo& info);
Napi::Value inFont(const Napi::CallbackInfo& info);
Napi::Value leading(const Napi::CallbackInfo& info);
Napi::Value leftBearing(const Napi::CallbackInfo& info);
Napi::Value lineSpacing(const Napi::CallbackInfo& info);
Napi::Value lineWidth(const Napi::CallbackInfo& info);
Napi::Value overlinePos(const Napi::CallbackInfo& info);
Napi::Value rightBearing(const Napi::CallbackInfo& info);
Napi::Value size(const Napi::CallbackInfo& info);
Napi::Value strikeOutPos(const Napi::CallbackInfo& info);
Napi::Value swap(const Napi::CallbackInfo& info);
Napi::Value underlinePos(const Napi::CallbackInfo& info);
Napi::Value xHeight(const Napi::CallbackInfo& info);
Napi::Value maxWidth(const Napi::CallbackInfo& info);
Napi::Value minLeftBearing(const Napi::CallbackInfo& info);
Napi::Value minRightBearing(const Napi::CallbackInfo& info);
Napi::Value inFontUcs4(const Napi::CallbackInfo& info);
Napi::Value boundingRect(const Napi::CallbackInfo& info);
Napi::Value tightBoundingRect(const Napi::CallbackInfo& info);
Napi::Value elidedText(const Napi::CallbackInfo& info);
};

View File

@ -4,7 +4,7 @@
#include <QIcon> #include <QIcon>
#include "Extras/Utils/nutils.h" #include "Extras/Export/export.h"
#include "core/Component/component_macro.h" #include "core/Component/component_macro.h"
class DLL_EXPORT QIconWrap : public Napi::ObjectWrap<QIconWrap> { class DLL_EXPORT QIconWrap : public Napi::ObjectWrap<QIconWrap> {
@ -20,10 +20,18 @@ class DLL_EXPORT QIconWrap : public Napi::ObjectWrap<QIconWrap> {
~QIconWrap(); ~QIconWrap();
QIcon* getInternalInstance(); QIcon* getInternalInstance();
// Wrapped methods // Wrapped methods
Napi::Value actualSize(const Napi::CallbackInfo& info);
Napi::Value addFile(const Napi::CallbackInfo& info);
Napi::Value addPixmap(const Napi::CallbackInfo& info);
Napi::Value availableSizes(const Napi::CallbackInfo& info);
Napi::Value pixmap(const Napi::CallbackInfo& info); Napi::Value pixmap(const Napi::CallbackInfo& info);
Napi::Value isMask(const Napi::CallbackInfo& info); Napi::Value isMask(const Napi::CallbackInfo& info);
Napi::Value isNull(const Napi::CallbackInfo& info);
Napi::Value name(const Napi::CallbackInfo& info);
Napi::Value paint(const Napi::CallbackInfo& info);
Napi::Value setIsMask(const Napi::CallbackInfo& info); Napi::Value setIsMask(const Napi::CallbackInfo& info);
Napi::Value cacheKey(const Napi::CallbackInfo& info); Napi::Value cacheKey(const Napi::CallbackInfo& info);
Napi::Value swap(const Napi::CallbackInfo& info);
}; };
namespace StaticQIconWrapMethods { namespace StaticQIconWrapMethods {

View File

@ -0,0 +1,78 @@
#pragma once
#include <napi.h>
#include <QImage>
#include "Extras/Export/export.h"
#include "core/Component/component_macro.h"
class DLL_EXPORT QImageWrap : public Napi::ObjectWrap<QImageWrap> {
COMPONENT_WRAPPED_METHODS_DECLARATION
private:
std::unique_ptr<QImage> instance;
public:
static Napi::FunctionReference constructor;
static Napi::Object init(Napi::Env env, Napi::Object exports);
QImageWrap(const Napi::CallbackInfo& info);
~QImageWrap();
QImage* getInternalInstance();
Napi::Value allGray(const Napi::CallbackInfo& info);
Napi::Value bitPlaneCount(const Napi::CallbackInfo& info);
Napi::Value bytesPerLine(const Napi::CallbackInfo& info);
Napi::Value cacheKey(const Napi::CallbackInfo& info);
Napi::Value color(const Napi::CallbackInfo& info);
Napi::Value colorCount(const Napi::CallbackInfo& info);
void convertTo(const Napi::CallbackInfo& info);
Napi::Value convertToFormat(const Napi::CallbackInfo& info);
Napi::Value copy(const Napi::CallbackInfo& info);
Napi::Value createAlphaMask(const Napi::CallbackInfo& info);
Napi::Value createHeuristicMask(const Napi::CallbackInfo& info);
Napi::Value depth(const Napi::CallbackInfo& info);
Napi::Value devicePixelRatio(const Napi::CallbackInfo& info);
Napi::Value dotsPerMeterX(const Napi::CallbackInfo& info);
Napi::Value dotsPerMeterY(const Napi::CallbackInfo& info);
void fill(const Napi::CallbackInfo& info);
Napi::Value format(const Napi::CallbackInfo& info);
Napi::Value hasAlphaChannel(const Napi::CallbackInfo& info);
Napi::Value height(const Napi::CallbackInfo& info);
void invertPixels(const Napi::CallbackInfo& info);
Napi::Value isGrayscale(const Napi::CallbackInfo& info);
Napi::Value isNull(const Napi::CallbackInfo& info);
Napi::Value load(const Napi::CallbackInfo& info);
Napi::Value loadFromData(const Napi::CallbackInfo& info);
Napi::Value mirrored(const Napi::CallbackInfo& info);
Napi::Value offset(const Napi::CallbackInfo& info);
Napi::Value pixelColor(const Napi::CallbackInfo& info);
Napi::Value pixelIndex(const Napi::CallbackInfo& info);
Napi::Value rect(const Napi::CallbackInfo& info);
Napi::Value reinterpretAsFormat(const Napi::CallbackInfo& info);
Napi::Value save(const Napi::CallbackInfo& info);
Napi::Value scaled(const Napi::CallbackInfo& info);
Napi::Value scaledToHeight(const Napi::CallbackInfo& info);
Napi::Value scaledToWidth(const Napi::CallbackInfo& info);
void setAlphaChannel(const Napi::CallbackInfo& info);
void setColor(const Napi::CallbackInfo& info);
void setColorCount(const Napi::CallbackInfo& info);
void setDevicePixelRatio(const Napi::CallbackInfo& info);
void setDotsPerMeterX(const Napi::CallbackInfo& info);
void setDotsPerMeterY(const Napi::CallbackInfo& info);
void setOffset(const Napi::CallbackInfo& info);
void setPixel(const Napi::CallbackInfo& info);
void setPixelColor(const Napi::CallbackInfo& info);
void setText(const Napi::CallbackInfo& info);
Napi::Value size(const Napi::CallbackInfo& info);
Napi::Value sizeInBytes(const Napi::CallbackInfo& info);
void swap(const Napi::CallbackInfo& info);
Napi::Value text(const Napi::CallbackInfo& info);
Napi::Value textKeys(const Napi::CallbackInfo& info);
Napi::Value valid(const Napi::CallbackInfo& info);
Napi::Value width(const Napi::CallbackInfo& info);
};
namespace StaticQImageWrapMethods {
DLL_EXPORT Napi::Value fromQVariant(const Napi::CallbackInfo& info);
} // namespace StaticQImageWrapMethods

View File

@ -4,7 +4,7 @@
#include <QKeySequence> #include <QKeySequence>
#include "Extras/Utils/nutils.h" #include "Extras/Export/export.h"
#include "core/Component/component_macro.h" #include "core/Component/component_macro.h"
class DLL_EXPORT QKeySequenceWrap : public Napi::ObjectWrap<QKeySequenceWrap> { class DLL_EXPORT QKeySequenceWrap : public Napi::ObjectWrap<QKeySequenceWrap> {

View File

@ -1,7 +1,7 @@
#pragma once #pragma once
#include <QMovie> #include <QMovie>
#include "Extras/Utils/nutils.h" #include "Extras/Export/export.h"
#include "QtCore/QObject/qobject_macro.h" #include "QtCore/QObject/qobject_macro.h"
#include "QtCore/QRect/qrect_wrap.h" #include "QtCore/QRect/qrect_wrap.h"
#include "QtCore/QSize/qsize_wrap.h" #include "QtCore/QSize/qsize_wrap.h"
@ -14,7 +14,7 @@ class DLL_EXPORT NMovie : public QMovie, public EventWidget {
public: public:
using QMovie::QMovie; using QMovie::QMovie;
void connectSignalsToEventEmitter() { virtual void connectSignalsToEventEmitter() {
QOBJECT_SIGNALS QOBJECT_SIGNALS
// Qt Connects: Implement all signal connects here // Qt Connects: Implement all signal connects here
QObject::connect(this, &QMovie::error, QObject::connect(this, &QMovie::error,

View File

@ -6,7 +6,7 @@
#include <QPointer> #include <QPointer>
#include <QSharedPointer> #include <QSharedPointer>
#include "Extras/Utils/nutils.h" #include "Extras/Export/export.h"
#include "QtCore/QObject/qobject_macro.h" #include "QtCore/QObject/qobject_macro.h"
#include "nmovie.hpp" #include "nmovie.hpp"

View File

@ -0,0 +1,24 @@
#pragma once
#include <napi.h>
#include <QPalette>
#include "Extras/Export/export.h"
#include "core/Component/component_macro.h"
class DLL_EXPORT QPaletteWrap : public Napi::ObjectWrap<QPaletteWrap> {
COMPONENT_WRAPPED_METHODS_DECLARATION
private:
std::unique_ptr<QPalette> instance;
public:
static Napi::FunctionReference constructor;
static Napi::Object init(Napi::Env env, Napi::Object exports);
QPaletteWrap(const Napi::CallbackInfo& info);
~QPaletteWrap();
QPalette* getInternalInstance();
// Wrapped methods
Napi::Value color(const Napi::CallbackInfo& info);
};

View File

@ -0,0 +1,28 @@
#pragma once
#include <napi.h>
#include <QPen>
#include "Extras/Export/export.h"
#include "core/Component/component_macro.h"
class DLL_EXPORT QPenWrap : public Napi::ObjectWrap<QPenWrap> {
COMPONENT_WRAPPED_METHODS_DECLARATION
private:
std::unique_ptr<QPen> instance;
public:
static Napi::FunctionReference constructor;
static Napi::Object init(Napi::Env env, Napi::Object exports);
QPenWrap(const Napi::CallbackInfo& info);
~QPenWrap();
QPen* getInternalInstance();
// Wrapped methods
Napi::Value setColor(const Napi::CallbackInfo& info);
Napi::Value color(const Napi::CallbackInfo& info);
Napi::Value setStyle(const Napi::CallbackInfo& info);
Napi::Value style(const Napi::CallbackInfo& info);
Napi::Value setCapStyle(const Napi::CallbackInfo& info);
Napi::Value setWidth(const Napi::CallbackInfo& info);
};

Some files were not shown because too many files have changed in this diff Show More