Compare commits
300 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f41edc2ea4 | ||
|
|
30ab4442cf | ||
|
|
90e556be6e | ||
|
|
e9ff6a93fb | ||
|
|
5879ad7ec4 | ||
|
|
731d186b01 | ||
|
|
47d98500cf | ||
|
|
2561fd92f9 | ||
|
|
9129cdef0d | ||
|
|
613ee337aa | ||
|
|
bd6595e40a | ||
|
|
d827e51ba4 | ||
|
|
77fd5c5a3f | ||
|
|
a2e5b73107 | ||
|
|
4e42f61faa | ||
|
|
3a04d14872 | ||
|
|
e18e912d11 | ||
|
|
15478751db | ||
|
|
d715a4299d | ||
|
|
09d450aef4 | ||
|
|
e5fd79e4c1 | ||
|
|
86fc6689fb | ||
|
|
d6ba15df55 | ||
|
|
86e9447dd0 | ||
|
|
29e919caad | ||
|
|
88e5149a9f | ||
|
|
33c0b24731 | ||
|
|
d4c443607e | ||
|
|
6422d7faca | ||
|
|
1468612a78 | ||
|
|
bbb0951525 | ||
|
|
47083b4a86 | ||
|
|
5a51e2748b | ||
|
|
93dbf25938 | ||
|
|
898c7f58c9 | ||
|
|
b7d503fd39 | ||
|
|
95da509b83 | ||
|
|
34c8f511d9 | ||
|
|
3f0d00c83c | ||
|
|
79433a5c83 | ||
|
|
abc1d2cf64 | ||
|
|
f7c4d5dfae | ||
|
|
2305b7072b | ||
|
|
643eff4a90 | ||
|
|
e2e06ca027 | ||
|
|
a7df290d58 | ||
|
|
123524d126 | ||
|
|
28b98b055a | ||
|
|
76743cd414 | ||
|
|
9fcc5e99d3 | ||
|
|
4a55d9ec45 | ||
|
|
7d690dc75d | ||
|
|
2ece6d5375 | ||
|
|
421929c147 | ||
|
|
755156c19a | ||
|
|
43deec1c9e | ||
|
|
e20517430e | ||
|
|
16940eca53 | ||
|
|
37d000ee44 | ||
|
|
0db724d40c | ||
|
|
1da7ae6de3 | ||
|
|
1b3478e0cb | ||
|
|
11bf45466d | ||
|
|
b36caeddd2 | ||
|
|
f606ebdd72 | ||
|
|
0f9ad1e028 | ||
|
|
fcdbfb07c3 | ||
|
|
06637c6c0f | ||
|
|
c28fd5d5c3 | ||
|
|
d450841001 | ||
|
|
5191892950 | ||
|
|
bfa531f1f4 | ||
|
|
6aa3f00fa3 | ||
|
|
f3d7d73acc | ||
|
|
880ea7c998 | ||
|
|
bc9bf12e11 | ||
|
|
02f901ddf1 | ||
|
|
cbb3f99dfa | ||
|
|
7bf97ef618 | ||
|
|
1d92cc8f3e | ||
|
|
9faf63d5d3 | ||
|
|
7dcbc32540 | ||
|
|
387555f3c0 | ||
|
|
10ebd00cde | ||
|
|
fda93e9dd5 | ||
|
|
23759b1aaa | ||
|
|
165bb820bc | ||
|
|
83e9c09690 | ||
|
|
b7476a4ea1 | ||
|
|
38b12759c6 | ||
|
|
c6d30f8f9f | ||
|
|
4f40510248 | ||
|
|
c733a41d10 | ||
|
|
81c31f4de3 | ||
|
|
ac1c118ae3 | ||
|
|
7d2dfc1cf2 | ||
|
|
0c2cf50362 | ||
|
|
a485be9c1e | ||
|
|
e2ccec9ba3 | ||
|
|
7d8fb77481 | ||
|
|
4c5ccadfc7 | ||
|
|
69d0e2e3cd | ||
|
|
733c24e6cd | ||
|
|
4155a1f586 | ||
|
|
34ce565bb8 | ||
|
|
d805c7c66d | ||
|
|
3291216bbb | ||
|
|
eb6754fe8a | ||
|
|
b4c9c0d51b | ||
|
|
8058433031 | ||
|
|
c877a2814e | ||
|
|
2865212937 | ||
|
|
ed7da32952 | ||
|
|
a0b53f2e0c | ||
|
|
714bdcbdbb | ||
|
|
a2fd884543 | ||
|
|
93c6c121f6 | ||
|
|
dab7eee4ad | ||
|
|
f90ae67864 | ||
|
|
ddb560abbf | ||
|
|
5de4210cfb | ||
|
|
daf730efd5 | ||
|
|
c61c9c085d | ||
|
|
e0dfc94363 | ||
|
|
9b451ecac3 | ||
|
|
26736d06c8 | ||
|
|
01d3c03fb2 | ||
|
|
b783bbe6d6 | ||
|
|
640c77dd56 | ||
|
|
b6ae8ad1cc | ||
|
|
c5e2485e0e | ||
|
|
de2ce99fdd | ||
|
|
0867b96302 | ||
|
|
78895a002f | ||
|
|
9f9e61289b | ||
|
|
69dea9c4c8 | ||
|
|
94ce790891 | ||
|
|
21ed97037a | ||
|
|
1ab7d13b96 | ||
|
|
47b3d514bb | ||
|
|
e653c3ad1d | ||
|
|
0e33e39759 | ||
|
|
d11ed993ee | ||
|
|
8d4a7f2d00 | ||
|
|
06528cdd67 | ||
|
|
0d71db9b24 | ||
|
|
05a5fdd539 | ||
|
|
b35f386e46 | ||
|
|
59a4f4abb4 | ||
|
|
7ae4a5cb7e | ||
|
|
2dc8319b50 | ||
|
|
eea4f6fe30 | ||
|
|
c44d40b2e5 | ||
|
|
88b2fcbcd1 | ||
|
|
f7f86d5cfa | ||
|
|
2b2d2a65b2 | ||
|
|
123123605c | ||
|
|
710cfa3d31 | ||
|
|
05c690dcd9 | ||
|
|
fa52c674ef | ||
|
|
8ce6dde45b | ||
|
|
bfd45b3a54 | ||
|
|
8ddc4172cd | ||
|
|
81eeaa3a20 | ||
|
|
47c00fabc1 | ||
|
|
3bbb7da6e7 | ||
|
|
c4d9a93e56 | ||
|
|
f92bd65407 | ||
|
|
c91856641c | ||
|
|
3479606f83 | ||
|
|
797835ad79 | ||
|
|
96b3cbe594 | ||
|
|
3ada99b201 | ||
|
|
bd6b127358 | ||
|
|
481062423e | ||
|
|
328dcea8c8 | ||
|
|
f8ed7d3a78 | ||
|
|
12d79a62da | ||
|
|
c7b2e4c8b7 | ||
|
|
91d652ed84 | ||
|
|
590385339c | ||
|
|
44bb1e5f0e | ||
|
|
a4a961666a | ||
|
|
7af718b834 | ||
|
|
8060a631b1 | ||
|
|
01096abede | ||
|
|
8110982412 | ||
|
|
4429959fed | ||
|
|
920e64404d | ||
|
|
87af1db2bc | ||
|
|
391971f80b | ||
|
|
5aab3ed97d | ||
|
|
e6f838375a | ||
|
|
907acb5ad2 | ||
|
|
b6fc24d6e0 | ||
|
|
1b399ef5be | ||
|
|
c3c597df4d | ||
|
|
25f529757e | ||
|
|
edf437f056 | ||
|
|
8c79f3d093 | ||
|
|
55217146ae | ||
|
|
456824c504 | ||
|
|
4f0f64884d | ||
|
|
1f11f1cf8b | ||
|
|
d81b781d1f | ||
|
|
053fc9dc65 | ||
|
|
11c33771c2 | ||
|
|
5fd23f0ba3 | ||
|
|
c209fe2adc | ||
|
|
940351acbe | ||
|
|
f7a4a4d3d1 | ||
|
|
e81b5ae658 | ||
|
|
588093519a | ||
|
|
3a83a7fe62 | ||
|
|
b5a9f30d34 | ||
|
|
25026a55f7 | ||
|
|
467231d4b7 | ||
|
|
3aeb4b09bf | ||
|
|
9eed41ecd8 | ||
|
|
25e0d61e01 | ||
|
|
080bb3626d | ||
|
|
c26a194694 | ||
|
|
a577689cd4 | ||
|
|
d3f6d6d092 | ||
|
|
87e6531c65 | ||
|
|
faa6adcb23 | ||
|
|
880a8433cb | ||
|
|
f319a24ad3 | ||
|
|
17462abae7 | ||
|
|
978526c4e6 | ||
|
|
2901d09d01 | ||
|
|
af64c4820f | ||
|
|
0d01354737 | ||
|
|
d04364a186 | ||
|
|
4a66c65034 | ||
|
|
4eebad6f5f | ||
|
|
281a89508b | ||
|
|
f38c50724d | ||
|
|
76d737340e | ||
|
|
6edf90ee97 | ||
|
|
1b1647892d | ||
|
|
7863875641 | ||
|
|
39edc4e382 | ||
|
|
3f26303d6e | ||
|
|
37fed9dde7 | ||
|
|
d5800fd92f | ||
|
|
a1070a7c26 | ||
|
|
8549a4e1de | ||
|
|
06d735fe89 | ||
|
|
bcd1f8ea0b | ||
|
|
e6d01fc7f5 | ||
|
|
4adef0a280 | ||
|
|
b8a94d8db5 | ||
|
|
1bc346d22c | ||
|
|
1d2a0a6f47 | ||
|
|
f4e0ca1677 | ||
|
|
b5d7e957cf | ||
|
|
2b26ea4ddd | ||
|
|
52d122583e | ||
|
|
8e0e4568fe | ||
|
|
a59274c371 | ||
|
|
d0e9f67a25 | ||
|
|
b2485f6133 | ||
|
|
953b553089 | ||
|
|
4db29780e0 | ||
|
|
69e6d8d6e2 | ||
|
|
5b8eef255d | ||
|
|
a77d2d67f6 | ||
|
|
8f7bde6e0a | ||
|
|
b7ad6ed815 | ||
|
|
99978de2ab | ||
|
|
37cefe6d61 | ||
|
|
6c016c5913 | ||
|
|
a684544982 | ||
|
|
006d35914a | ||
|
|
c85120054e | ||
|
|
3fe8f17f94 | ||
|
|
273254ff4e | ||
|
|
8cad4a51e4 | ||
|
|
371b95608d | ||
|
|
f13673bff1 | ||
|
|
2ac83ca857 | ||
|
|
f1b9665c53 | ||
|
|
bd0804d443 | ||
|
|
107b57849e | ||
|
|
7803f64630 | ||
|
|
94c3315bf0 | ||
|
|
7710efd4db | ||
|
|
c31c67f69e | ||
|
|
f50f08f40d | ||
|
|
d9f035ef44 | ||
|
|
6b4f0160d5 | ||
|
|
ec1529061b | ||
|
|
65db04d3f9 | ||
|
|
9b96a443ce | ||
|
|
2e0bcc158f | ||
|
|
91a2161776 | ||
|
|
7a894873d1 | ||
|
|
8b6abd75f8 | ||
|
|
4c8610a960 |
@ -319,6 +319,89 @@
|
|||||||
"contributions": [
|
"contributions": [
|
||||||
"code"
|
"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,
|
||||||
|
|||||||
@ -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' }],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|||||||
8
.github/workflows/docs.yml
vendored
8
.github/workflows/docs.yml
vendored
@ -9,10 +9,10 @@ jobs:
|
|||||||
gh-release:
|
gh-release:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v1
|
- uses: actions/checkout@v2
|
||||||
- uses: actions/setup-node@v1
|
- uses: actions/setup-node@v2
|
||||||
with:
|
with:
|
||||||
node-version: '14.x'
|
node-version: '16.x'
|
||||||
- name: Add key to allow access to repository
|
- name: Add key to allow access to repository
|
||||||
env:
|
env:
|
||||||
SSH_AUTH_SOCK: /tmp/ssh_agent.sock
|
SSH_AUTH_SOCK: /tmp/ssh_agent.sock
|
||||||
@ -33,7 +33,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
git config --global user.email "actions@gihub.com"
|
git config --global user.email "actions@gihub.com"
|
||||||
git config --global user.name "gh-actions"
|
git config --global user.name "gh-actions"
|
||||||
npm install --ignore-scripts
|
yarn install --ignore-scripts
|
||||||
npm run docs
|
npm run docs
|
||||||
cd website
|
cd website
|
||||||
if [ -e yarn.lock ]; then
|
if [ -e yarn.lock ]; then
|
||||||
|
|||||||
21
.github/workflows/latest.yml
vendored
21
.github/workflows/latest.yml
vendored
@ -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
|
||||||
@ -30,10 +33,10 @@ jobs:
|
|||||||
code: v0.0.0-latest-master
|
code: v0.0.0-latest-master
|
||||||
name: Latest Master Release
|
name: Latest Master Release
|
||||||
body: >
|
body: >
|
||||||
Latest auto release corresponding to commit ${{github.sha}} 🔥.
|
Latest auto release corresponding to commit ${{github.sha}} 🔥.
|
||||||
To install do:
|
To install do:
|
||||||
`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`
|
||||||
or
|
or
|
||||||
`npm install http://master-release.nodegui.org`
|
`npm install http://master-release.nodegui.org`
|
||||||
assets: >
|
assets: >
|
||||||
nodegui-nodegui-0.0.0-latest-master.tgz:nodegui-master.tgz:application/tar+gzip
|
nodegui-nodegui-0.0.0-latest-master.tgz:nodegui-master.tgz:application/tar+gzip
|
||||||
|
|||||||
38
.github/workflows/prebuild.yml
vendored
38
.github/workflows/prebuild.yml
vendored
@ -1,38 +0,0 @@
|
|||||||
on:
|
|
||||||
repository_dispatch:
|
|
||||||
types: [on-demand-build]
|
|
||||||
release:
|
|
||||||
types: [created]
|
|
||||||
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 ubuntu deps
|
|
||||||
# if: contains(matrix.os, 'ubuntu')
|
|
||||||
# run: sudo apt install mesa-common-dev libglu1-mesa-dev
|
|
||||||
# - 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
97
.github/workflows/release.yml
vendored
Normal 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
|
||||||
14
.github/workflows/test.yml
vendored
14
.github/workflows/test.yml
vendored
@ -6,20 +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
|
- name: Install ubuntu deps
|
||||||
if: contains(matrix.os, 'ubuntu')
|
if: contains(matrix.os, 'ubuntu-20.04')
|
||||||
run: sudo apt install mesa-common-dev libglu1-mesa-dev
|
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
|
||||||
|
|||||||
3
.gitignore
vendored
3
.gitignore
vendored
@ -8,4 +8,5 @@ coverage
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
/.idea/
|
/.idea/
|
||||||
/prebuilds
|
/prebuilds
|
||||||
miniqt
|
miniqt
|
||||||
|
cmake-build-debug
|
||||||
|
|||||||
@ -11,6 +11,10 @@ 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"
|
||||||
@ -24,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"
|
||||||
@ -46,27 +52,42 @@ add_library(${CORE_WIDGETS_ADDON} SHARED
|
|||||||
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QDrag/qdrag_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/QWheelEvent/qwheelevent_wrap.cpp"
|
||||||
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QEvent/QNativeGestureEvent/qnativegestureevent_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/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/QDropEvent/qdropevent_wrap.cpp"
|
||||||
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QEvent/QDragMoveEvent/qdragmoveevent_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/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/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/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/QRectF/qrectf_wrap.cpp"
|
||||||
@ -90,6 +111,7 @@ add_library(${CORE_WIDGETS_ADDON} SHARED
|
|||||||
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QFrame/qframe_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/QGraphicsBlurEffect/qgraphicsblureffect_wrap.cpp"
|
||||||
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QGraphicsDropShadowEffect/qgraphicsdropshadoweffect_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/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"
|
||||||
@ -138,7 +160,12 @@ add_library(${CORE_WIDGETS_ADDON} SHARED
|
|||||||
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QStandardItemModel/qstandarditemmodel_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/QStandardItem/qstandarditem_wrap.cpp"
|
||||||
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QSvgWidget/qsvgwidget_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"
|
||||||
@ -200,6 +227,13 @@ add_library(${CORE_WIDGETS_ADDON} SHARED
|
|||||||
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QTextBrowser/ntextbrowser.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/QTextEdit/ntextedit.hpp"
|
||||||
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QSvgWidget/nsvgwidget.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})
|
||||||
@ -217,20 +251,33 @@ target_include_directories(${CORE_WIDGETS_ADDON} PRIVATE
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
add_definitions(/bigobj)
|
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()
|
||||||
|
|
||||||
|
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()
|
endif()
|
||||||
|
|
||||||
target_link_libraries(${CORE_WIDGETS_ADDON} PRIVATE
|
target_link_libraries(${CORE_WIDGETS_ADDON} PRIVATE
|
||||||
"${CMAKE_JS_LIB}"
|
"${CMAKE_JS_LIB}"
|
||||||
Qt5::Widgets
|
Qt6::Widgets
|
||||||
Qt5::Core
|
Qt6::Core
|
||||||
Qt5::Gui
|
Qt6::Gui
|
||||||
Qt5::Svg
|
Qt6::Svg
|
||||||
|
Qt6::SvgWidgets
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
267
README.md
267
README.md
@ -1,20 +1,21 @@
|
|||||||
# NodeGui
|
# NodeGui
|
||||||
|
|
||||||
[](https://spectrum.chat/nodegui)
|
[](#contributors)
|
||||||
[](#contributors)
|
|
||||||
[](https://changelog.com/jsparty/96)
|
[](https://changelog.com/jsparty/96)
|
||||||
|
|
||||||
[](https://github.com/nodegui/nodegui/actions)
|
[](https://github.com/nodegui/nodegui/actions)
|
||||||
|
[](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.
|
||||||
|
|
||||||
<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)**.
|
<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)**.
|
||||||
|
|
||||||
<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://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)**.
|
||||||
|
|
||||||
Visit: https://nodegui.github.io/nodegui for docs.
|
<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" />
|
||||||
|
|
||||||
@ -29,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
|
||||||
|
|
||||||
@ -39,17 +38,17 @@ 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
|
||||||
|
|
||||||
@ -58,39 +57,16 @@ https://github.com/nodegui/examples
|
|||||||
- 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/)
|
- [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
|
||||||
|
|
||||||
NodeGui requires CMake and Compilation Tools as it is a wrapper for a native C++ widget toolkit QT.
|
To install latest stable release:
|
||||||
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
|
|
||||||
|
|
||||||
```
|
|
||||||
sudo apt-get install pkg-config build-essential
|
|
||||||
sudo apt-get install cmake make
|
|
||||||
sudo apt-get install mesa-common-dev libglu1-mesa-dev
|
|
||||||
```
|
|
||||||
|
|
||||||
Then install NodeGui from your command line:
|
|
||||||
|
|
||||||
#### 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
|
||||||
@ -102,13 +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/)
|
- [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)
|
||||||
|
|
||||||
@ -124,11 +112,104 @@ 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
|
## Updating docs
|
||||||
|
|
||||||
@ -182,6 +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/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>
|
||||||
|
|
||||||
@ -194,53 +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" 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/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" 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/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" 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="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" 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="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" 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>
|
<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>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="center"><a href="http://liujunjiang.com"><img src="https://avatars1.githubusercontent.com/u/15191056?v=4" 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="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" 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/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" 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/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" 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="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" 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="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" 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://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" 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>
|
<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 -->
|
||||||
|
|||||||
@ -5,24 +5,26 @@ 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)
|
||||||
target_compile_definitions(${addonName} PRIVATE
|
target_compile_definitions(${addonName} PRIVATE
|
||||||
NAPI_VERSION=${napi_build_version}
|
NAPI_VERSION=${napi_build_version}
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
target_compile_definitions(${addonName} PRIVATE
|
target_compile_definitions(${addonName} PRIVATE
|
||||||
ENUM_BITFIELDS_NOT_SUPPORTED
|
ENUM_BITFIELDS_NOT_SUPPORTED
|
||||||
)
|
)
|
||||||
|
|||||||
@ -16,7 +16,7 @@ macro(AddQodeSupport addonName)
|
|||||||
message(STATUS "Using Qode installation for ${addonName} 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
|
target_link_libraries(${CORE_WIDGETS_ADDON} PRIVATE
|
||||||
"${QODE_BINARY_DIR}\\qode.lib"
|
"${QODE_BINARY_DIR}\\node.lib"
|
||||||
)
|
)
|
||||||
|
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@ -8,7 +8,7 @@ set(CMAKE_AUTOUIC ON)
|
|||||||
|
|
||||||
set(QTCONFIG_FILE ${CMAKE_CURRENT_LIST_DIR}/qtConfig.js)
|
set(QTCONFIG_FILE ${CMAKE_CURRENT_LIST_DIR}/qtConfig.js)
|
||||||
|
|
||||||
macro(AddQtSupport addonName)
|
macro(AddQtSupport addonName)
|
||||||
execute_process(COMMAND node -p "require('${QTCONFIG_FILE}').qtCmakeDir"
|
execute_process(COMMAND node -p "require('${QTCONFIG_FILE}').qtCmakeDir"
|
||||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||||
OUTPUT_VARIABLE QT_CMAKE_HOME_DIR
|
OUTPUT_VARIABLE QT_CMAKE_HOME_DIR
|
||||||
@ -16,10 +16,10 @@ macro(AddQtSupport addonName)
|
|||||||
|
|
||||||
string(REPLACE "\n" "" QT_CMAKE_HOME_DIR "${QT_CMAKE_HOME_DIR}")
|
string(REPLACE "\n" "" QT_CMAKE_HOME_DIR "${QT_CMAKE_HOME_DIR}")
|
||||||
string(REPLACE "\"" "" QT_CMAKE_HOME_DIR "${QT_CMAKE_HOME_DIR}")
|
string(REPLACE "\"" "" QT_CMAKE_HOME_DIR "${QT_CMAKE_HOME_DIR}")
|
||||||
|
|
||||||
message(STATUS "Using QT installation for ${addonName} QT_CMAKE_HOME_DIR:${QT_CMAKE_HOME_DIR}")
|
|
||||||
|
|
||||||
set(Qt5_DIR ${QT_CMAKE_HOME_DIR})
|
message(STATUS "Using Qt installation for ${addonName} QT_CMAKE_HOME_DIR:${QT_CMAKE_HOME_DIR}")
|
||||||
find_package(Qt5 COMPONENTS Widgets Gui Core Svg REQUIRED)
|
|
||||||
|
list(APPEND CMAKE_PREFIX_PATH "${QT_CMAKE_HOME_DIR}/../../..")
|
||||||
|
find_package(Qt6 REQUIRED COMPONENTS Widgets Gui Core Svg SvgWidgets)
|
||||||
|
|
||||||
endmacro(AddQtSupport addonName)
|
endmacro(AddQtSupport addonName)
|
||||||
|
|||||||
@ -3,55 +3,56 @@ const path = require('path');
|
|||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
|
|
||||||
const SETUP_DIR = path.resolve(__dirname, '..', 'miniqt');
|
const SETUP_DIR = path.resolve(__dirname, '..', 'miniqt');
|
||||||
const QT_VERSION = '5.14.1';
|
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 => {
|
const checkIfExists = (fullPath) => {
|
||||||
return () => fs.existsSync(fullPath);
|
return () => fs.existsSync(fullPath);
|
||||||
};
|
};
|
||||||
|
|
||||||
function getMiniQtConfig() {
|
function getMiniQtConfig() {
|
||||||
switch (os.platform()) {
|
switch (os.platform()) {
|
||||||
case 'darwin': {
|
case 'darwin': {
|
||||||
const qtHome = path.resolve(SETUP_DIR, QT_VERSION, 'clang_64');
|
const qtHome = path.resolve(SETUP_DIR, QT_VERSION, 'macos');
|
||||||
return {
|
return {
|
||||||
qtHome,
|
qtHome,
|
||||||
artifacts: [
|
artifacts: [
|
||||||
{
|
{
|
||||||
name: 'Qt Base',
|
name: 'Qt Base',
|
||||||
link: `https://download.qt.io/online/qtsdkrepository/mac_x64/desktop/qt5_5141/qt.qt5.5141.clang_64/5.14.1-0-202001241000qtbase-MacOS-MacOS_10_13-Clang-MacOS-MacOS_10_13-X86_64.7z`,
|
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')),
|
skipSetup: checkIfExists(path.resolve(qtHome, 'plugins', 'platforms', 'libqcocoa.dylib')),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Qt Svg',
|
name: 'Qt Svg',
|
||||||
link: `https://download.qt.io/online/qtsdkrepository/mac_x64/desktop/qt5_5141/qt.qt5.5141.clang_64/5.14.1-0-202001241000qtsvg-MacOS-MacOS_10_13-Clang-MacOS-MacOS_10_13-X86_64.7z`,
|
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')),
|
skipSetup: checkIfExists(path.resolve(qtHome, 'lib', 'QtSvg.framework', 'QtSvg')),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Qt Tools',
|
name: 'Qt Tools',
|
||||||
link: `https://download.qt.io/online/qtsdkrepository/mac_x64/desktop/qt5_5141/qt.qt5.5141.clang_64/5.14.1-0-202001241000qttools-MacOS-MacOS_10_13-Clang-MacOS-MacOS_10_13-X86_64.7z`,
|
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')),
|
skipSetup: checkIfExists(path.resolve(qtHome, 'bin', 'macdeployqt')),
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
case 'win32': {
|
case 'win32': {
|
||||||
const qtHome = path.resolve(SETUP_DIR, QT_VERSION, 'msvc2017_64');
|
const qtHome = path.resolve(SETUP_DIR, QT_VERSION, 'msvc2019_64');
|
||||||
return {
|
return {
|
||||||
qtHome,
|
qtHome,
|
||||||
artifacts: [
|
artifacts: [
|
||||||
{
|
{
|
||||||
name: 'Qt Base',
|
name: 'Qt Base',
|
||||||
link: `https://download.qt.io/online/qtsdkrepository/windows_x86/desktop/qt5_5141/qt.qt5.5141.win64_msvc2017_64/5.14.1-0-202001240957qtbase-Windows-Windows_10-MSVC2017-Windows-Windows_10-X86_64.7z`,
|
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', 'Qt5Core.dll')),
|
skipSetup: checkIfExists(path.resolve(qtHome, 'bin', 'Qt6Core.dll')),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Qt SVG',
|
name: 'Qt SVG',
|
||||||
link: `https://download.qt.io/online/qtsdkrepository/windows_x86/desktop/qt5_5141/qt.qt5.5141.win64_msvc2017_64/5.14.1-0-202001240957qtsvg-Windows-Windows_10-MSVC2017-Windows-Windows_10-X86_64.7z`,
|
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', 'Qt5Svg.dll')),
|
skipSetup: checkIfExists(path.resolve(qtHome, 'bin', 'Qt6Svg.dll')),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Qt Tools',
|
name: 'Qt Tools',
|
||||||
link: `https://download.qt.io/online/qtsdkrepository/windows_x86/desktop/qt5_5141/qt.qt5.5141.win64_msvc2017_64/5.14.1-0-202001240957qttools-Windows-Windows_10-MSVC2017-Windows-Windows_10-X86_64.7z`,
|
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')),
|
skipSetup: checkIfExists(path.resolve(qtHome, 'bin', 'windeployqt.exe')),
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
@ -64,17 +65,17 @@ function getMiniQtConfig() {
|
|||||||
artifacts: [
|
artifacts: [
|
||||||
{
|
{
|
||||||
name: 'Qt Base',
|
name: 'Qt Base',
|
||||||
link: `https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt5_5141/qt.qt5.5141.gcc_64/5.14.1-0-202001240953qtbase-Linux-RHEL_7_6-GCC-Linux-RHEL_7_6-X86_64.7z`,
|
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')),
|
skipSetup: checkIfExists(path.resolve(qtHome, 'bin', 'moc')),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Qt SVG',
|
name: 'Qt SVG',
|
||||||
link: `https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt5_5141/qt.qt5.5141.gcc_64/5.14.1-0-202001240953qtsvg-Linux-RHEL_7_6-GCC-Linux-RHEL_7_6-X86_64.7z`,
|
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', 'libQt5Svg.so')),
|
skipSetup: checkIfExists(path.resolve(qtHome, 'lib', 'libQt6Svg.so')),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Qt ICU',
|
name: 'Qt ICU',
|
||||||
link: `https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt5_5141/qt.qt5.5141.gcc_64/5.14.1-0-202001240953icu-linux-Rhel7.2-x64.7z`,
|
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')),
|
skipSetup: checkIfExists(path.resolve(qtHome, 'lib', 'libicuuc.so')),
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
@ -91,7 +92,7 @@ const miniQt = {
|
|||||||
|
|
||||||
const useCustomQt = Boolean(process.env.QT_INSTALL_DIR);
|
const useCustomQt = Boolean(process.env.QT_INSTALL_DIR);
|
||||||
const qtHome = useCustomQt ? process.env.QT_INSTALL_DIR : miniQt.qtHome;
|
const qtHome = useCustomQt ? process.env.QT_INSTALL_DIR : miniQt.qtHome;
|
||||||
const qtCmakeDir = path.resolve(qtHome, 'lib', 'cmake', 'Qt5');
|
const qtCmakeDir = path.resolve(qtHome, 'lib', 'cmake', 'Qt6');
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
qtHome,
|
qtHome,
|
||||||
|
|||||||
15849
package-lock.json
generated
15849
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
78
package.json
78
package.json
@ -1,65 +1,71 @@
|
|||||||
{
|
{
|
||||||
"name": "@nodegui/nodegui",
|
"name": "@nodegui/nodegui",
|
||||||
"version": "0.26.0",
|
"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,
|
||||||
"bin": {
|
"bin": {
|
||||||
"qode": "./scripts/qode.js"
|
"qode": "scripts/qode.js"
|
||||||
},
|
},
|
||||||
"funding": {
|
"funding": {
|
||||||
"url": "https://github.com/sponsors/master-atul"
|
"url": "https://github.com/sponsors/a7ul"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "cross-env npm run build && node ./scripts/qode.js dist/demo.js",
|
"dev": "npm run build && node ./scripts/qode.js dist/demo.js",
|
||||||
"build": "cross-env tsc && npm run build:addon",
|
"demo": "node ./scripts/qode.js dist/demo.js",
|
||||||
"postinstall": "cross-env npm run setupqt && (node ./scripts/skip.js || npm run prebuild:install || npm run build:addon)",
|
"build": "tsc && npm run build:addon",
|
||||||
"setupqt": "cross-env node ./scripts/setupMiniQt.js",
|
"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",
|
"build:addon": "cross-env CMAKE_BUILD_PARALLEL_LEVEL=8 cmake-js compile",
|
||||||
"prebuild:install": "prebuild-install --backend=cmake-js --runtime=napi --verbose",
|
|
||||||
"test": "node ./scripts/qode.js ./node_modules/jest/bin/jest -i",
|
"test": "node ./scripts/qode.js ./node_modules/jest/bin/jest -i",
|
||||||
"lint:cpp": "cross-env clang-format -i --glob=src/cpp/**/*.[h,c]*",
|
"lint:cpp": "clang-format -i --glob=src/cpp/**/*.[h,c]*",
|
||||||
"lint:ts": "cross-env tsc --noEmit && cross-env eslint './src/**/*.{ts,tsx,js,jsx}' --fix",
|
"lint:ts": "tsc --noEmit && eslint ./src --fix",
|
||||||
"docs": "cross-env typedoc && node ./website/docs/scripts/fixdocs.js",
|
"docs": "typedoc && node ./website/docs/scripts/fixdocs.js",
|
||||||
"qode": "cross-env node ./scripts/qode.js"
|
"qode": "node ./scripts/qode.js",
|
||||||
|
"prepublishOnly": "npm run build"
|
||||||
},
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14.x.x"
|
||||||
|
},
|
||||||
|
"engineStrict": false,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nodegui/artifact-installer": "^1.1.0",
|
"@nodegui/artifact-installer": "^1.1.0",
|
||||||
"@nodegui/qode": "^2.1.0",
|
"@nodegui/qode": "^18.12.1",
|
||||||
"cmake-js": "^6.1.0",
|
"cmake-js": "^6.2.1",
|
||||||
"cross-env": "^7.0.0",
|
"cross-env": "^7.0.3",
|
||||||
"cuid": "^2.1.6",
|
"cuid": "^2.1.8",
|
||||||
"manage-path": "^2.0.0",
|
"manage-path": "^2.0.0",
|
||||||
"memoize-one": "^5.1.1",
|
"memoize-one": "^5.2.1",
|
||||||
"node-addon-api": "^3.0.2",
|
"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.5"
|
"tar": "^6.0.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/bindings": "^1.3.0",
|
"@types/bindings": "^1.5.1",
|
||||||
"@types/jest": "^26.0.14",
|
"@types/jest": "29.2.4",
|
||||||
"@types/node": "^14.11.1",
|
"@types/node": "^16.4.13",
|
||||||
"@typescript-eslint/eslint-plugin": "^2.34.0",
|
"@typescript-eslint/eslint-plugin": "^4.29.0",
|
||||||
"@typescript-eslint/parser": "^2.34.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.11.0",
|
"eslint-config-prettier": "^8.3.0",
|
||||||
"eslint-plugin-prettier": "^3.1.3",
|
"eslint-plugin-prettier": "^3.4.0",
|
||||||
"husky": "^4.3.0",
|
"husky": "^7.0.1",
|
||||||
"jest": "^25.5.4",
|
"jest": "29.3.1",
|
||||||
"prebuild": "^10.0.1",
|
"prettier": "^2.3.2",
|
||||||
"prettier": "^2.1.2",
|
"ts-jest": "29.0.3",
|
||||||
"ts-jest": "^25.5.1",
|
|
||||||
"typedoc": "^0.17.8",
|
"typedoc": "^0.17.8",
|
||||||
"typedoc-plugin-markdown": "^2.4.2",
|
"typedoc-plugin-markdown": "^2.4.2",
|
||||||
"typescript": "^3.9.7"
|
"typescript": "^4.3.5"
|
||||||
},
|
},
|
||||||
"binary": {
|
"binary": {
|
||||||
"napi_versions": [
|
"napi_versions": [
|
||||||
3
|
4
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"husky": {
|
"husky": {
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
#!/usr/bin/env node
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
var os = require('os');
|
||||||
var path = require('path');
|
var path = require('path');
|
||||||
var qodeConfig = require('@nodegui/qode');
|
var qodeConfig = require('@nodegui/qode');
|
||||||
var managePath = require('manage-path');
|
var managePath = require('manage-path');
|
||||||
@ -11,6 +12,12 @@ var proc = require('child_process');
|
|||||||
var alterPath = managePath(process.env);
|
var alterPath = managePath(process.env);
|
||||||
alterPath.unshift(path.join(qtConfig.qtHome, 'bin'));
|
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), {
|
var child = proc.spawn(qodeConfig.qodePath, process.argv.slice(2), {
|
||||||
stdio: 'inherit',
|
stdio: 'inherit',
|
||||||
windowsHide: false,
|
windowsHide: false,
|
||||||
|
|||||||
39
scripts/setupBinary.js
Normal file
39
scripts/setupBinary.js
Normal 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);
|
||||||
|
});
|
||||||
@ -5,7 +5,7 @@ const { miniQt, useCustomQt, qtHome } = require('../config/qtConfig');
|
|||||||
|
|
||||||
async function setupQt() {
|
async function setupQt() {
|
||||||
return Promise.all(
|
return Promise.all(
|
||||||
miniQt.artifacts.map(async artifact =>
|
miniQt.artifacts.map(async (artifact) =>
|
||||||
setupArtifact({
|
setupArtifact({
|
||||||
outDir: miniQt.setupDir,
|
outDir: miniQt.setupDir,
|
||||||
id: 'nodegui-mini-qt',
|
id: 'nodegui-mini-qt',
|
||||||
@ -20,7 +20,7 @@ async function setupQt() {
|
|||||||
if (!useCustomQt) {
|
if (!useCustomQt) {
|
||||||
console.log(`Minimal Qt ${miniQt.version} setup:`);
|
console.log(`Minimal Qt ${miniQt.version} setup:`);
|
||||||
|
|
||||||
setupQt().catch(err => {
|
setupQt().catch((err) => {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
});
|
});
|
||||||
|
|||||||
67
src/cpp/include/deps/yoga/BitUtils.h
Normal file
67
src/cpp/include/deps/yoga/BitUtils.h
Normal 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
|
||||||
@ -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
|
|
||||||
@ -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);
|
||||||
|
}
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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:
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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();
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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;
|
||||||
@ -61,30 +77,36 @@ class YOGA_EXPORT YGStyle {
|
|||||||
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
|
||||||
|
|||||||
@ -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
|
||||||
|
|
||||||
|
|||||||
@ -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) {}
|
||||||
|
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -9,7 +9,6 @@
|
|||||||
|
|
||||||
#include <atomic>
|
#include <atomic>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <stdexcept>
|
|
||||||
|
|
||||||
namespace facebook {
|
namespace facebook {
|
||||||
namespace yoga {
|
namespace yoga {
|
||||||
|
|||||||
@ -7,10 +7,10 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
#include <yoga/YGEnums.h>
|
#include <yoga/YGEnums.h>
|
||||||
|
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <cstdint>
|
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
|
|
||||||
|
|||||||
@ -13,14 +13,14 @@ 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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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(); }
|
||||||
|
};
|
||||||
@ -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);
|
||||||
|
};
|
||||||
@ -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
|
||||||
|
}
|
||||||
|
};
|
||||||
@ -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);
|
||||||
|
};
|
||||||
@ -5,13 +5,13 @@
|
|||||||
#include <QMimeData>
|
#include <QMimeData>
|
||||||
|
|
||||||
#include "Extras/Export/export.h"
|
#include "Extras/Export/export.h"
|
||||||
#include "core/Component/component_macro.h"
|
#include "QtCore/QObject/qobject_macro.h"
|
||||||
|
|
||||||
class DLL_EXPORT QMimeDataWrap : public Napi::ObjectWrap<QMimeDataWrap> {
|
class DLL_EXPORT QMimeDataWrap : public Napi::ObjectWrap<QMimeDataWrap> {
|
||||||
COMPONENT_WRAPPED_METHODS_DECLARATION
|
QOBJECT_WRAPPED_METHODS_DECLARATION
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<QMimeData> instance;
|
QPointer<QMimeData> instance;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static Napi::Object init(Napi::Env env, Napi::Object exports);
|
static Napi::Object init(Napi::Env env, Napi::Object exports);
|
||||||
|
|||||||
@ -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 }
|
||||||
};
|
};
|
||||||
|
|||||||
@ -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"
|
||||||
|
|||||||
@ -11,14 +11,15 @@
|
|||||||
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
|
||||||
};
|
};
|
||||||
|
|||||||
@ -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);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
40
src/cpp/include/nodegui/QtCore/QSizeF/qsizef_wrap.h
Normal file
40
src/cpp/include/nodegui/QtCore/QSizeF/qsizef_wrap.h
Normal 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
|
||||||
@ -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
|
||||||
@ -1,8 +1,12 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
|
#include <QGuiApplication>
|
||||||
|
#include <QWindow>
|
||||||
|
|
||||||
#include "Extras/Export/export.h"
|
#include "Extras/Export/export.h"
|
||||||
#include "QtCore/QObject/qobject_macro.h"
|
#include "QtCore/QObject/qobject_macro.h"
|
||||||
|
#include "QtGui/QScreen/qscreen_wrap.h"
|
||||||
|
#include "core/WrapperCache/wrappercache.h"
|
||||||
#include "napi.h"
|
#include "napi.h"
|
||||||
|
|
||||||
class DLL_EXPORT NApplication : public QApplication, public EventWidget {
|
class DLL_EXPORT NApplication : public QApplication, public EventWidget {
|
||||||
@ -10,8 +14,54 @@ class DLL_EXPORT NApplication : public QApplication, public EventWidget {
|
|||||||
EVENTWIDGET_IMPLEMENTATIONS(QApplication)
|
EVENTWIDGET_IMPLEMENTATIONS(QApplication)
|
||||||
public:
|
public:
|
||||||
using QApplication::QApplication; // inherit all constructors of QApplication
|
using QApplication::QApplication; // inherit all constructors of QApplication
|
||||||
void connectSignalsToEventEmitter() {
|
virtual void connectSignalsToEventEmitter() {
|
||||||
// Qt Connects: Implement all signal connects here
|
// Qt Connects: Implement all signal connects here
|
||||||
QOBJECT_SIGNALS
|
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});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@ -28,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
|
||||||
|
|||||||
@ -3,21 +3,30 @@
|
|||||||
#include <napi.h>
|
#include <napi.h>
|
||||||
|
|
||||||
#include <QClipboard>
|
#include <QClipboard>
|
||||||
|
#include <QPointer>
|
||||||
|
|
||||||
#include "Extras/Export/export.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);
|
||||||
|
|||||||
@ -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 {
|
||||||
|
|||||||
@ -12,7 +12,7 @@ class DLL_EXPORT NDrag : public QDrag, public EventWidget {
|
|||||||
public:
|
public:
|
||||||
using QDrag::QDrag;
|
using QDrag::QDrag;
|
||||||
|
|
||||||
void connectSignalsToEventEmitter() {
|
virtual void connectSignalsToEventEmitter() {
|
||||||
QOBJECT_SIGNALS
|
QOBJECT_SIGNALS
|
||||||
QObject::connect(this, &QDrag::actionChanged, [=](Qt::DropAction action) {
|
QObject::connect(this, &QDrag::actionChanged, [=](Qt::DropAction action) {
|
||||||
Napi::Env env = this->emitOnNode.Env();
|
Napi::Env env = this->emitOnNode.Env();
|
||||||
|
|||||||
@ -22,13 +22,13 @@ class DLL_EXPORT QDragWrap : public Napi::ObjectWrap<QDragWrap> {
|
|||||||
// except that it is automatically cleared when the referenced object is
|
// except that it is automatically cleared when the referenced object is
|
||||||
// destroyed (unlike normal C++ pointers, which become "dangling pointers" in
|
// destroyed (unlike normal C++ pointers, which become "dangling pointers" in
|
||||||
// such cases). T must be a subclass of QObject.
|
// such cases). T must be a subclass of QObject.
|
||||||
QPointer<NDrag> instance;
|
QPointer<QDrag> instance;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static Napi::Object init(Napi::Env env, Napi::Object exports);
|
static Napi::Object init(Napi::Env env, Napi::Object exports);
|
||||||
QDragWrap(const Napi::CallbackInfo& info);
|
QDragWrap(const Napi::CallbackInfo& info);
|
||||||
~QDragWrap();
|
~QDragWrap();
|
||||||
NDrag* getInternalInstance();
|
QDrag* getInternalInstance();
|
||||||
// class constructor
|
// class constructor
|
||||||
static Napi::FunctionReference constructor;
|
static Napi::FunctionReference constructor;
|
||||||
|
|
||||||
|
|||||||
@ -11,6 +11,7 @@
|
|||||||
class DLL_EXPORT QDragLeaveEventWrap
|
class DLL_EXPORT QDragLeaveEventWrap
|
||||||
: public Napi::ObjectWrap<QDragLeaveEventWrap> {
|
: public Napi::ObjectWrap<QDragLeaveEventWrap> {
|
||||||
COMPONENT_WRAPPED_METHODS_DECLARATION
|
COMPONENT_WRAPPED_METHODS_DECLARATION
|
||||||
|
QEVENT_WRAPPED_METHODS_DECLARATION
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QDragLeaveEvent* instance;
|
QDragLeaveEvent* instance;
|
||||||
@ -23,6 +24,4 @@ class DLL_EXPORT QDragLeaveEventWrap
|
|||||||
// class constructor
|
// class constructor
|
||||||
static Napi::FunctionReference constructor;
|
static Napi::FunctionReference constructor;
|
||||||
// wrapped methods (none)
|
// wrapped methods (none)
|
||||||
// Methods from QEvent
|
|
||||||
QEVENT_WRAPPED_METHODS_DECLARATION
|
|
||||||
};
|
};
|
||||||
@ -7,11 +7,6 @@
|
|||||||
#include "Extras/Export/export.h"
|
#include "Extras/Export/export.h"
|
||||||
#include "core/Component/component_macro.h"
|
#include "core/Component/component_macro.h"
|
||||||
|
|
||||||
/*
|
|
||||||
NOTE : QDragMoveEvent inherits from QDropEvent
|
|
||||||
- Is it possible to inherit from QDropEventWrap directly?
|
|
||||||
*/
|
|
||||||
|
|
||||||
class DLL_EXPORT QDragMoveEventWrap
|
class DLL_EXPORT QDragMoveEventWrap
|
||||||
: public Napi::ObjectWrap<QDragMoveEventWrap> {
|
: public Napi::ObjectWrap<QDragMoveEventWrap> {
|
||||||
COMPONENT_WRAPPED_METHODS_DECLARATION
|
COMPONENT_WRAPPED_METHODS_DECLARATION
|
||||||
@ -51,4 +46,4 @@ class DLL_EXPORT QDragMoveEventWrap
|
|||||||
Napi::Value setAccepted(const Napi::CallbackInfo& info);
|
Napi::Value setAccepted(const Napi::CallbackInfo& info);
|
||||||
Napi::Value spontaneous(const Napi::CallbackInfo& info);
|
Napi::Value spontaneous(const Napi::CallbackInfo& info);
|
||||||
Napi::Value _type(const Napi::CallbackInfo& info);
|
Napi::Value _type(const Napi::CallbackInfo& info);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -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
|
||||||
@ -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);
|
||||||
|
};
|
||||||
@ -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);
|
||||||
|
};
|
||||||
@ -5,10 +5,14 @@
|
|||||||
#include <QKeyEvent>
|
#include <QKeyEvent>
|
||||||
|
|
||||||
#include "Extras/Export/export.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);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -5,10 +5,14 @@
|
|||||||
#include <QMouseEvent>
|
#include <QMouseEvent>
|
||||||
|
|
||||||
#include "Extras/Export/export.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);
|
||||||
|
|||||||
@ -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);
|
||||||
|
};
|
||||||
@ -5,11 +5,15 @@
|
|||||||
#include <QNativeGestureEvent>
|
#include <QNativeGestureEvent>
|
||||||
|
|
||||||
#include "Extras/Export/export.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 QNativeGestureEventWrap
|
class DLL_EXPORT QNativeGestureEventWrap
|
||||||
: public Napi::ObjectWrap<QNativeGestureEventWrap> {
|
: public Napi::ObjectWrap<QNativeGestureEventWrap> {
|
||||||
COMPONENT_WRAPPED_METHODS_DECLARATION
|
COMPONENT_WRAPPED_METHODS_DECLARATION
|
||||||
|
QEVENT_WRAPPED_METHODS_DECLARATION
|
||||||
|
QINPUTEVENT_WRAPPED_METHODS_DECLARATION
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QNativeGestureEvent* instance;
|
QNativeGestureEvent* instance;
|
||||||
|
|||||||
@ -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);
|
||||||
|
};
|
||||||
@ -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);
|
||||||
|
};
|
||||||
@ -5,10 +5,14 @@
|
|||||||
#include <QTabletEvent>
|
#include <QTabletEvent>
|
||||||
|
|
||||||
#include "Extras/Export/export.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 QTabletEventWrap : public Napi::ObjectWrap<QTabletEventWrap> {
|
class DLL_EXPORT QTabletEventWrap : public Napi::ObjectWrap<QTabletEventWrap> {
|
||||||
COMPONENT_WRAPPED_METHODS_DECLARATION
|
COMPONENT_WRAPPED_METHODS_DECLARATION
|
||||||
|
QEVENT_WRAPPED_METHODS_DECLARATION
|
||||||
|
QINPUTEVENT_WRAPPED_METHODS_DECLARATION
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QTabletEvent* instance;
|
QTabletEvent* instance;
|
||||||
|
|||||||
@ -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);
|
||||||
|
};
|
||||||
@ -5,10 +5,14 @@
|
|||||||
#include <QWheelEvent>
|
#include <QWheelEvent>
|
||||||
|
|
||||||
#include "Extras/Export/export.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 QWheelEventWrap : public Napi::ObjectWrap<QWheelEventWrap> {
|
class DLL_EXPORT QWheelEventWrap : public Napi::ObjectWrap<QWheelEventWrap> {
|
||||||
COMPONENT_WRAPPED_METHODS_DECLARATION
|
COMPONENT_WRAPPED_METHODS_DECLARATION
|
||||||
|
QEVENT_WRAPPED_METHODS_DECLARATION
|
||||||
|
QINPUTEVENT_WRAPPED_METHODS_DECLARATION
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QWheelEvent* instance;
|
QWheelEvent* instance;
|
||||||
|
|||||||
@ -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
|
||||||
};
|
};
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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);
|
||||||
|
};
|
||||||
@ -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);
|
||||||
|
};
|
||||||
@ -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 {
|
||||||
|
|||||||
78
src/cpp/include/nodegui/QtGui/QImage/qimage_wrap.h
Normal file
78
src/cpp/include/nodegui/QtGui/QImage/qimage_wrap.h
Normal 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
|
||||||
@ -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,
|
||||||
|
|||||||
24
src/cpp/include/nodegui/QtGui/QPalette/qpalette_wrap.h
Normal file
24
src/cpp/include/nodegui/QtGui/QPalette/qpalette_wrap.h
Normal 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);
|
||||||
|
};
|
||||||
@ -26,6 +26,7 @@ class DLL_EXPORT QPixmapWrap : public Napi::ObjectWrap<QPixmapWrap> {
|
|||||||
Napi::Value scaled(const Napi::CallbackInfo& info);
|
Napi::Value scaled(const Napi::CallbackInfo& info);
|
||||||
Napi::Value height(const Napi::CallbackInfo& info);
|
Napi::Value height(const Napi::CallbackInfo& info);
|
||||||
Napi::Value width(const Napi::CallbackInfo& info);
|
Napi::Value width(const Napi::CallbackInfo& info);
|
||||||
|
static Napi::Value fromImage(const Napi::CallbackInfo& info);
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace StaticQPixmapWrapMethods {
|
namespace StaticQPixmapWrapMethods {
|
||||||
|
|||||||
34
src/cpp/include/nodegui/QtGui/QScreen/qscreen_wrap.h
Normal file
34
src/cpp/include/nodegui/QtGui/QScreen/qscreen_wrap.h
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <napi.h>
|
||||||
|
|
||||||
|
#include <QPointer>
|
||||||
|
#include <QScreen>
|
||||||
|
|
||||||
|
#include "Extras/Export/export.h"
|
||||||
|
#include "QtCore/QObject/qobject_macro.h"
|
||||||
|
|
||||||
|
class DLL_EXPORT QScreenWrap : public Napi::ObjectWrap<QScreenWrap>,
|
||||||
|
public EventWidget {
|
||||||
|
QOBJECT_WRAPPED_METHODS_DECLARATION_WITH_EVENT_SOURCE(this)
|
||||||
|
QOBJECT_SET_PARENT_IMPL
|
||||||
|
|
||||||
|
// Note: We don't use EVENTWIDGET_IMPLEMENTATIONS() here because this class
|
||||||
|
// doesn't handle any QEvents.
|
||||||
|
|
||||||
|
private:
|
||||||
|
QPointer<QScreen> instance;
|
||||||
|
|
||||||
|
public:
|
||||||
|
// class constructor
|
||||||
|
static Napi::FunctionReference constructor;
|
||||||
|
|
||||||
|
static Napi::Object init(Napi::Env env, Napi::Object exports);
|
||||||
|
QScreenWrap(const Napi::CallbackInfo& info);
|
||||||
|
QScreen* getInternalInstance();
|
||||||
|
|
||||||
|
virtual void connectSignalsToEventEmitter();
|
||||||
|
|
||||||
|
// Wrapped methods
|
||||||
|
Napi::Value grabWindow(const Napi::CallbackInfo& info);
|
||||||
|
};
|
||||||
@ -20,4 +20,6 @@ class DLL_EXPORT QStyleWrap : public Napi::ObjectWrap<QStyleWrap> {
|
|||||||
QStyle* getInternalInstance();
|
QStyle* getInternalInstance();
|
||||||
// Wrapped methods
|
// Wrapped methods
|
||||||
Napi::Value pixelMetric(const Napi::CallbackInfo& info);
|
Napi::Value pixelMetric(const Napi::CallbackInfo& info);
|
||||||
|
Napi::Value polish(const Napi::CallbackInfo& info);
|
||||||
|
Napi::Value unpolish(const Napi::CallbackInfo& info);
|
||||||
};
|
};
|
||||||
|
|||||||
58
src/cpp/include/nodegui/QtGui/QWindow/qwindow_wrap.h
Normal file
58
src/cpp/include/nodegui/QtGui/QWindow/qwindow_wrap.h
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <napi.h>
|
||||||
|
|
||||||
|
#include <QPointer>
|
||||||
|
#include <QWindow>
|
||||||
|
|
||||||
|
#include "Extras/Export/export.h"
|
||||||
|
#include "QtCore/QObject/qobject_macro.h"
|
||||||
|
|
||||||
|
class DLL_EXPORT QWindowWrap : public Napi::ObjectWrap<QWindowWrap>,
|
||||||
|
public EventWidget,
|
||||||
|
public QObject {
|
||||||
|
QOBJECT_WRAPPED_METHODS_DECLARATION_WITH_EVENT_SOURCE(this)
|
||||||
|
// Note: We don't use EVENTWIDGET_IMPLEMENTATIONS() here because this class
|
||||||
|
// doesn't handle any QEvents.
|
||||||
|
|
||||||
|
// `QWindow` has a special setParent() which only accepts `QWindow`s
|
||||||
|
Napi::Value setParent(const Napi::CallbackInfo& info) {
|
||||||
|
Napi::Env env = info.Env();
|
||||||
|
QObject* parentObject = info[0].As<Napi::External<QObject>>().Data();
|
||||||
|
QWindow* parentWindow = qobject_cast<QWindow*>(parentObject);
|
||||||
|
if (parentWindow) {
|
||||||
|
this->instance->setParent(parentWindow);
|
||||||
|
}
|
||||||
|
return env.Null();
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
QPointer<QWindow> instance;
|
||||||
|
|
||||||
|
public:
|
||||||
|
// class constructor
|
||||||
|
static Napi::FunctionReference constructor;
|
||||||
|
|
||||||
|
static Napi::Object init(Napi::Env env, Napi::Object exports);
|
||||||
|
QWindowWrap(const Napi::CallbackInfo& info);
|
||||||
|
~QWindowWrap();
|
||||||
|
QWindow* getInternalInstance();
|
||||||
|
|
||||||
|
virtual void connectSignalsToEventEmitter();
|
||||||
|
|
||||||
|
// wrapped methods
|
||||||
|
Napi::Value screen(const Napi::CallbackInfo& info);
|
||||||
|
Napi::Value showFullScreen(const Napi::CallbackInfo& info);
|
||||||
|
Napi::Value showMaximized(const Napi::CallbackInfo& info);
|
||||||
|
Napi::Value showMinimized(const Napi::CallbackInfo& info);
|
||||||
|
Napi::Value showNormal(const Napi::CallbackInfo& info);
|
||||||
|
Napi::Value startSystemMove(const Napi::CallbackInfo& info);
|
||||||
|
Napi::Value startSystemResize(const Napi::CallbackInfo& info);
|
||||||
|
Napi::Value setWindowState(const Napi::CallbackInfo& info);
|
||||||
|
Napi::Value windowState(const Napi::CallbackInfo& info);
|
||||||
|
Napi::Value visibility(const Napi::CallbackInfo& info);
|
||||||
|
Napi::Value setVisibility(const Napi::CallbackInfo& info);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
bool eventFilter(QObject* watched, QEvent* event) override;
|
||||||
|
};
|
||||||
@ -16,20 +16,16 @@
|
|||||||
QWIDGET_WRAPPED_METHODS_DECLARATION \
|
QWIDGET_WRAPPED_METHODS_DECLARATION \
|
||||||
Napi::Value animateClick(const Napi::CallbackInfo& info) { \
|
Napi::Value animateClick(const Napi::CallbackInfo& info) { \
|
||||||
Napi::Env env = info.Env(); \
|
Napi::Env env = info.Env(); \
|
||||||
Napi::HandleScope scope(env); \
|
this->instance->animateClick(); \
|
||||||
int msec = info[0].As<Napi::Number>().Int32Value(); \
|
|
||||||
this->instance->animateClick(msec); \
|
|
||||||
return env.Null(); \
|
return env.Null(); \
|
||||||
} \
|
} \
|
||||||
Napi::Value click(const Napi::CallbackInfo& info) { \
|
Napi::Value click(const Napi::CallbackInfo& info) { \
|
||||||
Napi::Env env = info.Env(); \
|
Napi::Env env = info.Env(); \
|
||||||
Napi::HandleScope scope(env); \
|
|
||||||
this->instance->click(); \
|
this->instance->click(); \
|
||||||
return env.Null(); \
|
return env.Null(); \
|
||||||
} \
|
} \
|
||||||
Napi::Value toggle(const Napi::CallbackInfo& info) { \
|
Napi::Value toggle(const Napi::CallbackInfo& info) { \
|
||||||
Napi::Env env = info.Env(); \
|
Napi::Env env = info.Env(); \
|
||||||
Napi::HandleScope scope(env); \
|
|
||||||
this->instance->toggle(); \
|
this->instance->toggle(); \
|
||||||
return env.Null(); \
|
return env.Null(); \
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,21 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "QtCore/QObject/qobject_macro.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
This macro adds common QAbstractItemDelete exported methods
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef QABSTRACTITEMDELEGATE_WRAPPED_METHODS_DECLARATION
|
||||||
|
#define QABSTRACTITEMDELEGATE_WRAPPED_METHODS_DECLARATION \
|
||||||
|
QOBJECT_WRAPPED_METHODS_DECLARATION
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef QABSTRACTITEMDELEGATE_WRAPPED_METHODS_EXPORT_DEFINE
|
||||||
|
#define QABSTRACTITEMDELEGATE_WRAPPED_METHODS_EXPORT_DEFINE(WrapName) \
|
||||||
|
QOBJECT_WRAPPED_METHODS_EXPORT_DEFINE(WrapName)
|
||||||
|
#endif // QABSTRACTITEMDELEGATE_WRAPPED_METHODS_EXPORT_DEFINE
|
||||||
|
|
||||||
|
#ifndef QABSTRACTITEMDELEGATE_SIGNALS
|
||||||
|
#define QABSTRACTITEMDELEGATE_SIGNALS QOBJECT_SIGNALS
|
||||||
|
#endif // QABSTRACTITEMDELEGATE_SIGNALS
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <napi.h>
|
||||||
|
|
||||||
|
#include <QAbstractItemDelegate>
|
||||||
|
#include <QPointer>
|
||||||
|
|
||||||
|
#include "Extras/Utils/nutils.h"
|
||||||
|
#include "QtWidgets/QAbstractItemDelegate/qabstractitemdelegate_macro.h"
|
||||||
|
|
||||||
|
class DLL_EXPORT QAbstractItemDelegateWrap
|
||||||
|
: public Napi::ObjectWrap<QAbstractItemDelegateWrap> {
|
||||||
|
QABSTRACTITEMDELEGATE_WRAPPED_METHODS_DECLARATION
|
||||||
|
private:
|
||||||
|
QPointer<QAbstractItemDelegate> instance;
|
||||||
|
|
||||||
|
public:
|
||||||
|
static Napi::Object init(Napi::Env env, Napi::Object exports);
|
||||||
|
QAbstractItemDelegateWrap(const Napi::CallbackInfo& info);
|
||||||
|
~QAbstractItemDelegateWrap();
|
||||||
|
QAbstractItemDelegate* getInternalInstance();
|
||||||
|
// class constructor
|
||||||
|
static Napi::FunctionReference constructor;
|
||||||
|
// wrapped methods
|
||||||
|
};
|
||||||
@ -1,6 +1,9 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "QtCore/QAbstractItemModel/qabstractitemmodel_wrap.h"
|
||||||
|
#include "QtCore/QItemSelectionModel/qitemselectionmodel_wrap.h"
|
||||||
#include "QtCore/QModelIndex/qmodelindex_wrap.h"
|
#include "QtCore/QModelIndex/qmodelindex_wrap.h"
|
||||||
|
#include "QtWidgets/QAbstractItemDelegate/qabstractitemdelegate_wrap.h"
|
||||||
#include "QtWidgets/QAbstractScrollArea/qabstractscrollarea_macro.h"
|
#include "QtWidgets/QAbstractScrollArea/qabstractscrollarea_macro.h"
|
||||||
#include "QtWidgets/QWidget/qwidget_wrap.h"
|
#include "QtWidgets/QWidget/qwidget_wrap.h"
|
||||||
|
|
||||||
@ -12,110 +15,353 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef QABSTRACTITEMVIEW_WRAPPED_METHODS_DECLARATION
|
#ifndef QABSTRACTITEMVIEW_WRAPPED_METHODS_DECLARATION
|
||||||
#define QABSTRACTITEMVIEW_WRAPPED_METHODS_DECLARATION \
|
|
||||||
QABSTRACTSCROLLAREA_WRAPPED_METHODS_DECLARATION \
|
// This silly *WITHOUT_INDEXAT nonsense is for the benefit of QHeaderView and
|
||||||
Napi::Value setCurrentIndex(const Napi::CallbackInfo& info) { \
|
// its redefinition of `indexAt()` as protected(!) instead of plain public.
|
||||||
Napi::Env env = info.Env(); \
|
// *sigh*
|
||||||
Napi::HandleScope scope(env); \
|
#define QABSTRACTITEMVIEW_WRAPPED_METHODS_DECLARATION_NO_QHEADERVIEW_PROTECTED \
|
||||||
Napi::Object indexObject = info[0].As<Napi::Object>(); \
|
QABSTRACTSCROLLAREA_WRAPPED_METHODS_DECLARATION \
|
||||||
QModelIndexWrap* indexWrap = \
|
Napi::Value setCurrentIndex(const Napi::CallbackInfo& info) { \
|
||||||
Napi::ObjectWrap<QModelIndexWrap>::Unwrap(indexObject); \
|
Napi::Env env = info.Env(); \
|
||||||
this->instance->setCurrentIndex(*indexWrap->getInternalInstance()); \
|
Napi::Object indexObject = info[0].As<Napi::Object>(); \
|
||||||
return env.Null(); \
|
QModelIndexWrap* indexWrap = \
|
||||||
} \
|
Napi::ObjectWrap<QModelIndexWrap>::Unwrap(indexObject); \
|
||||||
Napi::Value currentIndex(const Napi::CallbackInfo& info) { \
|
this->instance->setCurrentIndex(*indexWrap->getInternalInstance()); \
|
||||||
Napi::Env env = info.Env(); \
|
return env.Null(); \
|
||||||
Napi::HandleScope scope(env); \
|
} \
|
||||||
QModelIndex current = this->instance->currentIndex(); \
|
Napi::Value currentIndex(const Napi::CallbackInfo& info) { \
|
||||||
auto instance = QModelIndexWrap::constructor.New( \
|
Napi::Env env = info.Env(); \
|
||||||
{Napi::External<QModelIndex>::New(env, new QModelIndex(current))}); \
|
QModelIndex current = this->instance->currentIndex(); \
|
||||||
return instance; \
|
auto instance = QModelIndexWrap::constructor.New( \
|
||||||
} \
|
{Napi::External<QModelIndex>::New(env, new QModelIndex(current))}); \
|
||||||
Napi::Value setIndexWidget(const Napi::CallbackInfo& info) { \
|
return instance; \
|
||||||
Napi::Env env = info.Env(); \
|
} \
|
||||||
Napi::HandleScope scope(env); \
|
Napi::Value setIndexWidget(const Napi::CallbackInfo& info) { \
|
||||||
Napi::Object indexObject = info[0].As<Napi::Object>(); \
|
Napi::Env env = info.Env(); \
|
||||||
Napi::Object widgetObject = info[1].As<Napi::Object>(); \
|
Napi::Object indexObject = info[0].As<Napi::Object>(); \
|
||||||
QModelIndexWrap* indexWrap = \
|
Napi::Object widgetObject = info[1].As<Napi::Object>(); \
|
||||||
Napi::ObjectWrap<QModelIndexWrap>::Unwrap(indexObject); \
|
QModelIndexWrap* indexWrap = \
|
||||||
NodeWidgetWrap* widgetWrap = \
|
Napi::ObjectWrap<QModelIndexWrap>::Unwrap(indexObject); \
|
||||||
Napi::ObjectWrap<NodeWidgetWrap>::Unwrap(widgetObject); \
|
NodeWidgetWrap* widgetWrap = \
|
||||||
this->instance->setIndexWidget(*indexWrap->getInternalInstance(), \
|
Napi::ObjectWrap<NodeWidgetWrap>::Unwrap(widgetObject); \
|
||||||
widgetWrap->getInternalInstance()); \
|
this->instance->setIndexWidget(*indexWrap->getInternalInstance(), \
|
||||||
return env.Null(); \
|
widgetWrap->getInternalInstance()); \
|
||||||
} \
|
return env.Null(); \
|
||||||
Napi::Value indexWidget(const Napi::CallbackInfo& info) { \
|
} \
|
||||||
Napi::Env env = info.Env(); \
|
Napi::Value indexWidget(const Napi::CallbackInfo& info) { \
|
||||||
Napi::HandleScope scope(env); \
|
Napi::Env env = info.Env(); \
|
||||||
Napi::Object indexObject = info[0].As<Napi::Object>(); \
|
Napi::Object indexObject = info[0].As<Napi::Object>(); \
|
||||||
QModelIndexWrap* indexWrap = \
|
QModelIndexWrap* indexWrap = \
|
||||||
Napi::ObjectWrap<QModelIndexWrap>::Unwrap(indexObject); \
|
Napi::ObjectWrap<QModelIndexWrap>::Unwrap(indexObject); \
|
||||||
QWidget* widget = \
|
QWidget* widget = \
|
||||||
this->instance->indexWidget(*indexWrap->getInternalInstance()); \
|
this->instance->indexWidget(*indexWrap->getInternalInstance()); \
|
||||||
auto instance = QWidgetWrap::constructor.New( \
|
auto instance = QWidgetWrap::constructor.New( \
|
||||||
{Napi::External<QWidget>::New(env, widget), \
|
{Napi::External<QWidget>::New(env, widget), \
|
||||||
Napi::Boolean::New(env, true)}); \
|
Napi::Boolean::New(env, true)}); \
|
||||||
return instance; \
|
return instance; \
|
||||||
} \
|
} \
|
||||||
Napi::Value resetHorizontalScrollMode(const Napi::CallbackInfo& info) { \
|
Napi::Value resetHorizontalScrollMode(const Napi::CallbackInfo& info) { \
|
||||||
Napi::Env env = info.Env(); \
|
Napi::Env env = info.Env(); \
|
||||||
Napi::HandleScope scope(env); \
|
this->instance->resetHorizontalScrollMode(); \
|
||||||
this->instance->resetHorizontalScrollMode(); \
|
return env.Null(); \
|
||||||
return env.Null(); \
|
} \
|
||||||
} \
|
Napi::Value resetVerticalScrollMode(const Napi::CallbackInfo& info) { \
|
||||||
Napi::Value resetVerticalScrollMode(const Napi::CallbackInfo& info) { \
|
Napi::Env env = info.Env(); \
|
||||||
Napi::Env env = info.Env(); \
|
this->instance->resetVerticalScrollMode(); \
|
||||||
Napi::HandleScope scope(env); \
|
return env.Null(); \
|
||||||
this->instance->resetVerticalScrollMode(); \
|
} \
|
||||||
return env.Null(); \
|
Napi::Value rootIndex(const Napi::CallbackInfo& info) { \
|
||||||
} \
|
Napi::Env env = info.Env(); \
|
||||||
Napi::Value rootIndex(const Napi::CallbackInfo& info) { \
|
QModelIndex root = this->instance->rootIndex(); \
|
||||||
Napi::Env env = info.Env(); \
|
auto instance = QModelIndexWrap::constructor.New( \
|
||||||
Napi::HandleScope scope(env); \
|
{Napi::External<QModelIndex>::New(env, new QModelIndex(root))}); \
|
||||||
QModelIndex root = this->instance->rootIndex(); \
|
return instance; \
|
||||||
auto instance = QModelIndexWrap::constructor.New( \
|
} \
|
||||||
{Napi::External<QModelIndex>::New(env, new QModelIndex(root))}); \
|
Napi::Value scrollToBottom(const Napi::CallbackInfo& info) { \
|
||||||
return instance; \
|
Napi::Env env = info.Env(); \
|
||||||
} \
|
this->instance->scrollToBottom(); \
|
||||||
Napi::Value scrollToBottom(const Napi::CallbackInfo& info) { \
|
return env.Null(); \
|
||||||
Napi::Env env = info.Env(); \
|
} \
|
||||||
Napi::HandleScope scope(env); \
|
Napi::Value scrollToTop(const Napi::CallbackInfo& info) { \
|
||||||
this->instance->scrollToBottom(); \
|
Napi::Env env = info.Env(); \
|
||||||
return env.Null(); \
|
this->instance->scrollToTop(); \
|
||||||
} \
|
return env.Null(); \
|
||||||
Napi::Value scrollToTop(const Napi::CallbackInfo& info) { \
|
} \
|
||||||
Napi::Env env = info.Env(); \
|
Napi::Value setModel(const Napi::CallbackInfo& info) { \
|
||||||
Napi::HandleScope scope(env); \
|
Napi::Env env = info.Env(); \
|
||||||
this->instance->scrollToTop(); \
|
Napi::Object modelObject = info[0].As<Napi::Object>(); \
|
||||||
return env.Null(); \
|
QAbstractItemModelWrap* modelWrap = \
|
||||||
|
Napi::ObjectWrap<QAbstractItemModelWrap>::Unwrap(modelObject); \
|
||||||
|
QAbstractItemView* instance = this->instance; \
|
||||||
|
instance->setModel(modelWrap->getInternalInstance()); \
|
||||||
|
return env.Null(); \
|
||||||
|
} \
|
||||||
|
Napi::Value closePersistentEditor(const Napi::CallbackInfo& info) { \
|
||||||
|
Napi::Env env = info.Env(); \
|
||||||
|
QModelIndexWrap* indexWrap = \
|
||||||
|
Napi::ObjectWrap<QModelIndexWrap>::Unwrap(info[0].As<Napi::Object>()); \
|
||||||
|
QModelIndex* index = indexWrap->getInternalInstance(); \
|
||||||
|
this->instance->QAbstractItemView::closePersistentEditor(*index); \
|
||||||
|
return env.Null(); \
|
||||||
|
} \
|
||||||
|
Napi::Value clearSelection(const Napi::CallbackInfo& info) { \
|
||||||
|
Napi::Env env = info.Env(); \
|
||||||
|
this->instance->clearSelection(); \
|
||||||
|
return env.Null(); \
|
||||||
|
} \
|
||||||
|
Napi::Value edit(const Napi::CallbackInfo& info) { \
|
||||||
|
Napi::Env env = info.Env(); \
|
||||||
|
QModelIndexWrap* indexWrap = \
|
||||||
|
Napi::ObjectWrap<QModelIndexWrap>::Unwrap(info[0].As<Napi::Object>()); \
|
||||||
|
QModelIndex* index = indexWrap->getInternalInstance(); \
|
||||||
|
this->instance->edit(*index); \
|
||||||
|
return env.Null(); \
|
||||||
|
} \
|
||||||
|
Napi::Value reset(const Napi::CallbackInfo& info) { \
|
||||||
|
Napi::Env env = info.Env(); \
|
||||||
|
this->instance->reset(); \
|
||||||
|
return env.Null(); \
|
||||||
|
} \
|
||||||
|
Napi::Value selectAll(const Napi::CallbackInfo& info) { \
|
||||||
|
Napi::Env env = info.Env(); \
|
||||||
|
this->instance->selectAll(); \
|
||||||
|
return env.Null(); \
|
||||||
|
} \
|
||||||
|
Napi::Value setRootIndex(const Napi::CallbackInfo& info) { \
|
||||||
|
Napi::Env env = info.Env(); \
|
||||||
|
QModelIndexWrap* indexWrap = \
|
||||||
|
Napi::ObjectWrap<QModelIndexWrap>::Unwrap(info[0].As<Napi::Object>()); \
|
||||||
|
QModelIndex* index = indexWrap->getInternalInstance(); \
|
||||||
|
this->instance->setRootIndex(*index); \
|
||||||
|
return env.Null(); \
|
||||||
|
} \
|
||||||
|
Napi::Value update_QModelIndex(const Napi::CallbackInfo& info) { \
|
||||||
|
Napi::Env env = info.Env(); \
|
||||||
|
QModelIndexWrap* indexWrap = \
|
||||||
|
Napi::ObjectWrap<QModelIndexWrap>::Unwrap(info[0].As<Napi::Object>()); \
|
||||||
|
QModelIndex* index = indexWrap->getInternalInstance(); \
|
||||||
|
this->instance->update(*index); \
|
||||||
|
return env.Null(); \
|
||||||
|
} \
|
||||||
|
Napi::Value selectionModel(const Napi::CallbackInfo& info) { \
|
||||||
|
Napi::Env env = info.Env(); \
|
||||||
|
QItemSelectionModel* model = this->instance->selectionModel(); \
|
||||||
|
return WrapperCache::instance.getWrapper(env, model); \
|
||||||
|
} \
|
||||||
|
Napi::Value isPersistentEditorOpen(const Napi::CallbackInfo& info) { \
|
||||||
|
Napi::Env env = info.Env(); \
|
||||||
|
QModelIndexWrap* indexWrap = \
|
||||||
|
Napi::ObjectWrap<QModelIndexWrap>::Unwrap(info[0].As<Napi::Object>()); \
|
||||||
|
QModelIndex* index = indexWrap->getInternalInstance(); \
|
||||||
|
bool result = this->instance->isPersistentEditorOpen(*index); \
|
||||||
|
return Napi::Boolean::New(env, result); \
|
||||||
|
} \
|
||||||
|
Napi::Value openPersistentEditor(const Napi::CallbackInfo& info) { \
|
||||||
|
Napi::Env env = info.Env(); \
|
||||||
|
QModelIndexWrap* indexWrap = \
|
||||||
|
Napi::ObjectWrap<QModelIndexWrap>::Unwrap(info[0].As<Napi::Object>()); \
|
||||||
|
QModelIndex* index = indexWrap->getInternalInstance(); \
|
||||||
|
this->instance->QAbstractItemView::openPersistentEditor(*index); \
|
||||||
|
return env.Null(); \
|
||||||
|
} \
|
||||||
|
Napi::Value keyboardSearch(const Napi::CallbackInfo& info) { \
|
||||||
|
Napi::Env env = info.Env(); \
|
||||||
|
std::string searchNapiText = info[0].As<Napi::String>().Utf8Value(); \
|
||||||
|
QString search = QString::fromUtf8(searchNapiText.c_str()); \
|
||||||
|
this->instance->keyboardSearch(search); \
|
||||||
|
return env.Null(); \
|
||||||
|
} \
|
||||||
|
Napi::Value setItemDelegate(const Napi::CallbackInfo& info) { \
|
||||||
|
Napi::Env env = info.Env(); \
|
||||||
|
if (info[0].IsNull()) { \
|
||||||
|
this->instance->setItemDelegate(nullptr); \
|
||||||
|
} else { \
|
||||||
|
QAbstractItemDelegateWrap* delegateWrap = \
|
||||||
|
Napi::ObjectWrap<QAbstractItemDelegateWrap>::Unwrap( \
|
||||||
|
info[0].As<Napi::Object>()); \
|
||||||
|
QAbstractItemDelegate* delegate = delegateWrap->getInternalInstance(); \
|
||||||
|
this->instance->setItemDelegate(delegate); \
|
||||||
|
} \
|
||||||
|
return env.Null(); \
|
||||||
|
} \
|
||||||
|
Napi::Value setItemDelegateForColumn(const Napi::CallbackInfo& info) { \
|
||||||
|
Napi::Env env = info.Env(); \
|
||||||
|
int column = info[0].As<Napi::Number>().Int32Value(); \
|
||||||
|
if (info[1].IsNull()) { \
|
||||||
|
this->instance->setItemDelegateForColumn(column, nullptr); \
|
||||||
|
} else { \
|
||||||
|
QAbstractItemDelegateWrap* delegateWrap = \
|
||||||
|
Napi::ObjectWrap<QAbstractItemDelegateWrap>::Unwrap( \
|
||||||
|
info[1].As<Napi::Object>()); \
|
||||||
|
QAbstractItemDelegate* delegate = delegateWrap->getInternalInstance(); \
|
||||||
|
this->instance->setItemDelegateForColumn(column, delegate); \
|
||||||
|
} \
|
||||||
|
return env.Null(); \
|
||||||
|
} \
|
||||||
|
Napi::Value setItemDelegateForRow(const Napi::CallbackInfo& info) { \
|
||||||
|
Napi::Env env = info.Env(); \
|
||||||
|
int row = info[0].As<Napi::Number>().Int32Value(); \
|
||||||
|
if (info[1].IsNull()) { \
|
||||||
|
this->instance->setItemDelegateForRow(row, nullptr); \
|
||||||
|
} else { \
|
||||||
|
QAbstractItemDelegateWrap* delegateWrap = \
|
||||||
|
Napi::ObjectWrap<QAbstractItemDelegateWrap>::Unwrap( \
|
||||||
|
info[1].As<Napi::Object>()); \
|
||||||
|
QAbstractItemDelegate* delegate = delegateWrap->getInternalInstance(); \
|
||||||
|
this->instance->setItemDelegateForRow(row, delegate); \
|
||||||
|
} \
|
||||||
|
return env.Null(); \
|
||||||
|
} \
|
||||||
|
Napi::Value sizeHintForIndex(const Napi::CallbackInfo& info) { \
|
||||||
|
Napi::Env env = info.Env(); \
|
||||||
|
QModelIndexWrap* indexWrap = \
|
||||||
|
Napi::ObjectWrap<QModelIndexWrap>::Unwrap(info[0].As<Napi::Object>()); \
|
||||||
|
QModelIndex* index = indexWrap->getInternalInstance(); \
|
||||||
|
QSize result = this->instance->sizeHintForIndex(*index); \
|
||||||
|
auto resultInstance = QSizeWrap::constructor.New( \
|
||||||
|
{Napi::External<QSize>::New(env, new QSize(result))}); \
|
||||||
|
return resultInstance; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define QABSTRACTITEMVIEW_WRAPPED_METHODS_DECLARATION \
|
||||||
|
QABSTRACTITEMVIEW_WRAPPED_METHODS_DECLARATION_NO_QHEADERVIEW_PROTECTED \
|
||||||
|
Napi::Value indexAt(const Napi::CallbackInfo& info) { \
|
||||||
|
Napi::Env env = info.Env(); \
|
||||||
|
QPointWrap* pointWrap = \
|
||||||
|
Napi::ObjectWrap<QPointWrap>::Unwrap(info[0].As<Napi::Object>()); \
|
||||||
|
QPoint* point = pointWrap->getInternalInstance(); \
|
||||||
|
QModelIndex result = this->instance->indexAt(*point); \
|
||||||
|
auto resultInstance = QModelIndexWrap::constructor.New( \
|
||||||
|
{Napi::External<QModelIndex>::New(env, new QModelIndex(result))}); \
|
||||||
|
return resultInstance; \
|
||||||
|
} \
|
||||||
|
Napi::Value scrollTo(const Napi::CallbackInfo& info) { \
|
||||||
|
Napi::Env env = info.Env(); \
|
||||||
|
QModelIndexWrap* indexWrap = \
|
||||||
|
Napi::ObjectWrap<QModelIndexWrap>::Unwrap(info[0].As<Napi::Object>()); \
|
||||||
|
QModelIndex* index = indexWrap->getInternalInstance(); \
|
||||||
|
QAbstractItemView::ScrollHint hint = \
|
||||||
|
static_cast<QAbstractItemView::ScrollHint>( \
|
||||||
|
info[1].As<Napi::Number>().Int32Value()); \
|
||||||
|
this->instance->scrollTo(*index, hint); \
|
||||||
|
return env.Null(); \
|
||||||
|
} \
|
||||||
|
Napi::Value visualRect(const Napi::CallbackInfo& info) { \
|
||||||
|
Napi::Env env = info.Env(); \
|
||||||
|
QModelIndexWrap* indexWrap = \
|
||||||
|
Napi::ObjectWrap<QModelIndexWrap>::Unwrap(info[0].As<Napi::Object>()); \
|
||||||
|
QModelIndex* index = indexWrap->getInternalInstance(); \
|
||||||
|
QRect ret = this->instance->visualRect(*index); \
|
||||||
|
auto instance = QRectWrap::constructor.New( \
|
||||||
|
{Napi::External<QRect>::New(env, new QRect(ret))}); \
|
||||||
|
return instance; \
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // QABSTRACTITEMVIEW_WRAPPED_METHODS_DECLARATION
|
#endif // QABSTRACTITEMVIEW_WRAPPED_METHODS_DECLARATION
|
||||||
|
|
||||||
#ifndef QABSTRACTITEMVIEW_WRAPPED_METHODS_EXPORT_DEFINE
|
#ifndef QABSTRACTITEMVIEW_WRAPPED_METHODS_EXPORT_DEFINE
|
||||||
#define QABSTRACTITEMVIEW_WRAPPED_METHODS_EXPORT_DEFINE(WidgetWrapName) \
|
#define QABSTRACTITEMVIEW_WRAPPED_METHODS_EXPORT_DEFINE(WidgetWrapName) \
|
||||||
QABSTRACTSCROLLAREA_WRAPPED_METHODS_EXPORT_DEFINE(WidgetWrapName) \
|
QABSTRACTSCROLLAREA_WRAPPED_METHODS_EXPORT_DEFINE(WidgetWrapName) \
|
||||||
InstanceMethod("setCurrentIndex", &WidgetWrapName::setCurrentIndex), \
|
InstanceMethod("setCurrentIndex", &WidgetWrapName::setCurrentIndex), \
|
||||||
InstanceMethod("currentIndex", &WidgetWrapName::currentIndex), \
|
InstanceMethod("currentIndex", &WidgetWrapName::currentIndex), \
|
||||||
InstanceMethod("setIndexWidget", &WidgetWrapName::setIndexWidget), \
|
InstanceMethod("setIndexWidget", &WidgetWrapName::setIndexWidget), \
|
||||||
InstanceMethod("indexWidget", &WidgetWrapName::indexWidget), \
|
InstanceMethod("indexWidget", &WidgetWrapName::indexWidget), \
|
||||||
InstanceMethod("resetHorizontalScrollMode", \
|
InstanceMethod("resetHorizontalScrollMode", \
|
||||||
&WidgetWrapName::resetHorizontalScrollMode), \
|
&WidgetWrapName::resetHorizontalScrollMode), \
|
||||||
InstanceMethod("resetVerticalScrollMode", \
|
InstanceMethod("resetVerticalScrollMode", \
|
||||||
&WidgetWrapName::resetVerticalScrollMode), \
|
&WidgetWrapName::resetVerticalScrollMode), \
|
||||||
InstanceMethod("rootIndex", &WidgetWrapName::rootIndex), \
|
InstanceMethod("rootIndex", &WidgetWrapName::rootIndex), \
|
||||||
InstanceMethod("scrollToBottom", &WidgetWrapName::scrollToBottom), \
|
InstanceMethod("scrollToBottom", &WidgetWrapName::scrollToBottom), \
|
||||||
InstanceMethod("scrollToTop", &WidgetWrapName::scrollToTop),
|
InstanceMethod("scrollToTop", &WidgetWrapName::scrollToTop), \
|
||||||
|
InstanceMethod("setModel", &WidgetWrapName::setModel), \
|
||||||
|
InstanceMethod("closePersistentEditor", \
|
||||||
|
&WidgetWrapName::closePersistentEditor), \
|
||||||
|
InstanceMethod("clearSelection", &WidgetWrapName::clearSelection), \
|
||||||
|
InstanceMethod("edit", &WidgetWrapName::edit), \
|
||||||
|
InstanceMethod("reset", &WidgetWrapName::reset), \
|
||||||
|
InstanceMethod("selectAll", &WidgetWrapName::selectAll), \
|
||||||
|
InstanceMethod("setRootIndex", &WidgetWrapName::setRootIndex), \
|
||||||
|
InstanceMethod("update_QModelIndex", \
|
||||||
|
&WidgetWrapName::update_QModelIndex), \
|
||||||
|
InstanceMethod("indexAt", &WidgetWrapName::indexAt), \
|
||||||
|
InstanceMethod("selectionModel", &WidgetWrapName::selectionModel), \
|
||||||
|
InstanceMethod("scrollTo", &WidgetWrapName::scrollTo), \
|
||||||
|
InstanceMethod("isPersistentEditorOpen", \
|
||||||
|
&WidgetWrapName::isPersistentEditorOpen), \
|
||||||
|
InstanceMethod("openPersistentEditor", \
|
||||||
|
&WidgetWrapName::openPersistentEditor), \
|
||||||
|
InstanceMethod("keyboardSearch", &WidgetWrapName::keyboardSearch), \
|
||||||
|
InstanceMethod("setItemDelegate", &WidgetWrapName::setItemDelegate), \
|
||||||
|
InstanceMethod("setItemDelegateForColumn", \
|
||||||
|
&WidgetWrapName::setItemDelegateForColumn), \
|
||||||
|
InstanceMethod("setItemDelegateForRow", \
|
||||||
|
&WidgetWrapName::setItemDelegateForRow), \
|
||||||
|
InstanceMethod("visualRect", &WidgetWrapName::visualRect), \
|
||||||
|
InstanceMethod("sizeHintForIndex", &WidgetWrapName::sizeHintForIndex),
|
||||||
|
|
||||||
#endif // QABSTRACTITEMVIEW_WRAPPED_METHODS_EXPORT_DEFINE
|
#endif // QABSTRACTITEMVIEW_WRAPPED_METHODS_EXPORT_DEFINE
|
||||||
|
|
||||||
#ifndef QABSTRACTITEMVIEW_SIGNALS
|
#ifndef QABSTRACTITEMVIEW_SIGNALS
|
||||||
#define QABSTRACTITEMVIEW_SIGNALS \
|
#define QABSTRACTITEMVIEW_SIGNALS \
|
||||||
QABSTRACTSCROLLAREA_SIGNALS \
|
QABSTRACTSCROLLAREA_SIGNALS \
|
||||||
QObject::connect(this, &QAbstractItemView::viewportEntered, [=]() { \
|
QObject::connect( \
|
||||||
Napi::Env env = this->emitOnNode.Env(); \
|
this, &QAbstractItemView::activated, [=](const QModelIndex& index) { \
|
||||||
Napi::HandleScope scope(env); \
|
Napi::Env env = this->emitOnNode.Env(); \
|
||||||
this->emitOnNode.Call({Napi::String::New(env, "viewportEntered")}); \
|
Napi::HandleScope scope(env); \
|
||||||
|
auto indexInstance = QModelIndexWrap::constructor.New( \
|
||||||
|
{Napi::External<QModelIndex>::New(env, new QModelIndex(index))}); \
|
||||||
|
this->emitOnNode.Call( \
|
||||||
|
{Napi::String::New(env, "activated"), indexInstance}); \
|
||||||
|
}); \
|
||||||
|
QObject::connect( \
|
||||||
|
this, &QAbstractItemView::clicked, [=](const QModelIndex& index) { \
|
||||||
|
Napi::Env env = this->emitOnNode.Env(); \
|
||||||
|
Napi::HandleScope scope(env); \
|
||||||
|
auto indexInstance = QModelIndexWrap::constructor.New( \
|
||||||
|
{Napi::External<QModelIndex>::New(env, new QModelIndex(index))}); \
|
||||||
|
this->emitOnNode.Call( \
|
||||||
|
{Napi::String::New(env, "clicked"), indexInstance}); \
|
||||||
|
}); \
|
||||||
|
QObject::connect( \
|
||||||
|
this, &QAbstractItemView::doubleClicked, [=](const QModelIndex& index) { \
|
||||||
|
Napi::Env env = this->emitOnNode.Env(); \
|
||||||
|
Napi::HandleScope scope(env); \
|
||||||
|
auto indexInstance = QModelIndexWrap::constructor.New( \
|
||||||
|
{Napi::External<QModelIndex>::New(env, new QModelIndex(index))}); \
|
||||||
|
this->emitOnNode.Call( \
|
||||||
|
{Napi::String::New(env, "doubleClicked"), indexInstance}); \
|
||||||
|
}); \
|
||||||
|
QObject::connect( \
|
||||||
|
this, &QAbstractItemView::entered, [=](const QModelIndex& index) { \
|
||||||
|
Napi::Env env = this->emitOnNode.Env(); \
|
||||||
|
Napi::HandleScope scope(env); \
|
||||||
|
auto indexInstance = QModelIndexWrap::constructor.New( \
|
||||||
|
{Napi::External<QModelIndex>::New(env, new QModelIndex(index))}); \
|
||||||
|
this->emitOnNode.Call( \
|
||||||
|
{Napi::String::New(env, "entered"), indexInstance}); \
|
||||||
|
}); \
|
||||||
|
QObject::connect( \
|
||||||
|
this, &QAbstractItemView::iconSizeChanged, [=](const QSize& size) { \
|
||||||
|
Napi::Env env = this->emitOnNode.Env(); \
|
||||||
|
Napi::HandleScope scope(env); \
|
||||||
|
auto sizeInstance = QSizeWrap::constructor.New( \
|
||||||
|
{Napi::External<QSize>::New(env, new QSize(size))}); \
|
||||||
|
this->emitOnNode.Call( \
|
||||||
|
{Napi::String::New(env, "iconSizeChanged"), sizeInstance}); \
|
||||||
|
}); \
|
||||||
|
QObject::connect( \
|
||||||
|
this, &QAbstractItemView::pressed, [=](const QModelIndex& index) { \
|
||||||
|
Napi::Env env = this->emitOnNode.Env(); \
|
||||||
|
Napi::HandleScope scope(env); \
|
||||||
|
auto indexInstance = QModelIndexWrap::constructor.New( \
|
||||||
|
{Napi::External<QModelIndex>::New(env, new QModelIndex(index))}); \
|
||||||
|
this->emitOnNode.Call( \
|
||||||
|
{Napi::String::New(env, "pressed"), indexInstance}); \
|
||||||
|
}); \
|
||||||
|
QObject::connect(this, &QAbstractItemView::viewportEntered, [=]() { \
|
||||||
|
Napi::Env env = this->emitOnNode.Env(); \
|
||||||
|
Napi::HandleScope scope(env); \
|
||||||
|
this->emitOnNode.Call({Napi::String::New(env, "viewportEntered")}); \
|
||||||
});
|
});
|
||||||
|
|
||||||
#endif // QABSTRACTITEMVIEW_SIGNALS
|
#endif // QABSTRACTITEMVIEW_SIGNALS
|
||||||
|
|||||||
@ -1,6 +1,8 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "QtCore/QSize/qsize_wrap.h"
|
||||||
#include "QtWidgets/QFrame/qframe_macro.h"
|
#include "QtWidgets/QFrame/qframe_macro.h"
|
||||||
|
#include "QtWidgets/QScrollBar/qscrollbar_wrap.h"
|
||||||
#include "QtWidgets/QWidget/qwidget_wrap.h"
|
#include "QtWidgets/QWidget/qwidget_wrap.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -11,40 +13,86 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef QABSTRACTSCROLLAREA_WRAPPED_METHODS_DECLARATION
|
#ifndef QABSTRACTSCROLLAREA_WRAPPED_METHODS_DECLARATION
|
||||||
#define QABSTRACTSCROLLAREA_WRAPPED_METHODS_DECLARATION \
|
#define QABSTRACTSCROLLAREA_WRAPPED_METHODS_DECLARATION \
|
||||||
\
|
\
|
||||||
QFRAME_WRAPPED_METHODS_DECLARATION \
|
QFRAME_WRAPPED_METHODS_DECLARATION \
|
||||||
\
|
\
|
||||||
Napi::Value setViewport(const Napi::CallbackInfo& info) { \
|
Napi::Value maximumViewportSize(const Napi::CallbackInfo& info) { \
|
||||||
Napi::Env env = info.Env(); \
|
Napi::Env env = info.Env(); \
|
||||||
Napi::HandleScope scope(env); \
|
QSize size = this->instance->maximumViewportSize(); \
|
||||||
Napi::Object viewPortObject = info[0].As<Napi::Object>(); \
|
auto instance = QSizeWrap::constructor.New( \
|
||||||
NodeWidgetWrap* viewPortWidgetWrap = \
|
{Napi::External<QSize>::New(env, new QSize(size))}); \
|
||||||
Napi::ObjectWrap<NodeWidgetWrap>::Unwrap(viewPortObject); \
|
return instance; \
|
||||||
QWidget* viewPort = viewPortWidgetWrap->getInternalInstance(); \
|
} \
|
||||||
this->instance->setViewport(viewPort); \
|
\
|
||||||
return env.Null(); \
|
Napi::Value setHorizontalScrollBar(const Napi::CallbackInfo& info) { \
|
||||||
} \
|
Napi::Env env = info.Env(); \
|
||||||
\
|
Napi::Object scrollBarObject = info[0].As<Napi::Object>(); \
|
||||||
Napi::Value viewport(const Napi::CallbackInfo& info) { \
|
QScrollBarWrap* scrollBarWrap = \
|
||||||
Napi::Env env = info.Env(); \
|
Napi::ObjectWrap<QScrollBarWrap>::Unwrap(scrollBarObject); \
|
||||||
Napi::HandleScope scope(env); \
|
QScrollBar* scrollBar = scrollBarWrap->getInternalInstance(); \
|
||||||
QWidget* viewPort = this->instance->viewport(); \
|
this->instance->setHorizontalScrollBar(scrollBar); \
|
||||||
NWidget* nviewPort = reinterpret_cast<NWidget*>(viewPort); \
|
return env.Null(); \
|
||||||
auto instance = QWidgetWrap::constructor.New( \
|
} \
|
||||||
{Napi::External<NWidget>::New(env, nviewPort)}); \
|
\
|
||||||
return instance; \
|
Napi::Value setVerticalScrollBar(const Napi::CallbackInfo& info) { \
|
||||||
|
Napi::Env env = info.Env(); \
|
||||||
|
Napi::Object scrollBarObject = info[0].As<Napi::Object>(); \
|
||||||
|
QScrollBarWrap* scrollBarWrap = \
|
||||||
|
Napi::ObjectWrap<QScrollBarWrap>::Unwrap(scrollBarObject); \
|
||||||
|
QScrollBar* scrollBar = scrollBarWrap->getInternalInstance(); \
|
||||||
|
this->instance->setVerticalScrollBar(scrollBar); \
|
||||||
|
return env.Null(); \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
Napi::Value setViewport(const Napi::CallbackInfo& info) { \
|
||||||
|
Napi::Env env = info.Env(); \
|
||||||
|
Napi::Object viewPortObject = info[0].As<Napi::Object>(); \
|
||||||
|
NodeWidgetWrap* viewPortWidgetWrap = \
|
||||||
|
Napi::ObjectWrap<NodeWidgetWrap>::Unwrap(viewPortObject); \
|
||||||
|
QWidget* viewPort = viewPortWidgetWrap->getInternalInstance(); \
|
||||||
|
this->instance->setViewport(viewPort); \
|
||||||
|
return env.Null(); \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
Napi::Value viewport(const Napi::CallbackInfo& info) { \
|
||||||
|
Napi::Env env = info.Env(); \
|
||||||
|
QWidget* viewPort = this->instance->viewport(); \
|
||||||
|
auto instance = WrapperCache::instance.getWrapper(env, viewPort); \
|
||||||
|
return instance; \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
Napi::Value horizontalScrollBar(const Napi::CallbackInfo& info) { \
|
||||||
|
Napi::Env env = info.Env(); \
|
||||||
|
QScrollBar* scrollBar = this->instance->horizontalScrollBar(); \
|
||||||
|
auto instance = WrapperCache::instance.getWrapper(env, scrollBar); \
|
||||||
|
return instance; \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
Napi::Value verticalScrollBar(const Napi::CallbackInfo& info) { \
|
||||||
|
Napi::Env env = info.Env(); \
|
||||||
|
QScrollBar* scrollBar = this->instance->verticalScrollBar(); \
|
||||||
|
auto instance = WrapperCache::instance.getWrapper(env, scrollBar); \
|
||||||
|
return instance; \
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // QABSTRACTSCROLLAREA_WRAPPED_METHODS_DECLARATION
|
#endif // QABSTRACTSCROLLAREA_WRAPPED_METHODS_DECLARATION
|
||||||
|
|
||||||
#ifndef QABSTRACTSCROLLAREA_WRAPPED_METHODS_EXPORT_DEFINE
|
#ifndef QABSTRACTSCROLLAREA_WRAPPED_METHODS_EXPORT_DEFINE
|
||||||
#define QABSTRACTSCROLLAREA_WRAPPED_METHODS_EXPORT_DEFINE(WidgetWrapName) \
|
#define QABSTRACTSCROLLAREA_WRAPPED_METHODS_EXPORT_DEFINE(WidgetWrapName) \
|
||||||
\
|
\
|
||||||
QFRAME_WRAPPED_METHODS_EXPORT_DEFINE(WidgetWrapName) \
|
QFRAME_WRAPPED_METHODS_EXPORT_DEFINE(WidgetWrapName) \
|
||||||
\
|
\
|
||||||
InstanceMethod("setViewport", &WidgetWrapName::setViewport), \
|
InstanceMethod("maximumViewportSize", &WidgetWrapName::maximumViewportSize), \
|
||||||
InstanceMethod("viewport", &WidgetWrapName::viewport),
|
InstanceMethod("setHorizontalScrollBar", \
|
||||||
|
&WidgetWrapName::setVerticalScrollBar), \
|
||||||
|
InstanceMethod("setVerticalScrollBar", \
|
||||||
|
&WidgetWrapName::setVerticalScrollBar), \
|
||||||
|
InstanceMethod("setViewport", &WidgetWrapName::setViewport), \
|
||||||
|
InstanceMethod("viewport", &WidgetWrapName::viewport), \
|
||||||
|
InstanceMethod("horizontalScrollBar", \
|
||||||
|
&WidgetWrapName::horizontalScrollBar), \
|
||||||
|
InstanceMethod("verticalScrollBar", &WidgetWrapName::verticalScrollBar),
|
||||||
|
|
||||||
#endif // QABSTRACTSCROLLAREA_WRAPPED_METHODS_EXPORT_DEFINE
|
#endif // QABSTRACTSCROLLAREA_WRAPPED_METHODS_EXPORT_DEFINE
|
||||||
|
|
||||||
|
|||||||
@ -14,7 +14,6 @@
|
|||||||
QWIDGET_WRAPPED_METHODS_DECLARATION \
|
QWIDGET_WRAPPED_METHODS_DECLARATION \
|
||||||
Napi::Value triggerAction(const Napi::CallbackInfo& info) { \
|
Napi::Value triggerAction(const Napi::CallbackInfo& info) { \
|
||||||
Napi::Env env = info.Env(); \
|
Napi::Env env = info.Env(); \
|
||||||
Napi::HandleScope scope(env); \
|
|
||||||
int action = info[0].As<Napi::Number>().Int32Value(); \
|
int action = info[0].As<Napi::Number>().Int32Value(); \
|
||||||
this->instance->triggerAction( \
|
this->instance->triggerAction( \
|
||||||
static_cast<QAbstractSlider::SliderAction>(action)); \
|
static_cast<QAbstractSlider::SliderAction>(action)); \
|
||||||
@ -22,7 +21,6 @@
|
|||||||
} \
|
} \
|
||||||
Napi::Value setRange(const Napi::CallbackInfo& info) { \
|
Napi::Value setRange(const Napi::CallbackInfo& info) { \
|
||||||
Napi::Env env = info.Env(); \
|
Napi::Env env = info.Env(); \
|
||||||
Napi::HandleScope scope(env); \
|
|
||||||
int min = info[0].As<Napi::Number>().Int32Value(); \
|
int min = info[0].As<Napi::Number>().Int32Value(); \
|
||||||
int max = info[1].As<Napi::Number>().Int32Value(); \
|
int max = info[1].As<Napi::Number>().Int32Value(); \
|
||||||
this->instance->setRange(min, max); \
|
this->instance->setRange(min, max); \
|
||||||
|
|||||||
@ -15,19 +15,16 @@
|
|||||||
QWIDGET_WRAPPED_METHODS_DECLARATION \
|
QWIDGET_WRAPPED_METHODS_DECLARATION \
|
||||||
Napi::Value selectAll(const Napi::CallbackInfo& info) { \
|
Napi::Value selectAll(const Napi::CallbackInfo& info) { \
|
||||||
Napi::Env env = info.Env(); \
|
Napi::Env env = info.Env(); \
|
||||||
Napi::HandleScope scope(env); \
|
|
||||||
this->instance->selectAll(); \
|
this->instance->selectAll(); \
|
||||||
return env.Null(); \
|
return env.Null(); \
|
||||||
} \
|
} \
|
||||||
Napi::Value stepDown(const Napi::CallbackInfo& info) { \
|
Napi::Value stepDown(const Napi::CallbackInfo& info) { \
|
||||||
Napi::Env env = info.Env(); \
|
Napi::Env env = info.Env(); \
|
||||||
Napi::HandleScope scope(env); \
|
|
||||||
this->instance->stepDown(); \
|
this->instance->stepDown(); \
|
||||||
return env.Null(); \
|
return env.Null(); \
|
||||||
} \
|
} \
|
||||||
Napi::Value stepUp(const Napi::CallbackInfo& info) { \
|
Napi::Value stepUp(const Napi::CallbackInfo& info) { \
|
||||||
Napi::Env env = info.Env(); \
|
Napi::Env env = info.Env(); \
|
||||||
Napi::HandleScope scope(env); \
|
|
||||||
this->instance->stepUp(); \
|
this->instance->stepUp(); \
|
||||||
return env.Null(); \
|
return env.Null(); \
|
||||||
}
|
}
|
||||||
|
|||||||
@ -11,7 +11,7 @@ class DLL_EXPORT NAction : public QAction, public EventWidget {
|
|||||||
EVENTWIDGET_IMPLEMENTATIONS(QAction)
|
EVENTWIDGET_IMPLEMENTATIONS(QAction)
|
||||||
public:
|
public:
|
||||||
using QAction::QAction; // inherit all constructors of QAction
|
using QAction::QAction; // inherit all constructors of QAction
|
||||||
void connectSignalsToEventEmitter() {
|
virtual void connectSignalsToEventEmitter() {
|
||||||
// Qt Connects: Implement all signal connects here
|
// Qt Connects: Implement all signal connects here
|
||||||
QOBJECT_SIGNALS
|
QOBJECT_SIGNALS
|
||||||
QObject::connect(this, &QAction::triggered, [=](bool checked) {
|
QObject::connect(this, &QAction::triggered, [=](bool checked) {
|
||||||
|
|||||||
@ -11,14 +11,13 @@ class DLL_EXPORT QActionWrap : public Napi::ObjectWrap<QActionWrap> {
|
|||||||
QOBJECT_WRAPPED_METHODS_DECLARATION
|
QOBJECT_WRAPPED_METHODS_DECLARATION
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QPointer<NAction> instance;
|
QPointer<QAction> instance;
|
||||||
bool disableDeletion;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static Napi::Object init(Napi::Env env, Napi::Object exports);
|
static Napi::Object init(Napi::Env env, Napi::Object exports);
|
||||||
QActionWrap(const Napi::CallbackInfo& info);
|
QActionWrap(const Napi::CallbackInfo& info);
|
||||||
~QActionWrap();
|
~QActionWrap();
|
||||||
NAction* getInternalInstance();
|
QAction* getInternalInstance();
|
||||||
// class constructor
|
// class constructor
|
||||||
static Napi::FunctionReference constructor;
|
static Napi::FunctionReference constructor;
|
||||||
// wrapped methods
|
// wrapped methods
|
||||||
@ -35,4 +34,6 @@ class DLL_EXPORT QActionWrap : public Napi::ObjectWrap<QActionWrap> {
|
|||||||
Napi::Value isSeparator(const Napi::CallbackInfo& info);
|
Napi::Value isSeparator(const Napi::CallbackInfo& info);
|
||||||
Napi::Value setSeparator(const Napi::CallbackInfo& info);
|
Napi::Value setSeparator(const Napi::CallbackInfo& info);
|
||||||
Napi::Value setFont(const Napi::CallbackInfo& info);
|
Napi::Value setFont(const Napi::CallbackInfo& info);
|
||||||
|
Napi::Value data(const Napi::CallbackInfo& info);
|
||||||
|
Napi::Value setData(const Napi::CallbackInfo& info);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -10,5 +10,5 @@ class DLL_EXPORT NBoxLayout : public QBoxLayout, public EventWidget {
|
|||||||
public:
|
public:
|
||||||
EVENTWIDGET_IMPLEMENTATIONS(QBoxLayout)
|
EVENTWIDGET_IMPLEMENTATIONS(QBoxLayout)
|
||||||
using QBoxLayout::QBoxLayout;
|
using QBoxLayout::QBoxLayout;
|
||||||
void connectSignalsToEventEmitter() { QLAYOUT_SIGNALS }
|
virtual void connectSignalsToEventEmitter() { QLAYOUT_SIGNALS }
|
||||||
};
|
};
|
||||||
|
|||||||
@ -12,13 +12,13 @@
|
|||||||
class DLL_EXPORT QBoxLayoutWrap : public Napi::ObjectWrap<QBoxLayoutWrap> {
|
class DLL_EXPORT QBoxLayoutWrap : public Napi::ObjectWrap<QBoxLayoutWrap> {
|
||||||
QLAYOUT_WRAPPED_METHODS_DECLARATION
|
QLAYOUT_WRAPPED_METHODS_DECLARATION
|
||||||
private:
|
private:
|
||||||
QPointer<NBoxLayout> instance;
|
QPointer<QBoxLayout> instance;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static Napi::Object init(Napi::Env env, Napi::Object exports);
|
static Napi::Object init(Napi::Env env, Napi::Object exports);
|
||||||
QBoxLayoutWrap(const Napi::CallbackInfo& info);
|
QBoxLayoutWrap(const Napi::CallbackInfo& info);
|
||||||
~QBoxLayoutWrap();
|
~QBoxLayoutWrap();
|
||||||
NBoxLayout* getInternalInstance();
|
QBoxLayout* getInternalInstance();
|
||||||
// class constructor
|
// class constructor
|
||||||
static Napi::FunctionReference constructor;
|
static Napi::FunctionReference constructor;
|
||||||
// wrapped methods
|
// wrapped methods
|
||||||
|
|||||||
@ -12,15 +12,33 @@ class DLL_EXPORT NButtonGroup : public QButtonGroup, public EventWidget {
|
|||||||
EVENTWIDGET_IMPLEMENTATIONS(QButtonGroup)
|
EVENTWIDGET_IMPLEMENTATIONS(QButtonGroup)
|
||||||
public:
|
public:
|
||||||
using QButtonGroup::QButtonGroup; // inherit all constructors of QButtonGroup
|
using QButtonGroup::QButtonGroup; // inherit all constructors of QButtonGroup
|
||||||
void connectSignalsToEventEmitter() {
|
virtual void connectSignalsToEventEmitter() {
|
||||||
QOBJECT_SIGNALS
|
QOBJECT_SIGNALS
|
||||||
// Qt Connects: Implement all signal connects here
|
// Qt Connects: Implement all signal connects here
|
||||||
connect(this, QOverload<int>::of(&QButtonGroup::buttonClicked),
|
connect(this, &QButtonGroup::idClicked, [=](int id) {
|
||||||
[=](int id) {
|
Napi::Env env = this->emitOnNode.Env();
|
||||||
Napi::Env env = this->emitOnNode.Env();
|
Napi::HandleScope scope(env);
|
||||||
Napi::HandleScope scope(env);
|
this->emitOnNode.Call(
|
||||||
this->emitOnNode.Call({Napi::String::New(env, "buttonClicked"),
|
{Napi::String::New(env, "idClicked"), Napi::Number::New(env, id)});
|
||||||
Napi::Number::New(env, id)});
|
});
|
||||||
});
|
connect(this, &QButtonGroup::idPressed, [=](int id) {
|
||||||
|
Napi::Env env = this->emitOnNode.Env();
|
||||||
|
Napi::HandleScope scope(env);
|
||||||
|
this->emitOnNode.Call(
|
||||||
|
{Napi::String::New(env, "idPressed"), Napi::Number::New(env, id)});
|
||||||
|
});
|
||||||
|
connect(this, &QButtonGroup::idReleased, [=](int id) {
|
||||||
|
Napi::Env env = this->emitOnNode.Env();
|
||||||
|
Napi::HandleScope scope(env);
|
||||||
|
this->emitOnNode.Call(
|
||||||
|
{Napi::String::New(env, "idReleased"), Napi::Number::New(env, id)});
|
||||||
|
});
|
||||||
|
connect(this, &QButtonGroup::idToggled, [=](int id, bool checked) {
|
||||||
|
Napi::Env env = this->emitOnNode.Env();
|
||||||
|
Napi::HandleScope scope(env);
|
||||||
|
this->emitOnNode.Call({Napi::String::New(env, "idToggled"),
|
||||||
|
Napi::Number::New(env, id),
|
||||||
|
Napi::Boolean::New(env, checked)});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@ -9,13 +9,13 @@
|
|||||||
#include "nbuttongroup.hpp"
|
#include "nbuttongroup.hpp"
|
||||||
class DLL_EXPORT QButtonGroupWrap : public Napi::ObjectWrap<QButtonGroupWrap> {
|
class DLL_EXPORT QButtonGroupWrap : public Napi::ObjectWrap<QButtonGroupWrap> {
|
||||||
private:
|
private:
|
||||||
QPointer<NButtonGroup> instance;
|
QPointer<QButtonGroup> instance;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static Napi::Object init(Napi::Env env, Napi::Object exports);
|
static Napi::Object init(Napi::Env env, Napi::Object exports);
|
||||||
QButtonGroupWrap(const Napi::CallbackInfo& info);
|
QButtonGroupWrap(const Napi::CallbackInfo& info);
|
||||||
~QButtonGroupWrap();
|
~QButtonGroupWrap();
|
||||||
NButtonGroup* getInternalInstance();
|
QButtonGroup* getInternalInstance();
|
||||||
// class constructor
|
// class constructor
|
||||||
static Napi::FunctionReference constructor;
|
static Napi::FunctionReference constructor;
|
||||||
// wrapped methods
|
// wrapped methods
|
||||||
|
|||||||
@ -14,7 +14,7 @@ class DLL_EXPORT NCalendarWidget : public QCalendarWidget, public NodeWidget {
|
|||||||
// inherit all constructors of QCalendarWidget
|
// inherit all constructors of QCalendarWidget
|
||||||
using QCalendarWidget::QCalendarWidget;
|
using QCalendarWidget::QCalendarWidget;
|
||||||
|
|
||||||
void connectSignalsToEventEmitter() {
|
virtual void connectSignalsToEventEmitter() {
|
||||||
// Qt Connects: Implement all signal connects here
|
// Qt Connects: Implement all signal connects here
|
||||||
QWIDGET_SIGNALS
|
QWIDGET_SIGNALS
|
||||||
QObject::connect(this, &QCalendarWidget::activated, [=](const QDate &date) {
|
QObject::connect(this, &QCalendarWidget::activated, [=](const QDate &date) {
|
||||||
|
|||||||
@ -11,13 +11,13 @@
|
|||||||
class DLL_EXPORT QCalendarWidgetWrap
|
class DLL_EXPORT QCalendarWidgetWrap
|
||||||
: public Napi::ObjectWrap<QCalendarWidgetWrap> {
|
: public Napi::ObjectWrap<QCalendarWidgetWrap> {
|
||||||
private:
|
private:
|
||||||
QPointer<NCalendarWidget> instance;
|
QPointer<QCalendarWidget> instance;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static Napi::Object init(Napi::Env env, Napi::Object exports);
|
static Napi::Object init(Napi::Env env, Napi::Object exports);
|
||||||
QCalendarWidgetWrap(const Napi::CallbackInfo &info);
|
QCalendarWidgetWrap(const Napi::CallbackInfo &info);
|
||||||
~QCalendarWidgetWrap();
|
~QCalendarWidgetWrap();
|
||||||
NCalendarWidget *getInternalInstance();
|
QCalendarWidget *getInternalInstance();
|
||||||
// class constructor
|
// class constructor
|
||||||
static Napi::FunctionReference constructor;
|
static Napi::FunctionReference constructor;
|
||||||
// wrapped methods
|
// wrapped methods
|
||||||
|
|||||||
@ -13,7 +13,7 @@ class DLL_EXPORT NCheckBox : public QCheckBox, public NodeWidget {
|
|||||||
public:
|
public:
|
||||||
using QCheckBox::QCheckBox; // inherit all constructors of QCheckBox
|
using QCheckBox::QCheckBox; // inherit all constructors of QCheckBox
|
||||||
|
|
||||||
void connectSignalsToEventEmitter() {
|
virtual void connectSignalsToEventEmitter() {
|
||||||
QABSTRACT_BUTTON_SIGNALS
|
QABSTRACT_BUTTON_SIGNALS
|
||||||
QObject::connect(this, &QCheckBox::stateChanged, [=](int state) {
|
QObject::connect(this, &QCheckBox::stateChanged, [=](int state) {
|
||||||
Napi::Env env = this->emitOnNode.Env();
|
Napi::Env env = this->emitOnNode.Env();
|
||||||
|
|||||||
@ -12,14 +12,13 @@
|
|||||||
class DLL_EXPORT QCheckBoxWrap : public Napi::ObjectWrap<QCheckBoxWrap> {
|
class DLL_EXPORT QCheckBoxWrap : public Napi::ObjectWrap<QCheckBoxWrap> {
|
||||||
QABSTRACTBUTTON_WRAPPED_METHODS_DECLARATION
|
QABSTRACTBUTTON_WRAPPED_METHODS_DECLARATION
|
||||||
private:
|
private:
|
||||||
QPointer<NCheckBox> instance;
|
QPointer<QCheckBox> instance;
|
||||||
bool disableDeletion;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static Napi::Object init(Napi::Env env, Napi::Object exports);
|
static Napi::Object init(Napi::Env env, Napi::Object exports);
|
||||||
QCheckBoxWrap(const Napi::CallbackInfo& info);
|
QCheckBoxWrap(const Napi::CallbackInfo& info);
|
||||||
~QCheckBoxWrap();
|
~QCheckBoxWrap();
|
||||||
NCheckBox* getInternalInstance();
|
QCheckBox* getInternalInstance();
|
||||||
// class constructor
|
// class constructor
|
||||||
static Napi::FunctionReference constructor;
|
static Napi::FunctionReference constructor;
|
||||||
// wrapped methods
|
// wrapped methods
|
||||||
|
|||||||
@ -14,7 +14,7 @@ class DLL_EXPORT NColorDialog : public QColorDialog, public NodeWidget {
|
|||||||
public:
|
public:
|
||||||
using QColorDialog::QColorDialog;
|
using QColorDialog::QColorDialog;
|
||||||
|
|
||||||
void connectSignalsToEventEmitter() {
|
virtual void connectSignalsToEventEmitter() {
|
||||||
QDIALOG_SIGNALS
|
QDIALOG_SIGNALS
|
||||||
// Qt Connects: Implement all signal connects here
|
// Qt Connects: Implement all signal connects here
|
||||||
QObject::connect(
|
QObject::connect(
|
||||||
|
|||||||
@ -9,21 +9,23 @@
|
|||||||
#include "QtWidgets/QDialog/qdialog_macro.h"
|
#include "QtWidgets/QDialog/qdialog_macro.h"
|
||||||
|
|
||||||
class DLL_EXPORT QColorDialogWrap : public Napi::ObjectWrap<QColorDialogWrap> {
|
class DLL_EXPORT QColorDialogWrap : public Napi::ObjectWrap<QColorDialogWrap> {
|
||||||
QDIALOG_WRAPPED_METHODS_DECLARATION
|
QDIALOG_WRAPPED_METHODS_DECLARATION_NO_ACCEPT_OR_DONE
|
||||||
private:
|
private:
|
||||||
QPointer<NColorDialog> instance;
|
QPointer<QColorDialog> instance;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static Napi::Object init(Napi::Env env, Napi::Object exports);
|
static Napi::Object init(Napi::Env env, Napi::Object exports);
|
||||||
QColorDialogWrap(const Napi::CallbackInfo& info);
|
QColorDialogWrap(const Napi::CallbackInfo& info);
|
||||||
~QColorDialogWrap();
|
~QColorDialogWrap();
|
||||||
NColorDialog* getInternalInstance();
|
QColorDialog* getInternalInstance();
|
||||||
// class constructor
|
// class constructor
|
||||||
static Napi::FunctionReference constructor;
|
static Napi::FunctionReference constructor;
|
||||||
// wrapped methods
|
// wrapped methods
|
||||||
Napi::Value selectedColor(const Napi::CallbackInfo& info);
|
Napi::Value selectedColor(const Napi::CallbackInfo& info);
|
||||||
Napi::Value setOption(const Napi::CallbackInfo& info);
|
Napi::Value setOption(const Napi::CallbackInfo& info);
|
||||||
Napi::Value testOption(const Napi::CallbackInfo& info);
|
Napi::Value testOption(const Napi::CallbackInfo& info);
|
||||||
|
Napi::Value accept(const Napi::CallbackInfo& info);
|
||||||
|
Napi::Value done(const Napi::CallbackInfo& info);
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace StaticQColorDialogWrapMethods {
|
namespace StaticQColorDialogWrapMethods {
|
||||||
|
|||||||
@ -12,9 +12,16 @@ class DLL_EXPORT NComboBox : public QComboBox, public NodeWidget {
|
|||||||
NODEWIDGET_IMPLEMENTATIONS(QComboBox)
|
NODEWIDGET_IMPLEMENTATIONS(QComboBox)
|
||||||
using QComboBox::QComboBox;
|
using QComboBox::QComboBox;
|
||||||
|
|
||||||
void connectSignalsToEventEmitter() {
|
virtual void connectSignalsToEventEmitter() {
|
||||||
QWIDGET_SIGNALS
|
QWIDGET_SIGNALS
|
||||||
// Qt Connects: Implement all signal connects here
|
// Qt Connects: Implement all signal connects here
|
||||||
|
QObject::connect(
|
||||||
|
this, QOverload<int>::of(&QComboBox::activated), [=](int index) {
|
||||||
|
Napi::Env env = this->emitOnNode.Env();
|
||||||
|
Napi::HandleScope scope(env);
|
||||||
|
this->emitOnNode.Call({Napi::String::New(env, "activated"),
|
||||||
|
Napi::Number::From(env, index)});
|
||||||
|
});
|
||||||
QObject::connect(
|
QObject::connect(
|
||||||
this, QOverload<int>::of(&QComboBox::currentIndexChanged),
|
this, QOverload<int>::of(&QComboBox::currentIndexChanged),
|
||||||
[=](int index) {
|
[=](int index) {
|
||||||
@ -38,5 +45,25 @@ class DLL_EXPORT NComboBox : public QComboBox, public NodeWidget {
|
|||||||
this->emitOnNode.Call({Napi::String::New(env, "editTextChanged"),
|
this->emitOnNode.Call({Napi::String::New(env, "editTextChanged"),
|
||||||
Napi::String::New(env, text.toStdString())});
|
Napi::String::New(env, text.toStdString())});
|
||||||
});
|
});
|
||||||
|
QObject::connect(
|
||||||
|
this, QOverload<int>::of(&QComboBox::highlighted), [=](int index) {
|
||||||
|
Napi::Env env = this->emitOnNode.Env();
|
||||||
|
Napi::HandleScope scope(env);
|
||||||
|
this->emitOnNode.Call({Napi::String::New(env, "highlighted"),
|
||||||
|
Napi::Number::From(env, index)});
|
||||||
|
});
|
||||||
|
QObject::connect(this, &QComboBox::textActivated, [=](const QString &text) {
|
||||||
|
Napi::Env env = this->emitOnNode.Env();
|
||||||
|
Napi::HandleScope scope(env);
|
||||||
|
this->emitOnNode.Call({Napi::String::New(env, "textActivated"),
|
||||||
|
Napi::String::New(env, text.toStdString())});
|
||||||
|
});
|
||||||
|
QObject::connect(
|
||||||
|
this, &QComboBox::textHighlighted, [=](const QString &text) {
|
||||||
|
Napi::Env env = this->emitOnNode.Env();
|
||||||
|
Napi::HandleScope scope(env);
|
||||||
|
this->emitOnNode.Call({Napi::String::New(env, "textHighlighted"),
|
||||||
|
Napi::String::New(env, text.toStdString())});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user