mirror of
https://github.com/minetest/irrlicht.git
synced 2025-07-03 16:50:27 +02:00
Compare commits
48 Commits
Author | SHA1 | Date | |
---|---|---|---|
ce0d29df93 | |||
2ae816b5a6 | |||
61af99adfa | |||
afbe41019c | |||
05a00a8d91 | |||
07fd32da50 | |||
735af8eec6 | |||
29a448de4d | |||
1579ce2740 | |||
b9e0641203 | |||
6f98515f34 | |||
a549d0bfed | |||
a0af653c3d | |||
cac4e62852 | |||
d6766fb8f4 | |||
e46ab74859 | |||
57705d57cf | |||
e9908ca545 | |||
2709c937d9 | |||
59fc4401f1 | |||
f3a1f9f656 | |||
1128d9deab | |||
9b541f2948 | |||
1cf0f3bef0 | |||
3225007e8d | |||
e9f205f952 | |||
d733e03430 | |||
f0766c845f | |||
ff645cc876 | |||
f6ec00e1c4 | |||
51f0acb7c1 | |||
91edd214aa | |||
538c9e5cde | |||
abebac8bd4 | |||
67c0cb5740 | |||
748e005794 | |||
a7b306f702 | |||
074e81f78f | |||
25ae156944 | |||
c4ca31313f | |||
b787ec3e3e | |||
6db035e0aa | |||
6064e12133 | |||
53e1b52ff4 | |||
a04a0d2a4b | |||
392df9bae3 | |||
426730bf91 | |||
aa095d9525 |
118
.github/workflows/build.yml
vendored
118
.github/workflows/build.yml
vendored
@ -8,13 +8,16 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
|
|
||||||
linux-gl:
|
linux-gl:
|
||||||
runs-on: ubuntu-18.04
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: ubuntu:bionic
|
||||||
|
env: { LANG: "C.UTF-8" }
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
- name: Install deps
|
- name: Install deps
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
apt-get update
|
||||||
sudo apt-get install g++ cmake libxxf86vm-dev libgl1-mesa-dev libpng-dev libjpeg-dev zlib1g-dev -qyy
|
apt-get install g++ cmake libxi-dev libgl1-mesa-dev libpng-dev libjpeg-dev zlib1g-dev -qyy
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
@ -26,19 +29,22 @@ jobs:
|
|||||||
make DESTDIR=$PWD/_install install
|
make DESTDIR=$PWD/_install install
|
||||||
tar -c -I "gzip -9" -f irrlicht-linux.tar.gz -C ./_install/usr/local .
|
tar -c -I "gzip -9" -f irrlicht-linux.tar.gz -C ./_install/usr/local .
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v2
|
- uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: irrlicht-linux
|
name: irrlicht-linux
|
||||||
path: ./irrlicht-linux.tar.gz
|
path: ./irrlicht-linux.tar.gz
|
||||||
|
|
||||||
linux-gles:
|
linux-gles:
|
||||||
runs-on: ubuntu-18.04
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: ubuntu:bionic
|
||||||
|
env: { LANG: "C.UTF-8" }
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
- name: Install deps
|
- name: Install deps
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
apt-get update
|
||||||
sudo apt-get install g++ cmake libxxf86vm-dev libgles2-mesa-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy
|
apt-get install g++ cmake libxi-dev libgles2-mesa-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
@ -57,10 +63,33 @@ jobs:
|
|||||||
cd bin/Linux
|
cd bin/Linux
|
||||||
LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest
|
LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest
|
||||||
|
|
||||||
|
linux-sdl:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: ubuntu:jammy
|
||||||
|
env: { LANG: "C.UTF-8" }
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- name: Install deps
|
||||||
|
run: |
|
||||||
|
apt-get update
|
||||||
|
apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev -qyy
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: |
|
||||||
|
sed '/#define _IRR_COMPILE_WITH_SDL_DEVICE_/ s|^//||g' -i include/IrrCompileConfig.h
|
||||||
|
cmake . -DBUILD_EXAMPLES=1
|
||||||
|
make -j2
|
||||||
|
|
||||||
|
- name: Test (headless)
|
||||||
|
run: |
|
||||||
|
cd bin/Linux
|
||||||
|
./AutomatedTest null
|
||||||
|
|
||||||
win32:
|
win32:
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-20.04
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
- name: Install compiler
|
- name: Install compiler
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update && sudo apt-get install cmake -qyy
|
sudo apt-get update && sudo apt-get install cmake -qyy
|
||||||
@ -74,7 +103,7 @@ jobs:
|
|||||||
CC: i686-w64-mingw32-gcc
|
CC: i686-w64-mingw32-gcc
|
||||||
CXX: i686-w64-mingw32-g++
|
CXX: i686-w64-mingw32-g++
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v2
|
- uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: irrlicht-win32
|
name: irrlicht-win32
|
||||||
path: ./irrlicht-win32.zip
|
path: ./irrlicht-win32.zip
|
||||||
@ -82,7 +111,7 @@ jobs:
|
|||||||
win64:
|
win64:
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-20.04
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
- name: Install compiler
|
- name: Install compiler
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update && sudo apt-get install cmake -qyy
|
sudo apt-get update && sudo apt-get install cmake -qyy
|
||||||
@ -96,15 +125,15 @@ jobs:
|
|||||||
CC: x86_64-w64-mingw32-gcc
|
CC: x86_64-w64-mingw32-gcc
|
||||||
CXX: x86_64-w64-mingw32-g++
|
CXX: x86_64-w64-mingw32-g++
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v2
|
- uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: irrlicht-win64
|
name: irrlicht-win64
|
||||||
path: ./irrlicht-win64.zip
|
path: ./irrlicht-win64.zip
|
||||||
|
|
||||||
macos:
|
macos:
|
||||||
runs-on: macos-10.15
|
runs-on: macos-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
- name: Install deps
|
- name: Install deps
|
||||||
run: |
|
run: |
|
||||||
brew update
|
brew update
|
||||||
@ -118,3 +147,62 @@ jobs:
|
|||||||
- name: Test (headless)
|
- name: Test (headless)
|
||||||
run: |
|
run: |
|
||||||
./bin/OSX/AutomatedTest null
|
./bin/OSX/AutomatedTest null
|
||||||
|
|
||||||
|
msvc:
|
||||||
|
name: VS 2019 ${{ matrix.config.arch }}
|
||||||
|
runs-on: windows-2019
|
||||||
|
env:
|
||||||
|
VCPKG_VERSION: 14e7bb4ae24616ec54ff6b2f6ef4e8659434ea44
|
||||||
|
# 2022.05.10
|
||||||
|
vcpkg_packages: zlib libpng libjpeg-turbo opengl-registry
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
config:
|
||||||
|
-
|
||||||
|
arch: x86
|
||||||
|
generator: "-G'Visual Studio 16 2019' -A Win32"
|
||||||
|
vcpkg_triplet: x86-windows
|
||||||
|
-
|
||||||
|
arch: x64
|
||||||
|
generator: "-G'Visual Studio 16 2019' -A x64"
|
||||||
|
vcpkg_triplet: x64-windows
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Restore from cache and run vcpkg
|
||||||
|
uses: lukka/run-vcpkg@v7
|
||||||
|
with:
|
||||||
|
vcpkgArguments: ${{env.vcpkg_packages}}
|
||||||
|
vcpkgDirectory: '${{ github.workspace }}\vcpkg'
|
||||||
|
appendedCacheKey: ${{ matrix.config.vcpkg_triplet }}
|
||||||
|
vcpkgGitCommitId: ${{ env.VCPKG_VERSION }}
|
||||||
|
vcpkgTriplet: ${{ matrix.config.vcpkg_triplet }}
|
||||||
|
|
||||||
|
- name: CMake
|
||||||
|
run: |
|
||||||
|
cmake ${{matrix.config.generator}} `
|
||||||
|
-DCMAKE_TOOLCHAIN_FILE="${{ github.workspace }}\vcpkg\scripts\buildsystems\vcpkg.cmake" `
|
||||||
|
-DCMAKE_BUILD_TYPE=Release .
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: cmake --build . --config Release
|
||||||
|
|
||||||
|
- name: Create artifact folder
|
||||||
|
run: |
|
||||||
|
mkdir artifact/
|
||||||
|
mkdir artifact/lib/
|
||||||
|
|
||||||
|
- name: Move dlls into artifact folder
|
||||||
|
run: move bin\Win32-VisualStudio\Release\* artifact\lib\
|
||||||
|
|
||||||
|
- name: Move includes into artifact folder
|
||||||
|
run: move include artifact/
|
||||||
|
|
||||||
|
- name: Upload Artifact
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: msvc-${{ matrix.config.arch }}
|
||||||
|
path: artifact/
|
||||||
|
4
.gitignore
vendored
4
.gitignore
vendored
@ -15,3 +15,7 @@ bin/Linux
|
|||||||
scripts/gl2ext.h
|
scripts/gl2ext.h
|
||||||
scripts/glcorearb.h
|
scripts/glcorearb.h
|
||||||
scripts/glext.h
|
scripts/glext.h
|
||||||
|
*.vcxproj*
|
||||||
|
*.dir/
|
||||||
|
*.sln
|
||||||
|
*visualstudio/
|
||||||
|
@ -7,8 +7,10 @@ else()
|
|||||||
cmake_policy(VERSION 3.9)
|
cmake_policy(VERSION 3.9)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
set(IRRLICHTMT_REVISION 9)
|
||||||
|
|
||||||
project(Irrlicht
|
project(Irrlicht
|
||||||
VERSION 1.9.0
|
VERSION 1.9.0.${IRRLICHTMT_REVISION}
|
||||||
LANGUAGES CXX
|
LANGUAGES CXX
|
||||||
)
|
)
|
||||||
|
|
||||||
|
18
README.md
18
README.md
@ -3,7 +3,8 @@ IrrlichtMt version 1.9
|
|||||||
|
|
||||||
The Irrlicht Engine is an open source realtime 3D engine written in C++.
|
The Irrlicht Engine is an open source realtime 3D engine written in C++.
|
||||||
|
|
||||||
This is a fork by the [Minetest](https://github.com/minetest) developers that contains features, customizations and fixes specifically for use in Minetest.
|
This is a fork by the [Minetest](https://github.com/minetest) developers that was stripped-down and customized specifically for use in Minetest.
|
||||||
|
It is intentionally not compatible to upstream and is planned to be eventually absorbed into Minetest.
|
||||||
|
|
||||||
Build
|
Build
|
||||||
-----
|
-----
|
||||||
@ -29,6 +30,21 @@ e.g. on a Linux system you might want to build for local use like this:
|
|||||||
|
|
||||||
This will put an IrrlichtMtTargets.cmake file into the cmake directory in the current build directory, and it can then be imported from another project by pointing `find_package()` to the build directory, or by setting the `CMAKE_PREFIX_PATH` variable to that same path.
|
This will put an IrrlichtMtTargets.cmake file into the cmake directory in the current build directory, and it can then be imported from another project by pointing `find_package()` to the build directory, or by setting the `CMAKE_PREFIX_PATH` variable to that same path.
|
||||||
|
|
||||||
|
on Windows system:
|
||||||
|
|
||||||
|
It is highly recommended to use vcpkg as package manager.
|
||||||
|
|
||||||
|
After you successfully built vcpkg you can easily install the required libraries:
|
||||||
|
|
||||||
|
vcpkg install zlib libjpeg-turbo libpng opengl-registry --triplet x64-windows
|
||||||
|
|
||||||
|
Run the following script in PowerShell:
|
||||||
|
|
||||||
|
git clone https://github.com/minetest/irrlicht
|
||||||
|
cd irrlicht
|
||||||
|
cmake -B build -G "Visual Studio 17 2022" -A "Win64" -DCMAKE_TOOLCHAIN_FILE=[vcpkg-root]/scripts/buildsystems/vcpkg.cmake -DBUILD_SHARED_LIBS=OFF
|
||||||
|
cmake --build build --config Release
|
||||||
|
|
||||||
Platforms
|
Platforms
|
||||||
---------
|
---------
|
||||||
|
|
||||||
|
@ -7,7 +7,8 @@ using namespace irr;
|
|||||||
static IrrlichtDevice *device = nullptr;
|
static IrrlichtDevice *device = nullptr;
|
||||||
static int test_fail = 0;
|
static int test_fail = 0;
|
||||||
|
|
||||||
extern void test_irr_array();
|
void test_irr_array();
|
||||||
|
void test_irr_string();
|
||||||
|
|
||||||
static video::E_DRIVER_TYPE chooseDriver(const char *arg_)
|
static video::E_DRIVER_TYPE chooseDriver(const char *arg_)
|
||||||
{
|
{
|
||||||
@ -32,7 +33,14 @@ static inline void check(bool ok, const char *msg)
|
|||||||
|
|
||||||
void run_unit_tests() {
|
void run_unit_tests() {
|
||||||
std::cout << "Running unit tests:" << std::endl;
|
std::cout << "Running unit tests:" << std::endl;
|
||||||
|
try {
|
||||||
test_irr_array();
|
test_irr_array();
|
||||||
|
test_irr_string();
|
||||||
|
} catch (const std::exception &e) {
|
||||||
|
std::cerr << e.what() << std::endl;
|
||||||
|
test_fail++;
|
||||||
|
}
|
||||||
|
std::cout << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
@ -99,7 +107,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
while (device->run())
|
while (device->run())
|
||||||
{
|
{
|
||||||
if (device->getTimer()->getTime() >= 1300)
|
if (device->getTimer()->getTime() >= 1000)
|
||||||
{
|
{
|
||||||
device->getTimer()->setTime(0);
|
device->getTimer()->setTime(0);
|
||||||
++n;
|
++n;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#include "irrArray.h"
|
#include <irrArray.h>
|
||||||
#include "test_helper.h"
|
#include "test_helper.h"
|
||||||
|
|
||||||
using namespace irr;
|
using namespace irr;
|
||||||
|
195
examples/AutomatedTest/test_string.cpp
Normal file
195
examples/AutomatedTest/test_string.cpp
Normal file
@ -0,0 +1,195 @@
|
|||||||
|
#include <irrString.h>
|
||||||
|
#include <cstring>
|
||||||
|
#include <clocale>
|
||||||
|
#include <vector>
|
||||||
|
#include "test_helper.h"
|
||||||
|
|
||||||
|
using namespace irr;
|
||||||
|
using namespace irr::core;
|
||||||
|
|
||||||
|
#define CMPSTR(a, b) (!strcmp(a, b))
|
||||||
|
#define UASSERTSTR(actual, expected) UASSERTCMP(CMPSTR, actual.c_str(), expected)
|
||||||
|
|
||||||
|
static void test_basics()
|
||||||
|
{
|
||||||
|
// ctor
|
||||||
|
stringc s;
|
||||||
|
UASSERTEQ(s.c_str()[0], '\0');
|
||||||
|
s = stringc(0.1234567);
|
||||||
|
UASSERTSTR(s, "0.123457");
|
||||||
|
s = stringc(0x1p+53);
|
||||||
|
UASSERTSTR(s, "9007199254740992.000000");
|
||||||
|
s = stringc(static_cast<int>(-102400));
|
||||||
|
UASSERTSTR(s, "-102400");
|
||||||
|
s = stringc(static_cast<unsigned int>(102400));
|
||||||
|
UASSERTSTR(s, "102400");
|
||||||
|
s = stringc(static_cast<long>(-1024000));
|
||||||
|
UASSERTSTR(s, "-1024000");
|
||||||
|
s = stringc(static_cast<unsigned long>(1024000));
|
||||||
|
UASSERTSTR(s, "1024000");
|
||||||
|
s = stringc("YESno", 3);
|
||||||
|
UASSERTSTR(s, "YES");
|
||||||
|
s = stringc(L"test", 4);
|
||||||
|
UASSERTSTR(s, "test");
|
||||||
|
s = stringc("Hello World!");
|
||||||
|
UASSERTSTR(s, "Hello World!");
|
||||||
|
// operator=
|
||||||
|
s = stringw(L"abcdef");
|
||||||
|
UASSERTSTR(s, "abcdef");
|
||||||
|
s = L"abcdef";
|
||||||
|
UASSERTSTR(s, "abcdef");
|
||||||
|
s = static_cast<const char*>(nullptr);
|
||||||
|
UASSERTSTR(s, "");
|
||||||
|
// operator+
|
||||||
|
s = s + stringc("foo");
|
||||||
|
UASSERTSTR(s, "foo");
|
||||||
|
s = s + L"bar";
|
||||||
|
UASSERTSTR(s, "foobar");
|
||||||
|
// the rest
|
||||||
|
s = "f";
|
||||||
|
UASSERTEQ(s[0], 'f');
|
||||||
|
const auto &sref = s;
|
||||||
|
UASSERTEQ(sref[0], 'f');
|
||||||
|
UASSERT(sref == "f");
|
||||||
|
UASSERT(sref == stringc("f"));
|
||||||
|
s = "a";
|
||||||
|
UASSERT(sref < stringc("aa"));
|
||||||
|
UASSERT(sref < stringc("b"));
|
||||||
|
UASSERT(stringc("Z") < sref);
|
||||||
|
UASSERT(!(sref < stringc("a")));
|
||||||
|
UASSERT(sref.lower_ignore_case("AA"));
|
||||||
|
UASSERT(sref.lower_ignore_case("B"));
|
||||||
|
UASSERT(!sref.lower_ignore_case("A"));
|
||||||
|
s = "dog";
|
||||||
|
UASSERT(sref != "cat");
|
||||||
|
UASSERT(sref != stringc("cat"));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_methods()
|
||||||
|
{
|
||||||
|
stringc s;
|
||||||
|
const auto &sref = s;
|
||||||
|
s = "irrlicht";
|
||||||
|
UASSERTEQ(sref.size(), 8);
|
||||||
|
UASSERT(!sref.empty());
|
||||||
|
s.clear();
|
||||||
|
UASSERTEQ(sref.size(), 0);
|
||||||
|
UASSERT(sref.empty());
|
||||||
|
UASSERT(sref[0] == 0);
|
||||||
|
s = "\tAz#`";
|
||||||
|
s.make_lower();
|
||||||
|
UASSERTSTR(s, "\taz#`");
|
||||||
|
s.make_upper();
|
||||||
|
UASSERTSTR(s, "\tAZ#`");
|
||||||
|
UASSERT(sref.equals_ignore_case("\taz#`"));
|
||||||
|
UASSERT(sref.equals_substring_ignore_case("Z#`", 2));
|
||||||
|
s = "irrlicht";
|
||||||
|
UASSERT(sref.equalsn(stringc("irr"), 3));
|
||||||
|
UASSERT(sref.equalsn("irr", 3));
|
||||||
|
s = "fo";
|
||||||
|
s.append('o');
|
||||||
|
UASSERTSTR(s, "foo");
|
||||||
|
s.append("bar", 1);
|
||||||
|
UASSERTSTR(s, "foob");
|
||||||
|
s.append("ar", 999999);
|
||||||
|
UASSERTSTR(s, "foobar");
|
||||||
|
s = "nyan";
|
||||||
|
s.append(stringc("cat"));
|
||||||
|
UASSERTSTR(s, "nyancat");
|
||||||
|
s.append(stringc("sam"), 1);
|
||||||
|
UASSERTSTR(s, "nyancats");
|
||||||
|
s = "fbar";
|
||||||
|
s.insert(1, "ooXX", 2);
|
||||||
|
UASSERTSTR(s, "foobar");
|
||||||
|
UASSERTEQ(sref.findFirst('o'), 1);
|
||||||
|
UASSERTEQ(sref.findFirst('X'), -1);
|
||||||
|
UASSERTEQ(sref.findFirstChar("abff", 2), 3);
|
||||||
|
UASSERTEQ(sref.findFirstCharNotInList("fobb", 2), 3);
|
||||||
|
UASSERTEQ(sref.findLast('o'), 2);
|
||||||
|
UASSERTEQ(sref.findLast('X'), -1);
|
||||||
|
UASSERTEQ(sref.findLastChar("abrr", 2), 4);
|
||||||
|
UASSERTEQ(sref.findLastCharNotInList("rabb", 2), 3);
|
||||||
|
UASSERTEQ(sref.findNext('o', 2), 2);
|
||||||
|
UASSERTEQ(sref.findLast('o', 1), 1);
|
||||||
|
s = "ob-oob";
|
||||||
|
UASSERTEQ(sref.find("ob", 1), 4);
|
||||||
|
UASSERTEQ(sref.find("ob"), 0);
|
||||||
|
UASSERTEQ(sref.find("?"), -1);
|
||||||
|
s = "HOMEOWNER";
|
||||||
|
stringc s2 = sref.subString(2, 4);
|
||||||
|
UASSERTSTR(s2, "MEOW");
|
||||||
|
s2 = sref.subString(2, 4, true);
|
||||||
|
UASSERTSTR(s2, "meow");
|
||||||
|
s = "land";
|
||||||
|
s.replace('l', 's');
|
||||||
|
UASSERTSTR(s, "sand");
|
||||||
|
s = ">dog<";
|
||||||
|
s.replace("dog", "cat");
|
||||||
|
UASSERTSTR(s, ">cat<");
|
||||||
|
s.replace("cat", "horse");
|
||||||
|
UASSERTSTR(s, ">horse<");
|
||||||
|
s.replace("horse", "gnu");
|
||||||
|
UASSERTSTR(s, ">gnu<");
|
||||||
|
s = " h e l p ";
|
||||||
|
s.remove(' ');
|
||||||
|
UASSERTSTR(s, "help");
|
||||||
|
s.remove("el");
|
||||||
|
UASSERTSTR(s, "hp");
|
||||||
|
s = "irrlicht";
|
||||||
|
s.removeChars("it");
|
||||||
|
UASSERTSTR(s, "rrlch");
|
||||||
|
s = "\r\nfoo bar ";
|
||||||
|
s.trim();
|
||||||
|
UASSERTSTR(s, "foo bar");
|
||||||
|
s = "foxo";
|
||||||
|
s.erase(2);
|
||||||
|
UASSERTSTR(s, "foo");
|
||||||
|
s = "a";
|
||||||
|
s.append('\0');
|
||||||
|
s.append('b');
|
||||||
|
UASSERTEQ(s.size(), 3);
|
||||||
|
s.validate();
|
||||||
|
UASSERTEQ(s.size(), 1);
|
||||||
|
UASSERTEQ(s.lastChar(), 'a');
|
||||||
|
std::vector<stringc> res;
|
||||||
|
s = "a,,b,c";
|
||||||
|
s.split(res, ",aa", 1, true, false);
|
||||||
|
UASSERTEQ(res.size(), 3);
|
||||||
|
UASSERTSTR(res[0], "a");
|
||||||
|
UASSERTSTR(res[2], "c");
|
||||||
|
res.clear();
|
||||||
|
s.split(res, ",", 1, false, true);
|
||||||
|
UASSERTEQ(res.size(), 7);
|
||||||
|
UASSERTSTR(res[0], "a");
|
||||||
|
UASSERTSTR(res[2], "");
|
||||||
|
for (int i = 0; i < 3; i++)
|
||||||
|
UASSERTSTR(res[2*i+1], ",");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_conv()
|
||||||
|
{
|
||||||
|
// assumes Unicode and UTF-8 locale
|
||||||
|
setlocale(LC_CTYPE, "");
|
||||||
|
|
||||||
|
stringw out;
|
||||||
|
multibyteToWString(out, "†††");
|
||||||
|
UASSERTEQ(out.size(), 3);
|
||||||
|
for (int i = 0; i < 3; i++)
|
||||||
|
UASSERTEQ(static_cast<u16>(out[i]), 0x2020);
|
||||||
|
stringc out2;
|
||||||
|
wStringToMultibyte(out2, L"†††");
|
||||||
|
UASSERTEQ(out2.size(), 9);
|
||||||
|
for (int i = 0; i < 3; i++) {
|
||||||
|
UASSERTEQ(static_cast<u8>(out2[3*i]), 0xe2);
|
||||||
|
UASSERTEQ(static_cast<u8>(out2[3*i+1]), 0x80);
|
||||||
|
UASSERTEQ(static_cast<u8>(out2[3*i+2]), 0xa0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_irr_string()
|
||||||
|
{
|
||||||
|
test_basics();
|
||||||
|
test_methods();
|
||||||
|
test_conv();
|
||||||
|
std::cout << " test_irr_string PASSED" << std::endl;
|
||||||
|
}
|
@ -39,46 +39,46 @@ namespace scene
|
|||||||
public:
|
public:
|
||||||
core::array<T> Indices;
|
core::array<T> Indices;
|
||||||
|
|
||||||
virtual u32 stride() const _IRR_OVERRIDE_ {return sizeof(T);}
|
u32 stride() const override {return sizeof(T);}
|
||||||
|
|
||||||
virtual u32 size() const _IRR_OVERRIDE_ {return Indices.size();}
|
u32 size() const override {return Indices.size();}
|
||||||
|
|
||||||
virtual void push_back(const u32 &element) _IRR_OVERRIDE_
|
void push_back(const u32 &element) override
|
||||||
{
|
{
|
||||||
// push const ref due to compiler problem with gcc 4.6, big endian
|
// push const ref due to compiler problem with gcc 4.6, big endian
|
||||||
Indices.push_back((const T&)element);
|
Indices.push_back((const T&)element);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual u32 operator [](u32 index) const _IRR_OVERRIDE_
|
u32 operator [](u32 index) const override
|
||||||
{
|
{
|
||||||
return (u32)(Indices[index]);
|
return (u32)(Indices[index]);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual u32 getLast() _IRR_OVERRIDE_ {return (u32)Indices.getLast();}
|
u32 getLast() override {return (u32)Indices.getLast();}
|
||||||
|
|
||||||
virtual void setValue(u32 index, u32 value) _IRR_OVERRIDE_
|
void setValue(u32 index, u32 value) override
|
||||||
{
|
{
|
||||||
Indices[index]=(T)value;
|
Indices[index]=(T)value;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void set_used(u32 usedNow) _IRR_OVERRIDE_
|
void set_used(u32 usedNow) override
|
||||||
{
|
{
|
||||||
Indices.set_used(usedNow);
|
Indices.set_used(usedNow);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void reallocate(u32 new_size) _IRR_OVERRIDE_
|
void reallocate(u32 new_size) override
|
||||||
{
|
{
|
||||||
Indices.reallocate(new_size);
|
Indices.reallocate(new_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual u32 allocated_size() const _IRR_OVERRIDE_
|
u32 allocated_size() const override
|
||||||
{
|
{
|
||||||
return Indices.allocated_size();
|
return Indices.allocated_size();
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void* pointer() _IRR_OVERRIDE_ {return Indices.pointer();}
|
void* pointer() override {return Indices.pointer();}
|
||||||
|
|
||||||
virtual video::E_INDEX_TYPE getType() const _IRR_OVERRIDE_
|
video::E_INDEX_TYPE getType() const override
|
||||||
{
|
{
|
||||||
if (sizeof(T)==sizeof(u16))
|
if (sizeof(T)==sizeof(u16))
|
||||||
return video::EIT_16BIT;
|
return video::EIT_16BIT;
|
||||||
@ -110,7 +110,7 @@ namespace scene
|
|||||||
}
|
}
|
||||||
|
|
||||||
//virtual void setType(video::E_INDEX_TYPE IndexType);
|
//virtual void setType(video::E_INDEX_TYPE IndexType);
|
||||||
virtual void setType(video::E_INDEX_TYPE IndexType) _IRR_OVERRIDE_
|
void setType(video::E_INDEX_TYPE IndexType) override
|
||||||
{
|
{
|
||||||
IIndexList *NewIndices=0;
|
IIndexList *NewIndices=0;
|
||||||
|
|
||||||
@ -141,78 +141,78 @@ namespace scene
|
|||||||
Indices=NewIndices;
|
Indices=NewIndices;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void* getData() _IRR_OVERRIDE_ {return Indices->pointer();}
|
void* getData() override {return Indices->pointer();}
|
||||||
|
|
||||||
virtual video::E_INDEX_TYPE getType() const _IRR_OVERRIDE_ {return Indices->getType();}
|
video::E_INDEX_TYPE getType() const override {return Indices->getType();}
|
||||||
|
|
||||||
virtual u32 stride() const _IRR_OVERRIDE_ {return Indices->stride();}
|
u32 stride() const override {return Indices->stride();}
|
||||||
|
|
||||||
virtual u32 size() const _IRR_OVERRIDE_
|
u32 size() const override
|
||||||
{
|
{
|
||||||
return Indices->size();
|
return Indices->size();
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void push_back(const u32 &element) _IRR_OVERRIDE_
|
void push_back(const u32 &element) override
|
||||||
{
|
{
|
||||||
Indices->push_back(element);
|
Indices->push_back(element);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual u32 operator [](u32 index) const _IRR_OVERRIDE_
|
u32 operator [](u32 index) const override
|
||||||
{
|
{
|
||||||
return (*Indices)[index];
|
return (*Indices)[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual u32 getLast() _IRR_OVERRIDE_
|
u32 getLast() override
|
||||||
{
|
{
|
||||||
return Indices->getLast();
|
return Indices->getLast();
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void setValue(u32 index, u32 value) _IRR_OVERRIDE_
|
void setValue(u32 index, u32 value) override
|
||||||
{
|
{
|
||||||
Indices->setValue(index, value);
|
Indices->setValue(index, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void set_used(u32 usedNow) _IRR_OVERRIDE_
|
void set_used(u32 usedNow) override
|
||||||
{
|
{
|
||||||
Indices->set_used(usedNow);
|
Indices->set_used(usedNow);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void reallocate(u32 new_size) _IRR_OVERRIDE_
|
void reallocate(u32 new_size) override
|
||||||
{
|
{
|
||||||
Indices->reallocate(new_size);
|
Indices->reallocate(new_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual u32 allocated_size() const _IRR_OVERRIDE_
|
u32 allocated_size() const override
|
||||||
{
|
{
|
||||||
return Indices->allocated_size();
|
return Indices->allocated_size();
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void* pointer() _IRR_OVERRIDE_
|
void* pointer() override
|
||||||
{
|
{
|
||||||
return Indices->pointer();
|
return Indices->pointer();
|
||||||
}
|
}
|
||||||
|
|
||||||
//! get the current hardware mapping hint
|
//! get the current hardware mapping hint
|
||||||
virtual E_HARDWARE_MAPPING getHardwareMappingHint() const _IRR_OVERRIDE_
|
E_HARDWARE_MAPPING getHardwareMappingHint() const override
|
||||||
{
|
{
|
||||||
return MappingHint;
|
return MappingHint;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! set the hardware mapping hint, for driver
|
//! set the hardware mapping hint, for driver
|
||||||
virtual void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint ) _IRR_OVERRIDE_
|
void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint ) override
|
||||||
{
|
{
|
||||||
MappingHint=NewMappingHint;
|
MappingHint=NewMappingHint;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! flags the mesh as changed, reloads hardware buffers
|
//! flags the mesh as changed, reloads hardware buffers
|
||||||
virtual void setDirty() _IRR_OVERRIDE_
|
void setDirty() override
|
||||||
{
|
{
|
||||||
++ChangedID;
|
++ChangedID;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Get the currently used ID for identification of changes.
|
//! Get the currently used ID for identification of changes.
|
||||||
/** This shouldn't be used for anything outside the VideoDriver. */
|
/** This shouldn't be used for anything outside the VideoDriver. */
|
||||||
virtual u32 getChangedID() const _IRR_OVERRIDE_ {return ChangedID;}
|
u32 getChangedID() const override {return ChangedID;}
|
||||||
|
|
||||||
E_HARDWARE_MAPPING MappingHint;
|
E_HARDWARE_MAPPING MappingHint;
|
||||||
u32 ChangedID;
|
u32 ChangedID;
|
||||||
|
@ -32,7 +32,7 @@ namespace scene
|
|||||||
|
|
||||||
//! Get material of this meshbuffer
|
//! Get material of this meshbuffer
|
||||||
/** \return Material of this buffer */
|
/** \return Material of this buffer */
|
||||||
virtual const video::SMaterial& getMaterial() const _IRR_OVERRIDE_
|
const video::SMaterial& getMaterial() const override
|
||||||
{
|
{
|
||||||
return Material;
|
return Material;
|
||||||
}
|
}
|
||||||
@ -40,7 +40,7 @@ namespace scene
|
|||||||
|
|
||||||
//! Get material of this meshbuffer
|
//! Get material of this meshbuffer
|
||||||
/** \return Material of this buffer */
|
/** \return Material of this buffer */
|
||||||
virtual video::SMaterial& getMaterial() _IRR_OVERRIDE_
|
video::SMaterial& getMaterial() override
|
||||||
{
|
{
|
||||||
return Material;
|
return Material;
|
||||||
}
|
}
|
||||||
@ -48,7 +48,7 @@ namespace scene
|
|||||||
|
|
||||||
//! Get pointer to vertices
|
//! Get pointer to vertices
|
||||||
/** \return Pointer to vertices. */
|
/** \return Pointer to vertices. */
|
||||||
virtual const void* getVertices() const _IRR_OVERRIDE_
|
const void* getVertices() const override
|
||||||
{
|
{
|
||||||
return Vertices.const_pointer();
|
return Vertices.const_pointer();
|
||||||
}
|
}
|
||||||
@ -56,7 +56,7 @@ namespace scene
|
|||||||
|
|
||||||
//! Get pointer to vertices
|
//! Get pointer to vertices
|
||||||
/** \return Pointer to vertices. */
|
/** \return Pointer to vertices. */
|
||||||
virtual void* getVertices() _IRR_OVERRIDE_
|
void* getVertices() override
|
||||||
{
|
{
|
||||||
return Vertices.pointer();
|
return Vertices.pointer();
|
||||||
}
|
}
|
||||||
@ -64,21 +64,21 @@ namespace scene
|
|||||||
|
|
||||||
//! Get number of vertices
|
//! Get number of vertices
|
||||||
/** \return Number of vertices. */
|
/** \return Number of vertices. */
|
||||||
virtual u32 getVertexCount() const _IRR_OVERRIDE_
|
u32 getVertexCount() const override
|
||||||
{
|
{
|
||||||
return Vertices.size();
|
return Vertices.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Get type of index data which is stored in this meshbuffer.
|
//! Get type of index data which is stored in this meshbuffer.
|
||||||
/** \return Index type of this buffer. */
|
/** \return Index type of this buffer. */
|
||||||
virtual video::E_INDEX_TYPE getIndexType() const _IRR_OVERRIDE_
|
video::E_INDEX_TYPE getIndexType() const override
|
||||||
{
|
{
|
||||||
return video::EIT_16BIT;
|
return video::EIT_16BIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Get pointer to indices
|
//! Get pointer to indices
|
||||||
/** \return Pointer to indices. */
|
/** \return Pointer to indices. */
|
||||||
virtual const u16* getIndices() const _IRR_OVERRIDE_
|
const u16* getIndices() const override
|
||||||
{
|
{
|
||||||
return Indices.const_pointer();
|
return Indices.const_pointer();
|
||||||
}
|
}
|
||||||
@ -86,7 +86,7 @@ namespace scene
|
|||||||
|
|
||||||
//! Get pointer to indices
|
//! Get pointer to indices
|
||||||
/** \return Pointer to indices. */
|
/** \return Pointer to indices. */
|
||||||
virtual u16* getIndices() _IRR_OVERRIDE_
|
u16* getIndices() override
|
||||||
{
|
{
|
||||||
return Indices.pointer();
|
return Indices.pointer();
|
||||||
}
|
}
|
||||||
@ -94,7 +94,7 @@ namespace scene
|
|||||||
|
|
||||||
//! Get number of indices
|
//! Get number of indices
|
||||||
/** \return Number of indices. */
|
/** \return Number of indices. */
|
||||||
virtual u32 getIndexCount() const _IRR_OVERRIDE_
|
u32 getIndexCount() const override
|
||||||
{
|
{
|
||||||
return Indices.size();
|
return Indices.size();
|
||||||
}
|
}
|
||||||
@ -102,7 +102,7 @@ namespace scene
|
|||||||
|
|
||||||
//! Get the axis aligned bounding box
|
//! Get the axis aligned bounding box
|
||||||
/** \return Axis aligned bounding box of this buffer. */
|
/** \return Axis aligned bounding box of this buffer. */
|
||||||
virtual const core::aabbox3d<f32>& getBoundingBox() const _IRR_OVERRIDE_
|
const core::aabbox3d<f32>& getBoundingBox() const override
|
||||||
{
|
{
|
||||||
return BoundingBox;
|
return BoundingBox;
|
||||||
}
|
}
|
||||||
@ -111,7 +111,7 @@ namespace scene
|
|||||||
//! Set the axis aligned bounding box
|
//! Set the axis aligned bounding box
|
||||||
/** \param box New axis aligned bounding box for this buffer. */
|
/** \param box New axis aligned bounding box for this buffer. */
|
||||||
//! set user axis aligned bounding box
|
//! set user axis aligned bounding box
|
||||||
virtual void setBoundingBox(const core::aabbox3df& box) _IRR_OVERRIDE_
|
void setBoundingBox(const core::aabbox3df& box) override
|
||||||
{
|
{
|
||||||
BoundingBox = box;
|
BoundingBox = box;
|
||||||
}
|
}
|
||||||
@ -119,7 +119,7 @@ namespace scene
|
|||||||
|
|
||||||
//! Recalculate the bounding box.
|
//! Recalculate the bounding box.
|
||||||
/** should be called if the mesh changed. */
|
/** should be called if the mesh changed. */
|
||||||
virtual void recalculateBoundingBox() _IRR_OVERRIDE_
|
void recalculateBoundingBox() override
|
||||||
{
|
{
|
||||||
if (!Vertices.empty())
|
if (!Vertices.empty())
|
||||||
{
|
{
|
||||||
@ -136,43 +136,43 @@ namespace scene
|
|||||||
|
|
||||||
//! Get type of vertex data stored in this buffer.
|
//! Get type of vertex data stored in this buffer.
|
||||||
/** \return Type of vertex data. */
|
/** \return Type of vertex data. */
|
||||||
virtual video::E_VERTEX_TYPE getVertexType() const _IRR_OVERRIDE_
|
video::E_VERTEX_TYPE getVertexType() const override
|
||||||
{
|
{
|
||||||
return T::getType();
|
return T::getType();
|
||||||
}
|
}
|
||||||
|
|
||||||
//! returns position of vertex i
|
//! returns position of vertex i
|
||||||
virtual const core::vector3df& getPosition(u32 i) const _IRR_OVERRIDE_
|
const core::vector3df& getPosition(u32 i) const override
|
||||||
{
|
{
|
||||||
return Vertices[i].Pos;
|
return Vertices[i].Pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! returns position of vertex i
|
//! returns position of vertex i
|
||||||
virtual core::vector3df& getPosition(u32 i) _IRR_OVERRIDE_
|
core::vector3df& getPosition(u32 i) override
|
||||||
{
|
{
|
||||||
return Vertices[i].Pos;
|
return Vertices[i].Pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! returns normal of vertex i
|
//! returns normal of vertex i
|
||||||
virtual const core::vector3df& getNormal(u32 i) const _IRR_OVERRIDE_
|
const core::vector3df& getNormal(u32 i) const override
|
||||||
{
|
{
|
||||||
return Vertices[i].Normal;
|
return Vertices[i].Normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! returns normal of vertex i
|
//! returns normal of vertex i
|
||||||
virtual core::vector3df& getNormal(u32 i) _IRR_OVERRIDE_
|
core::vector3df& getNormal(u32 i) override
|
||||||
{
|
{
|
||||||
return Vertices[i].Normal;
|
return Vertices[i].Normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! returns texture coord of vertex i
|
//! returns texture coord of vertex i
|
||||||
virtual const core::vector2df& getTCoords(u32 i) const _IRR_OVERRIDE_
|
const core::vector2df& getTCoords(u32 i) const override
|
||||||
{
|
{
|
||||||
return Vertices[i].TCoords;
|
return Vertices[i].TCoords;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! returns texture coord of vertex i
|
//! returns texture coord of vertex i
|
||||||
virtual core::vector2df& getTCoords(u32 i) _IRR_OVERRIDE_
|
core::vector2df& getTCoords(u32 i) override
|
||||||
{
|
{
|
||||||
return Vertices[i].TCoords;
|
return Vertices[i].TCoords;
|
||||||
}
|
}
|
||||||
@ -183,7 +183,7 @@ namespace scene
|
|||||||
or the main buffer is of standard type. Otherwise, behavior is
|
or the main buffer is of standard type. Otherwise, behavior is
|
||||||
undefined.
|
undefined.
|
||||||
*/
|
*/
|
||||||
virtual void append(const void* const vertices, u32 numVertices, const u16* const indices, u32 numIndices) _IRR_OVERRIDE_
|
void append(const void* const vertices, u32 numVertices, const u16* const indices, u32 numIndices) override
|
||||||
{
|
{
|
||||||
if (vertices == getVertices())
|
if (vertices == getVertices())
|
||||||
return;
|
return;
|
||||||
@ -212,7 +212,7 @@ namespace scene
|
|||||||
undefined.
|
undefined.
|
||||||
\param other Meshbuffer to be appended to this one.
|
\param other Meshbuffer to be appended to this one.
|
||||||
*/
|
*/
|
||||||
virtual void append(const IMeshBuffer* const other) _IRR_OVERRIDE_
|
void append(const IMeshBuffer* const other) override
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
if (this==other)
|
if (this==other)
|
||||||
@ -238,19 +238,19 @@ namespace scene
|
|||||||
|
|
||||||
|
|
||||||
//! get the current hardware mapping hint
|
//! get the current hardware mapping hint
|
||||||
virtual E_HARDWARE_MAPPING getHardwareMappingHint_Vertex() const _IRR_OVERRIDE_
|
E_HARDWARE_MAPPING getHardwareMappingHint_Vertex() const override
|
||||||
{
|
{
|
||||||
return MappingHint_Vertex;
|
return MappingHint_Vertex;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! get the current hardware mapping hint
|
//! get the current hardware mapping hint
|
||||||
virtual E_HARDWARE_MAPPING getHardwareMappingHint_Index() const _IRR_OVERRIDE_
|
E_HARDWARE_MAPPING getHardwareMappingHint_Index() const override
|
||||||
{
|
{
|
||||||
return MappingHint_Index;
|
return MappingHint_Index;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! set the hardware mapping hint, for driver
|
//! set the hardware mapping hint, for driver
|
||||||
virtual void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint, E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX ) _IRR_OVERRIDE_
|
void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint, E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX ) override
|
||||||
{
|
{
|
||||||
if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_VERTEX)
|
if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_VERTEX)
|
||||||
MappingHint_Vertex=NewMappingHint;
|
MappingHint_Vertex=NewMappingHint;
|
||||||
@ -259,19 +259,19 @@ namespace scene
|
|||||||
}
|
}
|
||||||
|
|
||||||
//! Describe what kind of primitive geometry is used by the meshbuffer
|
//! Describe what kind of primitive geometry is used by the meshbuffer
|
||||||
virtual void setPrimitiveType(E_PRIMITIVE_TYPE type) _IRR_OVERRIDE_
|
void setPrimitiveType(E_PRIMITIVE_TYPE type) override
|
||||||
{
|
{
|
||||||
PrimitiveType = type;
|
PrimitiveType = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Get the kind of primitive geometry which is used by the meshbuffer
|
//! Get the kind of primitive geometry which is used by the meshbuffer
|
||||||
virtual E_PRIMITIVE_TYPE getPrimitiveType() const _IRR_OVERRIDE_
|
E_PRIMITIVE_TYPE getPrimitiveType() const override
|
||||||
{
|
{
|
||||||
return PrimitiveType;
|
return PrimitiveType;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! flags the mesh as changed, reloads hardware buffers
|
//! flags the mesh as changed, reloads hardware buffers
|
||||||
virtual void setDirty(E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX) _IRR_OVERRIDE_
|
void setDirty(E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX) override
|
||||||
{
|
{
|
||||||
if (Buffer==EBT_VERTEX_AND_INDEX ||Buffer==EBT_VERTEX)
|
if (Buffer==EBT_VERTEX_AND_INDEX ||Buffer==EBT_VERTEX)
|
||||||
++ChangedID_Vertex;
|
++ChangedID_Vertex;
|
||||||
@ -281,17 +281,17 @@ namespace scene
|
|||||||
|
|
||||||
//! Get the currently used ID for identification of changes.
|
//! Get the currently used ID for identification of changes.
|
||||||
/** This shouldn't be used for anything outside the VideoDriver. */
|
/** This shouldn't be used for anything outside the VideoDriver. */
|
||||||
virtual u32 getChangedID_Vertex() const _IRR_OVERRIDE_ {return ChangedID_Vertex;}
|
u32 getChangedID_Vertex() const override {return ChangedID_Vertex;}
|
||||||
|
|
||||||
//! Get the currently used ID for identification of changes.
|
//! Get the currently used ID for identification of changes.
|
||||||
/** This shouldn't be used for anything outside the VideoDriver. */
|
/** This shouldn't be used for anything outside the VideoDriver. */
|
||||||
virtual u32 getChangedID_Index() const _IRR_OVERRIDE_ {return ChangedID_Index;}
|
u32 getChangedID_Index() const override {return ChangedID_Index;}
|
||||||
|
|
||||||
virtual void setHWBuffer(void *ptr) const _IRR_OVERRIDE_ {
|
void setHWBuffer(void *ptr) const override {
|
||||||
HWBuffer = ptr;
|
HWBuffer = ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void *getHWBuffer() const _IRR_OVERRIDE_ {
|
void *getHWBuffer() const override {
|
||||||
return HWBuffer;
|
return HWBuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,33 +40,33 @@ namespace scene
|
|||||||
public:
|
public:
|
||||||
core::array<T> Vertices;
|
core::array<T> Vertices;
|
||||||
|
|
||||||
virtual u32 stride() const _IRR_OVERRIDE_ {return sizeof(T);}
|
u32 stride() const override {return sizeof(T);}
|
||||||
|
|
||||||
virtual u32 size() const _IRR_OVERRIDE_ {return Vertices.size();}
|
u32 size() const override {return Vertices.size();}
|
||||||
|
|
||||||
virtual void push_back (const video::S3DVertex &element) _IRR_OVERRIDE_
|
void push_back (const video::S3DVertex &element) override
|
||||||
{Vertices.push_back((T&)element);}
|
{Vertices.push_back((T&)element);}
|
||||||
|
|
||||||
virtual video::S3DVertex& operator [](const u32 index) const _IRR_OVERRIDE_
|
video::S3DVertex& operator [](const u32 index) const override
|
||||||
{return (video::S3DVertex&)Vertices[index];}
|
{return (video::S3DVertex&)Vertices[index];}
|
||||||
|
|
||||||
virtual video::S3DVertex& getLast() _IRR_OVERRIDE_
|
video::S3DVertex& getLast() override
|
||||||
{return (video::S3DVertex&)Vertices.getLast();}
|
{return (video::S3DVertex&)Vertices.getLast();}
|
||||||
|
|
||||||
virtual void set_used(u32 usedNow) _IRR_OVERRIDE_
|
void set_used(u32 usedNow) override
|
||||||
{Vertices.set_used(usedNow);}
|
{Vertices.set_used(usedNow);}
|
||||||
|
|
||||||
virtual void reallocate(u32 new_size) _IRR_OVERRIDE_
|
void reallocate(u32 new_size) override
|
||||||
{Vertices.reallocate(new_size);}
|
{Vertices.reallocate(new_size);}
|
||||||
|
|
||||||
virtual u32 allocated_size() const _IRR_OVERRIDE_
|
u32 allocated_size() const override
|
||||||
{
|
{
|
||||||
return Vertices.allocated_size();
|
return Vertices.allocated_size();
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual video::S3DVertex* pointer() _IRR_OVERRIDE_ {return Vertices.pointer();}
|
video::S3DVertex* pointer() override {return Vertices.pointer();}
|
||||||
|
|
||||||
virtual video::E_VERTEX_TYPE getType() const _IRR_OVERRIDE_ {return T::getType();}
|
video::E_VERTEX_TYPE getType() const override {return T::getType();}
|
||||||
};
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -95,7 +95,7 @@ namespace scene
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
virtual void setType(video::E_VERTEX_TYPE vertexType) _IRR_OVERRIDE_
|
void setType(video::E_VERTEX_TYPE vertexType) override
|
||||||
{
|
{
|
||||||
IVertexList *NewVertices=0;
|
IVertexList *NewVertices=0;
|
||||||
|
|
||||||
@ -130,73 +130,73 @@ namespace scene
|
|||||||
Vertices=NewVertices;
|
Vertices=NewVertices;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void* getData() _IRR_OVERRIDE_ {return Vertices->pointer();}
|
void* getData() override {return Vertices->pointer();}
|
||||||
|
|
||||||
virtual video::E_VERTEX_TYPE getType() const _IRR_OVERRIDE_ {return Vertices->getType();}
|
video::E_VERTEX_TYPE getType() const override {return Vertices->getType();}
|
||||||
|
|
||||||
virtual u32 stride() const _IRR_OVERRIDE_ {return Vertices->stride();}
|
u32 stride() const override {return Vertices->stride();}
|
||||||
|
|
||||||
virtual u32 size() const _IRR_OVERRIDE_
|
u32 size() const override
|
||||||
{
|
{
|
||||||
return Vertices->size();
|
return Vertices->size();
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void push_back (const video::S3DVertex &element) _IRR_OVERRIDE_
|
void push_back (const video::S3DVertex &element) override
|
||||||
{
|
{
|
||||||
Vertices->push_back(element);
|
Vertices->push_back(element);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual video::S3DVertex& operator [](const u32 index) const _IRR_OVERRIDE_
|
video::S3DVertex& operator [](const u32 index) const override
|
||||||
{
|
{
|
||||||
return (*Vertices)[index];
|
return (*Vertices)[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual video::S3DVertex& getLast() _IRR_OVERRIDE_
|
video::S3DVertex& getLast() override
|
||||||
{
|
{
|
||||||
return Vertices->getLast();
|
return Vertices->getLast();
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void set_used(u32 usedNow) _IRR_OVERRIDE_
|
void set_used(u32 usedNow) override
|
||||||
{
|
{
|
||||||
Vertices->set_used(usedNow);
|
Vertices->set_used(usedNow);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void reallocate(u32 new_size) _IRR_OVERRIDE_
|
void reallocate(u32 new_size) override
|
||||||
{
|
{
|
||||||
Vertices->reallocate(new_size);
|
Vertices->reallocate(new_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual u32 allocated_size() const _IRR_OVERRIDE_
|
u32 allocated_size() const override
|
||||||
{
|
{
|
||||||
return Vertices->allocated_size();
|
return Vertices->allocated_size();
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual video::S3DVertex* pointer() _IRR_OVERRIDE_
|
video::S3DVertex* pointer() override
|
||||||
{
|
{
|
||||||
return Vertices->pointer();
|
return Vertices->pointer();
|
||||||
}
|
}
|
||||||
|
|
||||||
//! get the current hardware mapping hint
|
//! get the current hardware mapping hint
|
||||||
virtual E_HARDWARE_MAPPING getHardwareMappingHint() const _IRR_OVERRIDE_
|
E_HARDWARE_MAPPING getHardwareMappingHint() const override
|
||||||
{
|
{
|
||||||
return MappingHint;
|
return MappingHint;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! set the hardware mapping hint, for driver
|
//! set the hardware mapping hint, for driver
|
||||||
virtual void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint ) _IRR_OVERRIDE_
|
void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint ) override
|
||||||
{
|
{
|
||||||
MappingHint=NewMappingHint;
|
MappingHint=NewMappingHint;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! flags the mesh as changed, reloads hardware buffers
|
//! flags the mesh as changed, reloads hardware buffers
|
||||||
virtual void setDirty() _IRR_OVERRIDE_
|
void setDirty() override
|
||||||
{
|
{
|
||||||
++ChangedID;
|
++ChangedID;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Get the currently used ID for identification of changes.
|
//! Get the currently used ID for identification of changes.
|
||||||
/** This shouldn't be used for anything outside the VideoDriver. */
|
/** This shouldn't be used for anything outside the VideoDriver. */
|
||||||
virtual u32 getChangedID() const _IRR_OVERRIDE_ {return ChangedID;}
|
u32 getChangedID() const override {return ChangedID;}
|
||||||
|
|
||||||
E_HARDWARE_MAPPING MappingHint;
|
E_HARDWARE_MAPPING MappingHint;
|
||||||
u32 ChangedID;
|
u32 ChangedID;
|
||||||
|
@ -16,10 +16,6 @@ namespace irr
|
|||||||
/** This device uses the Win32 API and works in all versions of Windows. */
|
/** This device uses the Win32 API and works in all versions of Windows. */
|
||||||
EIDT_WIN32,
|
EIDT_WIN32,
|
||||||
|
|
||||||
//! A device native to Windows CE devices
|
|
||||||
/** This device works on Windows Mobile, Pocket PC and Microsoft SmartPhone devices */
|
|
||||||
EIDT_WINCE,
|
|
||||||
|
|
||||||
//! A device native to Unix style operating systems.
|
//! A device native to Unix style operating systems.
|
||||||
/** This device uses the X11 windowing system and works in Linux, Solaris, FreeBSD, OSX and
|
/** This device uses the X11 windowing system and works in Linux, Solaris, FreeBSD, OSX and
|
||||||
other operating systems which support X11. */
|
other operating systems which support X11. */
|
||||||
@ -38,18 +34,6 @@ namespace irr
|
|||||||
in by defining the _IRR_COMPILE_WITH_SDL_DEVICE_ macro in IrrCompileConfig.h */
|
in by defining the _IRR_COMPILE_WITH_SDL_DEVICE_ macro in IrrCompileConfig.h */
|
||||||
EIDT_SDL,
|
EIDT_SDL,
|
||||||
|
|
||||||
//! A device for raw framebuffer access
|
|
||||||
/** Best used with embedded devices and mobile systems.
|
|
||||||
Does not need X11 or other graphical subsystems.
|
|
||||||
May support hw-acceleration via OpenGL-ES for FBDirect */
|
|
||||||
EIDT_FRAMEBUFFER,
|
|
||||||
|
|
||||||
//! A simple text only device supported by all platforms.
|
|
||||||
/** This device allows applications to run from the command line without opening a window.
|
|
||||||
It can render the output of the software drivers to the console as ASCII. It only supports
|
|
||||||
mouse and keyboard in Windows operating systems. */
|
|
||||||
EIDT_CONSOLE,
|
|
||||||
|
|
||||||
//! This selection allows Irrlicht to choose the best device from the ones available.
|
//! This selection allows Irrlicht to choose the best device from the ones available.
|
||||||
/** If this selection is chosen then Irrlicht will try to use the IrrlichtDevice native
|
/** If this selection is chosen then Irrlicht will try to use the IrrlichtDevice native
|
||||||
to your operating system. If this is unavailable then the X11, SDL and then console device
|
to your operating system. If this is unavailable then the X11, SDL and then console device
|
||||||
|
@ -1,36 +0,0 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
|
||||||
// This file is part of the "Irrlicht Engine".
|
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
|
||||||
|
|
||||||
#ifndef __E_MESSAGE_BOX_FLAGS_H_INCLUDED__
|
|
||||||
#define __E_MESSAGE_BOX_FLAGS_H_INCLUDED__
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
namespace gui
|
|
||||||
{
|
|
||||||
|
|
||||||
//! enumeration for message box layout flags
|
|
||||||
enum EMESSAGE_BOX_FLAG
|
|
||||||
{
|
|
||||||
//! Flag for the OK button
|
|
||||||
EMBF_OK = 0x1,
|
|
||||||
|
|
||||||
//! Flag for the cancel button
|
|
||||||
EMBF_CANCEL = 0x2,
|
|
||||||
|
|
||||||
//! Flag for the yes button
|
|
||||||
EMBF_YES = 0x4,
|
|
||||||
|
|
||||||
//! Flag for the no button
|
|
||||||
EMBF_NO = 0x8,
|
|
||||||
|
|
||||||
//! This value is not used. It only forces this enumeration to compile in 32 bit.
|
|
||||||
EMBF_FORCE_32BIT = 0x7fffffff
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace gui
|
|
||||||
} // namespace irr
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
@ -61,7 +61,7 @@ namespace scene
|
|||||||
if getMeshType() returns EAMT_MD2 it's safe to cast the
|
if getMeshType() returns EAMT_MD2 it's safe to cast the
|
||||||
IAnimatedMesh to IAnimatedMeshMD2.
|
IAnimatedMesh to IAnimatedMeshMD2.
|
||||||
\returns Type of the mesh. */
|
\returns Type of the mesh. */
|
||||||
virtual E_ANIMATED_MESH_TYPE getMeshType() const _IRR_OVERRIDE_
|
E_ANIMATED_MESH_TYPE getMeshType() const override
|
||||||
{
|
{
|
||||||
return EAMT_UNKNOWN;
|
return EAMT_UNKNOWN;
|
||||||
}
|
}
|
||||||
|
@ -74,17 +74,17 @@ namespace scene
|
|||||||
virtual E_BONE_ANIMATION_MODE getAnimationMode() const = 0;
|
virtual E_BONE_ANIMATION_MODE getAnimationMode() const = 0;
|
||||||
|
|
||||||
//! Get the axis aligned bounding box of this node
|
//! Get the axis aligned bounding box of this node
|
||||||
virtual const core::aabbox3d<f32>& getBoundingBox() const _IRR_OVERRIDE_ = 0;
|
const core::aabbox3d<f32>& getBoundingBox() const override = 0;
|
||||||
|
|
||||||
//! Returns the relative transformation of the scene node.
|
//! Returns the relative transformation of the scene node.
|
||||||
//virtual core::matrix4 getRelativeTransformation() const = 0;
|
//virtual core::matrix4 getRelativeTransformation() const = 0;
|
||||||
|
|
||||||
//! The animation method.
|
//! The animation method.
|
||||||
virtual void OnAnimate(u32 timeMs) _IRR_OVERRIDE_ =0;
|
void OnAnimate(u32 timeMs) override =0;
|
||||||
|
|
||||||
//! The render method.
|
//! The render method.
|
||||||
/** Does nothing as bones are not visible. */
|
/** Does nothing as bones are not visible. */
|
||||||
virtual void render() _IRR_OVERRIDE_ { }
|
void render() override { }
|
||||||
|
|
||||||
//! How the relative transformation of the bone is used
|
//! How the relative transformation of the bone is used
|
||||||
virtual void setSkinningSpace( E_BONE_SKINNING_SPACE space ) =0;
|
virtual void setSkinningSpace( E_BONE_SKINNING_SPACE space ) =0;
|
||||||
|
@ -72,7 +72,7 @@ namespace scene
|
|||||||
ISceneManager::addCameraSceneNodeFPS, may want to get
|
ISceneManager::addCameraSceneNodeFPS, may want to get
|
||||||
this input for changing their position, look at target or
|
this input for changing their position, look at target or
|
||||||
whatever. */
|
whatever. */
|
||||||
virtual bool OnEvent(const SEvent& event) _IRR_OVERRIDE_ =0;
|
bool OnEvent(const SEvent& event) override =0;
|
||||||
|
|
||||||
//! Sets the look at target of the camera
|
//! Sets the look at target of the camera
|
||||||
/** If the camera's target and rotation are bound ( @see
|
/** If the camera's target and rotation are bound ( @see
|
||||||
@ -90,7 +90,7 @@ namespace scene
|
|||||||
bindTargetAndRotation() ) then calling this will also change
|
bindTargetAndRotation() ) then calling this will also change
|
||||||
the camera's target to match the rotation.
|
the camera's target to match the rotation.
|
||||||
\param rotation New rotation of the node in degrees. */
|
\param rotation New rotation of the node in degrees. */
|
||||||
virtual void setRotation(const core::vector3df& rotation) _IRR_OVERRIDE_ =0;
|
void setRotation(const core::vector3df& rotation) override =0;
|
||||||
|
|
||||||
//! Gets the current look at target of the camera
|
//! Gets the current look at target of the camera
|
||||||
/** \return The current look at target of the camera, in world co-ordinates */
|
/** \return The current look at target of the camera, in world co-ordinates */
|
||||||
|
@ -160,6 +160,9 @@ namespace gui
|
|||||||
\param rect: A pointer to an reference rectangle or 0 to disable the reference rectangle.*/
|
\param rect: A pointer to an reference rectangle or 0 to disable the reference rectangle.*/
|
||||||
virtual void setReferenceRect(core::rect<s32>* rect=0) = 0;
|
virtual void setReferenceRect(core::rect<s32>* rect=0) = 0;
|
||||||
|
|
||||||
|
//! Internally fixes the mouse position, and reports relative mouse movement compared to the old position
|
||||||
|
/** Specific to SDL */
|
||||||
|
virtual void setRelativeMode(bool relative) {};
|
||||||
|
|
||||||
//! Sets the active cursor icon
|
//! Sets the active cursor icon
|
||||||
/** Setting cursor icons is so far only supported on Win32 and Linux */
|
/** Setting cursor icons is so far only supported on Win32 and Linux */
|
||||||
|
@ -280,18 +280,6 @@ namespace irr
|
|||||||
//! A file open dialog has been closed without choosing a file
|
//! A file open dialog has been closed without choosing a file
|
||||||
EGET_FILE_CHOOSE_DIALOG_CANCELLED,
|
EGET_FILE_CHOOSE_DIALOG_CANCELLED,
|
||||||
|
|
||||||
//! 'Yes' was clicked on a messagebox
|
|
||||||
EGET_MESSAGEBOX_YES,
|
|
||||||
|
|
||||||
//! 'No' was clicked on a messagebox
|
|
||||||
EGET_MESSAGEBOX_NO,
|
|
||||||
|
|
||||||
//! 'OK' was clicked on a messagebox
|
|
||||||
EGET_MESSAGEBOX_OK,
|
|
||||||
|
|
||||||
//! 'Cancel' was clicked on a messagebox
|
|
||||||
EGET_MESSAGEBOX_CANCEL,
|
|
||||||
|
|
||||||
//! In an editbox 'ENTER' was pressed
|
//! In an editbox 'ENTER' was pressed
|
||||||
EGET_EDITBOX_ENTER,
|
EGET_EDITBOX_ENTER,
|
||||||
|
|
||||||
@ -304,36 +292,14 @@ namespace irr
|
|||||||
//! The tab was changed in an tab control
|
//! The tab was changed in an tab control
|
||||||
EGET_TAB_CHANGED,
|
EGET_TAB_CHANGED,
|
||||||
|
|
||||||
//! A menu item was selected in a (context) menu
|
|
||||||
EGET_MENU_ITEM_SELECTED,
|
|
||||||
|
|
||||||
//! The selection in a combo box has been changed
|
//! The selection in a combo box has been changed
|
||||||
EGET_COMBO_BOX_CHANGED,
|
EGET_COMBO_BOX_CHANGED,
|
||||||
|
|
||||||
//! The value of a spin box has changed
|
|
||||||
EGET_SPINBOX_CHANGED,
|
|
||||||
|
|
||||||
//! A table has changed
|
//! A table has changed
|
||||||
EGET_TABLE_CHANGED,
|
EGET_TABLE_CHANGED,
|
||||||
EGET_TABLE_HEADER_CHANGED,
|
EGET_TABLE_HEADER_CHANGED,
|
||||||
EGET_TABLE_SELECTED_AGAIN,
|
EGET_TABLE_SELECTED_AGAIN,
|
||||||
|
|
||||||
//! A tree view node lost selection. See IGUITreeView::getLastEventNode().
|
|
||||||
EGET_TREEVIEW_NODE_DESELECT,
|
|
||||||
|
|
||||||
//! A tree view node was selected. See IGUITreeView::getLastEventNode().
|
|
||||||
EGET_TREEVIEW_NODE_SELECT,
|
|
||||||
|
|
||||||
//! A tree view node was expanded. See IGUITreeView::getLastEventNode().
|
|
||||||
EGET_TREEVIEW_NODE_EXPAND,
|
|
||||||
|
|
||||||
//! A tree view node was collapsed. See IGUITreeView::getLastEventNode().
|
|
||||||
EGET_TREEVIEW_NODE_COLLAPSE,
|
|
||||||
|
|
||||||
//! deprecated - use EGET_TREEVIEW_NODE_COLLAPSE instead. This
|
|
||||||
//! may be removed by Irrlicht 1.9
|
|
||||||
EGET_TREEVIEW_NODE_COLLAPS = EGET_TREEVIEW_NODE_COLLAPSE,
|
|
||||||
|
|
||||||
//! No real event. Just for convenience to get number of events
|
//! No real event. Just for convenience to get number of events
|
||||||
EGET_COUNT
|
EGET_COUNT
|
||||||
};
|
};
|
||||||
|
@ -1,37 +0,0 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
|
||||||
// This file is part of the "Irrlicht Engine".
|
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
|
||||||
|
|
||||||
#ifndef __I_GUI_COLOR_SELECT_DIALOG_H_INCLUDED__
|
|
||||||
#define __I_GUI_COLOR_SELECT_DIALOG_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IGUIElement.h"
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
namespace gui
|
|
||||||
{
|
|
||||||
|
|
||||||
//! Standard color chooser dialog.
|
|
||||||
class IGUIColorSelectDialog : public IGUIElement
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
//! constructor
|
|
||||||
IGUIColorSelectDialog(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
|
||||||
: IGUIElement(EGUIET_COLOR_SELECT_DIALOG, environment, parent, id, rectangle) {}
|
|
||||||
|
|
||||||
//! get chosen color as usual SColor struct
|
|
||||||
virtual video::SColor getColor() =0;
|
|
||||||
|
|
||||||
//! get chosen color as HSL values
|
|
||||||
virtual video::SColorHSL getColorHSL() =0;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
@ -1,162 +0,0 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
|
||||||
// This file is part of the "Irrlicht Engine".
|
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
|
||||||
|
|
||||||
#ifndef __I_GUI_CONTEXT_MENU_H_INCLUDED__
|
|
||||||
#define __I_GUI_CONTEXT_MENU_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IGUIElement.h"
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
namespace gui
|
|
||||||
{
|
|
||||||
//! Close behavior.
|
|
||||||
//! Default is ECMC_REMOVE
|
|
||||||
enum ECONTEXT_MENU_CLOSE
|
|
||||||
{
|
|
||||||
//! do nothing - menu stays open
|
|
||||||
ECMC_IGNORE = 0,
|
|
||||||
|
|
||||||
//! remove the gui element
|
|
||||||
ECMC_REMOVE = 1,
|
|
||||||
|
|
||||||
//! call setVisible(false)
|
|
||||||
ECMC_HIDE = 2
|
|
||||||
|
|
||||||
// note to implementers - this is planned as bitset, so continue with 4 if you need to add further flags.
|
|
||||||
};
|
|
||||||
|
|
||||||
//! GUI Context menu interface.
|
|
||||||
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
|
||||||
\li EGET_ELEMENT_CLOSED
|
|
||||||
\li EGET_MENU_ITEM_SELECTED
|
|
||||||
*/
|
|
||||||
class IGUIContextMenu : public IGUIElement
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
//! constructor
|
|
||||||
IGUIContextMenu(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
|
||||||
: IGUIElement(EGUIET_CONTEXT_MENU, environment, parent, id, rectangle) {}
|
|
||||||
|
|
||||||
//! set behavior when menus are closed
|
|
||||||
virtual void setCloseHandling(ECONTEXT_MENU_CLOSE onClose) = 0;
|
|
||||||
|
|
||||||
//! get current behavior when the menu will be closed
|
|
||||||
virtual ECONTEXT_MENU_CLOSE getCloseHandling() const = 0;
|
|
||||||
|
|
||||||
//! Get amount of menu items
|
|
||||||
virtual u32 getItemCount() const = 0;
|
|
||||||
|
|
||||||
//! Adds a menu item.
|
|
||||||
/** \param text: Text of menu item. Set this to 0 to create
|
|
||||||
an separator instead of a real item, which is the same like
|
|
||||||
calling addSeparator();
|
|
||||||
\param commandId: Command id of menu item, a simple id you may
|
|
||||||
set to whatever you want.
|
|
||||||
\param enabled: Specifies if the menu item should be enabled.
|
|
||||||
\param hasSubMenu: Set this to true if there should be a submenu
|
|
||||||
at this item. You can access this submenu via getSubMenu().
|
|
||||||
\param checked: Specifies if the menu item should be initially checked.
|
|
||||||
\param autoChecking: Specifies if the item should be checked by clicking
|
|
||||||
\return Returns the index of the new item */
|
|
||||||
virtual u32 addItem(const wchar_t* text, s32 commandId=-1, bool enabled=true,
|
|
||||||
bool hasSubMenu=false, bool checked=false, bool autoChecking=false) = 0;
|
|
||||||
|
|
||||||
//! Insert a menu item at specified position.
|
|
||||||
/** \param idx: Position to insert the new element,
|
|
||||||
should be smaller than itemcount otherwise the item is added to the end.
|
|
||||||
\param text: Text of menu item. Set this to 0 to create
|
|
||||||
an separator instead of a real item, which is the same like
|
|
||||||
calling addSeparator();
|
|
||||||
\param commandId: Command id of menu item, a simple id you may
|
|
||||||
set to whatever you want.
|
|
||||||
\param enabled: Specifies if the menu item should be enabled.
|
|
||||||
\param hasSubMenu: Set this to true if there should be a submenu
|
|
||||||
at this item. You can access this submenu via getSubMenu().
|
|
||||||
\param checked: Specifies if the menu item should be initially checked.
|
|
||||||
\param autoChecking: Specifies if the item should be checked by clicking
|
|
||||||
\return Returns the index of the new item */
|
|
||||||
virtual u32 insertItem(u32 idx, const wchar_t* text, s32 commandId=-1, bool enabled=true,
|
|
||||||
bool hasSubMenu=false, bool checked=false, bool autoChecking=false) = 0;
|
|
||||||
|
|
||||||
//! Find an item by its CommandID
|
|
||||||
/**
|
|
||||||
\param commandId: We are looking for the first item which has this commandID
|
|
||||||
\param idxStartSearch: Start searching from this index.
|
|
||||||
\return Returns the index of the item when found or otherwise -1. */
|
|
||||||
virtual s32 findItemWithCommandId(s32 commandId, u32 idxStartSearch=0) const = 0;
|
|
||||||
|
|
||||||
//! Adds a separator item to the menu
|
|
||||||
virtual void addSeparator() = 0;
|
|
||||||
|
|
||||||
//! Get text of the menu item.
|
|
||||||
/** \param idx: Zero based index of the menu item */
|
|
||||||
virtual const wchar_t* getItemText(u32 idx) const = 0;
|
|
||||||
|
|
||||||
//! Sets text of the menu item.
|
|
||||||
/** \param idx: Zero based index of the menu item
|
|
||||||
\param text: New text of the item. */
|
|
||||||
virtual void setItemText(u32 idx, const wchar_t* text) = 0;
|
|
||||||
|
|
||||||
//! Check if a menu item is enabled
|
|
||||||
/** \param idx: Zero based index of the menu item */
|
|
||||||
virtual bool isItemEnabled(u32 idx) const = 0;
|
|
||||||
|
|
||||||
//! Sets if the menu item should be enabled.
|
|
||||||
/** \param idx: Zero based index of the menu item
|
|
||||||
\param enabled: True if it is enabled, otherwise false. */
|
|
||||||
virtual void setItemEnabled(u32 idx, bool enabled) = 0;
|
|
||||||
|
|
||||||
//! Sets if the menu item should be checked.
|
|
||||||
/** \param idx: Zero based index of the menu item
|
|
||||||
\param enabled: True if it is enabled, otherwise false. */
|
|
||||||
virtual void setItemChecked(u32 idx, bool enabled) = 0;
|
|
||||||
|
|
||||||
//! Check if a menu item is checked
|
|
||||||
/** \param idx: Zero based index of the menu item */
|
|
||||||
virtual bool isItemChecked(u32 idx) const = 0;
|
|
||||||
|
|
||||||
//! Removes a menu item
|
|
||||||
/** \param idx: Zero based index of the menu item */
|
|
||||||
virtual void removeItem(u32 idx) = 0;
|
|
||||||
|
|
||||||
//! Removes all menu items
|
|
||||||
virtual void removeAllItems() = 0;
|
|
||||||
|
|
||||||
//! Get the selected item in the menu
|
|
||||||
/** \return Index of the selected item, -1 if none selected. */
|
|
||||||
virtual s32 getSelectedItem() const = 0;
|
|
||||||
|
|
||||||
//! Get the command id of a menu item
|
|
||||||
/** \param idx: Zero based index of the menu item */
|
|
||||||
virtual s32 getItemCommandId(u32 idx) const = 0;
|
|
||||||
|
|
||||||
//! Sets the command id of a menu item
|
|
||||||
/** \param idx: Zero based index of the menu item
|
|
||||||
\param id: Command id of menu item, a simple id you may
|
|
||||||
set to whatever you want. */
|
|
||||||
virtual void setItemCommandId(u32 idx, s32 id) = 0;
|
|
||||||
|
|
||||||
//! Get a pointer to the submenu of an item.
|
|
||||||
/** 0 is returned if there is no submenu
|
|
||||||
\param idx: Zero based index of the menu item
|
|
||||||
\return Returns a pointer to the submenu of an item. */
|
|
||||||
virtual IGUIContextMenu* getSubMenu(u32 idx) const = 0;
|
|
||||||
|
|
||||||
//! should the element change the checked status on clicking
|
|
||||||
virtual void setItemAutoChecking(u32 idx, bool autoChecking) = 0;
|
|
||||||
|
|
||||||
//! does the element change the checked status on clicking
|
|
||||||
virtual bool getItemAutoChecking(u32 idx) const = 0;
|
|
||||||
|
|
||||||
//! When an eventparent is set it receives events instead of the usual parent element
|
|
||||||
virtual void setEventParent(IGUIElement *parent) = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
@ -545,7 +545,7 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
//! Called if an event happened.
|
//! Called if an event happened.
|
||||||
virtual bool OnEvent(const SEvent& event) _IRR_OVERRIDE_
|
bool OnEvent(const SEvent& event) override
|
||||||
{
|
{
|
||||||
return Parent ? Parent->OnEvent(event) : false;
|
return Parent ? Parent->OnEvent(event) : false;
|
||||||
}
|
}
|
||||||
@ -743,8 +743,7 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
//! Returns the type name of the gui element.
|
//! Returns the type name of the gui element.
|
||||||
/** This is needed serializing elements. For serializing your own elements, override this function
|
/** This is needed serializing elements. */
|
||||||
and return your own type name which is created by your IGUIElementFactory */
|
|
||||||
virtual const c8* getTypeName() const
|
virtual const c8* getTypeName() const
|
||||||
{
|
{
|
||||||
return GUIElementTypeNames[Type];
|
return GUIElementTypeNames[Type];
|
||||||
|
@ -1,66 +0,0 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
|
||||||
// This file is part of the "Irrlicht Engine".
|
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
|
||||||
|
|
||||||
#ifndef __I_GUI_ELEMENT_FACTORY_H_INCLUDED__
|
|
||||||
#define __I_GUI_ELEMENT_FACTORY_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
|
||||||
#include "EGUIElementTypes.h"
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
|
|
||||||
namespace gui
|
|
||||||
{
|
|
||||||
class IGUIElement;
|
|
||||||
|
|
||||||
//! Interface making it possible to dynamically create GUI elements
|
|
||||||
/** To be able to add custom elements to Irrlicht and to make it possible for the
|
|
||||||
scene manager to save and load them, simply implement this interface and register it
|
|
||||||
in your gui environment via IGUIEnvironment::registerGUIElementFactory.
|
|
||||||
Note: When implementing your own element factory, don't call IGUIEnvironment::grab() to
|
|
||||||
increase the reference counter of the environment. This is not necessary because the
|
|
||||||
it will grab() the factory anyway, and otherwise cyclic references will be created.
|
|
||||||
*/
|
|
||||||
class IGUIElementFactory : public virtual IReferenceCounted
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
//! adds an element to the gui environment based on its type id
|
|
||||||
/** \param type: Type of the element to add.
|
|
||||||
\param parent: Parent scene node of the new element, can be null to add to the root.
|
|
||||||
\return Pointer to the new element or null if not successful. */
|
|
||||||
virtual IGUIElement* addGUIElement(EGUI_ELEMENT_TYPE type, IGUIElement* parent=0) = 0;
|
|
||||||
|
|
||||||
//! adds a GUI element to the GUI Environment based on its type name
|
|
||||||
/** \param typeName: Type name of the element to add.
|
|
||||||
\param parent: Parent scene node of the new element, can be null to add it to the root.
|
|
||||||
\return Pointer to the new element or null if not successful. */
|
|
||||||
virtual IGUIElement* addGUIElement(const c8* typeName, IGUIElement* parent=0) = 0;
|
|
||||||
|
|
||||||
//! Get amount of GUI element types this factory is able to create
|
|
||||||
virtual s32 getCreatableGUIElementTypeCount() const = 0;
|
|
||||||
|
|
||||||
//! Get type of a creatable element type
|
|
||||||
/** \param idx: Index of the element type in this factory. Must be a value between 0 and
|
|
||||||
getCreatableGUIElementTypeCount() */
|
|
||||||
virtual EGUI_ELEMENT_TYPE getCreateableGUIElementType(s32 idx) const = 0;
|
|
||||||
|
|
||||||
//! Get type name of a creatable GUI element type by index
|
|
||||||
/** \param idx: Index of the type in this factory. Must be a value between 0 and
|
|
||||||
getCreatableGUIElementTypeCount() */
|
|
||||||
virtual const c8* getCreateableGUIElementTypeName(s32 idx) const = 0;
|
|
||||||
|
|
||||||
//! returns type name of a creatable GUI element
|
|
||||||
/** \param type: Type of GUI element.
|
|
||||||
\return Name of the type if this factory can create the type, otherwise 0. */
|
|
||||||
virtual const c8* getCreateableGUIElementTypeName(EGUI_ELEMENT_TYPE type) const = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
#endif // __I_GUI_ELEMENT_FACTORY_H_INCLUDED__
|
|
||||||
|
|
@ -8,7 +8,6 @@
|
|||||||
#include "IReferenceCounted.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "IGUISkin.h"
|
#include "IGUISkin.h"
|
||||||
#include "rect.h"
|
#include "rect.h"
|
||||||
#include "EMessageBoxFlags.h"
|
|
||||||
#include "EFocusFlags.h"
|
#include "EFocusFlags.h"
|
||||||
#include "IEventReceiver.h"
|
#include "IEventReceiver.h"
|
||||||
#include "path.h"
|
#include "path.h"
|
||||||
@ -38,27 +37,17 @@ class IGUIFont;
|
|||||||
class IGUISpriteBank;
|
class IGUISpriteBank;
|
||||||
class IGUIScrollBar;
|
class IGUIScrollBar;
|
||||||
class IGUIImage;
|
class IGUIImage;
|
||||||
class IGUIMeshViewer;
|
|
||||||
class IGUICheckBox;
|
class IGUICheckBox;
|
||||||
class IGUIListBox;
|
class IGUIListBox;
|
||||||
class IGUITreeView;
|
|
||||||
class IGUIImageList;
|
class IGUIImageList;
|
||||||
class IGUIFileOpenDialog;
|
class IGUIFileOpenDialog;
|
||||||
class IGUIColorSelectDialog;
|
|
||||||
class IGUIInOutFader;
|
|
||||||
class IGUIStaticText;
|
class IGUIStaticText;
|
||||||
class IGUIEditBox;
|
class IGUIEditBox;
|
||||||
class IGUISpinBox;
|
|
||||||
class IGUITabControl;
|
class IGUITabControl;
|
||||||
class IGUITab;
|
class IGUITab;
|
||||||
class IGUITable;
|
|
||||||
class IGUIContextMenu;
|
|
||||||
class IGUIComboBox;
|
class IGUIComboBox;
|
||||||
class IGUIToolBar;
|
|
||||||
class IGUIButton;
|
class IGUIButton;
|
||||||
class IGUIWindow;
|
class IGUIWindow;
|
||||||
class IGUIProfiler;
|
|
||||||
class IGUIElementFactory;
|
|
||||||
|
|
||||||
//! GUI Environment. Used as factory and manager of all other GUI elements.
|
//! GUI Environment. Used as factory and manager of all other GUI elements.
|
||||||
/** \par This element can create the following events of type EGUI_EVENT_TYPE (which are passed on to focused sub-elements):
|
/** \par This element can create the following events of type EGUI_EVENT_TYPE (which are passed on to focused sub-elements):
|
||||||
@ -235,55 +224,6 @@ public:
|
|||||||
virtual IGUIButton* addButton(const core::rect<s32>& rectangle,
|
virtual IGUIButton* addButton(const core::rect<s32>& rectangle,
|
||||||
IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0, const wchar_t* tooltiptext = 0) = 0;
|
IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0, const wchar_t* tooltiptext = 0) = 0;
|
||||||
|
|
||||||
//! Adds an empty window element.
|
|
||||||
/** \param rectangle Rectangle specifying the borders of the window.
|
|
||||||
\param modal Defines if the dialog is modal. This means, that all other
|
|
||||||
gui elements which were created before the window cannot be used until
|
|
||||||
it is removed.
|
|
||||||
\param text Text displayed as the window title.
|
|
||||||
\param parent Parent gui element of the window.
|
|
||||||
\param id Id with which the gui element can be identified.
|
|
||||||
\return Pointer to the created window. Returns 0 if an error occurred.
|
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for
|
|
||||||
more information. */
|
|
||||||
virtual IGUIWindow* addWindow(const core::rect<s32>& rectangle, bool modal = false,
|
|
||||||
const wchar_t* text=0, IGUIElement* parent=0, s32 id=-1) = 0;
|
|
||||||
|
|
||||||
//! Adds a modal screen.
|
|
||||||
/** Input focus stays with children of the modal screen.
|
|
||||||
If you have some window x which should keep the input focus you
|
|
||||||
do something like: addModalScreen()->addChild(x). And x will then get the focus
|
|
||||||
and not lose it anymore.
|
|
||||||
The modal screen removes itself when it no longer has any children.
|
|
||||||
Note that it usually works badly to pass the modal screen already as parent when creating
|
|
||||||
a new element. It's better to add that new element later to the modal screen with addChild.
|
|
||||||
\param parent Parent gui element of the modal.
|
|
||||||
\param blinkMode Bitset of when to blink (can be combined)
|
|
||||||
0 = never
|
|
||||||
1 = focus changes
|
|
||||||
2 = Left mouse button pressed down
|
|
||||||
\return Pointer to the created modal. Returns 0 if an error occurred.
|
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for
|
|
||||||
more information. */
|
|
||||||
virtual IGUIElement* addModalScreen(IGUIElement* parent, int blinkMode = 3) = 0;
|
|
||||||
|
|
||||||
//! Adds a message box.
|
|
||||||
/** \param caption Text to be displayed the title of the message box.
|
|
||||||
\param text Text to be displayed in the body of the message box.
|
|
||||||
\param modal Defines if the dialog is modal. This means, that all other
|
|
||||||
gui elements which were created before the message box cannot be used
|
|
||||||
until this messagebox is removed.
|
|
||||||
\param flags Flags specifying the layout of the message box using ::EMESSAGE_BOX_FLAG.
|
|
||||||
Create a message box with an OK and CANCEL button for example with (EMBF_OK | EMBF_CANCEL).
|
|
||||||
\param parent Parent gui element of the message box.
|
|
||||||
\param id Id with which the gui element can be identified.
|
|
||||||
\param image Optional texture which will be displayed beside the text as an image
|
|
||||||
\return Pointer to the created message box. Returns 0 if an error
|
|
||||||
occurred. This pointer should not be dropped. See
|
|
||||||
IReferenceCounted::drop() for more information. */
|
|
||||||
virtual IGUIWindow* addMessageBox(const wchar_t* caption, const wchar_t* text=0,
|
|
||||||
bool modal = true, s32 flags = EMBF_OK, IGUIElement* parent=0, s32 id=-1, video::ITexture* image=0) = 0;
|
|
||||||
|
|
||||||
//! Adds a scrollbar.
|
//! Adds a scrollbar.
|
||||||
/** \param horizontal Specifies if the scroll bar is drawn horizontal
|
/** \param horizontal Specifies if the scroll bar is drawn horizontal
|
||||||
or vertical.
|
or vertical.
|
||||||
@ -348,31 +288,6 @@ public:
|
|||||||
virtual IGUIListBox* addListBox(const core::rect<s32>& rectangle,
|
virtual IGUIListBox* addListBox(const core::rect<s32>& rectangle,
|
||||||
IGUIElement* parent=0, s32 id=-1, bool drawBackground=false) = 0;
|
IGUIElement* parent=0, s32 id=-1, bool drawBackground=false) = 0;
|
||||||
|
|
||||||
//! Adds a tree view element.
|
|
||||||
/** \param rectangle Position and dimension of list box.
|
|
||||||
\param parent Parent gui element of the list box.
|
|
||||||
\param id Id to identify the gui element.
|
|
||||||
\param drawBackground Flag whether the background should be drawn.
|
|
||||||
\param scrollBarVertical Flag whether a vertical scrollbar should be used
|
|
||||||
\param scrollBarHorizontal Flag whether a horizontal scrollbar should be used
|
|
||||||
\return Pointer to the created list box. Returns 0 if an error occurred.
|
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for
|
|
||||||
more information. */
|
|
||||||
virtual IGUITreeView* addTreeView(const core::rect<s32>& rectangle,
|
|
||||||
IGUIElement* parent=0, s32 id=-1, bool drawBackground=false,
|
|
||||||
bool scrollBarVertical = true, bool scrollBarHorizontal = false) = 0;
|
|
||||||
|
|
||||||
//! Adds a mesh viewer. Not 100% implemented yet.
|
|
||||||
/** \param rectangle Rectangle specifying the borders of the mesh viewer.
|
|
||||||
\param parent Parent gui element of the mesh viewer.
|
|
||||||
\param id Id to identify the gui element.
|
|
||||||
\param text Title text of the mesh viewer.
|
|
||||||
\return Pointer to the created mesh viewer. Returns 0 if an error
|
|
||||||
occurred. This pointer should not be dropped. See
|
|
||||||
IReferenceCounted::drop() for more information. */
|
|
||||||
virtual IGUIMeshViewer* addMeshViewer(const core::rect<s32>& rectangle,
|
|
||||||
IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0) = 0;
|
|
||||||
|
|
||||||
//! Adds a file open dialog.
|
//! Adds a file open dialog.
|
||||||
/** \param title Text to be displayed as the title of the dialog.
|
/** \param title Text to be displayed as the title of the dialog.
|
||||||
\param modal Defines if the dialog is modal. This means, that all other
|
\param modal Defines if the dialog is modal. This means, that all other
|
||||||
@ -391,19 +306,6 @@ public:
|
|||||||
bool modal=true, IGUIElement* parent=0, s32 id=-1,
|
bool modal=true, IGUIElement* parent=0, s32 id=-1,
|
||||||
bool restoreCWD=false, io::path::char_type* startDir=0) = 0;
|
bool restoreCWD=false, io::path::char_type* startDir=0) = 0;
|
||||||
|
|
||||||
//! Adds a color select dialog.
|
|
||||||
/** \param title The title of the dialog.
|
|
||||||
\param modal Defines if the dialog is modal. This means, that all other
|
|
||||||
gui elements which were created before the dialog cannot be used
|
|
||||||
until it is removed.
|
|
||||||
\param parent The parent of the dialog.
|
|
||||||
\param id The ID of the dialog.
|
|
||||||
\return Pointer to the created file open dialog. Returns 0 if an error
|
|
||||||
occurred. This pointer should not be dropped. See
|
|
||||||
IReferenceCounted::drop() for more information. */
|
|
||||||
virtual IGUIColorSelectDialog* addColorSelectDialog(const wchar_t* title = 0,
|
|
||||||
bool modal=true, IGUIElement* parent=0, s32 id=-1) = 0;
|
|
||||||
|
|
||||||
//! Adds a static text.
|
//! Adds a static text.
|
||||||
/** \param text Text to be displayed. Can be altered after creation by SetText().
|
/** \param text Text to be displayed. Can be altered after creation by SetText().
|
||||||
\param rectangle Rectangle specifying the borders of the static text
|
\param rectangle Rectangle specifying the borders of the static text
|
||||||
@ -438,30 +340,6 @@ public:
|
|||||||
virtual IGUIEditBox* addEditBox(const wchar_t* text, const core::rect<s32>& rectangle,
|
virtual IGUIEditBox* addEditBox(const wchar_t* text, const core::rect<s32>& rectangle,
|
||||||
bool border=true, IGUIElement* parent=0, s32 id=-1) = 0;
|
bool border=true, IGUIElement* parent=0, s32 id=-1) = 0;
|
||||||
|
|
||||||
//! Adds a spin box.
|
|
||||||
/** An edit box with up and down buttons
|
|
||||||
\param text Text to be displayed. Can be altered after creation by setText().
|
|
||||||
\param rectangle Rectangle specifying the borders of the spin box.
|
|
||||||
\param border Set to true if the spin box should have a 3d border.
|
|
||||||
\param parent Parent item of the element, e.g. a window.
|
|
||||||
Set it to 0 to place the spin box directly in the environment.
|
|
||||||
\param id The ID of the element.
|
|
||||||
\return Pointer to the created spin box. Returns 0 if an error occurred.
|
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for
|
|
||||||
more information. */
|
|
||||||
virtual IGUISpinBox* addSpinBox(const wchar_t* text, const core::rect<s32>& rectangle,
|
|
||||||
bool border=true,IGUIElement* parent=0, s32 id=-1) = 0;
|
|
||||||
|
|
||||||
//! Adds an element for fading in or out.
|
|
||||||
/** \param rectangle Rectangle specifying the borders of the fader.
|
|
||||||
If the pointer is NULL, the whole screen is used.
|
|
||||||
\param parent Parent item of the element, e.g. a window.
|
|
||||||
\param id An identifier for the fader.
|
|
||||||
\return Pointer to the created in-out-fader. Returns 0 if an error
|
|
||||||
occurred. This pointer should not be dropped. See
|
|
||||||
IReferenceCounted::drop() for more information. */
|
|
||||||
virtual IGUIInOutFader* addInOutFader(const core::rect<s32>* rectangle=0, IGUIElement* parent=0, s32 id=-1) = 0;
|
|
||||||
|
|
||||||
//! Adds a tab control to the environment.
|
//! Adds a tab control to the environment.
|
||||||
/** \param rectangle Rectangle specifying the borders of the tab control.
|
/** \param rectangle Rectangle specifying the borders of the tab control.
|
||||||
\param parent Parent item of the element, e.g. a window.
|
\param parent Parent item of the element, e.g. a window.
|
||||||
@ -493,40 +371,6 @@ public:
|
|||||||
virtual IGUITab* addTab(const core::rect<s32>& rectangle,
|
virtual IGUITab* addTab(const core::rect<s32>& rectangle,
|
||||||
IGUIElement* parent=0, s32 id=-1) = 0;
|
IGUIElement* parent=0, s32 id=-1) = 0;
|
||||||
|
|
||||||
//! Adds a context menu to the environment.
|
|
||||||
/** \param rectangle Rectangle specifying the borders of the menu.
|
|
||||||
Note that the menu is resizing itself based on what items you add.
|
|
||||||
\param parent Parent item of the element, e.g. a window.
|
|
||||||
Set it to 0 to place the menu directly in the environment.
|
|
||||||
\param id An identifier for the menu.
|
|
||||||
\return Pointer to the created context menu. Returns 0 if an
|
|
||||||
error occurred. This pointer should not be dropped. See
|
|
||||||
IReferenceCounted::drop() for more information. */
|
|
||||||
virtual IGUIContextMenu* addContextMenu(const core::rect<s32>& rectangle,
|
|
||||||
IGUIElement* parent=0, s32 id=-1) = 0;
|
|
||||||
|
|
||||||
//! Adds a menu to the environment.
|
|
||||||
/** This is like the menu you can find on top of most windows in modern
|
|
||||||
graphical user interfaces.
|
|
||||||
\param parent Parent item of the element, e.g. a window.
|
|
||||||
Set it to 0 to place the menu directly in the environment.
|
|
||||||
\param id An identifier for the menu.
|
|
||||||
\return Pointer to the created menu. Returns 0 if an
|
|
||||||
error occurred. This pointer should not be dropped. See
|
|
||||||
IReferenceCounted::drop() for more information. */
|
|
||||||
virtual IGUIContextMenu* addMenu(IGUIElement* parent=0, s32 id=-1) = 0;
|
|
||||||
|
|
||||||
//! Adds a toolbar to the environment.
|
|
||||||
/** It is like a menu that is always placed on top of its parent, and
|
|
||||||
contains buttons.
|
|
||||||
\param parent Parent item of the element, e.g. a window.
|
|
||||||
Set it to 0 to place the tool bar directly in the environment.
|
|
||||||
\param id An identifier for the tool bar.
|
|
||||||
\return Pointer to the created tool bar. Returns 0 if an
|
|
||||||
error occurred. This pointer should not be dropped. See
|
|
||||||
IReferenceCounted::drop() for more information. */
|
|
||||||
virtual IGUIToolBar* addToolBar(IGUIElement* parent=0, s32 id=-1) = 0;
|
|
||||||
|
|
||||||
//! Adds a combo box to the environment.
|
//! Adds a combo box to the environment.
|
||||||
/** \param rectangle Rectangle specifying the borders of the combo box.
|
/** \param rectangle Rectangle specifying the borders of the combo box.
|
||||||
\param parent Parent item of the element, e.g. a window.
|
\param parent Parent item of the element, e.g. a window.
|
||||||
@ -538,86 +382,6 @@ public:
|
|||||||
virtual IGUIComboBox* addComboBox(const core::rect<s32>& rectangle,
|
virtual IGUIComboBox* addComboBox(const core::rect<s32>& rectangle,
|
||||||
IGUIElement* parent=0, s32 id=-1) = 0;
|
IGUIElement* parent=0, s32 id=-1) = 0;
|
||||||
|
|
||||||
//! Adds a table to the environment
|
|
||||||
/** \param rectangle Rectangle specifying the borders of the table.
|
|
||||||
\param parent Parent item of the element, e.g. a window. Set it to 0
|
|
||||||
to place the element directly in the environment.
|
|
||||||
\param id An identifier for the table.
|
|
||||||
\param drawBackground Flag whether the background should be drawn.
|
|
||||||
\return Pointer to the created table. Returns 0 if an error occurred.
|
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for
|
|
||||||
more information. */
|
|
||||||
virtual IGUITable* addTable(const core::rect<s32>& rectangle,
|
|
||||||
IGUIElement* parent=0, s32 id=-1, bool drawBackground=false) =0;
|
|
||||||
|
|
||||||
//! Adds an element to display the information from the Irrlicht profiler
|
|
||||||
/** \param rectangle Rectangle specifying the borders of the element.
|
|
||||||
\param parent Parent of the element. When 0 the environment itself will
|
|
||||||
be the parent.
|
|
||||||
\param id An identifier for the element. */
|
|
||||||
virtual IGUIProfiler* addProfilerDisplay(const core::rect<s32>& rectangle,
|
|
||||||
IGUIElement* parent=0, s32 id=-1) = 0;
|
|
||||||
|
|
||||||
//! Get the default element factory which can create all built-in elements
|
|
||||||
/** \return Pointer to the factory.
|
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for
|
|
||||||
more information. */
|
|
||||||
virtual IGUIElementFactory* getDefaultGUIElementFactory() const = 0;
|
|
||||||
|
|
||||||
//! Adds an element factory to the gui environment.
|
|
||||||
/** Use this to extend the gui environment with new element types which
|
|
||||||
it should be able to create automatically, for example when loading
|
|
||||||
data from xml files.
|
|
||||||
\param factoryToAdd Pointer to new factory. */
|
|
||||||
virtual void registerGUIElementFactory(IGUIElementFactory* factoryToAdd) = 0;
|
|
||||||
|
|
||||||
//! Get amount of registered gui element factories.
|
|
||||||
/** \return Amount of registered gui element factories. */
|
|
||||||
virtual u32 getRegisteredGUIElementFactoryCount() const = 0;
|
|
||||||
|
|
||||||
//! Get a gui element factory by index
|
|
||||||
/** \param index Index of the factory.
|
|
||||||
\return Factory at given index, or 0 if no such factory exists. */
|
|
||||||
virtual IGUIElementFactory* getGUIElementFactory(u32 index) const = 0;
|
|
||||||
|
|
||||||
//! Adds a GUI element by its name
|
|
||||||
/** Each factory is checked if it can create an element of the given
|
|
||||||
name. The first match will be created.
|
|
||||||
\param elementName Name of the element to be created.
|
|
||||||
\param parent Parent of the new element, if not 0.
|
|
||||||
\return New GUI element, or 0 if no such element exists. */
|
|
||||||
virtual IGUIElement* addGUIElement(const c8* elementName, IGUIElement* parent=0) = 0;
|
|
||||||
|
|
||||||
//! Saves the current gui into a file.
|
|
||||||
/** \param filename Name of the file.
|
|
||||||
\param start The GUIElement to start with. Root if 0.
|
|
||||||
\return True if saving succeeded, else false. */
|
|
||||||
virtual bool saveGUI(const io::path& filename, IGUIElement* start=0) = 0;
|
|
||||||
|
|
||||||
//! Saves the current gui into a file.
|
|
||||||
/** \param file The file to write to.
|
|
||||||
\param start The GUIElement to start with. Root if 0.
|
|
||||||
\return True if saving succeeded, else false. */
|
|
||||||
virtual bool saveGUI(io::IWriteFile* file, IGUIElement* start=0) = 0;
|
|
||||||
|
|
||||||
//! Loads the gui. Note that the current gui is not cleared before.
|
|
||||||
/** When a parent is set the elements will be added below the parent, the parent itself does not deserialize.
|
|
||||||
When the file contains skin-settings from the gui-environment those are always serialized into the
|
|
||||||
guienvironment independent of the parent setting.
|
|
||||||
\param filename Name of the file.
|
|
||||||
\param parent Parent for the loaded GUI, root if 0.
|
|
||||||
\return True if loading succeeded, else false. */
|
|
||||||
virtual bool loadGUI(const io::path& filename, IGUIElement* parent=0) = 0;
|
|
||||||
|
|
||||||
//! Loads the gui. Note that the current gui is not cleared before.
|
|
||||||
/** When a parent is set the elements will be added below the parent, the parent itself does not deserialize.
|
|
||||||
When the file contains skin-settings from the gui-environment those are always serialized into the
|
|
||||||
guienvironment independent of the parent setting.
|
|
||||||
\param file The file to load from.
|
|
||||||
\param parent Parent for the loaded GUI, root if 0.
|
|
||||||
\return True if loading succeeded, else false. */
|
|
||||||
virtual bool loadGUI(io::IReadFile* file, IGUIElement* parent=0) = 0;
|
|
||||||
|
|
||||||
//! Find the next element which would be selected when pressing the tab-key
|
//! Find the next element which would be selected when pressing the tab-key
|
||||||
/** If you set the focus for the result you can manually force focus-changes like they
|
/** If you set the focus for the result you can manually force focus-changes like they
|
||||||
would happen otherwise by the tab-keys.
|
would happen otherwise by the tab-keys.
|
||||||
|
@ -19,7 +19,7 @@ class IGUIFontBitmap : public IGUIFont
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
//! Returns the type of this font
|
//! Returns the type of this font
|
||||||
virtual EGUI_FONT_TYPE getType() const _IRR_OVERRIDE_ { return EGFT_BITMAP; }
|
EGUI_FONT_TYPE getType() const override { return EGFT_BITMAP; }
|
||||||
|
|
||||||
//! returns the parsed Symbol Information
|
//! returns the parsed Symbol Information
|
||||||
virtual IGUISpriteBank* getSpriteBank() const = 0;
|
virtual IGUISpriteBank* getSpriteBank() const = 0;
|
||||||
@ -36,7 +36,7 @@ public:
|
|||||||
kerning value. For example, EGFT_BITMAP will add the right kerning value of previousLetter to the
|
kerning value. For example, EGFT_BITMAP will add the right kerning value of previousLetter to the
|
||||||
left side kerning value of thisLetter, then add the global value.
|
left side kerning value of thisLetter, then add the global value.
|
||||||
*/
|
*/
|
||||||
virtual s32 getKerningWidth(const wchar_t* thisLetter=0, const wchar_t* previousLetter=0) const _IRR_OVERRIDE_ = 0;
|
s32 getKerningWidth(const wchar_t* thisLetter=0, const wchar_t* previousLetter=0) const override = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace gui
|
} // end namespace gui
|
||||||
|
@ -1,67 +0,0 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
|
||||||
// This file is part of the "Irrlicht Engine".
|
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
|
||||||
|
|
||||||
#ifndef __I_GUI_IN_OUT_FADER_H_INCLUDED__
|
|
||||||
#define __I_GUI_IN_OUT_FADER_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IGUIElement.h"
|
|
||||||
#include "SColor.h"
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
namespace gui
|
|
||||||
{
|
|
||||||
|
|
||||||
//! Element for fading out or in
|
|
||||||
/** Here is a small example on how the class is used. In this example we fade
|
|
||||||
in from a total red screen in the beginning. As you can see, the fader is not
|
|
||||||
only useful for dramatic in and out fading, but also to show that the player
|
|
||||||
is hit in a first person shooter game for example.
|
|
||||||
\code
|
|
||||||
gui::IGUIInOutFader* fader = device->getGUIEnvironment()->addInOutFader();
|
|
||||||
fader->setColor(video::SColor(0,255,0,0));
|
|
||||||
fader->fadeIn(4000);
|
|
||||||
\endcode
|
|
||||||
*/
|
|
||||||
class IGUIInOutFader : public IGUIElement
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
//! constructor
|
|
||||||
IGUIInOutFader(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
|
||||||
: IGUIElement(EGUIET_IN_OUT_FADER, environment, parent, id, rectangle) {}
|
|
||||||
|
|
||||||
//! Gets the color to fade out to or to fade in from.
|
|
||||||
virtual video::SColor getColor() const = 0;
|
|
||||||
|
|
||||||
//! Sets the color to fade out to or to fade in from.
|
|
||||||
/** \param color: Color to where it is faded out od from it is faded in. */
|
|
||||||
virtual void setColor(video::SColor color) = 0;
|
|
||||||
virtual void setColor(video::SColor source, video::SColor dest) = 0;
|
|
||||||
|
|
||||||
//! Starts the fade in process.
|
|
||||||
/** In the beginning the whole rect is drawn by the set color
|
|
||||||
(black by default) and at the end of the overgiven time the
|
|
||||||
color has faded out.
|
|
||||||
\param time: Time specifying how long it should need to fade in,
|
|
||||||
in milliseconds. */
|
|
||||||
virtual void fadeIn(u32 time) = 0;
|
|
||||||
|
|
||||||
//! Starts the fade out process.
|
|
||||||
/** In the beginning everything is visible, and at the end of
|
|
||||||
the time only the set color (black by the fault) will be drawn.
|
|
||||||
\param time: Time specifying how long it should need to fade out,
|
|
||||||
in milliseconds. */
|
|
||||||
virtual void fadeOut(u32 time) = 0;
|
|
||||||
|
|
||||||
//! Returns if the fade in or out process is done.
|
|
||||||
virtual bool isReady() const = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
@ -1,53 +0,0 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
|
||||||
// This file is part of the "Irrlicht Engine".
|
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
|
||||||
|
|
||||||
#ifndef __I_GUI_MESH_VIEWER_H_INCLUDED__
|
|
||||||
#define __I_GUI_MESH_VIEWER_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IGUIElement.h"
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
|
|
||||||
namespace video
|
|
||||||
{
|
|
||||||
class SMaterial;
|
|
||||||
} // end namespace video
|
|
||||||
|
|
||||||
namespace scene
|
|
||||||
{
|
|
||||||
class IAnimatedMesh;
|
|
||||||
} // end namespace scene
|
|
||||||
|
|
||||||
namespace gui
|
|
||||||
{
|
|
||||||
|
|
||||||
//! 3d mesh viewing GUI element.
|
|
||||||
class IGUIMeshViewer : public IGUIElement
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
//! constructor
|
|
||||||
IGUIMeshViewer(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
|
||||||
: IGUIElement(EGUIET_MESH_VIEWER, environment, parent, id, rectangle) {}
|
|
||||||
|
|
||||||
//! Sets the mesh to be shown
|
|
||||||
virtual void setMesh(scene::IAnimatedMesh* mesh) = 0;
|
|
||||||
|
|
||||||
//! Gets the displayed mesh
|
|
||||||
virtual scene::IAnimatedMesh* getMesh() const = 0;
|
|
||||||
|
|
||||||
//! Sets the material
|
|
||||||
virtual void setMaterial(const video::SMaterial& material) = 0;
|
|
||||||
|
|
||||||
//! Gets the material
|
|
||||||
virtual const video::SMaterial& getMaterial() const = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
@ -1,82 +0,0 @@
|
|||||||
// This file is part of the "Irrlicht Engine".
|
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
|
||||||
// Written by Michael Zeilfelder
|
|
||||||
|
|
||||||
#ifndef I_GUI_PROFILER_H_INCLUDED__
|
|
||||||
#define I_GUI_PROFILER_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IGUIElement.h"
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
class IProfiler;
|
|
||||||
|
|
||||||
namespace gui
|
|
||||||
{
|
|
||||||
class IGUIFont;
|
|
||||||
|
|
||||||
//! Element to display profiler information
|
|
||||||
class IGUIProfiler : public IGUIElement
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
//! constructor
|
|
||||||
/** \param profiler You can pass a custom profiler, but typically you can pass 0 in which cases it takes the global profiler from Irrlicht */
|
|
||||||
IGUIProfiler(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle, IProfiler* profiler = NULL)
|
|
||||||
: IGUIElement(EGUIET_PROFILER, environment, parent, id, rectangle)
|
|
||||||
{}
|
|
||||||
|
|
||||||
//! Show first page of profile data
|
|
||||||
/** \param includeOverview When true show the group-overview page, when false show the profile data of the first group */
|
|
||||||
virtual void firstPage(bool includeOverview=true) = 0;
|
|
||||||
|
|
||||||
//! Show next page of profile data
|
|
||||||
/** \param includeOverview Include the group-overview page */
|
|
||||||
virtual void nextPage(bool includeOverview=true) = 0;
|
|
||||||
|
|
||||||
//! Show previous page of profile data
|
|
||||||
/** \param includeOverview Include the group-overview page */
|
|
||||||
virtual void previousPage(bool includeOverview=true) = 0;
|
|
||||||
|
|
||||||
//! Try to show as many group-pages together as possible instead of showing at most one group per page.
|
|
||||||
/** \param groupsTogether When true show several groups on one page, when false show max. one group per page. Default is false. */
|
|
||||||
virtual void setShowGroupsTogether(bool groupsTogether) = 0;
|
|
||||||
|
|
||||||
//! Can several groups be displayed per page?
|
|
||||||
virtual bool getShowGroupsTogether() const = 0;
|
|
||||||
|
|
||||||
//! Sets another skin independent font.
|
|
||||||
/** If this is set to zero, the button uses the font of the skin.
|
|
||||||
\param font: New font to set. */
|
|
||||||
virtual void setOverrideFont(IGUIFont* font=0) = 0;
|
|
||||||
|
|
||||||
//! Gets the override font (if any)
|
|
||||||
/** \return The override font (may be 0) */
|
|
||||||
virtual IGUIFont* getOverrideFont(void) const = 0;
|
|
||||||
|
|
||||||
//! Get the font which is used right now for drawing
|
|
||||||
/** Currently this is the override font when one is set and the
|
|
||||||
font of the active skin otherwise */
|
|
||||||
virtual IGUIFont* getActiveFont() const = 0;
|
|
||||||
|
|
||||||
//! Sets whether to draw the background. By default disabled,
|
|
||||||
virtual void setDrawBackground(bool draw) = 0;
|
|
||||||
|
|
||||||
//! Checks if background drawing is enabled
|
|
||||||
/** \return true if background drawing is enabled, false otherwise */
|
|
||||||
virtual bool isDrawBackgroundEnabled() const = 0;
|
|
||||||
|
|
||||||
//! Allows to freeze updates which makes it easier to read the numbers
|
|
||||||
/** Numbers are updated once when you switch pages. */
|
|
||||||
virtual void setFrozen(bool freeze) = 0;
|
|
||||||
|
|
||||||
//! Are updates currently frozen
|
|
||||||
virtual bool getFrozen() const = 0;
|
|
||||||
|
|
||||||
//! Filters prevents data that doesn't achieve the conditions from being displayed
|
|
||||||
virtual void setFilters(irr::u32 minCalls = 0, irr::u32 minTimeSum = 0, irr::f32 minTimeAverage = 0.f, irr::u32 minTimeMax = 0) = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,92 +0,0 @@
|
|||||||
// Copyright (C) 2006-2012 Michael Zeilfelder
|
|
||||||
// This file is part of the "Irrlicht Engine".
|
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
|
||||||
|
|
||||||
#ifndef __I_GUI_SPIN_BOX_H_INCLUDED__
|
|
||||||
#define __I_GUI_SPIN_BOX_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IGUIElement.h"
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
namespace gui
|
|
||||||
{
|
|
||||||
class IGUIEditBox;
|
|
||||||
|
|
||||||
//! Enumeration bitflag for when to validate the text typed into the spinbox
|
|
||||||
//! Default used by Irrlicht is: (EGUI_SBV_ENTER|EGUI_SBV_LOSE_FOCUS)
|
|
||||||
enum EGUI_SPINBOX_VALIDATION
|
|
||||||
{
|
|
||||||
//! Does not validate typed text, probably a bad idea setting this usually.
|
|
||||||
EGUI_SBV_NEVER = 0,
|
|
||||||
//! Validate on each change. Was default up to Irrlicht 1.8
|
|
||||||
EGUI_SBV_CHANGE = 1,
|
|
||||||
//! Validate when enter was pressed
|
|
||||||
EGUI_SBV_ENTER = 2,
|
|
||||||
//! Validate when the editbox loses the focus
|
|
||||||
EGUI_SBV_LOSE_FOCUS = 4
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//! Single line edit box + spin buttons
|
|
||||||
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
|
||||||
\li EGET_SPINBOX_CHANGED
|
|
||||||
*/
|
|
||||||
class IGUISpinBox : public IGUIElement
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
//! constructor
|
|
||||||
IGUISpinBox(IGUIEnvironment* environment, IGUIElement* parent,
|
|
||||||
s32 id, core::rect<s32> rectangle)
|
|
||||||
: IGUIElement(EGUIET_SPIN_BOX, environment, parent, id, rectangle) {}
|
|
||||||
|
|
||||||
//! Access the edit box used in the spin control
|
|
||||||
virtual IGUIEditBox* getEditBox() const = 0;
|
|
||||||
|
|
||||||
//! set the current value of the spinbox
|
|
||||||
/** \param val: value to be set in the spinbox */
|
|
||||||
virtual void setValue(f32 val) = 0;
|
|
||||||
|
|
||||||
//! Get the current value of the spinbox
|
|
||||||
virtual f32 getValue() const = 0;
|
|
||||||
|
|
||||||
//! set the range of values which can be used in the spinbox
|
|
||||||
/** \param min: minimum value
|
|
||||||
\param max: maximum value */
|
|
||||||
virtual void setRange(f32 min, f32 max) = 0;
|
|
||||||
|
|
||||||
//! get the minimum value which can be used in the spinbox
|
|
||||||
virtual f32 getMin() const = 0;
|
|
||||||
|
|
||||||
//! get the maximum value which can be used in the spinbox
|
|
||||||
virtual f32 getMax() const = 0;
|
|
||||||
|
|
||||||
//! Step size by which values are changed when pressing the spinbuttons
|
|
||||||
/** The step size also determines the number of decimal places to display
|
|
||||||
\param step: stepsize used for value changes when pressing spinbuttons */
|
|
||||||
virtual void setStepSize(f32 step=1.f) = 0;
|
|
||||||
|
|
||||||
//! Sets the number of decimal places to display.
|
|
||||||
//! Note that this also rounds the range to the same number of decimal places.
|
|
||||||
/** \param places: The number of decimal places to display, use -1 to reset */
|
|
||||||
virtual void setDecimalPlaces(s32 places) = 0;
|
|
||||||
|
|
||||||
//! get the current step size
|
|
||||||
virtual f32 getStepSize() const = 0;
|
|
||||||
|
|
||||||
//! Sets when the spinbox has to validate entered text.
|
|
||||||
/** \param validateOn Can be any combination of EGUI_SPINBOX_VALIDATION bit flags */
|
|
||||||
virtual void setValidateOn(u32 validateOn) = 0;
|
|
||||||
|
|
||||||
//! Gets when the spinbox has to validate entered text.
|
|
||||||
/** \return A combination of EGUI_SPINBOX_VALIDATION bit flags */
|
|
||||||
virtual u32 getValidateOn() const = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
#endif // __I_GUI_SPIN_BOX_H_INCLUDED__
|
|
||||||
|
|
@ -1,235 +0,0 @@
|
|||||||
// Copyright (C) 2003-2012 Nikolaus Gebhardt
|
|
||||||
// This file is part of the "Irrlicht Engine".
|
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
|
||||||
|
|
||||||
#ifndef __I_GUI_TABLE_H_INCLUDED__
|
|
||||||
#define __I_GUI_TABLE_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IGUIElement.h"
|
|
||||||
#include "SColor.h"
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
namespace gui
|
|
||||||
{
|
|
||||||
class IGUIFont;
|
|
||||||
class IGUIScrollBar;
|
|
||||||
|
|
||||||
//! modes for ordering used when a column header is clicked
|
|
||||||
enum EGUI_COLUMN_ORDERING
|
|
||||||
{
|
|
||||||
//! Do not use ordering
|
|
||||||
EGCO_NONE,
|
|
||||||
|
|
||||||
//! Send a EGET_TABLE_HEADER_CHANGED message when a column header is clicked.
|
|
||||||
EGCO_CUSTOM,
|
|
||||||
|
|
||||||
//! Sort it ascending by it's ascii value like: a,b,c,...
|
|
||||||
EGCO_ASCENDING,
|
|
||||||
|
|
||||||
//! Sort it descending by it's ascii value like: z,x,y,...
|
|
||||||
EGCO_DESCENDING,
|
|
||||||
|
|
||||||
//! Sort it ascending on first click, descending on next, etc
|
|
||||||
EGCO_FLIP_ASCENDING_DESCENDING,
|
|
||||||
|
|
||||||
//! Not used as mode, only to get maximum value for this enum
|
|
||||||
EGCO_COUNT
|
|
||||||
};
|
|
||||||
|
|
||||||
//! Names for EGUI_COLUMN_ORDERING types
|
|
||||||
const c8* const GUIColumnOrderingNames[] =
|
|
||||||
{
|
|
||||||
"none",
|
|
||||||
"custom",
|
|
||||||
"ascend",
|
|
||||||
"descend",
|
|
||||||
"ascend_descend",
|
|
||||||
0,
|
|
||||||
};
|
|
||||||
|
|
||||||
enum EGUI_ORDERING_MODE
|
|
||||||
{
|
|
||||||
//! No element ordering
|
|
||||||
EGOM_NONE,
|
|
||||||
|
|
||||||
//! Elements are ordered from the smallest to the largest.
|
|
||||||
EGOM_ASCENDING,
|
|
||||||
|
|
||||||
//! Elements are ordered from the largest to the smallest.
|
|
||||||
EGOM_DESCENDING,
|
|
||||||
|
|
||||||
//! this value is not used, it only specifies the amount of default ordering types
|
|
||||||
//! available.
|
|
||||||
EGOM_COUNT
|
|
||||||
};
|
|
||||||
|
|
||||||
const c8* const GUIOrderingModeNames[] =
|
|
||||||
{
|
|
||||||
"none",
|
|
||||||
"ascending",
|
|
||||||
"descending",
|
|
||||||
0
|
|
||||||
};
|
|
||||||
|
|
||||||
enum EGUI_TABLE_DRAW_FLAGS
|
|
||||||
{
|
|
||||||
EGTDF_ROWS = 1,
|
|
||||||
EGTDF_COLUMNS = 2,
|
|
||||||
EGTDF_ACTIVE_ROW = 4,
|
|
||||||
EGTDF_COUNT
|
|
||||||
};
|
|
||||||
|
|
||||||
//! Default list box GUI element.
|
|
||||||
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
|
||||||
\li EGET_TABLE_CHANGED
|
|
||||||
\li EGET_TABLE_SELECTED_AGAIN
|
|
||||||
\li EGET_TABLE_HEADER_CHANGED
|
|
||||||
*/
|
|
||||||
class IGUITable : public IGUIElement
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
//! constructor
|
|
||||||
IGUITable(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
|
||||||
: IGUIElement(EGUIET_TABLE, environment, parent, id, rectangle) {}
|
|
||||||
|
|
||||||
//! Adds a column
|
|
||||||
/** If columnIndex is outside the current range, do push new column at the end */
|
|
||||||
virtual void addColumn(const wchar_t* caption, s32 columnIndex=-1) = 0;
|
|
||||||
|
|
||||||
//! remove a column from the table
|
|
||||||
virtual void removeColumn(u32 columnIndex) = 0;
|
|
||||||
|
|
||||||
//! Returns the number of columns in the table control
|
|
||||||
virtual s32 getColumnCount() const = 0;
|
|
||||||
|
|
||||||
//! Makes a column active. This will trigger an ordering process.
|
|
||||||
/** \param idx: The id of the column to make active or a negative number to make non active.
|
|
||||||
\param doOrder: Do also the ordering which depending on mode for active column
|
|
||||||
\return True when the column could be set active (aka - it did exist). */
|
|
||||||
virtual bool setActiveColumn(s32 idx, bool doOrder=false) = 0;
|
|
||||||
|
|
||||||
//! Returns which header is currently active
|
|
||||||
virtual s32 getActiveColumn() const = 0;
|
|
||||||
|
|
||||||
//! Returns the ordering used by the currently active column
|
|
||||||
virtual EGUI_ORDERING_MODE getActiveColumnOrdering() const = 0;
|
|
||||||
|
|
||||||
//! Set the width of a column
|
|
||||||
virtual void setColumnWidth(u32 columnIndex, u32 width) = 0;
|
|
||||||
|
|
||||||
//! Get the width of a column
|
|
||||||
virtual u32 getColumnWidth(u32 columnIndex) const = 0;
|
|
||||||
|
|
||||||
//! columns can be resized by drag 'n drop
|
|
||||||
virtual void setResizableColumns(bool resizable) = 0;
|
|
||||||
|
|
||||||
//! can columns be resized by drag 'n drop?
|
|
||||||
virtual bool hasResizableColumns() const = 0;
|
|
||||||
|
|
||||||
//! This tells the table control which ordering mode should be used when a column header is clicked.
|
|
||||||
/** \param columnIndex The index of the column header.
|
|
||||||
\param mode: One of the modes defined in EGUI_COLUMN_ORDERING */
|
|
||||||
virtual void setColumnOrdering(u32 columnIndex, EGUI_COLUMN_ORDERING mode) = 0;
|
|
||||||
|
|
||||||
//! Returns which row is currently selected
|
|
||||||
virtual s32 getSelected() const = 0;
|
|
||||||
|
|
||||||
//! set which row is currently selected
|
|
||||||
virtual void setSelected( s32 index ) = 0;
|
|
||||||
|
|
||||||
//! Get amount of rows in the tabcontrol
|
|
||||||
virtual s32 getRowCount() const = 0;
|
|
||||||
|
|
||||||
//! adds a row to the table
|
|
||||||
/** \param rowIndex Zero based index of rows. The row will be
|
|
||||||
inserted at this position, if a row already exist there, it
|
|
||||||
will be placed after it. If the row is larger than the actual
|
|
||||||
number of row by more than one, it won't be created. Note that
|
|
||||||
if you create a row that's not at the end, there might be
|
|
||||||
performance issues.
|
|
||||||
\return index of inserted row. */
|
|
||||||
virtual u32 addRow(u32 rowIndex) = 0;
|
|
||||||
|
|
||||||
//! Remove a row from the table
|
|
||||||
virtual void removeRow(u32 rowIndex) = 0;
|
|
||||||
|
|
||||||
//! clears the table rows, but keeps the columns intact
|
|
||||||
virtual void clearRows() = 0;
|
|
||||||
|
|
||||||
//! Swap two row positions.
|
|
||||||
virtual void swapRows(u32 rowIndexA, u32 rowIndexB) = 0;
|
|
||||||
|
|
||||||
//! This tells the table to start ordering all the rows.
|
|
||||||
/** You need to explicitly tell the table to re order the rows
|
|
||||||
when a new row is added or the cells data is changed. This
|
|
||||||
makes the system more flexible and doesn't make you pay the
|
|
||||||
cost of ordering when adding a lot of rows.
|
|
||||||
\param columnIndex: When set to -1 the active column is used.
|
|
||||||
\param mode Ordering mode of the rows. */
|
|
||||||
virtual void orderRows(s32 columnIndex=-1, EGUI_ORDERING_MODE mode=EGOM_NONE) = 0;
|
|
||||||
|
|
||||||
//! Set the text of a cell
|
|
||||||
virtual void setCellText(u32 rowIndex, u32 columnIndex, const core::stringw& text) = 0;
|
|
||||||
|
|
||||||
//! Set the text of a cell, and set a color of this cell.
|
|
||||||
virtual void setCellText(u32 rowIndex, u32 columnIndex, const core::stringw& text, video::SColor color) = 0;
|
|
||||||
|
|
||||||
//! Set the data of a cell
|
|
||||||
virtual void setCellData(u32 rowIndex, u32 columnIndex, void *data) = 0;
|
|
||||||
|
|
||||||
//! Set the color of a cell text
|
|
||||||
virtual void setCellColor(u32 rowIndex, u32 columnIndex, video::SColor color) = 0;
|
|
||||||
|
|
||||||
//! Get the text of a cell
|
|
||||||
virtual const wchar_t* getCellText(u32 rowIndex, u32 columnIndex ) const = 0;
|
|
||||||
|
|
||||||
//! Get the data of a cell
|
|
||||||
virtual void* getCellData(u32 rowIndex, u32 columnIndex ) const = 0;
|
|
||||||
|
|
||||||
//! clears the table, deletes all items in the table
|
|
||||||
virtual void clear() = 0;
|
|
||||||
|
|
||||||
//! Set flags, as defined in ::EGUI_TABLE_DRAW_FLAGS, which influence the layout
|
|
||||||
virtual void setDrawFlags(s32 flags) = 0;
|
|
||||||
|
|
||||||
//! Get the flags, as defined in ::EGUI_TABLE_DRAW_FLAGS, which influence the layout
|
|
||||||
virtual s32 getDrawFlags() const = 0;
|
|
||||||
|
|
||||||
//! Sets another skin independent font.
|
|
||||||
/** If this is set to zero, the button uses the font of the skin.
|
|
||||||
\param font: New font to set. */
|
|
||||||
virtual void setOverrideFont(IGUIFont* font=0) = 0;
|
|
||||||
|
|
||||||
//! Gets the override font (if any)
|
|
||||||
/** \return The override font (may be 0) */
|
|
||||||
virtual IGUIFont* getOverrideFont(void) const = 0;
|
|
||||||
|
|
||||||
//! Get the font which is used right now for drawing
|
|
||||||
/** Currently this is the override font when one is set and the
|
|
||||||
font of the active skin otherwise */
|
|
||||||
virtual IGUIFont* getActiveFont() const = 0;
|
|
||||||
|
|
||||||
//! Get the height of items/rows
|
|
||||||
virtual s32 getItemHeight() const = 0;
|
|
||||||
|
|
||||||
//! Access the vertical scrollbar
|
|
||||||
virtual IGUIScrollBar* getVerticalScrollBar() const = 0;
|
|
||||||
|
|
||||||
//! Access the horizontal scrollbar
|
|
||||||
virtual IGUIScrollBar* getHorizontalScrollBar() const = 0;
|
|
||||||
|
|
||||||
//! Sets whether to draw the background.
|
|
||||||
virtual void setDrawBackground(bool draw) = 0;
|
|
||||||
|
|
||||||
//! Checks if background drawing is enabled
|
|
||||||
/** \return true if background drawing is enabled, false otherwise */
|
|
||||||
virtual bool isDrawBackgroundEnabled() const = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
@ -1,298 +0,0 @@
|
|||||||
// written by Reinhard Ostermeier, reinhard@nospam.r-ostermeier.de
|
|
||||||
// This file is part of the "Irrlicht Engine".
|
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
|
||||||
|
|
||||||
#ifndef __I_GUI_TREE_VIEW_H_INCLUDED__
|
|
||||||
#define __I_GUI_TREE_VIEW_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IGUIElement.h"
|
|
||||||
#include "IGUIImageList.h"
|
|
||||||
#include "irrTypes.h"
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
namespace gui
|
|
||||||
{
|
|
||||||
class IGUIFont;
|
|
||||||
class IGUITreeView;
|
|
||||||
class IGUIScrollBar;
|
|
||||||
|
|
||||||
|
|
||||||
//! Node for gui tree view
|
|
||||||
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
|
||||||
\li EGET_TREEVIEW_NODE_EXPAND
|
|
||||||
\li EGET_TREEVIEW_NODE_COLLAPS
|
|
||||||
\li EGET_TREEVIEW_NODE_DESELECT
|
|
||||||
\li EGET_TREEVIEW_NODE_SELECT
|
|
||||||
*/
|
|
||||||
class IGUITreeViewNode : public IReferenceCounted
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
//! returns the owner (tree view) of this node
|
|
||||||
virtual IGUITreeView* getOwner() const = 0;
|
|
||||||
|
|
||||||
//! Returns the parent node of this node.
|
|
||||||
/** For the root node this will return 0. */
|
|
||||||
virtual IGUITreeViewNode* getParent() const = 0;
|
|
||||||
|
|
||||||
//! returns the text of the node
|
|
||||||
virtual const wchar_t* getText() const = 0;
|
|
||||||
|
|
||||||
//! sets the text of the node
|
|
||||||
virtual void setText( const wchar_t* text ) = 0;
|
|
||||||
|
|
||||||
//! returns the icon text of the node
|
|
||||||
virtual const wchar_t* getIcon() const = 0;
|
|
||||||
|
|
||||||
//! sets the icon text of the node
|
|
||||||
virtual void setIcon( const wchar_t* icon ) = 0;
|
|
||||||
|
|
||||||
//! returns the image index of the node
|
|
||||||
virtual u32 getImageIndex() const = 0;
|
|
||||||
|
|
||||||
//! sets the image index of the node
|
|
||||||
virtual void setImageIndex( u32 imageIndex ) = 0;
|
|
||||||
|
|
||||||
//! returns the image index of the node
|
|
||||||
virtual u32 getSelectedImageIndex() const = 0;
|
|
||||||
|
|
||||||
//! sets the image index of the node
|
|
||||||
virtual void setSelectedImageIndex( u32 imageIndex ) = 0;
|
|
||||||
|
|
||||||
//! returns the user data (void*) of this node
|
|
||||||
virtual void* getData() const = 0;
|
|
||||||
|
|
||||||
//! sets the user data (void*) of this node
|
|
||||||
virtual void setData( void* data ) = 0;
|
|
||||||
|
|
||||||
//! returns the user data2 (IReferenceCounted) of this node
|
|
||||||
virtual IReferenceCounted* getData2() const = 0;
|
|
||||||
|
|
||||||
//! sets the user data2 (IReferenceCounted) of this node
|
|
||||||
virtual void setData2( IReferenceCounted* data ) = 0;
|
|
||||||
|
|
||||||
//! returns the child item count
|
|
||||||
virtual u32 getChildCount() const = 0;
|
|
||||||
|
|
||||||
//! removes all children (recursive) from this node
|
|
||||||
virtual void clearChildren() = 0;
|
|
||||||
|
|
||||||
//! removes all children (recursive) from this node
|
|
||||||
/** \deprecated Deprecated in 1.8, use clearChildren() instead.
|
|
||||||
This method may be removed by Irrlicht 1.9 */
|
|
||||||
_IRR_DEPRECATED_ void clearChilds()
|
|
||||||
{
|
|
||||||
return clearChildren();
|
|
||||||
}
|
|
||||||
|
|
||||||
//! returns true if this node has child nodes
|
|
||||||
virtual bool hasChildren() const = 0;
|
|
||||||
|
|
||||||
//! returns true if this node has child nodes
|
|
||||||
/** \deprecated Deprecated in 1.8, use hasChildren() instead.
|
|
||||||
This method may be removed by Irrlicht 1.9 */
|
|
||||||
_IRR_DEPRECATED_ bool hasChilds() const
|
|
||||||
{
|
|
||||||
return hasChildren();
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Adds a new node behind the last child node.
|
|
||||||
/** \param text text of the new node
|
|
||||||
\param icon icon text of the new node
|
|
||||||
\param imageIndex index of the image for the new node (-1 = none)
|
|
||||||
\param selectedImageIndex index of the selected image for the new node (-1 = same as imageIndex)
|
|
||||||
\param data user data (void*) of the new node
|
|
||||||
\param data2 user data2 (IReferenceCounted*) of the new node
|
|
||||||
\return The new node
|
|
||||||
*/
|
|
||||||
virtual IGUITreeViewNode* addChildBack(
|
|
||||||
const wchar_t* text, const wchar_t* icon = 0,
|
|
||||||
s32 imageIndex=-1, s32 selectedImageIndex=-1,
|
|
||||||
void* data=0, IReferenceCounted* data2=0) =0;
|
|
||||||
|
|
||||||
//! Adds a new node before the first child node.
|
|
||||||
/** \param text text of the new node
|
|
||||||
\param icon icon text of the new node
|
|
||||||
\param imageIndex index of the image for the new node (-1 = none)
|
|
||||||
\param selectedImageIndex index of the selected image for the new node (-1 = same as imageIndex)
|
|
||||||
\param data user data (void*) of the new node
|
|
||||||
\param data2 user data2 (IReferenceCounted*) of the new node
|
|
||||||
\return The new node
|
|
||||||
*/
|
|
||||||
virtual IGUITreeViewNode* addChildFront(
|
|
||||||
const wchar_t* text, const wchar_t* icon = 0,
|
|
||||||
s32 imageIndex=-1, s32 selectedImageIndex=-1,
|
|
||||||
void* data=0, IReferenceCounted* data2=0 ) =0;
|
|
||||||
|
|
||||||
//! Adds a new node behind the other node.
|
|
||||||
/** The other node has also to be a child node from this node.
|
|
||||||
\param other Node to insert after
|
|
||||||
\param text text of the new node
|
|
||||||
\param icon icon text of the new node
|
|
||||||
\param imageIndex index of the image for the new node (-1 = none)
|
|
||||||
\param selectedImageIndex index of the selected image for the new node (-1 = same as imageIndex)
|
|
||||||
\param data user data (void*) of the new node
|
|
||||||
\param data2 user data2 (IReferenceCounted*) of the new node
|
|
||||||
\return The new node or 0 if other is no child node from this
|
|
||||||
*/
|
|
||||||
virtual IGUITreeViewNode* insertChildAfter(
|
|
||||||
IGUITreeViewNode* other,
|
|
||||||
const wchar_t* text, const wchar_t* icon = 0,
|
|
||||||
s32 imageIndex=-1, s32 selectedImageIndex=-1,
|
|
||||||
void* data=0, IReferenceCounted* data2=0) =0;
|
|
||||||
|
|
||||||
//! Adds a new node before the other node.
|
|
||||||
/** The other node has also to be a child node from this node.
|
|
||||||
\param other Node to insert before
|
|
||||||
\param text text of the new node
|
|
||||||
\param icon icon text of the new node
|
|
||||||
\param imageIndex index of the image for the new node (-1 = none)
|
|
||||||
\param selectedImageIndex index of the selected image for the new node (-1 = same as imageIndex)
|
|
||||||
\param data user data (void*) of the new node
|
|
||||||
\param data2 user data2 (IReferenceCounted*) of the new node
|
|
||||||
\return The new node or 0 if other is no child node from this
|
|
||||||
*/
|
|
||||||
virtual IGUITreeViewNode* insertChildBefore(
|
|
||||||
IGUITreeViewNode* other,
|
|
||||||
const wchar_t* text, const wchar_t* icon = 0,
|
|
||||||
s32 imageIndex=-1, s32 selectedImageIndex=-1,
|
|
||||||
void* data=0, IReferenceCounted* data2=0) = 0;
|
|
||||||
|
|
||||||
//! Return the first child node from this node.
|
|
||||||
/** \return The first child node or 0 if this node has no children. */
|
|
||||||
virtual IGUITreeViewNode* getFirstChild() const = 0;
|
|
||||||
|
|
||||||
//! Return the last child node from this node.
|
|
||||||
/** \return The last child node or 0 if this node has no children. */
|
|
||||||
virtual IGUITreeViewNode* getLastChild() const = 0;
|
|
||||||
|
|
||||||
//! Returns the previous sibling node from this node.
|
|
||||||
/** \return The previous sibling node from this node or 0 if this is
|
|
||||||
the first node from the parent node.
|
|
||||||
*/
|
|
||||||
virtual IGUITreeViewNode* getPrevSibling() const = 0;
|
|
||||||
|
|
||||||
//! Returns the next sibling node from this node.
|
|
||||||
/** \return The next sibling node from this node or 0 if this is
|
|
||||||
the last node from the parent node.
|
|
||||||
*/
|
|
||||||
virtual IGUITreeViewNode* getNextSibling() const = 0;
|
|
||||||
|
|
||||||
//! Returns the next visible (expanded, may be out of scrolling) node from this node.
|
|
||||||
/** \return The next visible node from this node or 0 if this is
|
|
||||||
the last visible node. */
|
|
||||||
virtual IGUITreeViewNode* getNextVisible() const = 0;
|
|
||||||
|
|
||||||
//! Deletes a child node.
|
|
||||||
/** \return Returns true if the node was found as a child and is deleted. */
|
|
||||||
virtual bool deleteChild( IGUITreeViewNode* child ) = 0;
|
|
||||||
|
|
||||||
//! Moves a child node one position up.
|
|
||||||
/** \return True if the node was found as a child node and was not already the first child. */
|
|
||||||
virtual bool moveChildUp( IGUITreeViewNode* child ) = 0;
|
|
||||||
|
|
||||||
//! Moves a child node one position down.
|
|
||||||
/** \return True if the node was found as a child node and was not already the last child. */
|
|
||||||
virtual bool moveChildDown( IGUITreeViewNode* child ) = 0;
|
|
||||||
|
|
||||||
//! Returns true if the node is expanded (children are visible).
|
|
||||||
virtual bool getExpanded() const = 0;
|
|
||||||
|
|
||||||
//! Sets if the node is expanded.
|
|
||||||
virtual void setExpanded( bool expanded ) = 0;
|
|
||||||
|
|
||||||
//! Returns true if the node is currently selected.
|
|
||||||
virtual bool getSelected() const = 0;
|
|
||||||
|
|
||||||
//! Sets this node as selected.
|
|
||||||
virtual void setSelected( bool selected ) = 0;
|
|
||||||
|
|
||||||
//! Returns true if this node is the root node.
|
|
||||||
virtual bool isRoot() const = 0;
|
|
||||||
|
|
||||||
//! Returns the level of this node.
|
|
||||||
/** The root node has level 0. Direct children of the root has level 1 ... */
|
|
||||||
virtual s32 getLevel() const = 0;
|
|
||||||
|
|
||||||
//! Returns true if this node is visible (all parents are expanded).
|
|
||||||
virtual bool isVisible() const = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//! Default tree view GUI element.
|
|
||||||
/** Displays a windows like tree buttons to expand/collapse the child
|
|
||||||
nodes of an node and optional tree lines. Each node consists of an
|
|
||||||
text, an icon text and a void pointer for user data. */
|
|
||||||
class IGUITreeView : public IGUIElement
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
//! constructor
|
|
||||||
IGUITreeView(IGUIEnvironment* environment, IGUIElement* parent,
|
|
||||||
s32 id, core::rect<s32> rectangle)
|
|
||||||
: IGUIElement( EGUIET_TREE_VIEW, environment, parent, id, rectangle ) {}
|
|
||||||
|
|
||||||
//! returns the root node (not visible) from the tree.
|
|
||||||
virtual IGUITreeViewNode* getRoot() const = 0;
|
|
||||||
|
|
||||||
//! returns the selected node of the tree or 0 if none is selected
|
|
||||||
virtual IGUITreeViewNode* getSelected() const = 0;
|
|
||||||
|
|
||||||
//! returns true if the tree lines are visible
|
|
||||||
virtual bool getLinesVisible() const = 0;
|
|
||||||
|
|
||||||
//! sets if the tree lines are visible
|
|
||||||
/** \param visible true for visible, false for invisible */
|
|
||||||
virtual void setLinesVisible( bool visible ) = 0;
|
|
||||||
|
|
||||||
//! Sets the font which should be used as icon font.
|
|
||||||
/** This font is set to the Irrlicht engine built-in-font by
|
|
||||||
default. Icons can be displayed in front of every list item.
|
|
||||||
An icon is a string, displayed with the icon font. When using
|
|
||||||
the build-in-font of the Irrlicht engine as icon font, the icon
|
|
||||||
strings defined in GUIIcons.h can be used.
|
|
||||||
*/
|
|
||||||
virtual void setIconFont( IGUIFont* font ) = 0;
|
|
||||||
|
|
||||||
//! Sets a skin independent font.
|
|
||||||
/** \param font: New font to set or 0 to use the skin-font. */
|
|
||||||
virtual void setOverrideFont(IGUIFont* font=0) = 0;
|
|
||||||
|
|
||||||
//! Gets the override font (if any)
|
|
||||||
/** \return The override font (may be 0) */
|
|
||||||
virtual IGUIFont* getOverrideFont(void) const = 0;
|
|
||||||
|
|
||||||
//! Get the font which is used for drawing
|
|
||||||
/** This is the override font when one is set and the
|
|
||||||
font of the skin otherwise. */
|
|
||||||
virtual IGUIFont* getActiveFont() const = 0;
|
|
||||||
|
|
||||||
//! Sets the image list which should be used for the image and selected image of every node.
|
|
||||||
/** The default is 0 (no images). */
|
|
||||||
virtual void setImageList( IGUIImageList* imageList ) = 0;
|
|
||||||
|
|
||||||
//! Returns the image list which is used for the nodes.
|
|
||||||
virtual IGUIImageList* getImageList() const = 0;
|
|
||||||
|
|
||||||
//! Sets if the image is left of the icon. Default is true.
|
|
||||||
virtual void setImageLeftOfIcon( bool bLeftOf ) = 0;
|
|
||||||
|
|
||||||
//! Returns if the Image is left of the icon. Default is true.
|
|
||||||
virtual bool getImageLeftOfIcon() const = 0;
|
|
||||||
|
|
||||||
//! Returns the node which is associated to the last event.
|
|
||||||
/** This pointer is only valid inside the OnEvent call! */
|
|
||||||
virtual IGUITreeViewNode* getLastEventNode() const = 0;
|
|
||||||
|
|
||||||
//! Access the vertical scrollbar
|
|
||||||
virtual IGUIScrollBar* getVerticalScrollBar() const = 0;
|
|
||||||
|
|
||||||
//! Access the horizontal scrollbar
|
|
||||||
virtual IGUIScrollBar* getHorizontalScrollBar() const = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
@ -1,74 +0,0 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
|
||||||
// This file is part of the "Irrlicht Engine".
|
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
|
||||||
|
|
||||||
#ifndef __I_GUI_WINDOW_H_INCLUDED__
|
|
||||||
#define __I_GUI_WINDOW_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IGUIElement.h"
|
|
||||||
#include "EMessageBoxFlags.h"
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
namespace gui
|
|
||||||
{
|
|
||||||
class IGUIButton;
|
|
||||||
|
|
||||||
//! Default moveable window GUI element with border, caption and close icons.
|
|
||||||
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
|
||||||
\li EGET_ELEMENT_CLOSED
|
|
||||||
*/
|
|
||||||
class IGUIWindow : public IGUIElement
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
//! constructor
|
|
||||||
IGUIWindow(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
|
||||||
: IGUIElement(EGUIET_WINDOW, environment, parent, id, rectangle) {}
|
|
||||||
|
|
||||||
//! Returns pointer to the close button
|
|
||||||
/** You can hide the button by calling setVisible(false) on the result. */
|
|
||||||
virtual IGUIButton* getCloseButton() const = 0;
|
|
||||||
|
|
||||||
//! Returns pointer to the minimize button
|
|
||||||
/** You can hide the button by calling setVisible(false) on the result. */
|
|
||||||
virtual IGUIButton* getMinimizeButton() const = 0;
|
|
||||||
|
|
||||||
//! Returns pointer to the maximize button
|
|
||||||
/** You can hide the button by calling setVisible(false) on the result. */
|
|
||||||
virtual IGUIButton* getMaximizeButton() const = 0;
|
|
||||||
|
|
||||||
//! Returns true if the window can be dragged with the mouse, false if not
|
|
||||||
virtual bool isDraggable() const = 0;
|
|
||||||
|
|
||||||
//! Sets whether the window can be dragged by the mouse
|
|
||||||
virtual void setDraggable(bool draggable) = 0;
|
|
||||||
|
|
||||||
//! Set if the window background will be drawn
|
|
||||||
virtual void setDrawBackground(bool draw) = 0;
|
|
||||||
|
|
||||||
//! Get if the window background will be drawn
|
|
||||||
virtual bool getDrawBackground() const = 0;
|
|
||||||
|
|
||||||
//! Set if the window titlebar will be drawn
|
|
||||||
//! Note: If the background is not drawn, then the titlebar is automatically also not drawn
|
|
||||||
virtual void setDrawTitlebar(bool draw) = 0;
|
|
||||||
|
|
||||||
//! Get if the window titlebar will be drawn
|
|
||||||
virtual bool getDrawTitlebar() const = 0;
|
|
||||||
|
|
||||||
//! Returns the rectangle of the drawable area (without border and without titlebar)
|
|
||||||
/** The coordinates are given relative to the top-left position of the gui element.<br>
|
|
||||||
So to get absolute positions you have to add the resulting rectangle to getAbsolutePosition().UpperLeftCorner.<br>
|
|
||||||
To get it relative to the parent element you have to add the resulting rectangle to getRelativePosition().UpperLeftCorner.
|
|
||||||
Beware that adding a menu will not change the clientRect as menus are own gui elements, so in that case you might want to subtract
|
|
||||||
the menu area additionally. */
|
|
||||||
virtual core::rect<s32> getClientRect() const = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
@ -9,7 +9,6 @@
|
|||||||
#include "position2d.h"
|
#include "position2d.h"
|
||||||
#include "rect.h"
|
#include "rect.h"
|
||||||
#include "SColor.h"
|
#include "SColor.h"
|
||||||
#include "irrAllocator.h"
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
namespace irr
|
namespace irr
|
||||||
@ -44,7 +43,7 @@ public:
|
|||||||
delete[] Data;
|
delete[] Data;
|
||||||
|
|
||||||
if (DeleteMipMapsMemory)
|
if (DeleteMipMapsMemory)
|
||||||
Allocator.deallocate(MipMapsData);
|
delete[] MipMapsData;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Returns the color format
|
//! Returns the color format
|
||||||
@ -275,13 +274,13 @@ public:
|
|||||||
will by copied internally.
|
will by copied internally.
|
||||||
\param deleteMemory Whether the memory is deallocated upon
|
\param deleteMemory Whether the memory is deallocated upon
|
||||||
destruction. */
|
destruction. */
|
||||||
void setMipMapsData(void* data, bool ownForeignMemory, bool deleteMemory)
|
void setMipMapsData(void* data, bool ownForeignMemory)
|
||||||
{
|
{
|
||||||
if (data != MipMapsData)
|
if (data != MipMapsData)
|
||||||
{
|
{
|
||||||
if (DeleteMipMapsMemory)
|
if (DeleteMipMapsMemory)
|
||||||
{
|
{
|
||||||
Allocator.deallocate(MipMapsData);
|
delete[] MipMapsData;
|
||||||
|
|
||||||
DeleteMipMapsMemory = false;
|
DeleteMipMapsMemory = false;
|
||||||
}
|
}
|
||||||
@ -292,7 +291,7 @@ public:
|
|||||||
{
|
{
|
||||||
MipMapsData = static_cast<u8*>(data);
|
MipMapsData = static_cast<u8*>(data);
|
||||||
|
|
||||||
DeleteMipMapsMemory = deleteMemory;
|
DeleteMipMapsMemory = false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -311,7 +310,7 @@ public:
|
|||||||
dataSize += getDataSizeFromFormat(Format, width, height);
|
dataSize += getDataSizeFromFormat(Format, width, height);
|
||||||
} while (width != 1 || height != 1);
|
} while (width != 1 || height != 1);
|
||||||
|
|
||||||
MipMapsData = Allocator.allocate(dataSize);
|
MipMapsData = new u8[dataSize];
|
||||||
memcpy(MipMapsData, data, dataSize);
|
memcpy(MipMapsData, data, dataSize);
|
||||||
|
|
||||||
DeleteMipMapsMemory = true;
|
DeleteMipMapsMemory = true;
|
||||||
@ -578,7 +577,6 @@ protected:
|
|||||||
bool DeleteMemory;
|
bool DeleteMemory;
|
||||||
bool DeleteMipMapsMemory;
|
bool DeleteMipMapsMemory;
|
||||||
|
|
||||||
core::irrAllocator<u8> Allocator;
|
|
||||||
#if defined(IRRLICHT_sRGB)
|
#if defined(IRRLICHT_sRGB)
|
||||||
int Format_sRGB;
|
int Format_sRGB;
|
||||||
#endif
|
#endif
|
||||||
|
@ -30,44 +30,6 @@ namespace scene
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Flips the direction of surfaces.
|
|
||||||
/** Changes backfacing triangles to frontfacing
|
|
||||||
triangles and vice versa.
|
|
||||||
\param mesh Mesh on which the operation is performed. */
|
|
||||||
virtual void flipSurfaces(IMesh* mesh) const = 0;
|
|
||||||
|
|
||||||
//! Sets the alpha vertex color value of the whole mesh to a new value.
|
|
||||||
/** \param mesh Mesh on which the operation is performed.
|
|
||||||
\param alpha New alpha value. Must be a value between 0 and 255. */
|
|
||||||
void setVertexColorAlpha(IMesh* mesh, s32 alpha) const
|
|
||||||
{
|
|
||||||
apply(scene::SVertexColorSetAlphaManipulator(alpha), mesh);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Sets the alpha vertex color value of the whole mesh to a new value.
|
|
||||||
/** \param buffer Meshbuffer on which the operation is performed.
|
|
||||||
\param alpha New alpha value. Must be a value between 0 and 255. */
|
|
||||||
void setVertexColorAlpha(IMeshBuffer* buffer, s32 alpha) const
|
|
||||||
{
|
|
||||||
apply(scene::SVertexColorSetAlphaManipulator(alpha), buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Sets the colors of all vertices to one color
|
|
||||||
/** \param mesh Mesh on which the operation is performed.
|
|
||||||
\param color New color. */
|
|
||||||
void setVertexColors(IMesh* mesh, video::SColor color) const
|
|
||||||
{
|
|
||||||
apply(scene::SVertexColorSetManipulator(color), mesh);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Sets the colors of all vertices to one color
|
|
||||||
/** \param buffer Meshbuffer on which the operation is performed.
|
|
||||||
\param color New color. */
|
|
||||||
void setVertexColors(IMeshBuffer* buffer, video::SColor color) const
|
|
||||||
{
|
|
||||||
apply(scene::SVertexColorSetManipulator(color), buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Recalculates all normals of the mesh.
|
//! Recalculates all normals of the mesh.
|
||||||
/** \param mesh: Mesh on which the operation is performed.
|
/** \param mesh: Mesh on which the operation is performed.
|
||||||
\param smooth: If the normals shall be smoothed.
|
\param smooth: If the normals shall be smoothed.
|
||||||
@ -82,26 +44,6 @@ namespace scene
|
|||||||
virtual void recalculateNormals(IMeshBuffer* buffer,
|
virtual void recalculateNormals(IMeshBuffer* buffer,
|
||||||
bool smooth = false, bool angleWeighted = false) const=0;
|
bool smooth = false, bool angleWeighted = false) const=0;
|
||||||
|
|
||||||
//! Recalculates tangents, requires a tangent mesh
|
|
||||||
/** \param mesh Mesh on which the operation is performed.
|
|
||||||
\param recalculateNormals If the normals shall be recalculated, otherwise original normals of the mesh are used unchanged.
|
|
||||||
\param smooth If the normals shall be smoothed.
|
|
||||||
\param angleWeighted If the normals shall be smoothed in relation to their angles. More expensive, but also higher precision.
|
|
||||||
*/
|
|
||||||
virtual void recalculateTangents(IMesh* mesh,
|
|
||||||
bool recalculateNormals=false, bool smooth=false,
|
|
||||||
bool angleWeighted=false) const=0;
|
|
||||||
|
|
||||||
//! Recalculates tangents, requires a tangent mesh buffer
|
|
||||||
/** \param buffer Meshbuffer on which the operation is performed.
|
|
||||||
\param recalculateNormals If the normals shall be recalculated, otherwise original normals of the buffer are used unchanged.
|
|
||||||
\param smooth If the normals shall be smoothed.
|
|
||||||
\param angleWeighted If the normals shall be smoothed in relation to their angles. More expensive, but also higher precision.
|
|
||||||
*/
|
|
||||||
virtual void recalculateTangents(IMeshBuffer* buffer,
|
|
||||||
bool recalculateNormals=false, bool smooth=false,
|
|
||||||
bool angleWeighted=false) const=0;
|
|
||||||
|
|
||||||
//! Scales the actual mesh, not a scene node.
|
//! Scales the actual mesh, not a scene node.
|
||||||
/** \param mesh Mesh on which the operation is performed.
|
/** \param mesh Mesh on which the operation is performed.
|
||||||
\param factor Scale factor for each axis. */
|
\param factor Scale factor for each axis. */
|
||||||
@ -118,116 +60,6 @@ namespace scene
|
|||||||
apply(SVertexPositionScaleManipulator(factor), buffer, true);
|
apply(SVertexPositionScaleManipulator(factor), buffer, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Scales the actual mesh, not a scene node.
|
|
||||||
/** \deprecated Use scale() instead. This method may be removed by Irrlicht 1.9
|
|
||||||
\param mesh Mesh on which the operation is performed.
|
|
||||||
\param factor Scale factor for each axis. */
|
|
||||||
_IRR_DEPRECATED_ void scaleMesh(IMesh* mesh, const core::vector3df& factor) const {return scale(mesh,factor);}
|
|
||||||
|
|
||||||
//! Scale the texture coords of a mesh.
|
|
||||||
/** \param mesh Mesh on which the operation is performed.
|
|
||||||
\param factor Vector which defines the scale for each axis.
|
|
||||||
\param level Number of texture coord, starting from 1. Support for level 2 exists for LightMap buffers. */
|
|
||||||
void scaleTCoords(scene::IMesh* mesh, const core::vector2df& factor, u32 level=1) const
|
|
||||||
{
|
|
||||||
apply(SVertexTCoordsScaleManipulator(factor, level), mesh);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Scale the texture coords of a meshbuffer.
|
|
||||||
/** \param buffer Meshbuffer on which the operation is performed.
|
|
||||||
\param factor Vector which defines the scale for each axis.
|
|
||||||
\param level Number of texture coord, starting from 1. Support for level 2 exists for LightMap buffers. */
|
|
||||||
void scaleTCoords(scene::IMeshBuffer* buffer, const core::vector2df& factor, u32 level=1) const
|
|
||||||
{
|
|
||||||
apply(SVertexTCoordsScaleManipulator(factor, level), buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Applies a transformation to a mesh
|
|
||||||
/** \param mesh Mesh on which the operation is performed.
|
|
||||||
\param m transformation matrix.
|
|
||||||
\param normalsUpdate When 0 - don't update normals.
|
|
||||||
When 1 - update normals with inverse transposed of the transformation matrix
|
|
||||||
*/
|
|
||||||
void transform(IMesh* mesh, const core::matrix4& m, u32 normalsUpdate = 0) const
|
|
||||||
{
|
|
||||||
apply(SVertexPositionTransformManipulator(m), mesh, true);
|
|
||||||
|
|
||||||
if ( normalsUpdate == 1 )
|
|
||||||
{
|
|
||||||
core::matrix4 invT;
|
|
||||||
if ( m.getInverse(invT) )
|
|
||||||
{
|
|
||||||
invT = invT.getTransposed();
|
|
||||||
apply(SVertexNormalTransformManipulator(invT), mesh, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Applies a transformation to a meshbuffer
|
|
||||||
/** \param buffer Meshbuffer on which the operation is performed.
|
|
||||||
\param m transformation matrix.
|
|
||||||
\param normalsUpdate When 0 - don't update normals.
|
|
||||||
When 1 - update normals with inverse transposed of the transformation matrix
|
|
||||||
*/
|
|
||||||
void transform(IMeshBuffer* buffer, const core::matrix4& m, u32 normalsUpdate = 0) const
|
|
||||||
{
|
|
||||||
apply(SVertexPositionTransformManipulator(m), buffer, true);
|
|
||||||
|
|
||||||
if ( normalsUpdate == 1 )
|
|
||||||
{
|
|
||||||
core::matrix4 invT;
|
|
||||||
if ( m.getInverse(invT) )
|
|
||||||
{
|
|
||||||
invT = invT.getTransposed();
|
|
||||||
apply(SVertexNormalTransformManipulator(invT), buffer, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Applies a transformation to a mesh
|
|
||||||
/** \deprecated Use transform() instead. This method may be removed by Irrlicht 1.9
|
|
||||||
\param mesh Mesh on which the operation is performed.
|
|
||||||
\param m transformation matrix. */
|
|
||||||
_IRR_DEPRECATED_ virtual void transformMesh(IMesh* mesh, const core::matrix4& m) const {return transform(mesh,m);}
|
|
||||||
|
|
||||||
//! Creates a planar texture mapping on the mesh
|
|
||||||
/** \param mesh: Mesh on which the operation is performed.
|
|
||||||
\param resolution: resolution of the planar mapping. This is
|
|
||||||
the value specifying which is the relation between world space
|
|
||||||
and texture coordinate space. */
|
|
||||||
virtual void makePlanarTextureMapping(IMesh* mesh, f32 resolution=0.001f) const=0;
|
|
||||||
|
|
||||||
//! Creates a planar texture mapping on the meshbuffer
|
|
||||||
/** \param meshbuffer: Buffer on which the operation is performed.
|
|
||||||
\param resolution: resolution of the planar mapping. This is
|
|
||||||
the value specifying which is the relation between world space
|
|
||||||
and texture coordinate space. */
|
|
||||||
virtual void makePlanarTextureMapping(scene::IMeshBuffer* meshbuffer, f32 resolution=0.001f) const=0;
|
|
||||||
|
|
||||||
//! Creates a planar texture mapping on the buffer
|
|
||||||
/** This method is currently implemented towards the LWO planar mapping. A more general biasing might be required.
|
|
||||||
\param mesh Mesh on which the operation is performed.
|
|
||||||
\param resolutionS Resolution of the planar mapping in horizontal direction. This is the ratio between object space and texture space.
|
|
||||||
\param resolutionT Resolution of the planar mapping in vertical direction. This is the ratio between object space and texture space.
|
|
||||||
\param axis The axis along which the texture is projected. The allowed values are 0 (X), 1(Y), and 2(Z).
|
|
||||||
\param offset Vector added to the vertex positions (in object coordinates).
|
|
||||||
*/
|
|
||||||
virtual void makePlanarTextureMapping(scene::IMesh* mesh,
|
|
||||||
f32 resolutionS, f32 resolutionT,
|
|
||||||
u8 axis, const core::vector3df& offset) const=0;
|
|
||||||
|
|
||||||
//! Creates a planar texture mapping on the meshbuffer
|
|
||||||
/** This method is currently implemented towards the LWO planar mapping. A more general biasing might be required.
|
|
||||||
\param buffer Buffer on which the operation is performed.
|
|
||||||
\param resolutionS Resolution of the planar mapping in horizontal direction. This is the ratio between object space and texture space.
|
|
||||||
\param resolutionT Resolution of the planar mapping in vertical direction. This is the ratio between object space and texture space.
|
|
||||||
\param axis The axis along which the texture is projected. The allowed values are 0 (X), 1(Y), and 2(Z).
|
|
||||||
\param offset Vector added to the vertex positions (in object coordinates).
|
|
||||||
*/
|
|
||||||
virtual void makePlanarTextureMapping(scene::IMeshBuffer* buffer,
|
|
||||||
f32 resolutionS, f32 resolutionT,
|
|
||||||
u8 axis, const core::vector3df& offset) const=0;
|
|
||||||
|
|
||||||
//! Clones a static IMesh into a modifiable SMesh.
|
//! Clones a static IMesh into a modifiable SMesh.
|
||||||
/** All meshbuffers in the returned SMesh
|
/** All meshbuffers in the returned SMesh
|
||||||
are of type SMeshBuffer or SMeshBufferLightMap.
|
are of type SMeshBuffer or SMeshBufferLightMap.
|
||||||
@ -237,59 +69,6 @@ namespace scene
|
|||||||
IReferenceCounted::drop() for more information. */
|
IReferenceCounted::drop() for more information. */
|
||||||
virtual SMesh* createMeshCopy(IMesh* mesh) const = 0;
|
virtual SMesh* createMeshCopy(IMesh* mesh) const = 0;
|
||||||
|
|
||||||
//! Creates a copy of the mesh, which will only consist of S3DVertexTangents vertices.
|
|
||||||
/** This is useful if you want to draw tangent space normal
|
|
||||||
mapped geometry because it calculates the tangent and binormal
|
|
||||||
data which is needed there.
|
|
||||||
\param mesh Input mesh
|
|
||||||
\param recalculateNormals The normals are recalculated if set,
|
|
||||||
otherwise the original ones are kept. Note that keeping the
|
|
||||||
normals may introduce inaccurate tangents if the normals are
|
|
||||||
very different to those calculated from the faces.
|
|
||||||
\param smooth The normals/tangents are smoothed across the
|
|
||||||
meshbuffer's faces if this flag is set.
|
|
||||||
\param angleWeighted Improved smoothing calculation used
|
|
||||||
\param recalculateTangents Whether are actually calculated, or just the mesh with proper type is created.
|
|
||||||
\return Mesh consisting only of S3DVertexTangents vertices. If
|
|
||||||
you no longer need the cloned mesh, you should call
|
|
||||||
IMesh::drop(). See IReferenceCounted::drop() for more
|
|
||||||
information. */
|
|
||||||
virtual IMesh* createMeshWithTangents(IMesh* mesh,
|
|
||||||
bool recalculateNormals=false, bool smooth=false,
|
|
||||||
bool angleWeighted=false, bool recalculateTangents=true) const=0;
|
|
||||||
|
|
||||||
//! Creates a copy of the mesh, which will only consist of S3DVertex2TCoord vertices.
|
|
||||||
/** \param mesh Input mesh
|
|
||||||
\return Mesh consisting only of S3DVertex2TCoord vertices. If
|
|
||||||
you no longer need the cloned mesh, you should call
|
|
||||||
IMesh::drop(). See IReferenceCounted::drop() for more
|
|
||||||
information. */
|
|
||||||
virtual IMesh* createMeshWith2TCoords(IMesh* mesh) const = 0;
|
|
||||||
|
|
||||||
//! Creates a copy of the mesh, which will only consist of S3DVertex vertices.
|
|
||||||
/** \param mesh Input mesh
|
|
||||||
\return Mesh consisting only of S3DVertex vertices. If
|
|
||||||
you no longer need the cloned mesh, you should call
|
|
||||||
IMesh::drop(). See IReferenceCounted::drop() for more
|
|
||||||
information. */
|
|
||||||
virtual IMesh* createMeshWith1TCoords(IMesh* mesh) const = 0;
|
|
||||||
|
|
||||||
//! Creates a copy of a mesh with all vertices unwelded
|
|
||||||
/** \param mesh Input mesh
|
|
||||||
\return Mesh consisting only of unique faces. All vertices
|
|
||||||
which were previously shared are now duplicated. If you no
|
|
||||||
longer need the cloned mesh, you should call IMesh::drop(). See
|
|
||||||
IReferenceCounted::drop() for more information. */
|
|
||||||
virtual IMesh* createMeshUniquePrimitives(IMesh* mesh) const = 0;
|
|
||||||
|
|
||||||
//! Creates a copy of a mesh with vertices welded
|
|
||||||
/** \param mesh Input mesh
|
|
||||||
\param tolerance The threshold for vertex comparisons.
|
|
||||||
\return Mesh without redundant vertices. If you no longer need
|
|
||||||
the cloned mesh, you should call IMesh::drop(). See
|
|
||||||
IReferenceCounted::drop() for more information. */
|
|
||||||
virtual IMesh* createMeshWelded(IMesh* mesh, f32 tolerance=core::ROUNDING_ERROR_f32) const = 0;
|
|
||||||
|
|
||||||
//! Get amount of polygons in mesh.
|
//! Get amount of polygons in mesh.
|
||||||
/** \param mesh Input mesh
|
/** \param mesh Input mesh
|
||||||
\return Number of polygons in mesh. */
|
\return Number of polygons in mesh. */
|
||||||
@ -310,43 +89,6 @@ namespace scene
|
|||||||
virtual IAnimatedMesh * createAnimatedMesh(IMesh* mesh,
|
virtual IAnimatedMesh * createAnimatedMesh(IMesh* mesh,
|
||||||
scene::E_ANIMATED_MESH_TYPE type = scene::EAMT_UNKNOWN) const = 0;
|
scene::E_ANIMATED_MESH_TYPE type = scene::EAMT_UNKNOWN) const = 0;
|
||||||
|
|
||||||
//! Vertex cache optimization according to the Forsyth paper
|
|
||||||
/** More information can be found at
|
|
||||||
http://home.comcast.net/~tom_forsyth/papers/fast_vert_cache_opt.html
|
|
||||||
|
|
||||||
The function is thread-safe (read: you can optimize several
|
|
||||||
meshes in different threads).
|
|
||||||
|
|
||||||
\param mesh Source mesh for the operation.
|
|
||||||
\return A new mesh optimized for the vertex cache. */
|
|
||||||
virtual IMesh* createForsythOptimizedMesh(const IMesh *mesh) const = 0;
|
|
||||||
|
|
||||||
//! Optimize the mesh with an algorithm tuned for heightmaps.
|
|
||||||
/**
|
|
||||||
This differs from usual simplification methods in two ways:
|
|
||||||
- it's intended to be lossless
|
|
||||||
- it has special care for the borders, which are useful with heightmap tiles
|
|
||||||
|
|
||||||
This function is thread-safe. Remember to weld afterwards - this
|
|
||||||
function only moves vertices, it does not weld.
|
|
||||||
|
|
||||||
\param mesh Mesh to operate on.
|
|
||||||
*/
|
|
||||||
virtual void heightmapOptimizeMesh(IMesh * const mesh, const f32 tolerance = core::ROUNDING_ERROR_f32) const = 0;
|
|
||||||
|
|
||||||
//! Optimize the meshbuffer with an algorithm tuned for heightmaps.
|
|
||||||
/**
|
|
||||||
This differs from usual simplification methods in two ways:
|
|
||||||
- it's intended to be lossless
|
|
||||||
- it has special care for the borders, which are useful with heightmap tiles
|
|
||||||
|
|
||||||
This function is thread-safe. Remember to weld afterward - this
|
|
||||||
function only moves vertices, it does not weld.
|
|
||||||
|
|
||||||
\param mb Meshbuffer to operate on.
|
|
||||||
*/
|
|
||||||
virtual void heightmapOptimizeMesh(IMeshBuffer * const mb, const f32 tolerance = core::ROUNDING_ERROR_f32) const = 0;
|
|
||||||
|
|
||||||
//! Apply a manipulator on the Meshbuffer
|
//! Apply a manipulator on the Meshbuffer
|
||||||
/** \param func A functor defining the mesh manipulation.
|
/** \param func A functor defining the mesh manipulation.
|
||||||
\param buffer The Meshbuffer to apply the manipulator to.
|
\param buffer The Meshbuffer to apply the manipulator to.
|
||||||
|
@ -1,30 +0,0 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
|
||||||
// This file is part of the "Irrlicht Engine".
|
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
|
||||||
|
|
||||||
#ifndef __I_RANDOMIZER_H_INCLUDED__
|
|
||||||
#define __I_RANDOMIZER_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
|
|
||||||
//! Interface for generating random numbers
|
|
||||||
class IRandomizer : public virtual IReferenceCounted
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
//! resets the randomizer
|
|
||||||
/** \param value Initialization value (seed) */
|
|
||||||
virtual void reset(s32 value=0x0f0f0f0f) =0;
|
|
||||||
|
|
||||||
//! generates a pseudo random number in the range 0..randMax()
|
|
||||||
virtual s32 rand() const =0;
|
|
||||||
|
|
||||||
//! get maxmimum number generated by rand()
|
|
||||||
virtual s32 randMax() const =0;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
#endif
|
|
@ -602,32 +602,6 @@ namespace scene
|
|||||||
pass currently is active they can render the correct part of their geometry. */
|
pass currently is active they can render the correct part of their geometry. */
|
||||||
virtual E_SCENE_NODE_RENDER_PASS getSceneNodeRenderPass() const = 0;
|
virtual E_SCENE_NODE_RENDER_PASS getSceneNodeRenderPass() const = 0;
|
||||||
|
|
||||||
//! Get the default scene node factory which can create all built in scene nodes
|
|
||||||
/** \return Pointer to the default scene node factory
|
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
|
||||||
virtual ISceneNodeFactory* getDefaultSceneNodeFactory() = 0;
|
|
||||||
|
|
||||||
//! Adds a scene node factory to the scene manager.
|
|
||||||
/** Use this to extend the scene manager with new scene node types which it should be
|
|
||||||
able to create automatically, for example when loading data from xml files. */
|
|
||||||
virtual void registerSceneNodeFactory(ISceneNodeFactory* factoryToAdd) = 0;
|
|
||||||
|
|
||||||
//! Get amount of registered scene node factories.
|
|
||||||
virtual u32 getRegisteredSceneNodeFactoryCount() const = 0;
|
|
||||||
|
|
||||||
//! Get a scene node factory by index
|
|
||||||
/** \return Pointer to the requested scene node factory, or 0 if it does not exist.
|
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
|
||||||
virtual ISceneNodeFactory* getSceneNodeFactory(u32 index) = 0;
|
|
||||||
|
|
||||||
//! Get typename from a scene node type or null if not found
|
|
||||||
virtual const c8* getSceneNodeTypeName(ESCENE_NODE_TYPE type) = 0;
|
|
||||||
|
|
||||||
//! Adds a scene node to the scene by name
|
|
||||||
/** \return Pointer to the scene node added by a factory
|
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
|
||||||
virtual ISceneNode* addSceneNode(const char* sceneNodeTypeName, ISceneNode* parent=0) = 0;
|
|
||||||
|
|
||||||
//! Creates a new scene manager.
|
//! Creates a new scene manager.
|
||||||
/** This can be used to easily draw and/or store two
|
/** This can be used to easily draw and/or store two
|
||||||
independent scenes at the same time. The mesh cache will be
|
independent scenes at the same time. The mesh cache will be
|
||||||
|
@ -1,68 +0,0 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
|
||||||
// This file is part of the "Irrlicht Engine".
|
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
|
||||||
|
|
||||||
#ifndef __I_SCENE_NODE_FACTORY_H_INCLUDED__
|
|
||||||
#define __I_SCENE_NODE_FACTORY_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
|
||||||
#include "ESceneNodeTypes.h"
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
|
|
||||||
namespace scene
|
|
||||||
{
|
|
||||||
class ISceneNode;
|
|
||||||
|
|
||||||
//! Interface for dynamic creation of scene nodes
|
|
||||||
/** To be able to add custom scene nodes to Irrlicht and to make it possible for the
|
|
||||||
scene manager to save and load those external scene nodes, simply implement this
|
|
||||||
interface and register it in you scene manager via ISceneManager::registerSceneNodeFactory.
|
|
||||||
Note: When implementing your own scene node factory, don't call ISceneNodeManager::grab() to
|
|
||||||
increase the reference counter of the scene node manager. This is not necessary because the
|
|
||||||
scene node manager will grab() the factory anyway, and otherwise cyclic references will
|
|
||||||
be created and the scene manager and all its nodes won't get deallocated.
|
|
||||||
*/
|
|
||||||
class ISceneNodeFactory : public virtual IReferenceCounted
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
//! adds a scene node to the scene graph based on its type id
|
|
||||||
/** \param type: Type of the scene node to add.
|
|
||||||
\param parent: Parent scene node of the new node, can be null to add the scene node to the root.
|
|
||||||
\return Returns pointer to the new scene node or null if not successful.
|
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
|
||||||
virtual ISceneNode* addSceneNode(ESCENE_NODE_TYPE type, ISceneNode* parent=0) = 0;
|
|
||||||
|
|
||||||
//! adds a scene node to the scene graph based on its type name
|
|
||||||
/** \param typeName: Type name of the scene node to add.
|
|
||||||
\param parent: Parent scene node of the new node, can be null to add the scene node to the root.
|
|
||||||
\return Returns pointer to the new scene node or null if not successful.
|
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
|
||||||
virtual ISceneNode* addSceneNode(const c8* typeName, ISceneNode* parent=0) = 0;
|
|
||||||
|
|
||||||
//! returns amount of scene node types this factory is able to create
|
|
||||||
virtual u32 getCreatableSceneNodeTypeCount() const = 0;
|
|
||||||
|
|
||||||
//! returns type of a creatable scene node type
|
|
||||||
/** \param idx: Index of scene node type in this factory. Must be a value between 0 and
|
|
||||||
getCreatableSceneNodeTypeCount() */
|
|
||||||
virtual ESCENE_NODE_TYPE getCreateableSceneNodeType(u32 idx) const = 0;
|
|
||||||
|
|
||||||
//! returns type name of a creatable scene node type by index
|
|
||||||
/** \param idx: Index of scene node type in this factory. Must be a value between 0 and
|
|
||||||
getCreatableSceneNodeTypeCount() */
|
|
||||||
virtual const c8* getCreateableSceneNodeTypeName(u32 idx) const = 0;
|
|
||||||
|
|
||||||
//! returns type name of a creatable scene node type
|
|
||||||
/** \param type: Type of scene node.
|
|
||||||
\return: Returns name of scene node type if this factory can create the type, otherwise 0. */
|
|
||||||
virtual const c8* getCreateableSceneNodeTypeName(ESCENE_NODE_TYPE type) const = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
} // end namespace scene
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
@ -41,7 +41,6 @@ namespace video
|
|||||||
struct S3DVertex;
|
struct S3DVertex;
|
||||||
struct S3DVertex2TCoords;
|
struct S3DVertex2TCoords;
|
||||||
struct S3DVertexTangents;
|
struct S3DVertexTangents;
|
||||||
struct SLight;
|
|
||||||
class IImageLoader;
|
class IImageLoader;
|
||||||
class IImageWriter;
|
class IImageWriter;
|
||||||
class IMaterialRenderer;
|
class IMaterialRenderer;
|
||||||
@ -332,7 +331,7 @@ namespace video
|
|||||||
_IRR_DEPRECATED_ ITexture* addTexture(const io::path& name, IImage* image, void* mipmapData)
|
_IRR_DEPRECATED_ ITexture* addTexture(const io::path& name, IImage* image, void* mipmapData)
|
||||||
{
|
{
|
||||||
if (image)
|
if (image)
|
||||||
image->setMipMapsData(mipmapData, false, true);
|
image->setMipMapsData(mipmapData, false);
|
||||||
|
|
||||||
return addTexture(name, image);
|
return addTexture(name, image);
|
||||||
}
|
}
|
||||||
@ -1053,33 +1052,6 @@ namespace video
|
|||||||
\return Amount of primitives drawn in the last frame. */
|
\return Amount of primitives drawn in the last frame. */
|
||||||
virtual u32 getPrimitiveCountDrawn( u32 mode =0 ) const =0;
|
virtual u32 getPrimitiveCountDrawn( u32 mode =0 ) const =0;
|
||||||
|
|
||||||
//! Deletes all dynamic lights which were previously added with addDynamicLight().
|
|
||||||
virtual void deleteAllDynamicLights() =0;
|
|
||||||
|
|
||||||
//! adds a dynamic light, returning an index to the light
|
|
||||||
//! \param light: the light data to use to create the light
|
|
||||||
//! \return An index to the light, or -1 if an error occurs
|
|
||||||
virtual s32 addDynamicLight(const SLight& light) =0;
|
|
||||||
|
|
||||||
//! Returns the maximal amount of dynamic lights the device can handle
|
|
||||||
/** \return Maximal amount of dynamic lights. */
|
|
||||||
virtual u32 getMaximalDynamicLightAmount() const =0;
|
|
||||||
|
|
||||||
//! Returns amount of dynamic lights currently set
|
|
||||||
/** \return Amount of dynamic lights currently set */
|
|
||||||
virtual u32 getDynamicLightCount() const =0;
|
|
||||||
|
|
||||||
//! Returns light data which was previously set by IVideoDriver::addDynamicLight().
|
|
||||||
/** \param idx Zero based index of the light. Must be 0 or
|
|
||||||
greater and smaller than IVideoDriver::getDynamicLightCount.
|
|
||||||
\return Light data. */
|
|
||||||
virtual const SLight& getDynamicLight(u32 idx) const =0;
|
|
||||||
|
|
||||||
//! Turns a dynamic light on or off
|
|
||||||
//! \param lightIndex: the index returned by addDynamicLight
|
|
||||||
//! \param turnOn: true to turn the light on, false to turn it off
|
|
||||||
virtual void turnLightOn(s32 lightIndex, bool turnOn) =0;
|
|
||||||
|
|
||||||
//! Gets name of this video driver.
|
//! Gets name of this video driver.
|
||||||
/** \return Returns the name of the video driver, e.g. in case
|
/** \return Returns the name of the video driver, e.g. in case
|
||||||
of the Direct3D8 driver, it would return "Direct3D 8.1". */
|
of the Direct3D8 driver, it would return "Direct3D 8.1". */
|
||||||
|
@ -1,58 +0,0 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
|
||||||
// This file is part of the "Irrlicht Engine".
|
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
|
||||||
|
|
||||||
#ifndef __IRR_I_VIDEO_MODE_LIST_H_INCLUDED__
|
|
||||||
#define __IRR_I_VIDEO_MODE_LIST_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
|
||||||
#include "dimension2d.h"
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
namespace video
|
|
||||||
{
|
|
||||||
|
|
||||||
//! A list of all available video modes.
|
|
||||||
/** You can get a list via IrrlichtDevice::getVideoModeList().
|
|
||||||
You only need the null device (EDT_NULL) to get the video-modes. */
|
|
||||||
class IVideoModeList : public virtual IReferenceCounted
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
//! Gets amount of video modes in the list.
|
|
||||||
/** \return Returns amount of video modes. */
|
|
||||||
virtual s32 getVideoModeCount() const = 0;
|
|
||||||
|
|
||||||
//! Get the screen size of a video mode in pixels.
|
|
||||||
/** \param modeNumber: zero based index of the video mode.
|
|
||||||
\return Size of screen in pixels of the specified video mode. */
|
|
||||||
virtual core::dimension2d<u32> getVideoModeResolution(s32 modeNumber) const = 0;
|
|
||||||
|
|
||||||
//! Get a supported screen size with certain constraints.
|
|
||||||
/** \param minSize: Minimum dimensions required.
|
|
||||||
\param maxSize: Maximum dimensions allowed.
|
|
||||||
\return Size of screen in pixels which matches the requirements.
|
|
||||||
as good as possible. */
|
|
||||||
virtual core::dimension2d<u32> getVideoModeResolution(const core::dimension2d<u32>& minSize, const core::dimension2d<u32>& maxSize) const = 0;
|
|
||||||
|
|
||||||
//! Get the pixel depth of a video mode in bits.
|
|
||||||
/** \param modeNumber: zero based index of the video mode.
|
|
||||||
\return Size of each pixel of the specified video mode in bits. */
|
|
||||||
virtual s32 getVideoModeDepth(s32 modeNumber) const = 0;
|
|
||||||
|
|
||||||
//! Get current desktop screen resolution.
|
|
||||||
/** \return Size of screen in pixels of the current desktop video mode. */
|
|
||||||
virtual const core::dimension2d<u32>& getDesktopResolution() const = 0;
|
|
||||||
|
|
||||||
//! Get the pixel depth of a video mode in bits.
|
|
||||||
/** \return Size of each pixel of the current desktop video mode in bits. */
|
|
||||||
virtual s32 getDesktopDepth() const = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // end namespace video
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
@ -6,8 +6,8 @@
|
|||||||
#define __IRR_COMPILE_CONFIG_H_INCLUDED__
|
#define __IRR_COMPILE_CONFIG_H_INCLUDED__
|
||||||
|
|
||||||
//! Identifies the IrrlichtMt fork customized for the Minetest engine
|
//! Identifies the IrrlichtMt fork customized for the Minetest engine
|
||||||
#define IRRLICHT_VERSION_MT_REVISION 6
|
#define IRRLICHT_VERSION_MT_REVISION 9
|
||||||
#define IRRLICHT_VERSION_MT "mt6"
|
#define IRRLICHT_VERSION_MT "mt9"
|
||||||
|
|
||||||
//! Irrlicht SDK Version
|
//! Irrlicht SDK Version
|
||||||
#define IRRLICHT_VERSION_MAJOR 1
|
#define IRRLICHT_VERSION_MAJOR 1
|
||||||
@ -37,8 +37,6 @@
|
|||||||
//! _IRR_COMPILE_WITH_OSX_DEVICE_ for Cocoa native windowing on OSX
|
//! _IRR_COMPILE_WITH_OSX_DEVICE_ for Cocoa native windowing on OSX
|
||||||
//! _IRR_COMPILE_WITH_X11_DEVICE_ for Linux X11 based device
|
//! _IRR_COMPILE_WITH_X11_DEVICE_ for Linux X11 based device
|
||||||
//! _IRR_COMPILE_WITH_SDL_DEVICE_ for platform independent SDL framework
|
//! _IRR_COMPILE_WITH_SDL_DEVICE_ for platform independent SDL framework
|
||||||
//! _IRR_COMPILE_WITH_CONSOLE_DEVICE_ for no windowing system, used as a fallback
|
|
||||||
//! _IRR_COMPILE_WITH_FB_DEVICE_ for framebuffer systems
|
|
||||||
|
|
||||||
//! Passing defines to the compiler which have NO in front of the _IRR definename is an alternative
|
//! Passing defines to the compiler which have NO in front of the _IRR definename is an alternative
|
||||||
//! way which can be used to disable defines (instead of outcommenting them in this header).
|
//! way which can be used to disable defines (instead of outcommenting them in this header).
|
||||||
@ -52,12 +50,6 @@
|
|||||||
#undef _IRR_COMPILE_WITH_SDL_DEVICE_
|
#undef _IRR_COMPILE_WITH_SDL_DEVICE_
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//! Comment this line to compile without the fallback console device.
|
|
||||||
#define _IRR_COMPILE_WITH_CONSOLE_DEVICE_
|
|
||||||
#ifdef NO_IRR_COMPILE_WITH_CONSOLE_DEVICE_
|
|
||||||
#undef _IRR_COMPILE_WITH_CONSOLE_DEVICE_
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//! WIN32 for Windows32
|
//! WIN32 for Windows32
|
||||||
//! WIN64 for Windows64
|
//! WIN64 for Windows64
|
||||||
// The windows platform and API support SDL and WINDOW device
|
// The windows platform and API support SDL and WINDOW device
|
||||||
@ -280,19 +272,9 @@ define out. */
|
|||||||
#undef _IRR_COMPILE_WITH_X11_
|
#undef _IRR_COMPILE_WITH_X11_
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//! On some Linux systems the XF86 vidmode extension, X11 RandR, or XInput2 are missing.
|
|
||||||
//! Use these defines to add/remove support for those dependencies as needed.
|
|
||||||
//! XInput2 (library called Xi) is currently only used to support touch-input.
|
|
||||||
#if defined(_IRR_LINUX_PLATFORM_) && defined(_IRR_COMPILE_WITH_X11_)
|
#if defined(_IRR_LINUX_PLATFORM_) && defined(_IRR_COMPILE_WITH_X11_)
|
||||||
#define _IRR_LINUX_X11_VIDMODE_
|
//! XInput2 (library called Xi) is currently only used to support touch-input.
|
||||||
//#define _IRR_LINUX_X11_RANDR_
|
#define _IRR_LINUX_X11_XINPUT2_
|
||||||
//#define _IRR_LINUX_X11_XINPUT2_
|
|
||||||
#ifdef NO_IRR_LINUX_X11_VIDMODE_
|
|
||||||
#undef _IRR_LINUX_X11_VIDMODE_
|
|
||||||
#endif
|
|
||||||
#ifdef NO_IRR_LINUX_X11_RANDR_
|
|
||||||
#undef _IRR_LINUX_X11_RANDR_
|
|
||||||
#endif
|
|
||||||
#ifdef NO_IRR_LINUX_X11_XINPUT2_
|
#ifdef NO_IRR_LINUX_X11_XINPUT2_
|
||||||
#undef _IRR_LINUX_X11_XINPUT2_
|
#undef _IRR_LINUX_X11_XINPUT2_
|
||||||
#endif
|
#endif
|
||||||
|
@ -12,7 +12,6 @@
|
|||||||
#include "EDeviceTypes.h"
|
#include "EDeviceTypes.h"
|
||||||
#include "IEventReceiver.h"
|
#include "IEventReceiver.h"
|
||||||
#include "ICursorControl.h"
|
#include "ICursorControl.h"
|
||||||
#include "IVideoModeList.h"
|
|
||||||
#include "ITimer.h"
|
#include "ITimer.h"
|
||||||
#include "IOSOperator.h"
|
#include "IOSOperator.h"
|
||||||
|
|
||||||
@ -20,7 +19,6 @@ namespace irr
|
|||||||
{
|
{
|
||||||
class ILogger;
|
class ILogger;
|
||||||
class IEventReceiver;
|
class IEventReceiver;
|
||||||
class IRandomizer;
|
|
||||||
|
|
||||||
namespace io {
|
namespace io {
|
||||||
class IFileSystem;
|
class IFileSystem;
|
||||||
@ -111,14 +109,6 @@ namespace irr
|
|||||||
/** \return Pointer to the logger. */
|
/** \return Pointer to the logger. */
|
||||||
virtual ILogger* getLogger() = 0;
|
virtual ILogger* getLogger() = 0;
|
||||||
|
|
||||||
//! Gets a list with all video modes available.
|
|
||||||
/** You only need a null driver (ED_NULL) to access
|
|
||||||
those video modes. So you can get the available modes
|
|
||||||
before starting any other video driver.
|
|
||||||
\return Pointer to a list with all video modes supported
|
|
||||||
by the gfx adapter. */
|
|
||||||
virtual video::IVideoModeList* getVideoModeList() = 0;
|
|
||||||
|
|
||||||
//! Get context manager
|
//! Get context manager
|
||||||
virtual video::IContextManager* getContextManager() = 0;
|
virtual video::IContextManager* getContextManager() = 0;
|
||||||
|
|
||||||
@ -136,22 +126,6 @@ namespace irr
|
|||||||
\return Pointer to the ITimer object. */
|
\return Pointer to the ITimer object. */
|
||||||
virtual ITimer* getTimer() = 0;
|
virtual ITimer* getTimer() = 0;
|
||||||
|
|
||||||
//! Provides access to the engine's currently set randomizer.
|
|
||||||
/** \return Pointer to the IRandomizer object. */
|
|
||||||
virtual IRandomizer* getRandomizer() const =0;
|
|
||||||
|
|
||||||
//! Sets a new randomizer.
|
|
||||||
/** \param r Pointer to the new IRandomizer object. This object is
|
|
||||||
grab()'ed by the engine and will be released upon the next setRandomizer
|
|
||||||
call or upon device destruction. */
|
|
||||||
virtual void setRandomizer(IRandomizer* r) =0;
|
|
||||||
|
|
||||||
//! Creates a new default randomizer.
|
|
||||||
/** The default randomizer provides the random sequence known from previous
|
|
||||||
Irrlicht versions and is the initial randomizer set on device creation.
|
|
||||||
\return Pointer to the default IRandomizer object. */
|
|
||||||
virtual IRandomizer* createDefaultRandomizer() const =0;
|
|
||||||
|
|
||||||
//! Sets the caption of the window.
|
//! Sets the caption of the window.
|
||||||
/** \param text: New text of the window caption. */
|
/** \param text: New text of the window caption. */
|
||||||
virtual void setWindowCaption(const wchar_t* text) = 0;
|
virtual void setWindowCaption(const wchar_t* text) = 0;
|
||||||
@ -296,14 +270,6 @@ namespace irr
|
|||||||
//! Is device motion available.
|
//! Is device motion available.
|
||||||
virtual bool isDeviceMotionAvailable() = 0;
|
virtual bool isDeviceMotionAvailable() = 0;
|
||||||
|
|
||||||
//! Set the current Gamma Value for the Display
|
|
||||||
virtual bool setGammaRamp(f32 red, f32 green, f32 blue,
|
|
||||||
f32 relativebrightness, f32 relativecontrast) =0;
|
|
||||||
|
|
||||||
//! Get the current Gamma Value for the Display
|
|
||||||
virtual bool getGammaRamp(f32 &red, f32 &green, f32 &blue,
|
|
||||||
f32 &brightness, f32 &contrast) =0;
|
|
||||||
|
|
||||||
//! Set the maximal elapsed time between 2 clicks to generate doubleclicks for the mouse. It also affects tripleclick behavior.
|
//! Set the maximal elapsed time between 2 clicks to generate doubleclicks for the mouse. It also affects tripleclick behavior.
|
||||||
/** When set to 0 no double- and tripleclicks will be generated.
|
/** When set to 0 no double- and tripleclicks will be generated.
|
||||||
\param timeMs maximal time in milliseconds for two consecutive clicks to be recognized as double click
|
\param timeMs maximal time in milliseconds for two consecutive clicks to be recognized as double click
|
||||||
@ -342,24 +308,6 @@ namespace irr
|
|||||||
{
|
{
|
||||||
case video::EDT_NULL:
|
case video::EDT_NULL:
|
||||||
return true;
|
return true;
|
||||||
case video::EDT_SOFTWARE:
|
|
||||||
#ifdef _IRR_COMPILE_WITH_SOFTWARE_
|
|
||||||
return true;
|
|
||||||
#else
|
|
||||||
return false;
|
|
||||||
#endif
|
|
||||||
case video::EDT_BURNINGSVIDEO:
|
|
||||||
#ifdef _IRR_COMPILE_WITH_BURNINGSVIDEO_
|
|
||||||
return true;
|
|
||||||
#else
|
|
||||||
return false;
|
|
||||||
#endif
|
|
||||||
case video::EDT_DIRECT3D9:
|
|
||||||
#ifdef _IRR_COMPILE_WITH_DIRECT3D_9_
|
|
||||||
return true;
|
|
||||||
#else
|
|
||||||
return false;
|
|
||||||
#endif
|
|
||||||
case video::EDT_OPENGL:
|
case video::EDT_OPENGL:
|
||||||
#ifdef _IRR_COMPILE_WITH_OPENGL_
|
#ifdef _IRR_COMPILE_WITH_OPENGL_
|
||||||
return true;
|
return true;
|
||||||
|
@ -38,14 +38,14 @@ namespace scene
|
|||||||
|
|
||||||
//! Gets the frame count of the animated mesh.
|
//! Gets the frame count of the animated mesh.
|
||||||
/** \return Amount of frames. If the amount is 1, it is a static, non animated mesh. */
|
/** \return Amount of frames. If the amount is 1, it is a static, non animated mesh. */
|
||||||
virtual u32 getFrameCount() const _IRR_OVERRIDE_
|
u32 getFrameCount() const override
|
||||||
{
|
{
|
||||||
return Meshes.size();
|
return Meshes.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Gets the default animation speed of the animated mesh.
|
//! Gets the default animation speed of the animated mesh.
|
||||||
/** \return Amount of frames per second. If the amount is 0, it is a static, non animated mesh. */
|
/** \return Amount of frames per second. If the amount is 0, it is a static, non animated mesh. */
|
||||||
virtual f32 getAnimationSpeed() const _IRR_OVERRIDE_
|
f32 getAnimationSpeed() const override
|
||||||
{
|
{
|
||||||
return FramesPerSecond;
|
return FramesPerSecond;
|
||||||
}
|
}
|
||||||
@ -53,7 +53,7 @@ namespace scene
|
|||||||
//! Gets the frame count of the animated mesh.
|
//! Gets the frame count of the animated mesh.
|
||||||
/** \param fps Frames per second to play the animation with. If the amount is 0, it is not animated.
|
/** \param fps Frames per second to play the animation with. If the amount is 0, it is not animated.
|
||||||
The actual speed is set in the scene node the mesh is instantiated in.*/
|
The actual speed is set in the scene node the mesh is instantiated in.*/
|
||||||
virtual void setAnimationSpeed(f32 fps) _IRR_OVERRIDE_
|
void setAnimationSpeed(f32 fps) override
|
||||||
{
|
{
|
||||||
FramesPerSecond=fps;
|
FramesPerSecond=fps;
|
||||||
}
|
}
|
||||||
@ -66,7 +66,7 @@ namespace scene
|
|||||||
\param startFrameLoop: start frame
|
\param startFrameLoop: start frame
|
||||||
\param endFrameLoop: end frame
|
\param endFrameLoop: end frame
|
||||||
\return The animated mesh based on a detail level. */
|
\return The animated mesh based on a detail level. */
|
||||||
virtual IMesh* getMesh(s32 frame, s32 detailLevel=255, s32 startFrameLoop=-1, s32 endFrameLoop=-1) _IRR_OVERRIDE_
|
IMesh* getMesh(s32 frame, s32 detailLevel=255, s32 startFrameLoop=-1, s32 endFrameLoop=-1) override
|
||||||
{
|
{
|
||||||
if (Meshes.empty())
|
if (Meshes.empty())
|
||||||
return 0;
|
return 0;
|
||||||
@ -86,13 +86,13 @@ namespace scene
|
|||||||
|
|
||||||
//! Returns an axis aligned bounding box of the mesh.
|
//! Returns an axis aligned bounding box of the mesh.
|
||||||
/** \return A bounding box of this mesh is returned. */
|
/** \return A bounding box of this mesh is returned. */
|
||||||
virtual const core::aabbox3d<f32>& getBoundingBox() const _IRR_OVERRIDE_
|
const core::aabbox3d<f32>& getBoundingBox() const override
|
||||||
{
|
{
|
||||||
return Box;
|
return Box;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! set user axis aligned bounding box
|
//! set user axis aligned bounding box
|
||||||
virtual void setBoundingBox(const core::aabbox3df& box) _IRR_OVERRIDE_
|
void setBoundingBox(const core::aabbox3df& box) override
|
||||||
{
|
{
|
||||||
Box = box;
|
Box = box;
|
||||||
}
|
}
|
||||||
@ -112,13 +112,13 @@ namespace scene
|
|||||||
}
|
}
|
||||||
|
|
||||||
//! Returns the type of the animated mesh.
|
//! Returns the type of the animated mesh.
|
||||||
virtual E_ANIMATED_MESH_TYPE getMeshType() const _IRR_OVERRIDE_
|
E_ANIMATED_MESH_TYPE getMeshType() const override
|
||||||
{
|
{
|
||||||
return Type;
|
return Type;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! returns amount of mesh buffers.
|
//! returns amount of mesh buffers.
|
||||||
virtual u32 getMeshBufferCount() const _IRR_OVERRIDE_
|
u32 getMeshBufferCount() const override
|
||||||
{
|
{
|
||||||
if (Meshes.empty())
|
if (Meshes.empty())
|
||||||
return 0;
|
return 0;
|
||||||
@ -127,7 +127,7 @@ namespace scene
|
|||||||
}
|
}
|
||||||
|
|
||||||
//! returns pointer to a mesh buffer
|
//! returns pointer to a mesh buffer
|
||||||
virtual IMeshBuffer* getMeshBuffer(u32 nr) const _IRR_OVERRIDE_
|
IMeshBuffer* getMeshBuffer(u32 nr) const override
|
||||||
{
|
{
|
||||||
if (Meshes.empty())
|
if (Meshes.empty())
|
||||||
return 0;
|
return 0;
|
||||||
@ -139,7 +139,7 @@ namespace scene
|
|||||||
/** \param material: material to search for
|
/** \param material: material to search for
|
||||||
\return Returns the pointer to the mesh buffer or
|
\return Returns the pointer to the mesh buffer or
|
||||||
NULL if there is no such mesh buffer. */
|
NULL if there is no such mesh buffer. */
|
||||||
virtual IMeshBuffer* getMeshBuffer( const video::SMaterial &material) const _IRR_OVERRIDE_
|
IMeshBuffer* getMeshBuffer( const video::SMaterial &material) const override
|
||||||
{
|
{
|
||||||
if (Meshes.empty())
|
if (Meshes.empty())
|
||||||
return 0;
|
return 0;
|
||||||
@ -148,21 +148,21 @@ namespace scene
|
|||||||
}
|
}
|
||||||
|
|
||||||
//! Set a material flag for all meshbuffers of this mesh.
|
//! Set a material flag for all meshbuffers of this mesh.
|
||||||
virtual void setMaterialFlag(video::E_MATERIAL_FLAG flag, bool newvalue) _IRR_OVERRIDE_
|
void setMaterialFlag(video::E_MATERIAL_FLAG flag, bool newvalue) override
|
||||||
{
|
{
|
||||||
for (u32 i=0; i<Meshes.size(); ++i)
|
for (u32 i=0; i<Meshes.size(); ++i)
|
||||||
Meshes[i]->setMaterialFlag(flag, newvalue);
|
Meshes[i]->setMaterialFlag(flag, newvalue);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! set the hardware mapping hint, for driver
|
//! set the hardware mapping hint, for driver
|
||||||
virtual void setHardwareMappingHint( E_HARDWARE_MAPPING newMappingHint, E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX ) _IRR_OVERRIDE_
|
void setHardwareMappingHint( E_HARDWARE_MAPPING newMappingHint, E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX ) override
|
||||||
{
|
{
|
||||||
for (u32 i=0; i<Meshes.size(); ++i)
|
for (u32 i=0; i<Meshes.size(); ++i)
|
||||||
Meshes[i]->setHardwareMappingHint(newMappingHint, buffer);
|
Meshes[i]->setHardwareMappingHint(newMappingHint, buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! flags the meshbuffer as changed, reloads hardware buffers
|
//! flags the meshbuffer as changed, reloads hardware buffers
|
||||||
virtual void setDirty(E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX) _IRR_OVERRIDE_
|
void setDirty(E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX) override
|
||||||
{
|
{
|
||||||
for (u32 i=0; i<Meshes.size(); ++i)
|
for (u32 i=0; i<Meshes.size(); ++i)
|
||||||
Meshes[i]->setDirty(buffer);
|
Meshes[i]->setDirty(buffer);
|
||||||
|
@ -98,11 +98,9 @@ namespace irr
|
|||||||
/** This setting decides the windowing system used by the device, most device types are native
|
/** This setting decides the windowing system used by the device, most device types are native
|
||||||
to a specific operating system and so may not be available.
|
to a specific operating system and so may not be available.
|
||||||
EIDT_WIN32 is only available on Windows desktops,
|
EIDT_WIN32 is only available on Windows desktops,
|
||||||
EIDT_WINCE is only available on Windows mobile devices,
|
|
||||||
EIDT_COCOA is only available on Mac OSX,
|
EIDT_COCOA is only available on Mac OSX,
|
||||||
EIDT_X11 is available on Linux, Solaris, BSD and other operating systems which use X11,
|
EIDT_X11 is available on Linux, Solaris, BSD and other operating systems which use X11,
|
||||||
EIDT_SDL is available on most systems if compiled in,
|
EIDT_SDL is available on most systems if compiled in,
|
||||||
EIDT_CONSOLE is usually available but can only render to text,
|
|
||||||
EIDT_BEST will select the best available device for your operating system.
|
EIDT_BEST will select the best available device for your operating system.
|
||||||
Default: EIDT_BEST. */
|
Default: EIDT_BEST. */
|
||||||
E_DEVICE_TYPE DeviceType;
|
E_DEVICE_TYPE DeviceType;
|
||||||
|
101
include/SLight.h
101
include/SLight.h
@ -1,101 +0,0 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
|
||||||
// This file is part of the "Irrlicht Engine".
|
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
|
||||||
|
|
||||||
#ifndef __S_LIGHT_H_INCLUDED__
|
|
||||||
#define __S_LIGHT_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "SColor.h"
|
|
||||||
#include "vector3d.h"
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
namespace video
|
|
||||||
{
|
|
||||||
|
|
||||||
//! Enumeration for different types of lights
|
|
||||||
enum E_LIGHT_TYPE
|
|
||||||
{
|
|
||||||
//! point light, it has a position in space and radiates light in all directions
|
|
||||||
ELT_POINT,
|
|
||||||
//! spot light, it has a position in space, a direction, and a limited cone of influence
|
|
||||||
ELT_SPOT,
|
|
||||||
//! directional light, coming from a direction from an infinite distance
|
|
||||||
ELT_DIRECTIONAL,
|
|
||||||
|
|
||||||
//! Only used for counting the elements of this enum
|
|
||||||
ELT_COUNT
|
|
||||||
};
|
|
||||||
|
|
||||||
//! Names for light types
|
|
||||||
const c8* const LightTypeNames[] =
|
|
||||||
{
|
|
||||||
"Point",
|
|
||||||
"Spot",
|
|
||||||
"Directional",
|
|
||||||
0
|
|
||||||
};
|
|
||||||
|
|
||||||
//! structure for holding data describing a dynamic point light.
|
|
||||||
/** Irrlicht supports point lights, spot lights, and directional lights.
|
|
||||||
*/
|
|
||||||
struct SLight
|
|
||||||
{
|
|
||||||
SLight() : AmbientColor(0.f,0.f,0.f), DiffuseColor(1.f,1.f,1.f),
|
|
||||||
SpecularColor(1.f,1.f,1.f), Attenuation(1.f,0.f,0.f),
|
|
||||||
OuterCone(45.f), InnerCone(0.f), Falloff(2.f),
|
|
||||||
Position(0.f,0.f,0.f), Direction(0.f,0.f,1.f),
|
|
||||||
Radius(100.f), Type(ELT_POINT), CastShadows(true)
|
|
||||||
{}
|
|
||||||
|
|
||||||
//! Ambient color emitted by the light
|
|
||||||
SColorf AmbientColor;
|
|
||||||
|
|
||||||
//! Diffuse color emitted by the light.
|
|
||||||
/** This is the primary color you want to set. */
|
|
||||||
SColorf DiffuseColor;
|
|
||||||
|
|
||||||
//! Specular color emitted by the light.
|
|
||||||
/** For details how to use specular highlights, see SMaterial::Shininess */
|
|
||||||
SColorf SpecularColor;
|
|
||||||
|
|
||||||
//! Attenuation factors (constant, linear, quadratic)
|
|
||||||
/** Changes the light strength fading over distance.
|
|
||||||
Can also be altered by setting the radius, Attenuation will change to
|
|
||||||
(0,1.f/radius,0). Can be overridden after radius was set. */
|
|
||||||
core::vector3df Attenuation;
|
|
||||||
|
|
||||||
//! The angle of the spot's outer cone. Ignored for other lights.
|
|
||||||
f32 OuterCone;
|
|
||||||
|
|
||||||
//! The angle of the spot's inner cone. Ignored for other lights.
|
|
||||||
f32 InnerCone;
|
|
||||||
|
|
||||||
//! The light strength's decrease between Outer and Inner cone. Only for spot lights
|
|
||||||
f32 Falloff;
|
|
||||||
|
|
||||||
//! Read-ONLY! Position of the light.
|
|
||||||
/** If Type is ELT_DIRECTIONAL, it is ignored. Changed via light scene node's position. */
|
|
||||||
core::vector3df Position;
|
|
||||||
|
|
||||||
//! Read-ONLY! Direction of the light.
|
|
||||||
/** If Type is ELT_POINT, it is ignored. Changed via light scene node's rotation. */
|
|
||||||
core::vector3df Direction;
|
|
||||||
|
|
||||||
//! Read-ONLY! Radius of light. Everything within this radius will be lighted.
|
|
||||||
/** On OpenGL light doesn't stop at radius. To get same light as in OpenGL in other drivers
|
|
||||||
do set the radius to a large value like sqrt(FLT_MAX) and then set the Attenuation afterwards.
|
|
||||||
*/
|
|
||||||
f32 Radius;
|
|
||||||
|
|
||||||
//! Read-ONLY! Type of the light. Default: ELT_POINT
|
|
||||||
E_LIGHT_TYPE Type;
|
|
||||||
|
|
||||||
//! Read-ONLY! Does the light cast shadows?
|
|
||||||
bool CastShadows:1;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // end namespace video
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
#endif
|
|
@ -6,7 +6,6 @@
|
|||||||
#define __S_MATERIAL_LAYER_H_INCLUDED__
|
#define __S_MATERIAL_LAYER_H_INCLUDED__
|
||||||
|
|
||||||
#include "matrix4.h"
|
#include "matrix4.h"
|
||||||
#include "irrAllocator.h"
|
|
||||||
|
|
||||||
namespace irr
|
namespace irr
|
||||||
{
|
{
|
||||||
@ -69,8 +68,7 @@ namespace video
|
|||||||
{
|
{
|
||||||
if ( TextureMatrix )
|
if ( TextureMatrix )
|
||||||
{
|
{
|
||||||
MatrixAllocator.destruct(TextureMatrix);
|
delete TextureMatrix;
|
||||||
MatrixAllocator.deallocate(TextureMatrix);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -90,8 +88,7 @@ namespace video
|
|||||||
*TextureMatrix = *other.TextureMatrix;
|
*TextureMatrix = *other.TextureMatrix;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
MatrixAllocator.destruct(TextureMatrix);
|
delete TextureMatrix;
|
||||||
MatrixAllocator.deallocate(TextureMatrix);
|
|
||||||
TextureMatrix = 0;
|
TextureMatrix = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -99,8 +96,7 @@ namespace video
|
|||||||
{
|
{
|
||||||
if (other.TextureMatrix)
|
if (other.TextureMatrix)
|
||||||
{
|
{
|
||||||
TextureMatrix = MatrixAllocator.allocate(1);
|
TextureMatrix = new core::matrix4(*other.TextureMatrix);
|
||||||
MatrixAllocator.construct(TextureMatrix,*other.TextureMatrix);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
TextureMatrix = 0;
|
TextureMatrix = 0;
|
||||||
@ -122,8 +118,7 @@ namespace video
|
|||||||
{
|
{
|
||||||
if (!TextureMatrix)
|
if (!TextureMatrix)
|
||||||
{
|
{
|
||||||
TextureMatrix = MatrixAllocator.allocate(1);
|
TextureMatrix = new core::matrix4();
|
||||||
MatrixAllocator.construct(TextureMatrix,core::IdentityMatrix);
|
|
||||||
}
|
}
|
||||||
return *TextureMatrix;
|
return *TextureMatrix;
|
||||||
}
|
}
|
||||||
@ -146,8 +141,7 @@ namespace video
|
|||||||
{
|
{
|
||||||
if (!TextureMatrix)
|
if (!TextureMatrix)
|
||||||
{
|
{
|
||||||
TextureMatrix = MatrixAllocator.allocate(1);
|
TextureMatrix = new core::matrix4(mat);
|
||||||
MatrixAllocator.construct(TextureMatrix,mat);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
*TextureMatrix = mat;
|
*TextureMatrix = mat;
|
||||||
@ -216,7 +210,6 @@ namespace video
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
friend class SMaterial;
|
friend class SMaterial;
|
||||||
irr::core::irrAllocator<irr::core::matrix4> MatrixAllocator;
|
|
||||||
|
|
||||||
//! Texture Matrix
|
//! Texture Matrix
|
||||||
/** Do not access this element directly as the internal
|
/** Do not access this element directly as the internal
|
||||||
|
@ -44,20 +44,20 @@ namespace scene
|
|||||||
|
|
||||||
|
|
||||||
//! returns amount of mesh buffers.
|
//! returns amount of mesh buffers.
|
||||||
virtual u32 getMeshBufferCount() const _IRR_OVERRIDE_
|
u32 getMeshBufferCount() const override
|
||||||
{
|
{
|
||||||
return MeshBuffers.size();
|
return MeshBuffers.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
//! returns pointer to a mesh buffer
|
//! returns pointer to a mesh buffer
|
||||||
virtual IMeshBuffer* getMeshBuffer(u32 nr) const _IRR_OVERRIDE_
|
IMeshBuffer* getMeshBuffer(u32 nr) const override
|
||||||
{
|
{
|
||||||
return MeshBuffers[nr];
|
return MeshBuffers[nr];
|
||||||
}
|
}
|
||||||
|
|
||||||
//! returns a meshbuffer which fits a material
|
//! returns a meshbuffer which fits a material
|
||||||
/** reverse search */
|
/** reverse search */
|
||||||
virtual IMeshBuffer* getMeshBuffer( const video::SMaterial & material) const _IRR_OVERRIDE_
|
IMeshBuffer* getMeshBuffer( const video::SMaterial & material) const override
|
||||||
{
|
{
|
||||||
for (s32 i = (s32)MeshBuffers.size()-1; i >= 0; --i)
|
for (s32 i = (s32)MeshBuffers.size()-1; i >= 0; --i)
|
||||||
{
|
{
|
||||||
@ -69,13 +69,13 @@ namespace scene
|
|||||||
}
|
}
|
||||||
|
|
||||||
//! returns an axis aligned bounding box
|
//! returns an axis aligned bounding box
|
||||||
virtual const core::aabbox3d<f32>& getBoundingBox() const _IRR_OVERRIDE_
|
const core::aabbox3d<f32>& getBoundingBox() const override
|
||||||
{
|
{
|
||||||
return BoundingBox;
|
return BoundingBox;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! set user axis aligned bounding box
|
//! set user axis aligned bounding box
|
||||||
virtual void setBoundingBox( const core::aabbox3df& box) _IRR_OVERRIDE_
|
void setBoundingBox( const core::aabbox3df& box) override
|
||||||
{
|
{
|
||||||
BoundingBox = box;
|
BoundingBox = box;
|
||||||
}
|
}
|
||||||
@ -118,21 +118,21 @@ namespace scene
|
|||||||
}
|
}
|
||||||
|
|
||||||
//! sets a flag of all contained materials to a new value
|
//! sets a flag of all contained materials to a new value
|
||||||
virtual void setMaterialFlag(video::E_MATERIAL_FLAG flag, bool newvalue) _IRR_OVERRIDE_
|
void setMaterialFlag(video::E_MATERIAL_FLAG flag, bool newvalue) override
|
||||||
{
|
{
|
||||||
for (u32 i=0; i<MeshBuffers.size(); ++i)
|
for (u32 i=0; i<MeshBuffers.size(); ++i)
|
||||||
MeshBuffers[i]->getMaterial().setFlag(flag, newvalue);
|
MeshBuffers[i]->getMaterial().setFlag(flag, newvalue);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! set the hardware mapping hint, for driver
|
//! set the hardware mapping hint, for driver
|
||||||
virtual void setHardwareMappingHint( E_HARDWARE_MAPPING newMappingHint, E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX ) _IRR_OVERRIDE_
|
void setHardwareMappingHint( E_HARDWARE_MAPPING newMappingHint, E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX ) override
|
||||||
{
|
{
|
||||||
for (u32 i=0; i<MeshBuffers.size(); ++i)
|
for (u32 i=0; i<MeshBuffers.size(); ++i)
|
||||||
MeshBuffers[i]->setHardwareMappingHint(newMappingHint, buffer);
|
MeshBuffers[i]->setHardwareMappingHint(newMappingHint, buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! flags the meshbuffer as changed, reloads hardware buffers
|
//! flags the meshbuffer as changed, reloads hardware buffers
|
||||||
virtual void setDirty(E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX) _IRR_OVERRIDE_
|
void setDirty(E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX) override
|
||||||
{
|
{
|
||||||
for (u32 i=0; i<MeshBuffers.size(); ++i)
|
for (u32 i=0; i<MeshBuffers.size(); ++i)
|
||||||
MeshBuffers[i]->setDirty(buffer);
|
MeshBuffers[i]->setDirty(buffer);
|
||||||
|
@ -32,13 +32,13 @@ struct SSkinMeshBuffer : public IMeshBuffer
|
|||||||
}
|
}
|
||||||
|
|
||||||
//! Get Material of this buffer.
|
//! Get Material of this buffer.
|
||||||
virtual const video::SMaterial& getMaterial() const _IRR_OVERRIDE_
|
const video::SMaterial& getMaterial() const override
|
||||||
{
|
{
|
||||||
return Material;
|
return Material;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Get Material of this buffer.
|
//! Get Material of this buffer.
|
||||||
virtual video::SMaterial& getMaterial() _IRR_OVERRIDE_
|
video::SMaterial& getMaterial() override
|
||||||
{
|
{
|
||||||
return Material;
|
return Material;
|
||||||
}
|
}
|
||||||
@ -58,7 +58,7 @@ struct SSkinMeshBuffer : public IMeshBuffer
|
|||||||
}
|
}
|
||||||
|
|
||||||
//! Get pointer to vertex array
|
//! Get pointer to vertex array
|
||||||
virtual const void* getVertices() const _IRR_OVERRIDE_
|
const void* getVertices() const override
|
||||||
{
|
{
|
||||||
switch (VertexType)
|
switch (VertexType)
|
||||||
{
|
{
|
||||||
@ -72,7 +72,7 @@ struct SSkinMeshBuffer : public IMeshBuffer
|
|||||||
}
|
}
|
||||||
|
|
||||||
//! Get pointer to vertex array
|
//! Get pointer to vertex array
|
||||||
virtual void* getVertices() _IRR_OVERRIDE_
|
void* getVertices() override
|
||||||
{
|
{
|
||||||
switch (VertexType)
|
switch (VertexType)
|
||||||
{
|
{
|
||||||
@ -86,7 +86,7 @@ struct SSkinMeshBuffer : public IMeshBuffer
|
|||||||
}
|
}
|
||||||
|
|
||||||
//! Get vertex count
|
//! Get vertex count
|
||||||
virtual u32 getVertexCount() const _IRR_OVERRIDE_
|
u32 getVertexCount() const override
|
||||||
{
|
{
|
||||||
switch (VertexType)
|
switch (VertexType)
|
||||||
{
|
{
|
||||||
@ -101,43 +101,43 @@ struct SSkinMeshBuffer : public IMeshBuffer
|
|||||||
|
|
||||||
//! Get type of index data which is stored in this meshbuffer.
|
//! Get type of index data which is stored in this meshbuffer.
|
||||||
/** \return Index type of this buffer. */
|
/** \return Index type of this buffer. */
|
||||||
virtual video::E_INDEX_TYPE getIndexType() const _IRR_OVERRIDE_
|
video::E_INDEX_TYPE getIndexType() const override
|
||||||
{
|
{
|
||||||
return video::EIT_16BIT;
|
return video::EIT_16BIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Get pointer to index array
|
//! Get pointer to index array
|
||||||
virtual const u16* getIndices() const _IRR_OVERRIDE_
|
const u16* getIndices() const override
|
||||||
{
|
{
|
||||||
return Indices.const_pointer();
|
return Indices.const_pointer();
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Get pointer to index array
|
//! Get pointer to index array
|
||||||
virtual u16* getIndices() _IRR_OVERRIDE_
|
u16* getIndices() override
|
||||||
{
|
{
|
||||||
return Indices.pointer();
|
return Indices.pointer();
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Get index count
|
//! Get index count
|
||||||
virtual u32 getIndexCount() const _IRR_OVERRIDE_
|
u32 getIndexCount() const override
|
||||||
{
|
{
|
||||||
return Indices.size();
|
return Indices.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Get bounding box
|
//! Get bounding box
|
||||||
virtual const core::aabbox3d<f32>& getBoundingBox() const _IRR_OVERRIDE_
|
const core::aabbox3d<f32>& getBoundingBox() const override
|
||||||
{
|
{
|
||||||
return BoundingBox;
|
return BoundingBox;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Set bounding box
|
//! Set bounding box
|
||||||
virtual void setBoundingBox( const core::aabbox3df& box) _IRR_OVERRIDE_
|
void setBoundingBox( const core::aabbox3df& box) override
|
||||||
{
|
{
|
||||||
BoundingBox = box;
|
BoundingBox = box;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Recalculate bounding box
|
//! Recalculate bounding box
|
||||||
virtual void recalculateBoundingBox() _IRR_OVERRIDE_
|
void recalculateBoundingBox() override
|
||||||
{
|
{
|
||||||
if(!BoundingBoxNeedsRecalculated)
|
if(!BoundingBoxNeedsRecalculated)
|
||||||
return;
|
return;
|
||||||
@ -186,7 +186,7 @@ struct SSkinMeshBuffer : public IMeshBuffer
|
|||||||
}
|
}
|
||||||
|
|
||||||
//! Get vertex type
|
//! Get vertex type
|
||||||
virtual video::E_VERTEX_TYPE getVertexType() const _IRR_OVERRIDE_
|
video::E_VERTEX_TYPE getVertexType() const override
|
||||||
{
|
{
|
||||||
return VertexType;
|
return VertexType;
|
||||||
}
|
}
|
||||||
@ -244,7 +244,7 @@ struct SSkinMeshBuffer : public IMeshBuffer
|
|||||||
}
|
}
|
||||||
|
|
||||||
//! returns position of vertex i
|
//! returns position of vertex i
|
||||||
virtual const core::vector3df& getPosition(u32 i) const _IRR_OVERRIDE_
|
const core::vector3df& getPosition(u32 i) const override
|
||||||
{
|
{
|
||||||
switch (VertexType)
|
switch (VertexType)
|
||||||
{
|
{
|
||||||
@ -258,7 +258,7 @@ struct SSkinMeshBuffer : public IMeshBuffer
|
|||||||
}
|
}
|
||||||
|
|
||||||
//! returns position of vertex i
|
//! returns position of vertex i
|
||||||
virtual core::vector3df& getPosition(u32 i) _IRR_OVERRIDE_
|
core::vector3df& getPosition(u32 i) override
|
||||||
{
|
{
|
||||||
switch (VertexType)
|
switch (VertexType)
|
||||||
{
|
{
|
||||||
@ -272,7 +272,7 @@ struct SSkinMeshBuffer : public IMeshBuffer
|
|||||||
}
|
}
|
||||||
|
|
||||||
//! returns normal of vertex i
|
//! returns normal of vertex i
|
||||||
virtual const core::vector3df& getNormal(u32 i) const _IRR_OVERRIDE_
|
const core::vector3df& getNormal(u32 i) const override
|
||||||
{
|
{
|
||||||
switch (VertexType)
|
switch (VertexType)
|
||||||
{
|
{
|
||||||
@ -286,7 +286,7 @@ struct SSkinMeshBuffer : public IMeshBuffer
|
|||||||
}
|
}
|
||||||
|
|
||||||
//! returns normal of vertex i
|
//! returns normal of vertex i
|
||||||
virtual core::vector3df& getNormal(u32 i) _IRR_OVERRIDE_
|
core::vector3df& getNormal(u32 i) override
|
||||||
{
|
{
|
||||||
switch (VertexType)
|
switch (VertexType)
|
||||||
{
|
{
|
||||||
@ -300,7 +300,7 @@ struct SSkinMeshBuffer : public IMeshBuffer
|
|||||||
}
|
}
|
||||||
|
|
||||||
//! returns texture coords of vertex i
|
//! returns texture coords of vertex i
|
||||||
virtual const core::vector2df& getTCoords(u32 i) const _IRR_OVERRIDE_
|
const core::vector2df& getTCoords(u32 i) const override
|
||||||
{
|
{
|
||||||
switch (VertexType)
|
switch (VertexType)
|
||||||
{
|
{
|
||||||
@ -314,7 +314,7 @@ struct SSkinMeshBuffer : public IMeshBuffer
|
|||||||
}
|
}
|
||||||
|
|
||||||
//! returns texture coords of vertex i
|
//! returns texture coords of vertex i
|
||||||
virtual core::vector2df& getTCoords(u32 i) _IRR_OVERRIDE_
|
core::vector2df& getTCoords(u32 i) override
|
||||||
{
|
{
|
||||||
switch (VertexType)
|
switch (VertexType)
|
||||||
{
|
{
|
||||||
@ -328,25 +328,25 @@ struct SSkinMeshBuffer : public IMeshBuffer
|
|||||||
}
|
}
|
||||||
|
|
||||||
//! append the vertices and indices to the current buffer
|
//! append the vertices and indices to the current buffer
|
||||||
virtual void append(const void* const vertices, u32 numVertices, const u16* const indices, u32 numIndices) _IRR_OVERRIDE_ {}
|
void append(const void* const vertices, u32 numVertices, const u16* const indices, u32 numIndices) override {}
|
||||||
|
|
||||||
//! append the meshbuffer to the current buffer
|
//! append the meshbuffer to the current buffer
|
||||||
virtual void append(const IMeshBuffer* const other) _IRR_OVERRIDE_ {}
|
void append(const IMeshBuffer* const other) override {}
|
||||||
|
|
||||||
//! get the current hardware mapping hint for vertex buffers
|
//! get the current hardware mapping hint for vertex buffers
|
||||||
virtual E_HARDWARE_MAPPING getHardwareMappingHint_Vertex() const _IRR_OVERRIDE_
|
E_HARDWARE_MAPPING getHardwareMappingHint_Vertex() const override
|
||||||
{
|
{
|
||||||
return MappingHint_Vertex;
|
return MappingHint_Vertex;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! get the current hardware mapping hint for index buffers
|
//! get the current hardware mapping hint for index buffers
|
||||||
virtual E_HARDWARE_MAPPING getHardwareMappingHint_Index() const _IRR_OVERRIDE_
|
E_HARDWARE_MAPPING getHardwareMappingHint_Index() const override
|
||||||
{
|
{
|
||||||
return MappingHint_Index;
|
return MappingHint_Index;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! set the hardware mapping hint, for driver
|
//! set the hardware mapping hint, for driver
|
||||||
virtual void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint, E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX ) _IRR_OVERRIDE_
|
void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint, E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX ) override
|
||||||
{
|
{
|
||||||
if (Buffer==EBT_VERTEX)
|
if (Buffer==EBT_VERTEX)
|
||||||
MappingHint_Vertex=NewMappingHint;
|
MappingHint_Vertex=NewMappingHint;
|
||||||
@ -360,19 +360,19 @@ struct SSkinMeshBuffer : public IMeshBuffer
|
|||||||
}
|
}
|
||||||
|
|
||||||
//! Describe what kind of primitive geometry is used by the meshbuffer
|
//! Describe what kind of primitive geometry is used by the meshbuffer
|
||||||
virtual void setPrimitiveType(E_PRIMITIVE_TYPE type) _IRR_OVERRIDE_
|
void setPrimitiveType(E_PRIMITIVE_TYPE type) override
|
||||||
{
|
{
|
||||||
PrimitiveType = type;
|
PrimitiveType = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Get the kind of primitive geometry which is used by the meshbuffer
|
//! Get the kind of primitive geometry which is used by the meshbuffer
|
||||||
virtual E_PRIMITIVE_TYPE getPrimitiveType() const _IRR_OVERRIDE_
|
E_PRIMITIVE_TYPE getPrimitiveType() const override
|
||||||
{
|
{
|
||||||
return PrimitiveType;
|
return PrimitiveType;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! flags the mesh as changed, reloads hardware buffers
|
//! flags the mesh as changed, reloads hardware buffers
|
||||||
virtual void setDirty(E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX) _IRR_OVERRIDE_
|
void setDirty(E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX) override
|
||||||
{
|
{
|
||||||
if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_VERTEX)
|
if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_VERTEX)
|
||||||
++ChangedID_Vertex;
|
++ChangedID_Vertex;
|
||||||
@ -380,15 +380,15 @@ struct SSkinMeshBuffer : public IMeshBuffer
|
|||||||
++ChangedID_Index;
|
++ChangedID_Index;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual u32 getChangedID_Vertex() const _IRR_OVERRIDE_ {return ChangedID_Vertex;}
|
u32 getChangedID_Vertex() const override {return ChangedID_Vertex;}
|
||||||
|
|
||||||
virtual u32 getChangedID_Index() const _IRR_OVERRIDE_ {return ChangedID_Index;}
|
u32 getChangedID_Index() const override {return ChangedID_Index;}
|
||||||
|
|
||||||
virtual void setHWBuffer(void *ptr) const _IRR_OVERRIDE_ {
|
void setHWBuffer(void *ptr) const override {
|
||||||
HWBuffer = ptr;
|
HWBuffer = ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void *getHWBuffer() const _IRR_OVERRIDE_ {
|
void *getHWBuffer() const override {
|
||||||
return HWBuffer;
|
return HWBuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,199 +24,6 @@ namespace scene
|
|||||||
struct IVertexManipulator
|
struct IVertexManipulator
|
||||||
{
|
{
|
||||||
};
|
};
|
||||||
//! Vertex manipulator to set color to a fixed color for all vertices
|
|
||||||
class SVertexColorSetManipulator : public IVertexManipulator
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
SVertexColorSetManipulator(video::SColor color) : Color(color) {}
|
|
||||||
void operator()(video::S3DVertex& vertex) const
|
|
||||||
{
|
|
||||||
vertex.Color=Color;
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
video::SColor Color;
|
|
||||||
};
|
|
||||||
//! Vertex manipulator to set the alpha value of the vertex color to a fixed value
|
|
||||||
class SVertexColorSetAlphaManipulator : public IVertexManipulator
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
SVertexColorSetAlphaManipulator(u32 alpha) : Alpha(alpha) {}
|
|
||||||
void operator()(video::S3DVertex& vertex) const
|
|
||||||
{
|
|
||||||
vertex.Color.setAlpha(Alpha);
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
u32 Alpha;
|
|
||||||
};
|
|
||||||
//! Vertex manipulator which inverts the RGB values
|
|
||||||
class SVertexColorInvertManipulator : public IVertexManipulator
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
void operator()(video::S3DVertex& vertex) const
|
|
||||||
{
|
|
||||||
vertex.Color.setRed(255-vertex.Color.getRed());
|
|
||||||
vertex.Color.setGreen(255-vertex.Color.getGreen());
|
|
||||||
vertex.Color.setBlue(255-vertex.Color.getBlue());
|
|
||||||
}
|
|
||||||
};
|
|
||||||
//! Vertex manipulator to set vertex color to one of two values depending on a given threshold
|
|
||||||
/** If average of the color value is >Threshold the High color is chosen, else Low. */
|
|
||||||
class SVertexColorThresholdManipulator : public IVertexManipulator
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
SVertexColorThresholdManipulator(u8 threshold, video::SColor low,
|
|
||||||
video::SColor high) : Threshold(threshold), Low(low), High(high) {}
|
|
||||||
void operator()(video::S3DVertex& vertex) const
|
|
||||||
{
|
|
||||||
vertex.Color = ((u8)vertex.Color.getAverage()>Threshold)?High:Low;
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
u8 Threshold;
|
|
||||||
video::SColor Low;
|
|
||||||
video::SColor High;
|
|
||||||
};
|
|
||||||
//! Vertex manipulator which adjusts the brightness by the given amount
|
|
||||||
/** A positive value increases brightness, a negative value darkens the colors. */
|
|
||||||
class SVertexColorBrightnessManipulator : public IVertexManipulator
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
SVertexColorBrightnessManipulator(s32 amount) : Amount(amount) {}
|
|
||||||
void operator()(video::S3DVertex& vertex) const
|
|
||||||
{
|
|
||||||
vertex.Color.setRed(core::clamp(vertex.Color.getRed()+Amount, 0u, 255u));
|
|
||||||
vertex.Color.setGreen(core::clamp(vertex.Color.getGreen()+Amount, 0u, 255u));
|
|
||||||
vertex.Color.setBlue(core::clamp(vertex.Color.getBlue()+Amount, 0u, 255u));
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
s32 Amount;
|
|
||||||
};
|
|
||||||
//! Vertex manipulator which adjusts the contrast by the given factor
|
|
||||||
/** Factors over 1 increase contrast, below 1 reduce it. */
|
|
||||||
class SVertexColorContrastManipulator : public IVertexManipulator
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
SVertexColorContrastManipulator(f32 factor) : Factor(factor) {}
|
|
||||||
void operator()(video::S3DVertex& vertex) const
|
|
||||||
{
|
|
||||||
vertex.Color.setRed(core::clamp(core::round32((vertex.Color.getRed()-128)*Factor)+128, 0, 255));
|
|
||||||
vertex.Color.setGreen(core::clamp(core::round32((vertex.Color.getGreen()-128)*Factor)+128, 0, 255));
|
|
||||||
vertex.Color.setBlue(core::clamp(core::round32((vertex.Color.getBlue()-128)*Factor)+128, 0, 255));
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
f32 Factor;
|
|
||||||
};
|
|
||||||
//! Vertex manipulator which adjusts the contrast by the given factor and brightness by a signed amount.
|
|
||||||
/** Factors over 1 increase contrast, below 1 reduce it.
|
|
||||||
A positive amount increases brightness, a negative one darkens the colors. */
|
|
||||||
class SVertexColorContrastBrightnessManipulator : public IVertexManipulator
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
SVertexColorContrastBrightnessManipulator(f32 factor, s32 amount) : Factor(factor), Amount(amount+128) {}
|
|
||||||
void operator()(video::S3DVertex& vertex) const
|
|
||||||
{
|
|
||||||
vertex.Color.setRed(core::clamp(core::round32((vertex.Color.getRed()-128)*Factor)+Amount, 0, 255));
|
|
||||||
vertex.Color.setGreen(core::clamp(core::round32((vertex.Color.getGreen()-128)*Factor)+Amount, 0, 255));
|
|
||||||
vertex.Color.setBlue(core::clamp(core::round32((vertex.Color.getBlue()-128)*Factor)+Amount, 0, 255));
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
f32 Factor;
|
|
||||||
s32 Amount;
|
|
||||||
};
|
|
||||||
//! Vertex manipulator which adjusts the brightness by a gamma operation
|
|
||||||
/** A value over one increases brightness, one below darkens the colors. */
|
|
||||||
class SVertexColorGammaManipulator : public IVertexManipulator
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
SVertexColorGammaManipulator(f32 gamma) : Gamma(1.f)
|
|
||||||
{
|
|
||||||
if (gamma != 0.f)
|
|
||||||
Gamma = 1.f/gamma;
|
|
||||||
}
|
|
||||||
void operator()(video::S3DVertex& vertex) const
|
|
||||||
{
|
|
||||||
vertex.Color.setRed(core::clamp(core::round32(powf((f32)(vertex.Color.getRed()),Gamma)), 0, 255));
|
|
||||||
vertex.Color.setGreen(core::clamp(core::round32(powf((f32)(vertex.Color.getGreen()),Gamma)), 0, 255));
|
|
||||||
vertex.Color.setBlue(core::clamp(core::round32(powf((f32)(vertex.Color.getBlue()),Gamma)), 0, 255));
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
f32 Gamma;
|
|
||||||
};
|
|
||||||
//! Vertex manipulator which scales the color values
|
|
||||||
/** Can e.g be used for white balance, factor would be 255.f/brightest color. */
|
|
||||||
class SVertexColorScaleManipulator : public IVertexManipulator
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
SVertexColorScaleManipulator(f32 factor) : Factor(factor) {}
|
|
||||||
void operator()(video::S3DVertex& vertex) const
|
|
||||||
{
|
|
||||||
vertex.Color.setRed(core::clamp(core::round32(vertex.Color.getRed()*Factor), 0, 255));
|
|
||||||
vertex.Color.setGreen(core::clamp(core::round32(vertex.Color.getGreen()*Factor), 0, 255));
|
|
||||||
vertex.Color.setBlue(core::clamp(core::round32(vertex.Color.getBlue()*Factor), 0, 255));
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
f32 Factor;
|
|
||||||
};
|
|
||||||
//! Vertex manipulator which desaturates the color values
|
|
||||||
/** Uses the lightness value of the color. */
|
|
||||||
class SVertexColorDesaturateToLightnessManipulator : public IVertexManipulator
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
void operator()(video::S3DVertex& vertex) const
|
|
||||||
{
|
|
||||||
vertex.Color=core::round32(vertex.Color.getLightness());
|
|
||||||
}
|
|
||||||
};
|
|
||||||
//! Vertex manipulator which desaturates the color values
|
|
||||||
/** Uses the average value of the color. */
|
|
||||||
class SVertexColorDesaturateToAverageManipulator : public IVertexManipulator
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
void operator()(video::S3DVertex& vertex) const
|
|
||||||
{
|
|
||||||
vertex.Color=vertex.Color.getAverage();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
//! Vertex manipulator which desaturates the color values
|
|
||||||
/** Uses the luminance value of the color. */
|
|
||||||
class SVertexColorDesaturateToLuminanceManipulator : public IVertexManipulator
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
void operator()(video::S3DVertex& vertex) const
|
|
||||||
{
|
|
||||||
vertex.Color=core::round32(vertex.Color.getLuminance());
|
|
||||||
}
|
|
||||||
};
|
|
||||||
//! Vertex manipulator which interpolates the color values
|
|
||||||
/** Uses linear interpolation. */
|
|
||||||
class SVertexColorInterpolateLinearManipulator : public IVertexManipulator
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
SVertexColorInterpolateLinearManipulator(video::SColor color, f32 factor) :
|
|
||||||
Color(color), Factor(factor) {}
|
|
||||||
void operator()(video::S3DVertex& vertex) const
|
|
||||||
{
|
|
||||||
vertex.Color=vertex.Color.getInterpolated(Color, Factor);
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
video::SColor Color;
|
|
||||||
f32 Factor;
|
|
||||||
};
|
|
||||||
//! Vertex manipulator which interpolates the color values
|
|
||||||
/** Uses linear interpolation. */
|
|
||||||
class SVertexColorInterpolateQuadraticManipulator : public IVertexManipulator
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
SVertexColorInterpolateQuadraticManipulator(video::SColor color1, video::SColor color2, f32 factor) :
|
|
||||||
Color1(color1), Color2(color2), Factor(factor) {}
|
|
||||||
void operator()(video::S3DVertex& vertex) const
|
|
||||||
{
|
|
||||||
vertex.Color=vertex.Color.getInterpolated_quadratic(Color1, Color2, Factor);
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
video::SColor Color1;
|
|
||||||
video::SColor Color2;
|
|
||||||
f32 Factor;
|
|
||||||
};
|
|
||||||
|
|
||||||
//! Vertex manipulator which scales the position of the vertex
|
//! Vertex manipulator which scales the position of the vertex
|
||||||
class SVertexPositionScaleManipulator : public IVertexManipulator
|
class SVertexPositionScaleManipulator : public IVertexManipulator
|
||||||
@ -232,74 +39,6 @@ namespace scene
|
|||||||
core::vector3df Factor;
|
core::vector3df Factor;
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Vertex manipulator which scales the position of the vertex along the normals
|
|
||||||
/** This can look more pleasing than the usual Scale operator, but
|
|
||||||
depends on the mesh geometry.
|
|
||||||
*/
|
|
||||||
class SVertexPositionScaleAlongNormalsManipulator : public IVertexManipulator
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
SVertexPositionScaleAlongNormalsManipulator(const core::vector3df& factor) : Factor(factor) {}
|
|
||||||
template <typename VType>
|
|
||||||
void operator()(VType& vertex) const
|
|
||||||
{
|
|
||||||
vertex.Pos += vertex.Normal*Factor;
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
core::vector3df Factor;
|
|
||||||
};
|
|
||||||
|
|
||||||
//! Vertex manipulator which transforms the position of the vertex
|
|
||||||
class SVertexPositionTransformManipulator : public IVertexManipulator
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
SVertexPositionTransformManipulator(const core::matrix4& m) : Transformation(m) {}
|
|
||||||
template <typename VType>
|
|
||||||
void operator()(VType& vertex) const
|
|
||||||
{
|
|
||||||
Transformation.transformVect(vertex.Pos);
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
core::matrix4 Transformation;
|
|
||||||
};
|
|
||||||
|
|
||||||
//! Vertex manipulator which transforms the normal of the vertex
|
|
||||||
class SVertexNormalTransformManipulator : public IVertexManipulator
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
SVertexNormalTransformManipulator(const core::matrix4& m) : Transformation(m) {}
|
|
||||||
template <typename VType>
|
|
||||||
void operator()(VType& vertex) const
|
|
||||||
{
|
|
||||||
Transformation.transformVect(vertex.Normal);
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
core::matrix4 Transformation;
|
|
||||||
};
|
|
||||||
|
|
||||||
//! Vertex manipulator which scales the TCoords of the vertex
|
|
||||||
class SVertexTCoordsScaleManipulator : public IVertexManipulator
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
SVertexTCoordsScaleManipulator(const core::vector2df& factor, u32 uvSet=1) : Factor(factor), UVSet(uvSet) {}
|
|
||||||
void operator()(video::S3DVertex2TCoords& vertex) const
|
|
||||||
{
|
|
||||||
if (1==UVSet)
|
|
||||||
vertex.TCoords *= Factor;
|
|
||||||
else if (2==UVSet)
|
|
||||||
vertex.TCoords2 *= Factor;
|
|
||||||
}
|
|
||||||
template <typename VType>
|
|
||||||
void operator()(VType& vertex) const
|
|
||||||
{
|
|
||||||
if (1==UVSet)
|
|
||||||
vertex.TCoords *= Factor;
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
core::vector2df Factor;
|
|
||||||
u32 UVSet;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
@ -1,55 +0,0 @@
|
|||||||
// Copyright (C) 2009-2012 Christian Stehno
|
|
||||||
// This file is part of the "Irrlicht Engine".
|
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
|
||||||
|
|
||||||
#ifndef __E_DRIVER_CHOICE_H_INCLUDED__
|
|
||||||
#define __E_DRIVER_CHOICE_H_INCLUDED__
|
|
||||||
|
|
||||||
#include <iostream>
|
|
||||||
#include <cstdio>
|
|
||||||
#include "EDriverTypes.h"
|
|
||||||
#include "IrrlichtDevice.h"
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
|
|
||||||
//! ask user for driver
|
|
||||||
static irr::video::E_DRIVER_TYPE driverChoiceConsole(bool allDrivers=false)
|
|
||||||
{
|
|
||||||
#if defined (_IRR_IPHONE_PLATFORM_) || defined (_IRR_ANDROID_PLATFORM_)
|
|
||||||
return irr::video::EDT_OGLES2;
|
|
||||||
#else
|
|
||||||
printf("Please select the driver you want:\n");
|
|
||||||
irr::u32 i=0;
|
|
||||||
char c = 'a';
|
|
||||||
|
|
||||||
for (i=irr::video::EDT_COUNT; i>0; --i)
|
|
||||||
{
|
|
||||||
if ( allDrivers || irr::IrrlichtDevice::isDriverSupported(irr::video::E_DRIVER_TYPE(i-1)) )
|
|
||||||
{
|
|
||||||
printf(" (%c) %s\n", c, irr::video::DRIVER_TYPE_NAMES[i-1]);
|
|
||||||
++c;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
char userSelection;
|
|
||||||
std::cin >> userSelection;
|
|
||||||
c = 'a';
|
|
||||||
|
|
||||||
for (i=irr::video::EDT_COUNT; i>0; --i)
|
|
||||||
{
|
|
||||||
if ( allDrivers || irr::IrrlichtDevice::isDriverSupported(irr::video::E_DRIVER_TYPE(i-1)) )
|
|
||||||
{
|
|
||||||
if (userSelection == c)
|
|
||||||
return irr::video::E_DRIVER_TYPE(i-1);
|
|
||||||
++c;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return irr::video::EDT_COUNT;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,113 +0,0 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
|
||||||
// This file is part of the "Irrlicht Engine" and the "irrXML" project.
|
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h and irrXML.h
|
|
||||||
|
|
||||||
#ifndef __IRR_ALLOCATOR_H_INCLUDED__
|
|
||||||
#define __IRR_ALLOCATOR_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "irrTypes.h"
|
|
||||||
#include <new>
|
|
||||||
// necessary for older compilers
|
|
||||||
#include <memory.h>
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
namespace core
|
|
||||||
{
|
|
||||||
|
|
||||||
//! Very simple allocator implementation, containers using it can be used across dll boundaries
|
|
||||||
template<typename T>
|
|
||||||
class irrAllocator
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
//! Destructor
|
|
||||||
virtual ~irrAllocator() {}
|
|
||||||
|
|
||||||
//! Allocate memory for an array of objects
|
|
||||||
T* allocate(size_t cnt)
|
|
||||||
{
|
|
||||||
return (T*)internal_new(cnt* sizeof(T));
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Deallocate memory for an array of objects
|
|
||||||
void deallocate(T* ptr)
|
|
||||||
{
|
|
||||||
internal_delete(ptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Construct an element
|
|
||||||
void construct(T* ptr, const T&e)
|
|
||||||
{
|
|
||||||
new ((void*)ptr) T(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Destruct an element
|
|
||||||
void destruct(T* ptr)
|
|
||||||
{
|
|
||||||
ptr->~T();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected:
|
|
||||||
|
|
||||||
virtual void* internal_new(size_t cnt)
|
|
||||||
{
|
|
||||||
return operator new(cnt);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void internal_delete(void* ptr)
|
|
||||||
{
|
|
||||||
operator delete(ptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//! Fast allocator, only to be used in containers inside the same memory heap.
|
|
||||||
/** Containers using it are NOT able to be used it across dll boundaries. Use this
|
|
||||||
when using in an internal class or function or when compiled into a static lib */
|
|
||||||
template<typename T>
|
|
||||||
class irrAllocatorFast
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
//! Allocate memory for an array of objects
|
|
||||||
T* allocate(size_t cnt)
|
|
||||||
{
|
|
||||||
return (T*)operator new(cnt* sizeof(T));
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Deallocate memory for an array of objects
|
|
||||||
void deallocate(T* ptr)
|
|
||||||
{
|
|
||||||
operator delete(ptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Construct an element
|
|
||||||
void construct(T* ptr, const T&e)
|
|
||||||
{
|
|
||||||
new ((void*)ptr) T(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Destruct an element
|
|
||||||
void destruct(T* ptr)
|
|
||||||
{
|
|
||||||
ptr->~T();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//! defines an allocation strategy (used only by irr::array so far)
|
|
||||||
enum eAllocStrategy
|
|
||||||
{
|
|
||||||
ALLOC_STRATEGY_SAFE = 0, // increase size by 1
|
|
||||||
ALLOC_STRATEGY_DOUBLE = 1, // double size when under 500 elements, beyond that increase by 1/4th size. Plus a small constant.
|
|
||||||
ALLOC_STRATEGY_SQRT = 2 // not implemented
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
} // end namespace core
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
@ -227,7 +227,7 @@ public:
|
|||||||
/** \return Pointer to the array. */
|
/** \return Pointer to the array. */
|
||||||
T* pointer()
|
T* pointer()
|
||||||
{
|
{
|
||||||
return &m_data[0];
|
return m_data.empty() ? nullptr : &m_data[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -235,7 +235,7 @@ public:
|
|||||||
/** \return Pointer to the array. */
|
/** \return Pointer to the array. */
|
||||||
const T* const_pointer() const
|
const T* const_pointer() const
|
||||||
{
|
{
|
||||||
return &m_data[0];
|
return m_data.empty() ? nullptr : &m_data[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -394,7 +394,7 @@ public:
|
|||||||
{
|
{
|
||||||
if (index >= m_data.size() || count < 1)
|
if (index >= m_data.size() || count < 1)
|
||||||
return;
|
return;
|
||||||
count = std::min(count, (s32)m_data.size() - (s32)index);
|
count = core::min_(count, (s32)m_data.size() - (s32)index);
|
||||||
auto first = std::next(m_data.begin(), index);
|
auto first = std::next(m_data.begin(), index);
|
||||||
auto last = std::next(first, count);
|
auto last = std::next(first, count);
|
||||||
m_data.erase(first, last);
|
m_data.erase(first, last);
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -112,13 +112,10 @@ For functions: template<class T> _IRR_DEPRECATED_ void test4(void) {}
|
|||||||
#define _IRR_DEPRECATED_
|
#define _IRR_DEPRECATED_
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//! Defines an override macro, to protect virtual functions from typos and other mismatches
|
//! deprecated macro for virtual function override
|
||||||
/** Usage in a derived class:
|
/** prefer to use the override keyword for new code */
|
||||||
virtual void somefunc() _IRR_OVERRIDE_;
|
|
||||||
*/
|
|
||||||
#define _IRR_OVERRIDE_ override
|
#define _IRR_OVERRIDE_ override
|
||||||
|
|
||||||
|
|
||||||
//! creates four CC codes used in Irrlicht for simple ids
|
//! creates four CC codes used in Irrlicht for simple ids
|
||||||
/** some compilers can create those by directly writing the
|
/** some compilers can create those by directly writing the
|
||||||
code like 'code', but some generate warnings so we use this macro here */
|
code like 'code', but some generate warnings so we use this macro here */
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -47,7 +47,6 @@
|
|||||||
#include "EMaterialFlags.h"
|
#include "EMaterialFlags.h"
|
||||||
#include "EMaterialTypes.h"
|
#include "EMaterialTypes.h"
|
||||||
#include "EMeshWriterEnums.h"
|
#include "EMeshWriterEnums.h"
|
||||||
#include "EMessageBoxFlags.h"
|
|
||||||
#include "ESceneNodeTypes.h"
|
#include "ESceneNodeTypes.h"
|
||||||
#include "fast_atof.h"
|
#include "fast_atof.h"
|
||||||
#include "IAnimatedMesh.h"
|
#include "IAnimatedMesh.h"
|
||||||
@ -65,31 +64,21 @@
|
|||||||
#include "IGPUProgrammingServices.h"
|
#include "IGPUProgrammingServices.h"
|
||||||
#include "IGUIButton.h"
|
#include "IGUIButton.h"
|
||||||
#include "IGUICheckBox.h"
|
#include "IGUICheckBox.h"
|
||||||
#include "IGUIColorSelectDialog.h"
|
|
||||||
#include "IGUIComboBox.h"
|
#include "IGUIComboBox.h"
|
||||||
#include "IGUIContextMenu.h"
|
|
||||||
#include "IGUIEditBox.h"
|
#include "IGUIEditBox.h"
|
||||||
#include "IGUIElement.h"
|
#include "IGUIElement.h"
|
||||||
#include "IGUIElementFactory.h"
|
|
||||||
#include "IGUIEnvironment.h"
|
#include "IGUIEnvironment.h"
|
||||||
#include "IGUIFileOpenDialog.h"
|
#include "IGUIFileOpenDialog.h"
|
||||||
#include "IGUIFont.h"
|
#include "IGUIFont.h"
|
||||||
#include "IGUIFontBitmap.h"
|
#include "IGUIFontBitmap.h"
|
||||||
#include "IGUIImage.h"
|
#include "IGUIImage.h"
|
||||||
#include "IGUIInOutFader.h"
|
|
||||||
#include "IGUIListBox.h"
|
#include "IGUIListBox.h"
|
||||||
#include "IGUIMeshViewer.h"
|
|
||||||
#include "IGUIScrollBar.h"
|
#include "IGUIScrollBar.h"
|
||||||
#include "IGUISkin.h"
|
#include "IGUISkin.h"
|
||||||
#include "IGUISpinBox.h"
|
|
||||||
#include "IGUISpriteBank.h"
|
#include "IGUISpriteBank.h"
|
||||||
#include "IGUIStaticText.h"
|
#include "IGUIStaticText.h"
|
||||||
#include "IGUITabControl.h"
|
#include "IGUITabControl.h"
|
||||||
#include "IGUITable.h"
|
|
||||||
#include "IGUIToolbar.h"
|
#include "IGUIToolbar.h"
|
||||||
#include "IGUIWindow.h"
|
|
||||||
#include "IGUITreeView.h"
|
|
||||||
#include "IGUIProfiler.h"
|
|
||||||
#include "IImage.h"
|
#include "IImage.h"
|
||||||
#include "IImageLoader.h"
|
#include "IImageLoader.h"
|
||||||
#include "IImageWriter.h"
|
#include "IImageWriter.h"
|
||||||
@ -108,7 +97,6 @@
|
|||||||
#include "IReadFile.h"
|
#include "IReadFile.h"
|
||||||
#include "IReferenceCounted.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "irrArray.h"
|
#include "irrArray.h"
|
||||||
#include "IRandomizer.h"
|
|
||||||
#include "IRenderTarget.h"
|
#include "IRenderTarget.h"
|
||||||
#include "IrrlichtDevice.h"
|
#include "IrrlichtDevice.h"
|
||||||
#include "irrMath.h"
|
#include "irrMath.h"
|
||||||
@ -118,14 +106,12 @@
|
|||||||
#include "ISceneCollisionManager.h"
|
#include "ISceneCollisionManager.h"
|
||||||
#include "ISceneManager.h"
|
#include "ISceneManager.h"
|
||||||
#include "ISceneNode.h"
|
#include "ISceneNode.h"
|
||||||
#include "ISceneNodeFactory.h"
|
|
||||||
#include "IShaderConstantSetCallBack.h"
|
#include "IShaderConstantSetCallBack.h"
|
||||||
#include "ISkinnedMesh.h"
|
#include "ISkinnedMesh.h"
|
||||||
#include "ITexture.h"
|
#include "ITexture.h"
|
||||||
#include "ITimer.h"
|
#include "ITimer.h"
|
||||||
#include "IVertexBuffer.h"
|
#include "IVertexBuffer.h"
|
||||||
#include "IVideoDriver.h"
|
#include "IVideoDriver.h"
|
||||||
#include "IVideoModeList.h"
|
|
||||||
#include "IWriteFile.h"
|
#include "IWriteFile.h"
|
||||||
#include "Keycodes.h"
|
#include "Keycodes.h"
|
||||||
#include "line2d.h"
|
#include "line2d.h"
|
||||||
@ -141,7 +127,6 @@
|
|||||||
#include "SColor.h"
|
#include "SColor.h"
|
||||||
#include "SExposedVideoData.h"
|
#include "SExposedVideoData.h"
|
||||||
#include "SIrrCreationParameters.h"
|
#include "SIrrCreationParameters.h"
|
||||||
#include "SLight.h"
|
|
||||||
#include "SMaterial.h"
|
#include "SMaterial.h"
|
||||||
#include "SMesh.h"
|
#include "SMesh.h"
|
||||||
#include "SMeshBuffer.h"
|
#include "SMeshBuffer.h"
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
#define MAX_LIGHTS 8
|
|
||||||
|
|
||||||
/* Attributes */
|
/* Attributes */
|
||||||
|
|
||||||
attribute vec3 inVertexPosition;
|
attribute vec3 inVertexPosition;
|
||||||
@ -22,15 +20,6 @@ uniform vec4 uMaterialEmissive;
|
|||||||
uniform vec4 uMaterialSpecular;
|
uniform vec4 uMaterialSpecular;
|
||||||
uniform float uMaterialShininess;
|
uniform float uMaterialShininess;
|
||||||
|
|
||||||
uniform int uLightCount;
|
|
||||||
uniform int uLightType[MAX_LIGHTS];
|
|
||||||
uniform vec3 uLightPosition[MAX_LIGHTS];
|
|
||||||
uniform vec3 uLightDirection[MAX_LIGHTS];
|
|
||||||
uniform vec3 uLightAttenuation[MAX_LIGHTS];
|
|
||||||
uniform vec4 uLightAmbient[MAX_LIGHTS];
|
|
||||||
uniform vec4 uLightDiffuse[MAX_LIGHTS];
|
|
||||||
uniform vec4 uLightSpecular[MAX_LIGHTS];
|
|
||||||
|
|
||||||
uniform float uThickness;
|
uniform float uThickness;
|
||||||
|
|
||||||
/* Varyings */
|
/* Varyings */
|
||||||
@ -41,58 +30,6 @@ varying vec4 vVertexColor;
|
|||||||
varying vec4 vSpecularColor;
|
varying vec4 vSpecularColor;
|
||||||
varying float vFogCoord;
|
varying float vFogCoord;
|
||||||
|
|
||||||
void dirLight(in int index, in vec3 position, in vec3 normal, inout vec4 ambient, inout vec4 diffuse, inout vec4 specular)
|
|
||||||
{
|
|
||||||
vec3 L = normalize(-(uNMatrix * vec4(uLightDirection[index], 0.0)).xyz);
|
|
||||||
|
|
||||||
ambient += uLightAmbient[index];
|
|
||||||
|
|
||||||
float NdotL = dot(normal, L);
|
|
||||||
|
|
||||||
if (NdotL > 0.0)
|
|
||||||
{
|
|
||||||
diffuse += uLightDiffuse[index] * NdotL;
|
|
||||||
|
|
||||||
vec3 E = normalize(-position);
|
|
||||||
vec3 HalfVector = normalize(L + E);
|
|
||||||
float NdotH = max(0.0, dot(normal, HalfVector));
|
|
||||||
|
|
||||||
float SpecularFactor = pow(NdotH, uMaterialShininess);
|
|
||||||
specular += uLightSpecular[index] * SpecularFactor;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void pointLight(in int index, in vec3 position, in vec3 normal, inout vec4 ambient, inout vec4 diffuse, inout vec4 specular)
|
|
||||||
{
|
|
||||||
vec3 L = uLightPosition[index] - position;
|
|
||||||
float D = length(L);
|
|
||||||
L = normalize(L);
|
|
||||||
|
|
||||||
float Attenuation = 1.0 / (uLightAttenuation[index].x + uLightAttenuation[index].y * D +
|
|
||||||
uLightAttenuation[index].z * D * D);
|
|
||||||
|
|
||||||
ambient += uLightAmbient[index] * Attenuation;
|
|
||||||
|
|
||||||
float NdotL = dot(normal, L);
|
|
||||||
|
|
||||||
if (NdotL > 0.0)
|
|
||||||
{
|
|
||||||
diffuse += uLightDiffuse[index] * NdotL * Attenuation;
|
|
||||||
|
|
||||||
vec3 E = normalize(-position);
|
|
||||||
vec3 HalfVector = normalize(L + E);
|
|
||||||
float NdotH = max(0.0, dot(normal, HalfVector));
|
|
||||||
|
|
||||||
float SpecularFactor = pow(NdotH, uMaterialShininess);
|
|
||||||
specular += uLightSpecular[index] * SpecularFactor * Attenuation;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void spotLight(in int index, in vec3 position, in vec3 normal, inout vec4 ambient, inout vec4 diffuse, inout vec4 specular)
|
|
||||||
{
|
|
||||||
// TO-DO
|
|
||||||
}
|
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
gl_Position = uWVPMatrix * vec4(inVertexPosition, 1.0);
|
gl_Position = uWVPMatrix * vec4(inVertexPosition, 1.0);
|
||||||
@ -112,48 +49,5 @@ void main()
|
|||||||
vVertexColor = inVertexColor.bgra;
|
vVertexColor = inVertexColor.bgra;
|
||||||
vSpecularColor = vec4(0.0, 0.0, 0.0, 0.0);
|
vSpecularColor = vec4(0.0, 0.0, 0.0, 0.0);
|
||||||
|
|
||||||
if (uLightCount > 0)
|
|
||||||
{
|
|
||||||
vec3 Normal = normalize((uNMatrix * vec4(inVertexNormal, 0.0)).xyz);
|
|
||||||
|
|
||||||
vec4 Ambient = vec4(0.0, 0.0, 0.0, 0.0);
|
|
||||||
vec4 Diffuse = vec4(0.0, 0.0, 0.0, 0.0);
|
|
||||||
|
|
||||||
for (int i = 0; i < int(MAX_LIGHTS); i++)
|
|
||||||
{
|
|
||||||
if( i >= uLightCount ) // can't use uniform as loop-counter directly in glsl
|
|
||||||
break;
|
|
||||||
if (uLightType[i] == 0)
|
|
||||||
pointLight(i, Position, Normal, Ambient, Diffuse, vSpecularColor);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < int(MAX_LIGHTS); i++)
|
|
||||||
{
|
|
||||||
if( i >= uLightCount )
|
|
||||||
break;
|
|
||||||
if (uLightType[i] == 1)
|
|
||||||
spotLight(i, Position, Normal, Ambient, Diffuse, vSpecularColor);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < int(MAX_LIGHTS); i++)
|
|
||||||
{
|
|
||||||
if( i >= uLightCount )
|
|
||||||
break;
|
|
||||||
if (uLightType[i] == 2)
|
|
||||||
dirLight(i, Position, Normal, Ambient, Diffuse, vSpecularColor);
|
|
||||||
}
|
|
||||||
|
|
||||||
vec4 LightColor = Ambient * uMaterialAmbient + Diffuse * uMaterialDiffuse;
|
|
||||||
LightColor = clamp(LightColor, 0.0, 1.0);
|
|
||||||
LightColor.w = 1.0;
|
|
||||||
|
|
||||||
vVertexColor *= LightColor;
|
|
||||||
vVertexColor += uMaterialEmissive;
|
|
||||||
vVertexColor += uGlobalAmbient * uMaterialAmbient;
|
|
||||||
vVertexColor = clamp(vVertexColor, 0.0, 1.0);
|
|
||||||
|
|
||||||
vSpecularColor *= uMaterialSpecular;
|
|
||||||
}
|
|
||||||
|
|
||||||
vFogCoord = length(Position);
|
vFogCoord = length(Position);
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
#define MAX_LIGHTS 8
|
|
||||||
|
|
||||||
/* Attributes */
|
/* Attributes */
|
||||||
|
|
||||||
attribute vec3 inVertexPosition;
|
attribute vec3 inVertexPosition;
|
||||||
@ -21,15 +19,6 @@ uniform vec4 uMaterialEmissive;
|
|||||||
uniform vec4 uMaterialSpecular;
|
uniform vec4 uMaterialSpecular;
|
||||||
uniform float uMaterialShininess;
|
uniform float uMaterialShininess;
|
||||||
|
|
||||||
uniform int uLightCount;
|
|
||||||
uniform int uLightType[MAX_LIGHTS];
|
|
||||||
uniform vec3 uLightPosition[MAX_LIGHTS];
|
|
||||||
uniform vec3 uLightDirection[MAX_LIGHTS];
|
|
||||||
uniform vec3 uLightAttenuation[MAX_LIGHTS];
|
|
||||||
uniform vec4 uLightAmbient[MAX_LIGHTS];
|
|
||||||
uniform vec4 uLightDiffuse[MAX_LIGHTS];
|
|
||||||
uniform vec4 uLightSpecular[MAX_LIGHTS];
|
|
||||||
|
|
||||||
uniform float uThickness;
|
uniform float uThickness;
|
||||||
|
|
||||||
/* Varyings */
|
/* Varyings */
|
||||||
@ -39,58 +28,6 @@ varying vec4 vVertexColor;
|
|||||||
varying vec4 vSpecularColor;
|
varying vec4 vSpecularColor;
|
||||||
varying float vFogCoord;
|
varying float vFogCoord;
|
||||||
|
|
||||||
void dirLight(in int index, in vec3 position, in vec3 normal, inout vec4 ambient, inout vec4 diffuse, inout vec4 specular)
|
|
||||||
{
|
|
||||||
vec3 L = normalize(-(uNMatrix * vec4(uLightDirection[index], 0.0)).xyz);
|
|
||||||
|
|
||||||
ambient += uLightAmbient[index];
|
|
||||||
|
|
||||||
float NdotL = dot(normal, L);
|
|
||||||
|
|
||||||
if (NdotL > 0.0)
|
|
||||||
{
|
|
||||||
diffuse += uLightDiffuse[index] * NdotL;
|
|
||||||
|
|
||||||
vec3 E = normalize(-position);
|
|
||||||
vec3 HalfVector = normalize(L + E);
|
|
||||||
float NdotH = max(0.0, dot(normal, HalfVector));
|
|
||||||
|
|
||||||
float SpecularFactor = pow(NdotH, uMaterialShininess);
|
|
||||||
specular += uLightSpecular[index] * SpecularFactor;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void pointLight(in int index, in vec3 position, in vec3 normal, inout vec4 ambient, inout vec4 diffuse, inout vec4 specular)
|
|
||||||
{
|
|
||||||
vec3 L = uLightPosition[index] - position;
|
|
||||||
float D = length(L);
|
|
||||||
L = normalize(L);
|
|
||||||
|
|
||||||
float Attenuation = 1.0 / (uLightAttenuation[index].x + uLightAttenuation[index].y * D +
|
|
||||||
uLightAttenuation[index].z * D * D);
|
|
||||||
|
|
||||||
ambient += uLightAmbient[index] * Attenuation;
|
|
||||||
|
|
||||||
float NdotL = dot(normal, L);
|
|
||||||
|
|
||||||
if (NdotL > 0.0)
|
|
||||||
{
|
|
||||||
diffuse += uLightDiffuse[index] * NdotL * Attenuation;
|
|
||||||
|
|
||||||
vec3 E = normalize(-position);
|
|
||||||
vec3 HalfVector = normalize(L + E);
|
|
||||||
float NdotH = max(0.0, dot(normal, HalfVector));
|
|
||||||
|
|
||||||
float SpecularFactor = pow(NdotH, uMaterialShininess);
|
|
||||||
specular += uLightSpecular[index] * SpecularFactor * Attenuation;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void spotLight(in int index, in vec3 position, in vec3 normal, inout vec4 ambient, inout vec4 diffuse, inout vec4 specular)
|
|
||||||
{
|
|
||||||
// TO-DO
|
|
||||||
}
|
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
gl_Position = uWVPMatrix * vec4(inVertexPosition, 1.0);
|
gl_Position = uWVPMatrix * vec4(inVertexPosition, 1.0);
|
||||||
@ -104,48 +41,5 @@ void main()
|
|||||||
|
|
||||||
vec3 Position = (uWVMatrix * vec4(inVertexPosition, 1.0)).xyz;
|
vec3 Position = (uWVMatrix * vec4(inVertexPosition, 1.0)).xyz;
|
||||||
|
|
||||||
if (uLightCount > 0)
|
|
||||||
{
|
|
||||||
vec3 Normal = normalize((uNMatrix * vec4(inVertexNormal, 0.0)).xyz);
|
|
||||||
|
|
||||||
vec4 Ambient = vec4(0.0, 0.0, 0.0, 0.0);
|
|
||||||
vec4 Diffuse = vec4(0.0, 0.0, 0.0, 0.0);
|
|
||||||
|
|
||||||
for (int i = 0; i < int(MAX_LIGHTS); i++)
|
|
||||||
{
|
|
||||||
if( i >= uLightCount ) // can't use uniform as loop-counter directly in glsl
|
|
||||||
break;
|
|
||||||
if (uLightType[i] == 0)
|
|
||||||
pointLight(i, Position, Normal, Ambient, Diffuse, vSpecularColor);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < int(MAX_LIGHTS); i++)
|
|
||||||
{
|
|
||||||
if( i >= uLightCount )
|
|
||||||
break;
|
|
||||||
if (uLightType[i] == 1)
|
|
||||||
spotLight(i, Position, Normal, Ambient, Diffuse, vSpecularColor);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < int(MAX_LIGHTS); i++)
|
|
||||||
{
|
|
||||||
if( i >= uLightCount )
|
|
||||||
break;
|
|
||||||
if (uLightType[i] == 2)
|
|
||||||
dirLight(i, Position, Normal, Ambient, Diffuse, vSpecularColor);
|
|
||||||
}
|
|
||||||
|
|
||||||
vec4 LightColor = Ambient * uMaterialAmbient + Diffuse * uMaterialDiffuse;
|
|
||||||
LightColor = clamp(LightColor, 0.0, 1.0);
|
|
||||||
LightColor.w = 1.0;
|
|
||||||
|
|
||||||
vVertexColor *= LightColor;
|
|
||||||
vVertexColor += uMaterialEmissive;
|
|
||||||
vVertexColor += uGlobalAmbient * uMaterialAmbient;
|
|
||||||
vVertexColor = clamp(vVertexColor, 0.0, 1.0);
|
|
||||||
|
|
||||||
vSpecularColor *= uMaterialSpecular;
|
|
||||||
}
|
|
||||||
|
|
||||||
vFogCoord = length(Position);
|
vFogCoord = length(Position);
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
#define MAX_LIGHTS 8
|
|
||||||
|
|
||||||
/* Attributes */
|
/* Attributes */
|
||||||
|
|
||||||
attribute vec3 inVertexPosition;
|
attribute vec3 inVertexPosition;
|
||||||
@ -23,15 +21,6 @@ uniform vec4 uMaterialEmissive;
|
|||||||
uniform vec4 uMaterialSpecular;
|
uniform vec4 uMaterialSpecular;
|
||||||
uniform float uMaterialShininess;
|
uniform float uMaterialShininess;
|
||||||
|
|
||||||
uniform int uLightCount;
|
|
||||||
uniform int uLightType[MAX_LIGHTS];
|
|
||||||
uniform vec3 uLightPosition[MAX_LIGHTS];
|
|
||||||
uniform vec3 uLightDirection[MAX_LIGHTS];
|
|
||||||
uniform vec3 uLightAttenuation[MAX_LIGHTS];
|
|
||||||
uniform vec4 uLightAmbient[MAX_LIGHTS];
|
|
||||||
uniform vec4 uLightDiffuse[MAX_LIGHTS];
|
|
||||||
uniform vec4 uLightSpecular[MAX_LIGHTS];
|
|
||||||
|
|
||||||
uniform float uThickness;
|
uniform float uThickness;
|
||||||
|
|
||||||
/* Varyings */
|
/* Varyings */
|
||||||
@ -42,58 +31,6 @@ varying vec4 vVertexColor;
|
|||||||
varying vec4 vSpecularColor;
|
varying vec4 vSpecularColor;
|
||||||
varying float vFogCoord;
|
varying float vFogCoord;
|
||||||
|
|
||||||
void dirLight(in int index, in vec3 position, in vec3 normal, inout vec4 ambient, inout vec4 diffuse, inout vec4 specular)
|
|
||||||
{
|
|
||||||
vec3 L = normalize(-(uNMatrix * vec4(uLightDirection[index], 0.0)).xyz);
|
|
||||||
|
|
||||||
ambient += uLightAmbient[index];
|
|
||||||
|
|
||||||
float NdotL = dot(normal, L);
|
|
||||||
|
|
||||||
if (NdotL > 0.0)
|
|
||||||
{
|
|
||||||
diffuse += uLightDiffuse[index] * NdotL;
|
|
||||||
|
|
||||||
vec3 E = normalize(-position);
|
|
||||||
vec3 HalfVector = normalize(L + E);
|
|
||||||
float NdotH = max(0.0, dot(normal, HalfVector));
|
|
||||||
|
|
||||||
float SpecularFactor = pow(NdotH, uMaterialShininess);
|
|
||||||
specular += uLightSpecular[index] * SpecularFactor;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void pointLight(in int index, in vec3 position, in vec3 normal, inout vec4 ambient, inout vec4 diffuse, inout vec4 specular)
|
|
||||||
{
|
|
||||||
vec3 L = uLightPosition[index] - position;
|
|
||||||
float D = length(L);
|
|
||||||
L = normalize(L);
|
|
||||||
|
|
||||||
float Attenuation = 1.0 / (uLightAttenuation[index].x + uLightAttenuation[index].y * D +
|
|
||||||
uLightAttenuation[index].z * D * D);
|
|
||||||
|
|
||||||
ambient += uLightAmbient[index] * Attenuation;
|
|
||||||
|
|
||||||
float NdotL = dot(normal, L);
|
|
||||||
|
|
||||||
if (NdotL > 0.0)
|
|
||||||
{
|
|
||||||
diffuse += uLightDiffuse[index] * NdotL * Attenuation;
|
|
||||||
|
|
||||||
vec3 E = normalize(-position);
|
|
||||||
vec3 HalfVector = normalize(L + E);
|
|
||||||
float NdotH = max(0.0, dot(normal, HalfVector));
|
|
||||||
|
|
||||||
float SpecularFactor = pow(NdotH, uMaterialShininess);
|
|
||||||
specular += uLightSpecular[index] * SpecularFactor * Attenuation;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void spotLight(in int index, in vec3 position, in vec3 normal, inout vec4 ambient, inout vec4 diffuse, inout vec4 specular)
|
|
||||||
{
|
|
||||||
// TO-DO
|
|
||||||
}
|
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
gl_Position = uWVPMatrix * vec4(inVertexPosition, 1.0);
|
gl_Position = uWVPMatrix * vec4(inVertexPosition, 1.0);
|
||||||
@ -110,48 +47,5 @@ void main()
|
|||||||
|
|
||||||
vec3 Position = (uWVMatrix * vec4(inVertexPosition, 1.0)).xyz;
|
vec3 Position = (uWVMatrix * vec4(inVertexPosition, 1.0)).xyz;
|
||||||
|
|
||||||
if (uLightCount > 0)
|
|
||||||
{
|
|
||||||
vec3 Normal = normalize((uNMatrix * vec4(inVertexNormal, 0.0)).xyz);
|
|
||||||
|
|
||||||
vec4 Ambient = vec4(0.0, 0.0, 0.0, 0.0);
|
|
||||||
vec4 Diffuse = vec4(0.0, 0.0, 0.0, 0.0);
|
|
||||||
|
|
||||||
for (int i = 0; i < int(MAX_LIGHTS); i++)
|
|
||||||
{
|
|
||||||
if( i >= uLightCount ) // can't use uniform as loop-counter directly in glsl
|
|
||||||
break;
|
|
||||||
if (uLightType[i] == 0)
|
|
||||||
pointLight(i, Position, Normal, Ambient, Diffuse, vSpecularColor);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < int(MAX_LIGHTS); i++)
|
|
||||||
{
|
|
||||||
if( i >= uLightCount )
|
|
||||||
break;
|
|
||||||
if (uLightType[i] == 1)
|
|
||||||
spotLight(i, Position, Normal, Ambient, Diffuse, vSpecularColor);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < int(MAX_LIGHTS); i++)
|
|
||||||
{
|
|
||||||
if( i >= uLightCount )
|
|
||||||
break;
|
|
||||||
if (uLightType[i] == 2)
|
|
||||||
dirLight(i, Position, Normal, Ambient, Diffuse, vSpecularColor);
|
|
||||||
}
|
|
||||||
|
|
||||||
vec4 LightColor = Ambient * uMaterialAmbient + Diffuse * uMaterialDiffuse;
|
|
||||||
LightColor = clamp(LightColor, 0.0, 1.0);
|
|
||||||
LightColor.w = 1.0;
|
|
||||||
|
|
||||||
vVertexColor *= LightColor;
|
|
||||||
vVertexColor += uMaterialEmissive;
|
|
||||||
vVertexColor += uGlobalAmbient * uMaterialAmbient;
|
|
||||||
vVertexColor = clamp(vVertexColor, 0.0, 1.0);
|
|
||||||
|
|
||||||
vSpecularColor *= uMaterialSpecular;
|
|
||||||
}
|
|
||||||
|
|
||||||
vFogCoord = length(Position);
|
vFogCoord = length(Position);
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
#define MAX_LIGHTS 8
|
|
||||||
|
|
||||||
/* Attributes */
|
/* Attributes */
|
||||||
|
|
||||||
attribute vec3 inVertexPosition;
|
attribute vec3 inVertexPosition;
|
||||||
@ -21,15 +19,6 @@ uniform vec4 uMaterialEmissive;
|
|||||||
uniform vec4 uMaterialSpecular;
|
uniform vec4 uMaterialSpecular;
|
||||||
uniform float uMaterialShininess;
|
uniform float uMaterialShininess;
|
||||||
|
|
||||||
uniform int uLightCount;
|
|
||||||
uniform int uLightType[MAX_LIGHTS];
|
|
||||||
uniform vec3 uLightPosition[MAX_LIGHTS];
|
|
||||||
uniform vec3 uLightDirection[MAX_LIGHTS];
|
|
||||||
uniform vec3 uLightAttenuation[MAX_LIGHTS];
|
|
||||||
uniform vec4 uLightAmbient[MAX_LIGHTS];
|
|
||||||
uniform vec4 uLightDiffuse[MAX_LIGHTS];
|
|
||||||
uniform vec4 uLightSpecular[MAX_LIGHTS];
|
|
||||||
|
|
||||||
uniform float uThickness;
|
uniform float uThickness;
|
||||||
|
|
||||||
/* Varyings */
|
/* Varyings */
|
||||||
@ -39,58 +28,6 @@ varying vec4 vVertexColor;
|
|||||||
varying vec4 vSpecularColor;
|
varying vec4 vSpecularColor;
|
||||||
varying float vFogCoord;
|
varying float vFogCoord;
|
||||||
|
|
||||||
void dirLight(in int index, in vec3 position, in vec3 normal, inout vec4 ambient, inout vec4 diffuse, inout vec4 specular)
|
|
||||||
{
|
|
||||||
vec3 L = normalize(-(uNMatrix * vec4(uLightDirection[index], 0.0)).xyz);
|
|
||||||
|
|
||||||
ambient += uLightAmbient[index];
|
|
||||||
|
|
||||||
float NdotL = dot(normal, L);
|
|
||||||
|
|
||||||
if (NdotL > 0.0)
|
|
||||||
{
|
|
||||||
diffuse += uLightDiffuse[index] * NdotL;
|
|
||||||
|
|
||||||
vec3 E = normalize(-position);
|
|
||||||
vec3 HalfVector = normalize(L + E);
|
|
||||||
float NdotH = max(0.0, dot(normal, HalfVector));
|
|
||||||
|
|
||||||
float SpecularFactor = pow(NdotH, uMaterialShininess);
|
|
||||||
specular += uLightSpecular[index] * SpecularFactor;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void pointLight(in int index, in vec3 position, in vec3 normal, inout vec4 ambient, inout vec4 diffuse, inout vec4 specular)
|
|
||||||
{
|
|
||||||
vec3 L = uLightPosition[index] - position;
|
|
||||||
float D = length(L);
|
|
||||||
L = normalize(L);
|
|
||||||
|
|
||||||
float Attenuation = 1.0 / (uLightAttenuation[index].x + uLightAttenuation[index].y * D +
|
|
||||||
uLightAttenuation[index].z * D * D);
|
|
||||||
|
|
||||||
ambient += uLightAmbient[index] * Attenuation;
|
|
||||||
|
|
||||||
float NdotL = dot(normal, L);
|
|
||||||
|
|
||||||
if (NdotL > 0.0)
|
|
||||||
{
|
|
||||||
diffuse += uLightDiffuse[index] * NdotL * Attenuation;
|
|
||||||
|
|
||||||
vec3 E = normalize(-position);
|
|
||||||
vec3 HalfVector = normalize(L + E);
|
|
||||||
float NdotH = max(0.0, dot(normal, HalfVector));
|
|
||||||
|
|
||||||
float SpecularFactor = pow(NdotH, uMaterialShininess);
|
|
||||||
specular += uLightSpecular[index] * SpecularFactor * Attenuation;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void spotLight(in int index, in vec3 position, in vec3 normal, inout vec4 ambient, inout vec4 diffuse, inout vec4 specular)
|
|
||||||
{
|
|
||||||
// TO-DO
|
|
||||||
}
|
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
gl_Position = uWVPMatrix * vec4(inVertexPosition, 1.0);
|
gl_Position = uWVPMatrix * vec4(inVertexPosition, 1.0);
|
||||||
@ -107,48 +44,5 @@ void main()
|
|||||||
vVertexColor = inVertexColor.bgra;
|
vVertexColor = inVertexColor.bgra;
|
||||||
vSpecularColor = vec4(0.0, 0.0, 0.0, 0.0);
|
vSpecularColor = vec4(0.0, 0.0, 0.0, 0.0);
|
||||||
|
|
||||||
if (uLightCount > 0)
|
|
||||||
{
|
|
||||||
vec3 Normal = normalize((uNMatrix * vec4(inVertexNormal, 0.0)).xyz);
|
|
||||||
|
|
||||||
vec4 Ambient = vec4(0.0, 0.0, 0.0, 0.0);
|
|
||||||
vec4 Diffuse = vec4(0.0, 0.0, 0.0, 0.0);
|
|
||||||
|
|
||||||
for (int i = 0; i < int(MAX_LIGHTS); i++)
|
|
||||||
{
|
|
||||||
if( i >= uLightCount ) // can't use uniform as loop-counter directly in glsl
|
|
||||||
break;
|
|
||||||
if (uLightType[i] == 0)
|
|
||||||
pointLight(i, Position, Normal, Ambient, Diffuse, vSpecularColor);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < int(MAX_LIGHTS); i++)
|
|
||||||
{
|
|
||||||
if( i >= uLightCount )
|
|
||||||
break;
|
|
||||||
if (uLightType[i] == 1)
|
|
||||||
spotLight(i, Position, Normal, Ambient, Diffuse, vSpecularColor);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < int(MAX_LIGHTS); i++)
|
|
||||||
{
|
|
||||||
if( i >= uLightCount )
|
|
||||||
break;
|
|
||||||
if (uLightType[i] == 2)
|
|
||||||
dirLight(i, Position, Normal, Ambient, Diffuse, vSpecularColor);
|
|
||||||
}
|
|
||||||
|
|
||||||
vec4 LightColor = Ambient * uMaterialAmbient + Diffuse * uMaterialDiffuse;
|
|
||||||
LightColor = clamp(LightColor, 0.0, 1.0);
|
|
||||||
LightColor.w = 1.0;
|
|
||||||
|
|
||||||
vVertexColor *= LightColor;
|
|
||||||
vVertexColor += uMaterialEmissive;
|
|
||||||
vVertexColor += uGlobalAmbient * uMaterialAmbient;
|
|
||||||
vVertexColor = clamp(vVertexColor, 0.0, 1.0);
|
|
||||||
|
|
||||||
vSpecularColor *= uMaterialSpecular;
|
|
||||||
}
|
|
||||||
|
|
||||||
vFogCoord = length(Position);
|
vFogCoord = length(Position);
|
||||||
}
|
}
|
||||||
|
@ -54,7 +54,7 @@ namespace io
|
|||||||
virtual void addDirectoryToFileList(const io::path &filename);
|
virtual void addDirectoryToFileList(const io::path &filename);
|
||||||
|
|
||||||
//! return the name (id) of the file Archive
|
//! return the name (id) of the file Archive
|
||||||
virtual const io::path& getArchiveName() const _IRR_OVERRIDE_ {return Path;}
|
const io::path& getArchiveName() const override {return Path;}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
//! Android's asset manager
|
//! Android's asset manager
|
||||||
|
@ -276,6 +276,7 @@ void CAnimatedMeshSceneNode::render()
|
|||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
os::Printer::log("Animated Mesh returned no mesh to render.", Mesh->getDebugName(), ELL_WARNING);
|
os::Printer::log("Animated Mesh returned no mesh to render.", Mesh->getDebugName(), ELL_WARNING);
|
||||||
#endif
|
#endif
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
driver->setTransform(video::ETS_WORLD, AbsoluteTransformation);
|
driver->setTransform(video::ETS_WORLD, AbsoluteTransformation);
|
||||||
|
@ -31,114 +31,114 @@ namespace scene
|
|||||||
virtual ~CAnimatedMeshSceneNode();
|
virtual ~CAnimatedMeshSceneNode();
|
||||||
|
|
||||||
//! sets the current frame. from now on the animation is played from this frame.
|
//! sets the current frame. from now on the animation is played from this frame.
|
||||||
virtual void setCurrentFrame(f32 frame) _IRR_OVERRIDE_;
|
void setCurrentFrame(f32 frame) override;
|
||||||
|
|
||||||
//! frame
|
//! frame
|
||||||
virtual void OnRegisterSceneNode() _IRR_OVERRIDE_;
|
void OnRegisterSceneNode() override;
|
||||||
|
|
||||||
//! OnAnimate() is called just before rendering the whole scene.
|
//! OnAnimate() is called just before rendering the whole scene.
|
||||||
virtual void OnAnimate(u32 timeMs) _IRR_OVERRIDE_;
|
void OnAnimate(u32 timeMs) override;
|
||||||
|
|
||||||
//! renders the node.
|
//! renders the node.
|
||||||
virtual void render() _IRR_OVERRIDE_;
|
void render() override;
|
||||||
|
|
||||||
//! returns the axis aligned bounding box of this node
|
//! returns the axis aligned bounding box of this node
|
||||||
virtual const core::aabbox3d<f32>& getBoundingBox() const _IRR_OVERRIDE_;
|
const core::aabbox3d<f32>& getBoundingBox() const override;
|
||||||
|
|
||||||
//! sets the frames between the animation is looped.
|
//! sets the frames between the animation is looped.
|
||||||
//! the default is 0 - MaximalFrameCount of the mesh.
|
//! the default is 0 - MaximalFrameCount of the mesh.
|
||||||
//! NOTE: setMesh will also change this value and set it to the full range of animations of the mesh
|
//! NOTE: setMesh will also change this value and set it to the full range of animations of the mesh
|
||||||
virtual bool setFrameLoop(s32 begin, s32 end) _IRR_OVERRIDE_;
|
bool setFrameLoop(s32 begin, s32 end) override;
|
||||||
|
|
||||||
//! Sets looping mode which is on by default. If set to false,
|
//! Sets looping mode which is on by default. If set to false,
|
||||||
//! animations will not be looped.
|
//! animations will not be looped.
|
||||||
virtual void setLoopMode(bool playAnimationLooped) _IRR_OVERRIDE_;
|
void setLoopMode(bool playAnimationLooped) override;
|
||||||
|
|
||||||
//! returns the current loop mode
|
//! returns the current loop mode
|
||||||
virtual bool getLoopMode() const _IRR_OVERRIDE_;
|
bool getLoopMode() const override;
|
||||||
|
|
||||||
//! Sets a callback interface which will be called if an animation
|
//! Sets a callback interface which will be called if an animation
|
||||||
//! playback has ended. Set this to 0 to disable the callback again.
|
//! playback has ended. Set this to 0 to disable the callback again.
|
||||||
virtual void setAnimationEndCallback(IAnimationEndCallBack* callback=0) _IRR_OVERRIDE_;
|
void setAnimationEndCallback(IAnimationEndCallBack* callback=0) override;
|
||||||
|
|
||||||
//! sets the speed with which the animation is played
|
//! sets the speed with which the animation is played
|
||||||
//! NOTE: setMesh will also change this value and set it to the default speed of the mesh
|
//! NOTE: setMesh will also change this value and set it to the default speed of the mesh
|
||||||
virtual void setAnimationSpeed(f32 framesPerSecond) _IRR_OVERRIDE_;
|
void setAnimationSpeed(f32 framesPerSecond) override;
|
||||||
|
|
||||||
//! gets the speed with which the animation is played
|
//! gets the speed with which the animation is played
|
||||||
virtual f32 getAnimationSpeed() const _IRR_OVERRIDE_;
|
f32 getAnimationSpeed() const override;
|
||||||
|
|
||||||
//! returns the material based on the zero based index i. To get the amount
|
//! returns the material based on the zero based index i. To get the amount
|
||||||
//! of materials used by this scene node, use getMaterialCount().
|
//! of materials used by this scene node, use getMaterialCount().
|
||||||
//! This function is needed for inserting the node into the scene hierarchy on a
|
//! This function is needed for inserting the node into the scene hierarchy on a
|
||||||
//! optimal position for minimizing renderstate changes, but can also be used
|
//! optimal position for minimizing renderstate changes, but can also be used
|
||||||
//! to directly modify the material of a scene node.
|
//! to directly modify the material of a scene node.
|
||||||
virtual video::SMaterial& getMaterial(u32 i) _IRR_OVERRIDE_;
|
video::SMaterial& getMaterial(u32 i) override;
|
||||||
|
|
||||||
//! returns amount of materials used by this scene node.
|
//! returns amount of materials used by this scene node.
|
||||||
virtual u32 getMaterialCount() const _IRR_OVERRIDE_;
|
u32 getMaterialCount() const override;
|
||||||
|
|
||||||
//! Returns a pointer to a child node, which has the same transformation as
|
//! Returns a pointer to a child node, which has the same transformation as
|
||||||
//! the corresponding joint, if the mesh in this scene node is a skinned mesh.
|
//! the corresponding joint, if the mesh in this scene node is a skinned mesh.
|
||||||
virtual IBoneSceneNode* getJointNode(const c8* jointName) _IRR_OVERRIDE_;
|
IBoneSceneNode* getJointNode(const c8* jointName) override;
|
||||||
|
|
||||||
//! same as getJointNode(const c8* jointName), but based on id
|
//! same as getJointNode(const c8* jointName), but based on id
|
||||||
virtual IBoneSceneNode* getJointNode(u32 jointID) _IRR_OVERRIDE_;
|
IBoneSceneNode* getJointNode(u32 jointID) override;
|
||||||
|
|
||||||
//! Gets joint count.
|
//! Gets joint count.
|
||||||
virtual u32 getJointCount() const _IRR_OVERRIDE_;
|
u32 getJointCount() const override;
|
||||||
|
|
||||||
//! Removes a child from this scene node.
|
//! Removes a child from this scene node.
|
||||||
//! Implemented here, to be able to remove the shadow properly, if there is one,
|
//! Implemented here, to be able to remove the shadow properly, if there is one,
|
||||||
//! or to remove attached child.
|
//! or to remove attached child.
|
||||||
virtual bool removeChild(ISceneNode* child) _IRR_OVERRIDE_;
|
bool removeChild(ISceneNode* child) override;
|
||||||
|
|
||||||
//! Returns the current displayed frame number.
|
//! Returns the current displayed frame number.
|
||||||
virtual f32 getFrameNr() const _IRR_OVERRIDE_;
|
f32 getFrameNr() const override;
|
||||||
//! Returns the current start frame number.
|
//! Returns the current start frame number.
|
||||||
virtual s32 getStartFrame() const _IRR_OVERRIDE_;
|
s32 getStartFrame() const override;
|
||||||
//! Returns the current end frame number.
|
//! Returns the current end frame number.
|
||||||
virtual s32 getEndFrame() const _IRR_OVERRIDE_;
|
s32 getEndFrame() const override;
|
||||||
|
|
||||||
//! Sets if the scene node should not copy the materials of the mesh but use them in a read only style.
|
//! Sets if the scene node should not copy the materials of the mesh but use them in a read only style.
|
||||||
/* In this way it is possible to change the materials a mesh causing all mesh scene nodes
|
/* In this way it is possible to change the materials a mesh causing all mesh scene nodes
|
||||||
referencing this mesh to change too. */
|
referencing this mesh to change too. */
|
||||||
virtual void setReadOnlyMaterials(bool readonly) _IRR_OVERRIDE_;
|
void setReadOnlyMaterials(bool readonly) override;
|
||||||
|
|
||||||
//! Returns if the scene node should not copy the materials of the mesh but use them in a read only style
|
//! Returns if the scene node should not copy the materials of the mesh but use them in a read only style
|
||||||
virtual bool isReadOnlyMaterials() const _IRR_OVERRIDE_;
|
bool isReadOnlyMaterials() const override;
|
||||||
|
|
||||||
//! Sets a new mesh
|
//! Sets a new mesh
|
||||||
virtual void setMesh(IAnimatedMesh* mesh) _IRR_OVERRIDE_;
|
void setMesh(IAnimatedMesh* mesh) override;
|
||||||
|
|
||||||
//! Returns the current mesh
|
//! Returns the current mesh
|
||||||
virtual IAnimatedMesh* getMesh(void) _IRR_OVERRIDE_ { return Mesh; }
|
IAnimatedMesh* getMesh(void) override { return Mesh; }
|
||||||
|
|
||||||
//! Returns type of the scene node
|
//! Returns type of the scene node
|
||||||
virtual ESCENE_NODE_TYPE getType() const _IRR_OVERRIDE_ { return ESNT_ANIMATED_MESH; }
|
ESCENE_NODE_TYPE getType() const override { return ESNT_ANIMATED_MESH; }
|
||||||
|
|
||||||
//! updates the absolute position based on the relative and the parents position
|
//! updates the absolute position based on the relative and the parents position
|
||||||
virtual void updateAbsolutePosition() _IRR_OVERRIDE_;
|
void updateAbsolutePosition() override;
|
||||||
|
|
||||||
|
|
||||||
//! Set the joint update mode (0-unused, 1-get joints only, 2-set joints only, 3-move and set)
|
//! Set the joint update mode (0-unused, 1-get joints only, 2-set joints only, 3-move and set)
|
||||||
virtual void setJointMode(E_JOINT_UPDATE_ON_RENDER mode) _IRR_OVERRIDE_;
|
void setJointMode(E_JOINT_UPDATE_ON_RENDER mode) override;
|
||||||
|
|
||||||
//! Sets the transition time in seconds (note: This needs to enable joints, and setJointmode maybe set to 2)
|
//! Sets the transition time in seconds (note: This needs to enable joints, and setJointmode maybe set to 2)
|
||||||
//! you must call animateJoints(), or the mesh will not animate
|
//! you must call animateJoints(), or the mesh will not animate
|
||||||
virtual void setTransitionTime(f32 Time) _IRR_OVERRIDE_;
|
void setTransitionTime(f32 Time) override;
|
||||||
|
|
||||||
//! updates the joint positions of this mesh
|
//! updates the joint positions of this mesh
|
||||||
virtual void animateJoints(bool CalculateAbsolutePositions=true) _IRR_OVERRIDE_;
|
void animateJoints(bool CalculateAbsolutePositions=true) override;
|
||||||
|
|
||||||
//! render mesh ignoring its transformation. Used with ragdolls. (culling is unaffected)
|
//! render mesh ignoring its transformation. Used with ragdolls. (culling is unaffected)
|
||||||
virtual void setRenderFromIdentity( bool On ) _IRR_OVERRIDE_;
|
void setRenderFromIdentity( bool On ) override;
|
||||||
|
|
||||||
//! Creates a clone of this scene node and its children.
|
//! Creates a clone of this scene node and its children.
|
||||||
/** \param newParent An optional new parent.
|
/** \param newParent An optional new parent.
|
||||||
\param newManager An optional new scene manager.
|
\param newManager An optional new scene manager.
|
||||||
\return The newly created clone of this node. */
|
\return The newly created clone of this node. */
|
||||||
virtual ISceneNode* clone(ISceneNode* newParent=0, ISceneManager* newManager=0) _IRR_OVERRIDE_;
|
ISceneNode* clone(ISceneNode* newParent=0, ISceneManager* newManager=0) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
@ -27,42 +27,42 @@ public:
|
|||||||
setBool(value);
|
setBool(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual s32 getInt() const _IRR_OVERRIDE_
|
s32 getInt() const override
|
||||||
{
|
{
|
||||||
return BoolValue ? 1 : 0;
|
return BoolValue ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual f32 getFloat() const _IRR_OVERRIDE_
|
f32 getFloat() const override
|
||||||
{
|
{
|
||||||
return BoolValue ? 1.0f : 0.0f;
|
return BoolValue ? 1.0f : 0.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual bool getBool() const _IRR_OVERRIDE_
|
bool getBool() const override
|
||||||
{
|
{
|
||||||
return BoolValue;
|
return BoolValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void setInt(s32 intValue) _IRR_OVERRIDE_
|
void setInt(s32 intValue) override
|
||||||
{
|
{
|
||||||
BoolValue = (intValue != 0);
|
BoolValue = (intValue != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void setFloat(f32 floatValue) _IRR_OVERRIDE_
|
void setFloat(f32 floatValue) override
|
||||||
{
|
{
|
||||||
BoolValue = (floatValue != 0);
|
BoolValue = (floatValue != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void setBool(bool boolValue) _IRR_OVERRIDE_
|
void setBool(bool boolValue) override
|
||||||
{
|
{
|
||||||
BoolValue = boolValue;
|
BoolValue = boolValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual E_ATTRIBUTE_TYPE getType() const _IRR_OVERRIDE_
|
E_ATTRIBUTE_TYPE getType() const override
|
||||||
{
|
{
|
||||||
return EAT_BOOL;
|
return EAT_BOOL;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual const wchar_t* getTypeString() const _IRR_OVERRIDE_
|
const wchar_t* getTypeString() const override
|
||||||
{
|
{
|
||||||
return L"bool";
|
return L"bool";
|
||||||
}
|
}
|
||||||
@ -81,32 +81,32 @@ public:
|
|||||||
setInt(value);
|
setInt(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual s32 getInt() const _IRR_OVERRIDE_
|
s32 getInt() const override
|
||||||
{
|
{
|
||||||
return Value;
|
return Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual f32 getFloat() const _IRR_OVERRIDE_
|
f32 getFloat() const override
|
||||||
{
|
{
|
||||||
return (f32)Value;
|
return (f32)Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void setInt(s32 intValue) _IRR_OVERRIDE_
|
void setInt(s32 intValue) override
|
||||||
{
|
{
|
||||||
Value = intValue;
|
Value = intValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void setFloat(f32 floatValue) _IRR_OVERRIDE_
|
void setFloat(f32 floatValue) override
|
||||||
{
|
{
|
||||||
Value = (s32)floatValue;
|
Value = (s32)floatValue;
|
||||||
};
|
};
|
||||||
|
|
||||||
virtual E_ATTRIBUTE_TYPE getType() const _IRR_OVERRIDE_
|
E_ATTRIBUTE_TYPE getType() const override
|
||||||
{
|
{
|
||||||
return EAT_INT;
|
return EAT_INT;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual const wchar_t* getTypeString() const _IRR_OVERRIDE_
|
const wchar_t* getTypeString() const override
|
||||||
{
|
{
|
||||||
return L"int";
|
return L"int";
|
||||||
}
|
}
|
||||||
@ -125,32 +125,32 @@ public:
|
|||||||
setFloat(value);
|
setFloat(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual s32 getInt() const _IRR_OVERRIDE_
|
s32 getInt() const override
|
||||||
{
|
{
|
||||||
return (s32)Value;
|
return (s32)Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual f32 getFloat() const _IRR_OVERRIDE_
|
f32 getFloat() const override
|
||||||
{
|
{
|
||||||
return Value;
|
return Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void setInt(s32 intValue) _IRR_OVERRIDE_
|
void setInt(s32 intValue) override
|
||||||
{
|
{
|
||||||
Value = (f32)intValue;
|
Value = (f32)intValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void setFloat(f32 floatValue) _IRR_OVERRIDE_
|
void setFloat(f32 floatValue) override
|
||||||
{
|
{
|
||||||
Value = floatValue;
|
Value = floatValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual E_ATTRIBUTE_TYPE getType() const _IRR_OVERRIDE_
|
E_ATTRIBUTE_TYPE getType() const override
|
||||||
{
|
{
|
||||||
return EAT_FLOAT;
|
return EAT_FLOAT;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual const wchar_t* getTypeString() const _IRR_OVERRIDE_
|
const wchar_t* getTypeString() const override
|
||||||
{
|
{
|
||||||
return L"float";
|
return L"float";
|
||||||
}
|
}
|
||||||
|
@ -30,37 +30,37 @@ public:
|
|||||||
~CAttributes();
|
~CAttributes();
|
||||||
|
|
||||||
//! Returns amount of attributes in this collection of attributes.
|
//! Returns amount of attributes in this collection of attributes.
|
||||||
virtual u32 getAttributeCount() const _IRR_OVERRIDE_;
|
u32 getAttributeCount() const override;
|
||||||
|
|
||||||
//! Returns attribute name by index.
|
//! Returns attribute name by index.
|
||||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||||
virtual const c8* getAttributeName(s32 index) const _IRR_OVERRIDE_;
|
const c8* getAttributeName(s32 index) const override;
|
||||||
|
|
||||||
//! Returns the type of an attribute
|
//! Returns the type of an attribute
|
||||||
//! \param attributeName: Name for the attribute
|
//! \param attributeName: Name for the attribute
|
||||||
virtual E_ATTRIBUTE_TYPE getAttributeType(const c8* attributeName) const _IRR_OVERRIDE_;
|
E_ATTRIBUTE_TYPE getAttributeType(const c8* attributeName) const override;
|
||||||
|
|
||||||
//! Returns attribute type by index.
|
//! Returns attribute type by index.
|
||||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||||
virtual E_ATTRIBUTE_TYPE getAttributeType(s32 index) const _IRR_OVERRIDE_;
|
E_ATTRIBUTE_TYPE getAttributeType(s32 index) const override;
|
||||||
|
|
||||||
//! Returns the type string of the attribute
|
//! Returns the type string of the attribute
|
||||||
//! \param attributeName: String for the attribute type
|
//! \param attributeName: String for the attribute type
|
||||||
//! \param defaultNotFound Value returned when attributeName was not found
|
//! \param defaultNotFound Value returned when attributeName was not found
|
||||||
virtual const wchar_t* getAttributeTypeString(const c8* attributeName, const wchar_t* defaultNotFound = L"unknown") const _IRR_OVERRIDE_;
|
const wchar_t* getAttributeTypeString(const c8* attributeName, const wchar_t* defaultNotFound = L"unknown") const override;
|
||||||
|
|
||||||
//! Returns the type string of the attribute by index.
|
//! Returns the type string of the attribute by index.
|
||||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||||
virtual const wchar_t* getAttributeTypeString(s32 index, const wchar_t* defaultNotFound = L"unknown") const _IRR_OVERRIDE_;
|
const wchar_t* getAttributeTypeString(s32 index, const wchar_t* defaultNotFound = L"unknown") const override;
|
||||||
|
|
||||||
//! Returns if an attribute with a name exists
|
//! Returns if an attribute with a name exists
|
||||||
virtual bool existsAttribute(const c8* attributeName) const _IRR_OVERRIDE_;
|
bool existsAttribute(const c8* attributeName) const override;
|
||||||
|
|
||||||
//! Returns attribute index from name, -1 if not found
|
//! Returns attribute index from name, -1 if not found
|
||||||
virtual s32 findAttribute(const c8* attributeName) const _IRR_OVERRIDE_;
|
s32 findAttribute(const c8* attributeName) const override;
|
||||||
|
|
||||||
//! Removes all attributes
|
//! Removes all attributes
|
||||||
virtual void clear() _IRR_OVERRIDE_;
|
void clear() override;
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -70,23 +70,23 @@ public:
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
//! Adds an attribute as integer
|
//! Adds an attribute as integer
|
||||||
virtual void addInt(const c8* attributeName, s32 value) _IRR_OVERRIDE_;
|
void addInt(const c8* attributeName, s32 value) override;
|
||||||
|
|
||||||
//! Sets an attribute as integer value
|
//! Sets an attribute as integer value
|
||||||
virtual void setAttribute(const c8* attributeName, s32 value) _IRR_OVERRIDE_;
|
void setAttribute(const c8* attributeName, s32 value) override;
|
||||||
|
|
||||||
//! Gets an attribute as integer value
|
//! Gets an attribute as integer value
|
||||||
//! \param attributeName: Name of the attribute to get.
|
//! \param attributeName: Name of the attribute to get.
|
||||||
//! \param defaultNotFound Value returned when attributeName was not found
|
//! \param defaultNotFound Value returned when attributeName was not found
|
||||||
//! \return Returns value of the attribute previously set by setAttribute()
|
//! \return Returns value of the attribute previously set by setAttribute()
|
||||||
virtual s32 getAttributeAsInt(const c8* attributeName, irr::s32 defaultNotFound=0) const _IRR_OVERRIDE_;
|
s32 getAttributeAsInt(const c8* attributeName, irr::s32 defaultNotFound=0) const override;
|
||||||
|
|
||||||
//! Gets an attribute as integer value
|
//! Gets an attribute as integer value
|
||||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||||
virtual s32 getAttributeAsInt(s32 index) const _IRR_OVERRIDE_;
|
s32 getAttributeAsInt(s32 index) const override;
|
||||||
|
|
||||||
//! Sets an attribute as integer value
|
//! Sets an attribute as integer value
|
||||||
virtual void setAttribute(s32 index, s32 value) _IRR_OVERRIDE_;
|
void setAttribute(s32 index, s32 value) override;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
@ -95,23 +95,23 @@ public:
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
//! Adds an attribute as float
|
//! Adds an attribute as float
|
||||||
virtual void addFloat(const c8* attributeName, f32 value) _IRR_OVERRIDE_;
|
void addFloat(const c8* attributeName, f32 value) override;
|
||||||
|
|
||||||
//! Sets a attribute as float value
|
//! Sets a attribute as float value
|
||||||
virtual void setAttribute(const c8* attributeName, f32 value) _IRR_OVERRIDE_;
|
void setAttribute(const c8* attributeName, f32 value) override;
|
||||||
|
|
||||||
//! Gets an attribute as float value
|
//! Gets an attribute as float value
|
||||||
//! \param attributeName: Name of the attribute to get.
|
//! \param attributeName: Name of the attribute to get.
|
||||||
//! \param defaultNotFound Value returned when attributeName was not found
|
//! \param defaultNotFound Value returned when attributeName was not found
|
||||||
//! \return Returns value of the attribute previously set by setAttribute()
|
//! \return Returns value of the attribute previously set by setAttribute()
|
||||||
virtual f32 getAttributeAsFloat(const c8* attributeName, irr::f32 defaultNotFound=0.f) const _IRR_OVERRIDE_;
|
f32 getAttributeAsFloat(const c8* attributeName, irr::f32 defaultNotFound=0.f) const override;
|
||||||
|
|
||||||
//! Gets an attribute as float value
|
//! Gets an attribute as float value
|
||||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||||
virtual f32 getAttributeAsFloat(s32 index) const _IRR_OVERRIDE_;
|
f32 getAttributeAsFloat(s32 index) const override;
|
||||||
|
|
||||||
//! Sets an attribute as float value
|
//! Sets an attribute as float value
|
||||||
virtual void setAttribute(s32 index, f32 value) _IRR_OVERRIDE_;
|
void setAttribute(s32 index, f32 value) override;
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -119,23 +119,23 @@ public:
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
//! Adds an attribute as bool
|
//! Adds an attribute as bool
|
||||||
virtual void addBool(const c8* attributeName, bool value) _IRR_OVERRIDE_;
|
void addBool(const c8* attributeName, bool value) override;
|
||||||
|
|
||||||
//! Sets an attribute as boolean value
|
//! Sets an attribute as boolean value
|
||||||
virtual void setAttribute(const c8* attributeName, bool value) _IRR_OVERRIDE_;
|
void setAttribute(const c8* attributeName, bool value) override;
|
||||||
|
|
||||||
//! Gets an attribute as boolean value
|
//! Gets an attribute as boolean value
|
||||||
//! \param attributeName: Name of the attribute to get.
|
//! \param attributeName: Name of the attribute to get.
|
||||||
//! \param defaultNotFound Value returned when attributeName was not found
|
//! \param defaultNotFound Value returned when attributeName was not found
|
||||||
//! \return Returns value of the attribute previously set by setAttribute()
|
//! \return Returns value of the attribute previously set by setAttribute()
|
||||||
virtual bool getAttributeAsBool(const c8* attributeName, bool defaultNotFound=false) const _IRR_OVERRIDE_;
|
bool getAttributeAsBool(const c8* attributeName, bool defaultNotFound=false) const override;
|
||||||
|
|
||||||
//! Gets an attribute as boolean value
|
//! Gets an attribute as boolean value
|
||||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||||
virtual bool getAttributeAsBool(s32 index) const _IRR_OVERRIDE_;
|
bool getAttributeAsBool(s32 index) const override;
|
||||||
|
|
||||||
//! Sets an attribute as boolean value
|
//! Sets an attribute as boolean value
|
||||||
virtual void setAttribute(s32 index, bool value) _IRR_OVERRIDE_;
|
void setAttribute(s32 index, bool value) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ namespace scene
|
|||||||
|
|
||||||
//! Constructor
|
//! Constructor
|
||||||
CB3DMeshFileLoader::CB3DMeshFileLoader(scene::ISceneManager* smgr)
|
CB3DMeshFileLoader::CB3DMeshFileLoader(scene::ISceneManager* smgr)
|
||||||
: AnimatedMesh(0), B3DFile(0), NormalsInFile(false),
|
: AnimatedMesh(0), B3DFile(0), VerticesStart(0), NormalsInFile(false),
|
||||||
HasVertexColors(false), ShowWarning(true)
|
HasVertexColors(false), ShowWarning(true)
|
||||||
{
|
{
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
|
@ -33,13 +33,13 @@ public:
|
|||||||
|
|
||||||
//! returns true if the file maybe is able to be loaded by this class
|
//! returns true if the file maybe is able to be loaded by this class
|
||||||
//! based on the file extension (e.g. ".bsp")
|
//! based on the file extension (e.g. ".bsp")
|
||||||
virtual bool isALoadableFileExtension(const io::path& filename) const _IRR_OVERRIDE_;
|
bool isALoadableFileExtension(const io::path& filename) const override;
|
||||||
|
|
||||||
//! creates/loads an animated mesh from the file.
|
//! creates/loads an animated mesh from the file.
|
||||||
//! \return Pointer to the created mesh. Returns 0 if loading failed.
|
//! \return Pointer to the created mesh. Returns 0 if loading failed.
|
||||||
//! If you no longer need the mesh, you should call IAnimatedMesh::drop().
|
//! If you no longer need the mesh, you should call IAnimatedMesh::drop().
|
||||||
//! See IReferenceCounted::drop() for more information.
|
//! See IReferenceCounted::drop() for more information.
|
||||||
virtual IAnimatedMesh* createMesh(io::IReadFile* file) _IRR_OVERRIDE_;
|
IAnimatedMesh* createMesh(io::IReadFile* file) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
@ -27,10 +27,10 @@ public:
|
|||||||
CB3DMeshWriter();
|
CB3DMeshWriter();
|
||||||
|
|
||||||
//! Returns the type of the mesh writer
|
//! Returns the type of the mesh writer
|
||||||
virtual EMESH_WRITER_TYPE getType() const _IRR_OVERRIDE_;
|
EMESH_WRITER_TYPE getType() const override;
|
||||||
|
|
||||||
//! writes a mesh
|
//! writes a mesh
|
||||||
virtual bool writeMesh(io::IWriteFile* file, scene::IMesh* mesh, s32 flags=EMWF_NONE) _IRR_OVERRIDE_;
|
bool writeMesh(io::IWriteFile* file, scene::IMesh* mesh, s32 flags=EMWF_NONE) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void writeJointChunk(io::IWriteFile* file, ISkinnedMesh* mesh , ISkinnedMesh::SJoint* joint, f32 animationSpeedMultiplier);
|
void writeJointChunk(io::IWriteFile* file, ISkinnedMesh* mesh , ISkinnedMesh::SJoint* joint, f32 animationSpeedMultiplier);
|
||||||
|
@ -28,58 +28,58 @@ public:
|
|||||||
virtual ~CBillboardSceneNode();
|
virtual ~CBillboardSceneNode();
|
||||||
|
|
||||||
//! pre render event
|
//! pre render event
|
||||||
virtual void OnRegisterSceneNode() _IRR_OVERRIDE_;
|
void OnRegisterSceneNode() override;
|
||||||
|
|
||||||
//! render
|
//! render
|
||||||
virtual void render() _IRR_OVERRIDE_;
|
void render() override;
|
||||||
|
|
||||||
//! returns the axis aligned bounding box of this node
|
//! returns the axis aligned bounding box of this node
|
||||||
virtual const core::aabbox3d<f32>& getBoundingBox() const _IRR_OVERRIDE_;
|
const core::aabbox3d<f32>& getBoundingBox() const override;
|
||||||
|
|
||||||
//! sets the size of the billboard
|
//! sets the size of the billboard
|
||||||
virtual void setSize(const core::dimension2d<f32>& size) _IRR_OVERRIDE_;
|
void setSize(const core::dimension2d<f32>& size) override;
|
||||||
|
|
||||||
//! Sets the widths of the top and bottom edges of the billboard independently.
|
//! Sets the widths of the top and bottom edges of the billboard independently.
|
||||||
virtual void setSize(f32 height, f32 bottomEdgeWidth, f32 topEdgeWidth) _IRR_OVERRIDE_;
|
void setSize(f32 height, f32 bottomEdgeWidth, f32 topEdgeWidth) override;
|
||||||
|
|
||||||
//! gets the size of the billboard
|
//! gets the size of the billboard
|
||||||
virtual const core::dimension2d<f32>& getSize() const _IRR_OVERRIDE_;
|
const core::dimension2d<f32>& getSize() const override;
|
||||||
|
|
||||||
//! Gets the widths of the top and bottom edges of the billboard.
|
//! Gets the widths of the top and bottom edges of the billboard.
|
||||||
virtual void getSize(f32& height, f32& bottomEdgeWidth, f32& topEdgeWidth) const _IRR_OVERRIDE_;
|
void getSize(f32& height, f32& bottomEdgeWidth, f32& topEdgeWidth) const override;
|
||||||
|
|
||||||
virtual video::SMaterial& getMaterial(u32 i) _IRR_OVERRIDE_;
|
video::SMaterial& getMaterial(u32 i) override;
|
||||||
|
|
||||||
//! returns amount of materials used by this scene node.
|
//! returns amount of materials used by this scene node.
|
||||||
virtual u32 getMaterialCount() const _IRR_OVERRIDE_;
|
u32 getMaterialCount() const override;
|
||||||
|
|
||||||
//! Set the color of all vertices of the billboard
|
//! Set the color of all vertices of the billboard
|
||||||
//! \param overallColor: the color to set
|
//! \param overallColor: the color to set
|
||||||
virtual void setColor(const video::SColor& overallColor) _IRR_OVERRIDE_;
|
void setColor(const video::SColor& overallColor) override;
|
||||||
|
|
||||||
//! Set the color of the top and bottom vertices of the billboard
|
//! Set the color of the top and bottom vertices of the billboard
|
||||||
//! \param topColor: the color to set the top vertices
|
//! \param topColor: the color to set the top vertices
|
||||||
//! \param bottomColor: the color to set the bottom vertices
|
//! \param bottomColor: the color to set the bottom vertices
|
||||||
virtual void setColor(const video::SColor& topColor,
|
virtual void setColor(const video::SColor& topColor,
|
||||||
const video::SColor& bottomColor) _IRR_OVERRIDE_;
|
const video::SColor& bottomColor) override;
|
||||||
|
|
||||||
//! Gets the color of the top and bottom vertices of the billboard
|
//! Gets the color of the top and bottom vertices of the billboard
|
||||||
//! \param[out] topColor: stores the color of the top vertices
|
//! \param[out] topColor: stores the color of the top vertices
|
||||||
//! \param[out] bottomColor: stores the color of the bottom vertices
|
//! \param[out] bottomColor: stores the color of the bottom vertices
|
||||||
virtual void getColor(video::SColor& topColor,
|
virtual void getColor(video::SColor& topColor,
|
||||||
video::SColor& bottomColor) const _IRR_OVERRIDE_;
|
video::SColor& bottomColor) const override;
|
||||||
|
|
||||||
//! Get the real boundingbox used by the billboard (which depends on the active camera)
|
//! Get the real boundingbox used by the billboard (which depends on the active camera)
|
||||||
virtual const core::aabbox3d<f32>& getTransformedBillboardBoundingBox(const irr::scene::ICameraSceneNode* camera) _IRR_OVERRIDE_;
|
const core::aabbox3d<f32>& getTransformedBillboardBoundingBox(const irr::scene::ICameraSceneNode* camera) override;
|
||||||
|
|
||||||
//! Get the amount of mesh buffers.
|
//! Get the amount of mesh buffers.
|
||||||
virtual u32 getMeshBufferCount() const _IRR_OVERRIDE_
|
u32 getMeshBufferCount() const override
|
||||||
{
|
{
|
||||||
return Buffer ? 1 : 0;
|
return Buffer ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Get pointer to the mesh buffer.
|
//! Get pointer to the mesh buffer.
|
||||||
virtual IMeshBuffer* getMeshBuffer(u32 nr) const _IRR_OVERRIDE_
|
IMeshBuffer* getMeshBuffer(u32 nr) const override
|
||||||
{
|
{
|
||||||
if ( nr == 0 )
|
if ( nr == 0 )
|
||||||
return Buffer;
|
return Buffer;
|
||||||
@ -87,10 +87,10 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
//! Returns type of the scene node
|
//! Returns type of the scene node
|
||||||
virtual ESCENE_NODE_TYPE getType() const _IRR_OVERRIDE_ { return ESNT_BILLBOARD; }
|
ESCENE_NODE_TYPE getType() const override { return ESNT_BILLBOARD; }
|
||||||
|
|
||||||
//! Creates a clone of this scene node and its children.
|
//! Creates a clone of this scene node and its children.
|
||||||
virtual ISceneNode* clone(ISceneNode* newParent=0, ISceneManager* newManager=0) _IRR_OVERRIDE_;
|
ISceneNode* clone(ISceneNode* newParent=0, ISceneManager* newManager=0) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void updateMesh(const irr::scene::ICameraSceneNode* camera);
|
void updateMesh(const irr::scene::ICameraSceneNode* camera);
|
||||||
|
@ -23,33 +23,33 @@ namespace scene
|
|||||||
s32 id=-1, u32 boneIndex=0, const c8* boneName=0);
|
s32 id=-1, u32 boneIndex=0, const c8* boneName=0);
|
||||||
|
|
||||||
//! Returns the index of the bone
|
//! Returns the index of the bone
|
||||||
virtual u32 getBoneIndex() const _IRR_OVERRIDE_;
|
u32 getBoneIndex() const override;
|
||||||
|
|
||||||
//! Sets the animation mode of the bone. Returns true if successful.
|
//! Sets the animation mode of the bone. Returns true if successful.
|
||||||
virtual bool setAnimationMode(E_BONE_ANIMATION_MODE mode) _IRR_OVERRIDE_;
|
bool setAnimationMode(E_BONE_ANIMATION_MODE mode) override;
|
||||||
|
|
||||||
//! Gets the current animation mode of the bone
|
//! Gets the current animation mode of the bone
|
||||||
virtual E_BONE_ANIMATION_MODE getAnimationMode() const _IRR_OVERRIDE_;
|
E_BONE_ANIMATION_MODE getAnimationMode() const override;
|
||||||
|
|
||||||
//! returns the axis aligned bounding box of this node
|
//! returns the axis aligned bounding box of this node
|
||||||
virtual const core::aabbox3d<f32>& getBoundingBox() const _IRR_OVERRIDE_;
|
const core::aabbox3d<f32>& getBoundingBox() const override;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
//! Returns the relative transformation of the scene node.
|
//! Returns the relative transformation of the scene node.
|
||||||
//virtual core::matrix4 getRelativeTransformation() const _IRR_OVERRIDE_;
|
//core::matrix4 getRelativeTransformation() const override;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
virtual void OnAnimate(u32 timeMs) _IRR_OVERRIDE_;
|
void OnAnimate(u32 timeMs) override;
|
||||||
|
|
||||||
virtual void updateAbsolutePositionOfAllChildren() _IRR_OVERRIDE_;
|
void updateAbsolutePositionOfAllChildren() override;
|
||||||
|
|
||||||
//! How the relative transformation of the bone is used
|
//! How the relative transformation of the bone is used
|
||||||
virtual void setSkinningSpace(E_BONE_SKINNING_SPACE space) _IRR_OVERRIDE_
|
void setSkinningSpace(E_BONE_SKINNING_SPACE space) override
|
||||||
{
|
{
|
||||||
SkinningSpace=space;
|
SkinningSpace=space;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual E_BONE_SKINNING_SPACE getSkinningSpace() const _IRR_OVERRIDE_
|
E_BONE_SKINNING_SPACE getSkinningSpace() const override
|
||||||
{
|
{
|
||||||
return SkinningSpace;
|
return SkinningSpace;
|
||||||
}
|
}
|
||||||
|
@ -30,117 +30,117 @@ namespace scene
|
|||||||
\param projection The new projection matrix of the camera.
|
\param projection The new projection matrix of the camera.
|
||||||
\param isOrthogonal Set this to true if the matrix is an orthogonal one (e.g.
|
\param isOrthogonal Set this to true if the matrix is an orthogonal one (e.g.
|
||||||
from matrix4::buildProjectionMatrixOrthoLH(). */
|
from matrix4::buildProjectionMatrixOrthoLH(). */
|
||||||
virtual void setProjectionMatrix(const core::matrix4& projection, bool isOrthogonal = false) _IRR_OVERRIDE_;
|
void setProjectionMatrix(const core::matrix4& projection, bool isOrthogonal = false) override;
|
||||||
|
|
||||||
//! Gets the current projection matrix of the camera
|
//! Gets the current projection matrix of the camera
|
||||||
//! \return Returns the current projection matrix of the camera.
|
//! \return Returns the current projection matrix of the camera.
|
||||||
virtual const core::matrix4& getProjectionMatrix() const _IRR_OVERRIDE_;
|
const core::matrix4& getProjectionMatrix() const override;
|
||||||
|
|
||||||
//! Gets the current view matrix of the camera
|
//! Gets the current view matrix of the camera
|
||||||
//! \return Returns the current view matrix of the camera.
|
//! \return Returns the current view matrix of the camera.
|
||||||
virtual const core::matrix4& getViewMatrix() const _IRR_OVERRIDE_;
|
const core::matrix4& getViewMatrix() const override;
|
||||||
|
|
||||||
//! Sets a custom view matrix affector.
|
//! Sets a custom view matrix affector.
|
||||||
/** \param affector: The affector matrix. */
|
/** \param affector: The affector matrix. */
|
||||||
virtual void setViewMatrixAffector(const core::matrix4& affector) _IRR_OVERRIDE_;
|
void setViewMatrixAffector(const core::matrix4& affector) override;
|
||||||
|
|
||||||
//! Gets the custom view matrix affector.
|
//! Gets the custom view matrix affector.
|
||||||
virtual const core::matrix4& getViewMatrixAffector() const _IRR_OVERRIDE_;
|
const core::matrix4& getViewMatrixAffector() const override;
|
||||||
|
|
||||||
//! It is possible to send mouse and key events to the camera. Most cameras
|
//! It is possible to send mouse and key events to the camera. Most cameras
|
||||||
//! may ignore this input, but camera scene nodes which are created for
|
//! may ignore this input, but camera scene nodes which are created for
|
||||||
//! example with scene::ISceneManager::addMayaCameraSceneNode or
|
//! example with scene::ISceneManager::addMayaCameraSceneNode or
|
||||||
//! scene::ISceneManager::addMeshViewerCameraSceneNode, may want to get this input
|
//! scene::ISceneManager::addMeshViewerCameraSceneNode, may want to get this input
|
||||||
//! for changing their position, look at target or whatever.
|
//! for changing their position, look at target or whatever.
|
||||||
virtual bool OnEvent(const SEvent& event) _IRR_OVERRIDE_;
|
bool OnEvent(const SEvent& event) override;
|
||||||
|
|
||||||
//! Sets the look at target of the camera
|
//! Sets the look at target of the camera
|
||||||
/** If the camera's target and rotation are bound ( @see bindTargetAndRotation() )
|
/** If the camera's target and rotation are bound ( @see bindTargetAndRotation() )
|
||||||
then calling this will also change the camera's scene node rotation to match the target.
|
then calling this will also change the camera's scene node rotation to match the target.
|
||||||
\param pos: Look at target of the camera. */
|
\param pos: Look at target of the camera. */
|
||||||
virtual void setTarget(const core::vector3df& pos) _IRR_OVERRIDE_;
|
void setTarget(const core::vector3df& pos) override;
|
||||||
|
|
||||||
//! Sets the rotation of the node.
|
//! Sets the rotation of the node.
|
||||||
/** This only modifies the relative rotation of the node.
|
/** This only modifies the relative rotation of the node.
|
||||||
If the camera's target and rotation are bound ( @see bindTargetAndRotation() )
|
If the camera's target and rotation are bound ( @see bindTargetAndRotation() )
|
||||||
then calling this will also change the camera's target to match the rotation.
|
then calling this will also change the camera's target to match the rotation.
|
||||||
\param rotation New rotation of the node in degrees. */
|
\param rotation New rotation of the node in degrees. */
|
||||||
virtual void setRotation(const core::vector3df& rotation) _IRR_OVERRIDE_;
|
void setRotation(const core::vector3df& rotation) override;
|
||||||
|
|
||||||
//! Gets the current look at target of the camera
|
//! Gets the current look at target of the camera
|
||||||
/** \return The current look at target of the camera */
|
/** \return The current look at target of the camera */
|
||||||
virtual const core::vector3df& getTarget() const _IRR_OVERRIDE_;
|
const core::vector3df& getTarget() const override;
|
||||||
|
|
||||||
//! Sets the up vector of the camera.
|
//! Sets the up vector of the camera.
|
||||||
//! \param pos: New upvector of the camera.
|
//! \param pos: New upvector of the camera.
|
||||||
virtual void setUpVector(const core::vector3df& pos) _IRR_OVERRIDE_;
|
void setUpVector(const core::vector3df& pos) override;
|
||||||
|
|
||||||
//! Gets the up vector of the camera.
|
//! Gets the up vector of the camera.
|
||||||
//! \return Returns the up vector of the camera.
|
//! \return Returns the up vector of the camera.
|
||||||
virtual const core::vector3df& getUpVector() const _IRR_OVERRIDE_;
|
const core::vector3df& getUpVector() const override;
|
||||||
|
|
||||||
//! Gets distance from the camera to the near plane.
|
//! Gets distance from the camera to the near plane.
|
||||||
//! \return Value of the near plane of the camera.
|
//! \return Value of the near plane of the camera.
|
||||||
virtual f32 getNearValue() const _IRR_OVERRIDE_;
|
f32 getNearValue() const override;
|
||||||
|
|
||||||
//! Gets the distance from the camera to the far plane.
|
//! Gets the distance from the camera to the far plane.
|
||||||
//! \return Value of the far plane of the camera.
|
//! \return Value of the far plane of the camera.
|
||||||
virtual f32 getFarValue() const _IRR_OVERRIDE_;
|
f32 getFarValue() const override;
|
||||||
|
|
||||||
//! Get the aspect ratio of the camera.
|
//! Get the aspect ratio of the camera.
|
||||||
//! \return The aspect ratio of the camera.
|
//! \return The aspect ratio of the camera.
|
||||||
virtual f32 getAspectRatio() const _IRR_OVERRIDE_;
|
f32 getAspectRatio() const override;
|
||||||
|
|
||||||
//! Gets the field of view of the camera.
|
//! Gets the field of view of the camera.
|
||||||
//! \return Field of view of the camera
|
//! \return Field of view of the camera
|
||||||
virtual f32 getFOV() const _IRR_OVERRIDE_;
|
f32 getFOV() const override;
|
||||||
|
|
||||||
//! Sets the value of the near clipping plane. (default: 1.0f)
|
//! Sets the value of the near clipping plane. (default: 1.0f)
|
||||||
virtual void setNearValue(f32 zn) _IRR_OVERRIDE_;
|
void setNearValue(f32 zn) override;
|
||||||
|
|
||||||
//! Sets the value of the far clipping plane (default: 2000.0f)
|
//! Sets the value of the far clipping plane (default: 2000.0f)
|
||||||
virtual void setFarValue(f32 zf) _IRR_OVERRIDE_;
|
void setFarValue(f32 zf) override;
|
||||||
|
|
||||||
//! Sets the aspect ratio (default: 4.0f / 3.0f)
|
//! Sets the aspect ratio (default: 4.0f / 3.0f)
|
||||||
virtual void setAspectRatio(f32 aspect) _IRR_OVERRIDE_;
|
void setAspectRatio(f32 aspect) override;
|
||||||
|
|
||||||
//! Sets the field of view (Default: PI / 3.5f)
|
//! Sets the field of view (Default: PI / 3.5f)
|
||||||
virtual void setFOV(f32 fovy) _IRR_OVERRIDE_;
|
void setFOV(f32 fovy) override;
|
||||||
|
|
||||||
//! PreRender event
|
//! PreRender event
|
||||||
virtual void OnRegisterSceneNode() _IRR_OVERRIDE_;
|
void OnRegisterSceneNode() override;
|
||||||
|
|
||||||
//! Render
|
//! Render
|
||||||
virtual void render() _IRR_OVERRIDE_;
|
void render() override;
|
||||||
|
|
||||||
//! Update
|
//! Update
|
||||||
virtual void updateMatrices() _IRR_OVERRIDE_;
|
void updateMatrices() override;
|
||||||
|
|
||||||
//! Returns the axis aligned bounding box of this node
|
//! Returns the axis aligned bounding box of this node
|
||||||
virtual const core::aabbox3d<f32>& getBoundingBox() const _IRR_OVERRIDE_;
|
const core::aabbox3d<f32>& getBoundingBox() const override;
|
||||||
|
|
||||||
//! Returns the view area.
|
//! Returns the view area.
|
||||||
virtual const SViewFrustum* getViewFrustum() const _IRR_OVERRIDE_;
|
const SViewFrustum* getViewFrustum() const override;
|
||||||
|
|
||||||
//! Disables or enables the camera to get key or mouse inputs.
|
//! Disables or enables the camera to get key or mouse inputs.
|
||||||
//! If this is set to true, the camera will respond to key inputs
|
//! If this is set to true, the camera will respond to key inputs
|
||||||
//! otherwise not.
|
//! otherwise not.
|
||||||
virtual void setInputReceiverEnabled(bool enabled) _IRR_OVERRIDE_;
|
void setInputReceiverEnabled(bool enabled) override;
|
||||||
|
|
||||||
//! Returns if the input receiver of the camera is currently enabled.
|
//! Returns if the input receiver of the camera is currently enabled.
|
||||||
virtual bool isInputReceiverEnabled() const _IRR_OVERRIDE_;
|
bool isInputReceiverEnabled() const override;
|
||||||
|
|
||||||
//! Returns type of the scene node
|
//! Returns type of the scene node
|
||||||
virtual ESCENE_NODE_TYPE getType() const _IRR_OVERRIDE_ { return ESNT_CAMERA; }
|
ESCENE_NODE_TYPE getType() const override { return ESNT_CAMERA; }
|
||||||
|
|
||||||
//! Binds the camera scene node's rotation to its target position and vice versa, or unbinds them.
|
//! Binds the camera scene node's rotation to its target position and vice versa, or unbinds them.
|
||||||
virtual void bindTargetAndRotation(bool bound) _IRR_OVERRIDE_;
|
void bindTargetAndRotation(bool bound) override;
|
||||||
|
|
||||||
//! Queries if the camera scene node's rotation and its target position are bound together.
|
//! Queries if the camera scene node's rotation and its target position are bound together.
|
||||||
virtual bool getTargetAndRotationBinding(void) const _IRR_OVERRIDE_;
|
bool getTargetAndRotationBinding(void) const override;
|
||||||
|
|
||||||
//! Creates a clone of this scene node and its children.
|
//! Creates a clone of this scene node and its children.
|
||||||
virtual ISceneNode* clone(ISceneNode* newParent=0, ISceneManager* newManager=0) _IRR_OVERRIDE_;
|
ISceneNode* clone(ISceneNode* newParent=0, ISceneManager* newManager=0) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
@ -1,167 +0,0 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
|
||||||
// This file is part of the "Irrlicht Engine".
|
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
|
||||||
|
|
||||||
#include "CDefaultGUIElementFactory.h"
|
|
||||||
|
|
||||||
#ifdef _IRR_COMPILE_WITH_GUI_
|
|
||||||
|
|
||||||
#include "IGUIEnvironment.h"
|
|
||||||
|
|
||||||
#include "IGUIButton.h"
|
|
||||||
#include "IGUICheckBox.h"
|
|
||||||
#include "IGUIColorSelectDialog.h"
|
|
||||||
#include "IGUIComboBox.h"
|
|
||||||
#include "IGUIContextMenu.h"
|
|
||||||
#include "IGUIEditBox.h"
|
|
||||||
#include "IGUIFileOpenDialog.h"
|
|
||||||
#include "IGUIInOutFader.h"
|
|
||||||
#include "IGUIImage.h"
|
|
||||||
#include "IGUIListBox.h"
|
|
||||||
#include "IGUIMeshViewer.h"
|
|
||||||
#include "IGUIScrollBar.h"
|
|
||||||
#include "IGUISpinBox.h"
|
|
||||||
#include "IGUIStaticText.h"
|
|
||||||
#include "IGUITabControl.h"
|
|
||||||
#include "IGUITable.h"
|
|
||||||
#include "IGUIToolbar.h"
|
|
||||||
#include "IGUIWindow.h"
|
|
||||||
#include "IGUITreeView.h"
|
|
||||||
#include "IGUIProfiler.h"
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
namespace gui
|
|
||||||
{
|
|
||||||
|
|
||||||
CDefaultGUIElementFactory::CDefaultGUIElementFactory(IGUIEnvironment* env)
|
|
||||||
: Environment(env)
|
|
||||||
{
|
|
||||||
|
|
||||||
#ifdef _DEBUG
|
|
||||||
setDebugName("CDefaultGUIElementFactory");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// don't grab the gui environment here to prevent cyclic references
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! adds an element to the env based on its type id
|
|
||||||
IGUIElement* CDefaultGUIElementFactory::addGUIElement(EGUI_ELEMENT_TYPE type, IGUIElement* parent)
|
|
||||||
{
|
|
||||||
switch(type)
|
|
||||||
{
|
|
||||||
case EGUIET_BUTTON:
|
|
||||||
return Environment->addButton(core::rect<s32>(0,0,100,100),parent);
|
|
||||||
case EGUIET_CHECK_BOX:
|
|
||||||
return Environment->addCheckBox(false, core::rect<s32>(0,0,100,100), parent);
|
|
||||||
case EGUIET_COLOR_SELECT_DIALOG:
|
|
||||||
return Environment->addColorSelectDialog(0,true,parent);
|
|
||||||
case EGUIET_COMBO_BOX:
|
|
||||||
return Environment->addComboBox(core::rect<s32>(0,0,100,100),parent);
|
|
||||||
case EGUIET_CONTEXT_MENU:
|
|
||||||
return Environment->addContextMenu(core::rect<s32>(0,0,100,100),parent);
|
|
||||||
case EGUIET_MENU:
|
|
||||||
return Environment->addMenu(parent);
|
|
||||||
case EGUIET_EDIT_BOX:
|
|
||||||
return Environment->addEditBox(0,core::rect<s32>(0,0,100,100),true, parent);
|
|
||||||
case EGUIET_FILE_OPEN_DIALOG:
|
|
||||||
return Environment->addFileOpenDialog(0,true,parent);
|
|
||||||
case EGUIET_IMAGE:
|
|
||||||
return Environment->addImage(0,core::position2di(0,0), true, parent);
|
|
||||||
case EGUIET_IN_OUT_FADER:
|
|
||||||
return Environment->addInOutFader(0,parent);
|
|
||||||
case EGUIET_LIST_BOX:
|
|
||||||
return Environment->addListBox(core::rect<s32>(0,0,100,100),parent);
|
|
||||||
case EGUIET_MESH_VIEWER:
|
|
||||||
return Environment->addMeshViewer(core::rect<s32>(0,0,100,100),parent);
|
|
||||||
case EGUIET_MODAL_SCREEN:
|
|
||||||
return Environment->addModalScreen(parent);
|
|
||||||
case EGUIET_MESSAGE_BOX:
|
|
||||||
return Environment->addMessageBox(0,0,false,0,parent);
|
|
||||||
case EGUIET_SCROLL_BAR:
|
|
||||||
return Environment->addScrollBar(false,core::rect<s32>(0,0,100,100),parent);
|
|
||||||
case EGUIET_STATIC_TEXT:
|
|
||||||
return Environment->addStaticText(0,core::rect<s32>(0,0,100,100),false,true,parent);
|
|
||||||
case EGUIET_TAB:
|
|
||||||
return Environment->addTab(core::rect<s32>(0,0,100,100),parent);
|
|
||||||
case EGUIET_TAB_CONTROL:
|
|
||||||
return Environment->addTabControl(core::rect<s32>(0,0,100,100),parent);
|
|
||||||
case EGUIET_TABLE:
|
|
||||||
return Environment->addTable(core::rect<s32>(0,0,100,100), parent);
|
|
||||||
case EGUIET_TOOL_BAR:
|
|
||||||
return Environment->addToolBar(parent);
|
|
||||||
case EGUIET_WINDOW:
|
|
||||||
return Environment->addWindow(core::rect<s32>(0,0,100,100),false,0,parent);
|
|
||||||
case EGUIET_SPIN_BOX:
|
|
||||||
return Environment->addSpinBox(L"0.0", core::rect<s32>(0,0,100,100), true, parent);
|
|
||||||
case EGUIET_TREE_VIEW:
|
|
||||||
return Environment->addTreeView(core::rect<s32>(0,0,100,100),parent);
|
|
||||||
case EGUIET_PROFILER:
|
|
||||||
return Environment->addProfilerDisplay(core::rect<s32>(0,0,100,100), parent);
|
|
||||||
default:
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! adds an element to the environment based on its type name
|
|
||||||
IGUIElement* CDefaultGUIElementFactory::addGUIElement(const c8* typeName, IGUIElement* parent)
|
|
||||||
{
|
|
||||||
return addGUIElement( getTypeFromName(typeName), parent );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Returns the amount of element types this factory is able to create.
|
|
||||||
s32 CDefaultGUIElementFactory::getCreatableGUIElementTypeCount() const
|
|
||||||
{
|
|
||||||
return EGUIET_COUNT;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Returns the type of a creatable element type.
|
|
||||||
EGUI_ELEMENT_TYPE CDefaultGUIElementFactory::getCreateableGUIElementType(s32 idx) const
|
|
||||||
{
|
|
||||||
if (idx>=0 && idx<EGUIET_COUNT)
|
|
||||||
return (EGUI_ELEMENT_TYPE)idx;
|
|
||||||
|
|
||||||
return EGUIET_ELEMENT;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Returns the type name of a creatable element type.
|
|
||||||
const c8* CDefaultGUIElementFactory::getCreateableGUIElementTypeName(s32 idx) const
|
|
||||||
{
|
|
||||||
if (idx>=0 && idx<EGUIET_COUNT)
|
|
||||||
return GUIElementTypeNames[idx];
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Returns the type name of a creatable element type.
|
|
||||||
const c8* CDefaultGUIElementFactory::getCreateableGUIElementTypeName(EGUI_ELEMENT_TYPE type) const
|
|
||||||
{
|
|
||||||
// for this factory, type == index
|
|
||||||
|
|
||||||
if (type>=0 && type<EGUIET_COUNT)
|
|
||||||
return GUIElementTypeNames[type];
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
EGUI_ELEMENT_TYPE CDefaultGUIElementFactory::getTypeFromName(const c8* name) const
|
|
||||||
{
|
|
||||||
for ( u32 i=0; GUIElementTypeNames[i]; ++i)
|
|
||||||
if (!strcmp(name, GUIElementTypeNames[i]) )
|
|
||||||
return (EGUI_ELEMENT_TYPE)i;
|
|
||||||
|
|
||||||
return EGUIET_ELEMENT;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
#endif // _IRR_COMPILE_WITH_GUI_
|
|
||||||
|
|
@ -1,70 +0,0 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
|
||||||
// This file is part of the "Irrlicht Engine".
|
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
|
||||||
|
|
||||||
#ifndef __C_DEFAULT_GUI_ELEMENT_FACTORY_H_INCLUDED__
|
|
||||||
#define __C_DEFAULT_GUI_ELEMENT_FACTORY_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IrrCompileConfig.h"
|
|
||||||
#ifdef _IRR_COMPILE_WITH_GUI_
|
|
||||||
|
|
||||||
#include "IGUIElementFactory.h"
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
namespace gui
|
|
||||||
{
|
|
||||||
class IGUIElement;
|
|
||||||
class IGUIEnvironment;
|
|
||||||
|
|
||||||
//! This interface makes it possible to dynamically create gui elements.
|
|
||||||
class CDefaultGUIElementFactory : public IGUIElementFactory
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
CDefaultGUIElementFactory(IGUIEnvironment* env);
|
|
||||||
|
|
||||||
//! Adds an element to the gui environment based on its type id.
|
|
||||||
/** \param type: Type of the element to add.
|
|
||||||
\param parent: Parent scene node of the new element. A value of 0 adds it to the root.
|
|
||||||
\return Returns pointer to the new element or 0 if unsuccessful. */
|
|
||||||
virtual IGUIElement* addGUIElement(EGUI_ELEMENT_TYPE type, IGUIElement* parent=0) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Adds a GUI element to the GUI Environment based on its type name.
|
|
||||||
/** \param typeName: Type name of the element to add. Taken from the GUIElementTypeNames c8* array.
|
|
||||||
\param parent: Parent scene node of the new element. A value of 0 adds it to the root.
|
|
||||||
\return Returns pointer to the new element or 0 if unsuccessful. */
|
|
||||||
virtual IGUIElement* addGUIElement(const c8* typeName, IGUIElement* parent=0) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Returns the amount of GUI element types this factory is able to create.
|
|
||||||
virtual s32 getCreatableGUIElementTypeCount() const _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Returns the type of a createable GUI element type based on the index.
|
|
||||||
/** \param idx: Index of the element type in this factory. The value must be equal or greater than 0
|
|
||||||
and lower than getCreatableGUIElementTypeCount(). */
|
|
||||||
virtual EGUI_ELEMENT_TYPE getCreateableGUIElementType(s32 idx) const _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Returns the type name of a createable GUI element type based on the index.
|
|
||||||
/** \param idx: Index of the element type in this factory. The value must be equal or greater than 0
|
|
||||||
and lower than getCreatableGUIElementTypeCount(). */
|
|
||||||
virtual const c8* getCreateableGUIElementTypeName(s32 idx) const _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Returns the type name of a createable GUI element based on its type.
|
|
||||||
/** \param type: Type of the GUI element.
|
|
||||||
\return: Returns the name of the type if this factory can create it, otherwise it returns 0. */
|
|
||||||
virtual const c8* getCreateableGUIElementTypeName(EGUI_ELEMENT_TYPE type) const _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
EGUI_ELEMENT_TYPE getTypeFromName(const c8* name) const;
|
|
||||||
|
|
||||||
IGUIEnvironment* Environment;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
#endif // _IRR_COMPILE_WITH_GUI_
|
|
||||||
|
|
||||||
#endif // __C_DEFAULT_GUI_ELEMENT_FACTORY_H_INCLUDED__
|
|
@ -1,122 +0,0 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
|
||||||
// This file is part of the "Irrlicht Engine".
|
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
|
||||||
|
|
||||||
#include "CDefaultSceneNodeFactory.h"
|
|
||||||
#include "ISceneManager.h"
|
|
||||||
#include "IDummyTransformationSceneNode.h"
|
|
||||||
#include "ICameraSceneNode.h"
|
|
||||||
#include "IBillboardSceneNode.h"
|
|
||||||
#include "IAnimatedMeshSceneNode.h"
|
|
||||||
#include "IMeshSceneNode.h"
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
namespace scene
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
CDefaultSceneNodeFactory::CDefaultSceneNodeFactory(ISceneManager* mgr)
|
|
||||||
: Manager(mgr)
|
|
||||||
{
|
|
||||||
|
|
||||||
#ifdef _DEBUG
|
|
||||||
setDebugName("CDefaultSceneNodeFactory");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// don't grab the scene manager here to prevent cyclic references
|
|
||||||
|
|
||||||
SupportedSceneNodeTypes.push_back(SSceneNodeTypePair(ESNT_MESH, "mesh"));
|
|
||||||
SupportedSceneNodeTypes.push_back(SSceneNodeTypePair(ESNT_EMPTY, "empty"));
|
|
||||||
SupportedSceneNodeTypes.push_back(SSceneNodeTypePair(ESNT_DUMMY_TRANSFORMATION, "dummyTransformation"));
|
|
||||||
SupportedSceneNodeTypes.push_back(SSceneNodeTypePair(ESNT_CAMERA, "camera"));
|
|
||||||
SupportedSceneNodeTypes.push_back(SSceneNodeTypePair(ESNT_BILLBOARD, "billBoard"));
|
|
||||||
SupportedSceneNodeTypes.push_back(SSceneNodeTypePair(ESNT_ANIMATED_MESH, "animatedMesh"));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! adds a scene node to the scene graph based on its type id
|
|
||||||
ISceneNode* CDefaultSceneNodeFactory::addSceneNode(ESCENE_NODE_TYPE type, ISceneNode* parent)
|
|
||||||
{
|
|
||||||
switch(type)
|
|
||||||
{
|
|
||||||
case ESNT_MESH:
|
|
||||||
return Manager->addMeshSceneNode(0, parent, -1, core::vector3df(),
|
|
||||||
core::vector3df(), core::vector3df(1,1,1), true);
|
|
||||||
case ESNT_EMPTY:
|
|
||||||
return Manager->addEmptySceneNode(parent);
|
|
||||||
case ESNT_DUMMY_TRANSFORMATION:
|
|
||||||
return Manager->addDummyTransformationSceneNode(parent);
|
|
||||||
case ESNT_CAMERA:
|
|
||||||
return Manager->addCameraSceneNode(parent);
|
|
||||||
case ESNT_BILLBOARD:
|
|
||||||
return Manager->addBillboardSceneNode(parent);
|
|
||||||
case ESNT_ANIMATED_MESH:
|
|
||||||
return Manager->addAnimatedMeshSceneNode(0, parent, -1, core::vector3df(),
|
|
||||||
core::vector3df(), core::vector3df(1,1,1), true);
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! adds a scene node to the scene graph based on its type name
|
|
||||||
ISceneNode* CDefaultSceneNodeFactory::addSceneNode(const c8* typeName, ISceneNode* parent)
|
|
||||||
{
|
|
||||||
return addSceneNode( getTypeFromName(typeName), parent );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! returns amount of scene node types this factory is able to create
|
|
||||||
u32 CDefaultSceneNodeFactory::getCreatableSceneNodeTypeCount() const
|
|
||||||
{
|
|
||||||
return SupportedSceneNodeTypes.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! returns type of a creatable scene node type
|
|
||||||
ESCENE_NODE_TYPE CDefaultSceneNodeFactory::getCreateableSceneNodeType(u32 idx) const
|
|
||||||
{
|
|
||||||
if (idx<SupportedSceneNodeTypes.size())
|
|
||||||
return SupportedSceneNodeTypes[idx].Type;
|
|
||||||
else
|
|
||||||
return ESNT_UNKNOWN;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! returns type name of a creatable scene node type
|
|
||||||
const c8* CDefaultSceneNodeFactory::getCreateableSceneNodeTypeName(u32 idx) const
|
|
||||||
{
|
|
||||||
if (idx<SupportedSceneNodeTypes.size())
|
|
||||||
return SupportedSceneNodeTypes[idx].TypeName.c_str();
|
|
||||||
else
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! returns type name of a creatable scene node type
|
|
||||||
const c8* CDefaultSceneNodeFactory::getCreateableSceneNodeTypeName(ESCENE_NODE_TYPE type) const
|
|
||||||
{
|
|
||||||
for (u32 i=0; i<SupportedSceneNodeTypes.size(); ++i)
|
|
||||||
if (SupportedSceneNodeTypes[i].Type == type)
|
|
||||||
return SupportedSceneNodeTypes[i].TypeName.c_str();
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
ESCENE_NODE_TYPE CDefaultSceneNodeFactory::getTypeFromName(const c8* name) const
|
|
||||||
{
|
|
||||||
for (u32 i=0; i<SupportedSceneNodeTypes.size(); ++i)
|
|
||||||
if (SupportedSceneNodeTypes[i].TypeName == name)
|
|
||||||
return SupportedSceneNodeTypes[i].Type;
|
|
||||||
|
|
||||||
return ESNT_UNKNOWN;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
} // end namespace scene
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
@ -1,80 +0,0 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
|
||||||
// This file is part of the "Irrlicht Engine".
|
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
|
||||||
|
|
||||||
#ifndef __C_DEFAULT_SCENE_NODE_FACTORY_H_INCLUDED__
|
|
||||||
#define __C_DEFAULT_SCENE_NODE_FACTORY_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "ISceneNodeFactory.h"
|
|
||||||
#include "irrArray.h"
|
|
||||||
#include "irrString.h"
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
namespace scene
|
|
||||||
{
|
|
||||||
class ISceneNode;
|
|
||||||
class ISceneManager;
|
|
||||||
|
|
||||||
//! Interface making it possible to dynamicly create scene nodes and animators
|
|
||||||
class CDefaultSceneNodeFactory : public ISceneNodeFactory
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
CDefaultSceneNodeFactory(ISceneManager* mgr);
|
|
||||||
|
|
||||||
//! adds a scene node to the scene graph based on its type id
|
|
||||||
/** \param type: Type of the scene node to add.
|
|
||||||
\param parent: Parent scene node of the new node, can be null to add the scene node to the root.
|
|
||||||
\return Returns pointer to the new scene node or null if not successful. */
|
|
||||||
virtual ISceneNode* addSceneNode(ESCENE_NODE_TYPE type, ISceneNode* parent=0) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! adds a scene node to the scene graph based on its type name
|
|
||||||
/** \param typeName: Type name of the scene node to add.
|
|
||||||
\param parent: Parent scene node of the new node, can be null to add the scene node to the root.
|
|
||||||
\return Returns pointer to the new scene node or null if not successful. */
|
|
||||||
virtual ISceneNode* addSceneNode(const c8* typeName, ISceneNode* parent=0) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! returns amount of scene node types this factory is able to create
|
|
||||||
virtual u32 getCreatableSceneNodeTypeCount() const _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! returns type name of a creatable scene node type by index
|
|
||||||
/** \param idx: Index of scene node type in this factory. Must be a value between 0 and
|
|
||||||
uetCreatableSceneNodeTypeCount() */
|
|
||||||
virtual const c8* getCreateableSceneNodeTypeName(u32 idx) const _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! returns type of a creatable scene node type
|
|
||||||
/** \param idx: Index of scene node type in this factory. Must be a value between 0 and
|
|
||||||
getCreatableSceneNodeTypeCount() */
|
|
||||||
virtual ESCENE_NODE_TYPE getCreateableSceneNodeType(u32 idx) const _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! returns type name of a creatable scene node type
|
|
||||||
/** \param idx: Type of scene node.
|
|
||||||
\return: Returns name of scene node type if this factory can create the type, otherwise 0. */
|
|
||||||
virtual const c8* getCreateableSceneNodeTypeName(ESCENE_NODE_TYPE type) const _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
ESCENE_NODE_TYPE getTypeFromName(const c8* name) const;
|
|
||||||
|
|
||||||
struct SSceneNodeTypePair
|
|
||||||
{
|
|
||||||
SSceneNodeTypePair(ESCENE_NODE_TYPE type, const c8* name)
|
|
||||||
: Type(type), TypeName(name)
|
|
||||||
{}
|
|
||||||
|
|
||||||
ESCENE_NODE_TYPE Type;
|
|
||||||
core::stringc TypeName;
|
|
||||||
};
|
|
||||||
|
|
||||||
core::array<SSceneNodeTypePair> SupportedSceneNodeTypes;
|
|
||||||
|
|
||||||
ISceneManager* Manager;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
} // end namespace scene
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
@ -20,36 +20,36 @@ namespace scene
|
|||||||
CDummyTransformationSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id);
|
CDummyTransformationSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id);
|
||||||
|
|
||||||
//! returns the axis aligned bounding box of this node
|
//! returns the axis aligned bounding box of this node
|
||||||
virtual const core::aabbox3d<f32>& getBoundingBox() const _IRR_OVERRIDE_;
|
const core::aabbox3d<f32>& getBoundingBox() const override;
|
||||||
|
|
||||||
//! Returns a reference to the current relative transformation matrix.
|
//! Returns a reference to the current relative transformation matrix.
|
||||||
//! This is the matrix, this scene node uses instead of scale, translation
|
//! This is the matrix, this scene node uses instead of scale, translation
|
||||||
//! and rotation.
|
//! and rotation.
|
||||||
virtual core::matrix4& getRelativeTransformationMatrix() _IRR_OVERRIDE_;
|
core::matrix4& getRelativeTransformationMatrix() override;
|
||||||
|
|
||||||
//! Returns the relative transformation of the scene node.
|
//! Returns the relative transformation of the scene node.
|
||||||
virtual core::matrix4 getRelativeTransformation() const _IRR_OVERRIDE_;
|
core::matrix4 getRelativeTransformation() const override;
|
||||||
|
|
||||||
//! does nothing.
|
//! does nothing.
|
||||||
virtual void render() _IRR_OVERRIDE_ {}
|
void render() override {}
|
||||||
|
|
||||||
//! Returns type of the scene node
|
//! Returns type of the scene node
|
||||||
virtual ESCENE_NODE_TYPE getType() const _IRR_OVERRIDE_ { return ESNT_DUMMY_TRANSFORMATION; }
|
ESCENE_NODE_TYPE getType() const override { return ESNT_DUMMY_TRANSFORMATION; }
|
||||||
|
|
||||||
//! Creates a clone of this scene node and its children.
|
//! Creates a clone of this scene node and its children.
|
||||||
virtual ISceneNode* clone(ISceneNode* newParent=0, ISceneManager* newManager=0) _IRR_OVERRIDE_;
|
ISceneNode* clone(ISceneNode* newParent=0, ISceneManager* newManager=0) override;
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
// TODO: We can add least add some warnings to find troubles faster until we have
|
// TODO: We can add least add some warnings to find troubles faster until we have
|
||||||
// fixed bug id 2318691.
|
// fixed bug id 2318691.
|
||||||
virtual const core::vector3df& getScale() const _IRR_OVERRIDE_;
|
const core::vector3df& getScale() const override;
|
||||||
virtual void setScale(const core::vector3df& scale) _IRR_OVERRIDE_;
|
void setScale(const core::vector3df& scale) override;
|
||||||
virtual const core::vector3df& getRotation() const _IRR_OVERRIDE_;
|
const core::vector3df& getRotation() const override;
|
||||||
virtual void setRotation(const core::vector3df& rotation) _IRR_OVERRIDE_;
|
void setRotation(const core::vector3df& rotation) override;
|
||||||
virtual const core::vector3df& getPosition() const _IRR_OVERRIDE_;
|
const core::vector3df& getPosition() const override;
|
||||||
virtual void setPosition(const core::vector3df& newpos) _IRR_OVERRIDE_;
|
void setPosition(const core::vector3df& newpos) override;
|
||||||
|
|
||||||
core::matrix4 RelativeTransformationMatrix;
|
core::matrix4 RelativeTransformationMatrix;
|
||||||
core::aabbox3d<f32> Box;
|
core::aabbox3d<f32> Box;
|
||||||
|
@ -9,7 +9,6 @@
|
|||||||
#include "irrString.h"
|
#include "irrString.h"
|
||||||
#include "irrArray.h"
|
#include "irrArray.h"
|
||||||
#include "os.h"
|
#include "os.h"
|
||||||
#include <dlfcn.h>
|
|
||||||
|
|
||||||
#if defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_)
|
#if defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_)
|
||||||
#include <android/native_activity.h>
|
#include <android/native_activity.h>
|
||||||
@ -21,7 +20,7 @@ namespace video
|
|||||||
{
|
{
|
||||||
|
|
||||||
CEGLManager::CEGLManager() : IContextManager(), EglWindow(0), EglDisplay(EGL_NO_DISPLAY),
|
CEGLManager::CEGLManager() : IContextManager(), EglWindow(0), EglDisplay(EGL_NO_DISPLAY),
|
||||||
EglSurface(EGL_NO_SURFACE), EglContext(EGL_NO_CONTEXT), EglConfig(0), MajorVersion(0), MinorVersion(0), libHandle(NULL)
|
EglSurface(EGL_NO_SURFACE), EglContext(EGL_NO_CONTEXT), EglConfig(0), MajorVersion(0), MinorVersion(0)
|
||||||
{
|
{
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
setDebugName("CEGLManager");
|
setDebugName("CEGLManager");
|
||||||
@ -110,9 +109,6 @@ void CEGLManager::terminate()
|
|||||||
|
|
||||||
MajorVersion = 0;
|
MajorVersion = 0;
|
||||||
MinorVersion = 0;
|
MinorVersion = 0;
|
||||||
|
|
||||||
if (libHandle)
|
|
||||||
dlclose(libHandle);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CEGLManager::generateSurface()
|
bool CEGLManager::generateSurface()
|
||||||
@ -596,15 +592,7 @@ const SExposedVideoData& CEGLManager::getContext() const
|
|||||||
|
|
||||||
void* CEGLManager::getProcAddress(const std::string &procName)
|
void* CEGLManager::getProcAddress(const std::string &procName)
|
||||||
{
|
{
|
||||||
void* proc = NULL;
|
return (void*)eglGetProcAddress(procName.c_str());
|
||||||
proc = (void*)eglGetProcAddress(procName.c_str());
|
|
||||||
if (!proc) { // fallback
|
|
||||||
if (!libHandle)
|
|
||||||
libHandle = dlopen("libGLESv2.so", RTLD_LAZY);
|
|
||||||
if (libHandle)
|
|
||||||
proc = dlsym(libHandle, procName.c_str());
|
|
||||||
}
|
|
||||||
return proc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CEGLManager::swapBuffers()
|
bool CEGLManager::swapBuffers()
|
||||||
|
@ -32,42 +32,42 @@ namespace video
|
|||||||
// Initialize EGL.
|
// Initialize EGL.
|
||||||
/* This method initialize EGLand create EGL display, anyway surface and context
|
/* This method initialize EGLand create EGL display, anyway surface and context
|
||||||
aren't create. */
|
aren't create. */
|
||||||
virtual bool initialize(const SIrrlichtCreationParameters& params, const SExposedVideoData& data) _IRR_OVERRIDE_;
|
bool initialize(const SIrrlichtCreationParameters& params, const SExposedVideoData& data) override;
|
||||||
|
|
||||||
// Terminate EGL.
|
// Terminate EGL.
|
||||||
/* Terminate EGL context. This method break both existed surface and context. */
|
/* Terminate EGL context. This method break both existed surface and context. */
|
||||||
virtual void terminate() _IRR_OVERRIDE_;
|
void terminate() override;
|
||||||
|
|
||||||
// Create EGL surface.
|
// Create EGL surface.
|
||||||
/* This method create EGL surface. On some platforms eg. Android, we must
|
/* This method create EGL surface. On some platforms eg. Android, we must
|
||||||
recreate surface on each resume, because WindowID may change, so existed
|
recreate surface on each resume, because WindowID may change, so existed
|
||||||
surface may not be valid. If EGL context already exist, this method
|
surface may not be valid. If EGL context already exist, this method
|
||||||
automatically activates it. */
|
automatically activates it. */
|
||||||
virtual bool generateSurface() _IRR_OVERRIDE_;
|
bool generateSurface() override;
|
||||||
|
|
||||||
// Destroy EGL surface.
|
// Destroy EGL surface.
|
||||||
/* This method destroy EGL. On some platforms eg. Android, we should call
|
/* This method destroy EGL. On some platforms eg. Android, we should call
|
||||||
this method on each pause, because after resume this surface may not be valid.
|
this method on each pause, because after resume this surface may not be valid.
|
||||||
Hovewer this method doesn'r break EGL context. */
|
Hovewer this method doesn'r break EGL context. */
|
||||||
virtual void destroySurface() _IRR_OVERRIDE_;
|
void destroySurface() override;
|
||||||
|
|
||||||
// Create EGL context.
|
// Create EGL context.
|
||||||
/* This method create and activate EGL context. */
|
/* This method create and activate EGL context. */
|
||||||
virtual bool generateContext() _IRR_OVERRIDE_;
|
bool generateContext() override;
|
||||||
|
|
||||||
// Destroy EGL context.
|
// Destroy EGL context.
|
||||||
/* This method destroy EGL context. */
|
/* This method destroy EGL context. */
|
||||||
virtual void destroyContext() _IRR_OVERRIDE_;
|
void destroyContext() override;
|
||||||
|
|
||||||
virtual const SExposedVideoData& getContext() const _IRR_OVERRIDE_;
|
const SExposedVideoData& getContext() const override;
|
||||||
|
|
||||||
virtual bool activateContext(const SExposedVideoData& videoData, bool restorePrimaryOnZero) _IRR_OVERRIDE_;
|
bool activateContext(const SExposedVideoData& videoData, bool restorePrimaryOnZero) override;
|
||||||
|
|
||||||
// Get procedure address.
|
// Get procedure address.
|
||||||
virtual void* getProcAddress(const std::string &procName) _IRR_OVERRIDE_;
|
void* getProcAddress(const std::string &procName) override;
|
||||||
|
|
||||||
// Swap buffers.
|
// Swap buffers.
|
||||||
virtual bool swapBuffers() _IRR_OVERRIDE_;
|
bool swapBuffers() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
enum EConfigStyle
|
enum EConfigStyle
|
||||||
@ -111,8 +111,6 @@ namespace video
|
|||||||
|
|
||||||
EGLint MajorVersion;
|
EGLint MajorVersion;
|
||||||
EGLint MinorVersion;
|
EGLint MinorVersion;
|
||||||
|
|
||||||
void* libHandle;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,19 +20,19 @@ namespace scene
|
|||||||
CEmptySceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id);
|
CEmptySceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id);
|
||||||
|
|
||||||
//! returns the axis aligned bounding box of this node
|
//! returns the axis aligned bounding box of this node
|
||||||
virtual const core::aabbox3d<f32>& getBoundingBox() const _IRR_OVERRIDE_;
|
const core::aabbox3d<f32>& getBoundingBox() const override;
|
||||||
|
|
||||||
//! This method is called just before the rendering process of the whole scene.
|
//! This method is called just before the rendering process of the whole scene.
|
||||||
virtual void OnRegisterSceneNode() _IRR_OVERRIDE_;
|
void OnRegisterSceneNode() override;
|
||||||
|
|
||||||
//! does nothing.
|
//! does nothing.
|
||||||
virtual void render() _IRR_OVERRIDE_;
|
void render() override;
|
||||||
|
|
||||||
//! Returns type of the scene node
|
//! Returns type of the scene node
|
||||||
virtual ESCENE_NODE_TYPE getType() const _IRR_OVERRIDE_ { return ESNT_EMPTY; }
|
ESCENE_NODE_TYPE getType() const override { return ESNT_EMPTY; }
|
||||||
|
|
||||||
//! Creates a clone of this scene node and its children.
|
//! Creates a clone of this scene node and its children.
|
||||||
virtual ISceneNode* clone(ISceneNode* newParent=0, ISceneManager* newManager=0) _IRR_OVERRIDE_;
|
ISceneNode* clone(ISceneNode* newParent=0, ISceneManager* newManager=0) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
@ -82,37 +82,37 @@ public:
|
|||||||
\param offset The offset where the file is stored in an archive
|
\param offset The offset where the file is stored in an archive
|
||||||
\param size The size of the file in bytes.
|
\param size The size of the file in bytes.
|
||||||
\param id The ID of the file in the archive which owns it */
|
\param id The ID of the file in the archive which owns it */
|
||||||
virtual u32 addItem(const io::path& fullPath, u32 offset, u32 size, bool isDirectory, u32 id=0) _IRR_OVERRIDE_;
|
u32 addItem(const io::path& fullPath, u32 offset, u32 size, bool isDirectory, u32 id=0) override;
|
||||||
|
|
||||||
//! Sorts the file list. You should call this after adding any items to the file list
|
//! Sorts the file list. You should call this after adding any items to the file list
|
||||||
virtual void sort() _IRR_OVERRIDE_;
|
void sort() override;
|
||||||
|
|
||||||
//! Returns the amount of files in the filelist.
|
//! Returns the amount of files in the filelist.
|
||||||
virtual u32 getFileCount() const _IRR_OVERRIDE_;
|
u32 getFileCount() const override;
|
||||||
|
|
||||||
//! Gets the name of a file in the list, based on an index.
|
//! Gets the name of a file in the list, based on an index.
|
||||||
virtual const io::path& getFileName(u32 index) const _IRR_OVERRIDE_;
|
const io::path& getFileName(u32 index) const override;
|
||||||
|
|
||||||
//! Gets the full name of a file in the list, path included, based on an index.
|
//! Gets the full name of a file in the list, path included, based on an index.
|
||||||
virtual const io::path& getFullFileName(u32 index) const _IRR_OVERRIDE_;
|
const io::path& getFullFileName(u32 index) const override;
|
||||||
|
|
||||||
//! Returns the ID of a file in the file list, based on an index.
|
//! Returns the ID of a file in the file list, based on an index.
|
||||||
virtual u32 getID(u32 index) const _IRR_OVERRIDE_;
|
u32 getID(u32 index) const override;
|
||||||
|
|
||||||
//! Returns true if the file is a directory
|
//! Returns true if the file is a directory
|
||||||
virtual bool isDirectory(u32 index) const _IRR_OVERRIDE_;
|
bool isDirectory(u32 index) const override;
|
||||||
|
|
||||||
//! Returns the size of a file
|
//! Returns the size of a file
|
||||||
virtual u32 getFileSize(u32 index) const _IRR_OVERRIDE_;
|
u32 getFileSize(u32 index) const override;
|
||||||
|
|
||||||
//! Returns the offset of a file
|
//! Returns the offset of a file
|
||||||
virtual u32 getFileOffset(u32 index) const _IRR_OVERRIDE_;
|
u32 getFileOffset(u32 index) const override;
|
||||||
|
|
||||||
//! Searches for a file or folder within the list, returns the index
|
//! Searches for a file or folder within the list, returns the index
|
||||||
virtual s32 findFile(const io::path& filename, bool isFolder) const _IRR_OVERRIDE_;
|
s32 findFile(const io::path& filename, bool isFolder) const override;
|
||||||
|
|
||||||
//! Returns the base path of the file list
|
//! Returns the base path of the file list
|
||||||
virtual const io::path& getPath() const _IRR_OVERRIDE_;
|
const io::path& getPath() const override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
@ -8,7 +8,6 @@
|
|||||||
#include "IReadFile.h"
|
#include "IReadFile.h"
|
||||||
#include "IWriteFile.h"
|
#include "IWriteFile.h"
|
||||||
#include "CZipReader.h"
|
#include "CZipReader.h"
|
||||||
#include "CMountPointReader.h"
|
|
||||||
#include "CFileList.h"
|
#include "CFileList.h"
|
||||||
#include "stdio.h"
|
#include "stdio.h"
|
||||||
#include "os.h"
|
#include "os.h"
|
||||||
@ -55,26 +54,6 @@ CFileSystem::CFileSystem()
|
|||||||
//! reset current working directory
|
//! reset current working directory
|
||||||
getWorkingDirectory();
|
getWorkingDirectory();
|
||||||
|
|
||||||
#ifdef __IRR_COMPILE_WITH_PAK_ARCHIVE_LOADER_
|
|
||||||
ArchiveLoader.push_back(new CArchiveLoaderPAK(this));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __IRR_COMPILE_WITH_NPK_ARCHIVE_LOADER_
|
|
||||||
ArchiveLoader.push_back(new CArchiveLoaderNPK(this));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __IRR_COMPILE_WITH_TAR_ARCHIVE_LOADER_
|
|
||||||
ArchiveLoader.push_back(new CArchiveLoaderTAR(this));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __IRR_COMPILE_WITH_WAD_ARCHIVE_LOADER_
|
|
||||||
ArchiveLoader.push_back(new CArchiveLoaderWAD(this));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __IRR_COMPILE_WITH_MOUNT_ARCHIVE_LOADER_
|
|
||||||
ArchiveLoader.push_back(new CArchiveLoaderMount(this));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __IRR_COMPILE_WITH_ZIP_ARCHIVE_LOADER_
|
#ifdef __IRR_COMPILE_WITH_ZIP_ARCHIVE_LOADER_
|
||||||
ArchiveLoader.push_back(new CArchiveLoaderZIP(this));
|
ArchiveLoader.push_back(new CArchiveLoaderZIP(this));
|
||||||
#endif
|
#endif
|
||||||
@ -219,8 +198,6 @@ bool CFileSystem::addFileArchive(const io::path& filename, bool ignoreCase,
|
|||||||
bool ret = false;
|
bool ret = false;
|
||||||
|
|
||||||
// see if archive is already added
|
// see if archive is already added
|
||||||
if (changeArchivePassword(filename, password, retArchive))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
s32 i;
|
s32 i;
|
||||||
|
|
||||||
@ -316,29 +293,6 @@ bool CFileSystem::addFileArchive(const io::path& filename, bool ignoreCase,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
// don't expose!
|
|
||||||
bool CFileSystem::changeArchivePassword(const path& filename,
|
|
||||||
const core::stringc& password,
|
|
||||||
IFileArchive** archive)
|
|
||||||
{
|
|
||||||
for (s32 idx = 0; idx < (s32)FileArchives.size(); ++idx)
|
|
||||||
{
|
|
||||||
// TODO: This should go into a path normalization method
|
|
||||||
// We need to check for directory names with trailing slash and without
|
|
||||||
const path absPath = getAbsolutePath(filename);
|
|
||||||
const path arcPath = FileArchives[idx]->getFileList()->getPath();
|
|
||||||
if ((absPath == arcPath) || ((absPath+_IRR_TEXT("/")) == arcPath))
|
|
||||||
{
|
|
||||||
if (password.size())
|
|
||||||
FileArchives[idx]->Password=password;
|
|
||||||
if (archive)
|
|
||||||
*archive = FileArchives[idx];
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CFileSystem::addFileArchive(IReadFile* file, bool ignoreCase,
|
bool CFileSystem::addFileArchive(IReadFile* file, bool ignoreCase,
|
||||||
bool ignorePaths, E_FILE_ARCHIVE_TYPE archiveType,
|
bool ignorePaths, E_FILE_ARCHIVE_TYPE archiveType,
|
||||||
@ -349,9 +303,6 @@ bool CFileSystem::addFileArchive(IReadFile* file, bool ignoreCase,
|
|||||||
|
|
||||||
if (file)
|
if (file)
|
||||||
{
|
{
|
||||||
if (changeArchivePassword(file->getFileName(), password, retArchive))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
IFileArchive* archive = 0;
|
IFileArchive* archive = 0;
|
||||||
s32 i;
|
s32 i;
|
||||||
|
|
||||||
|
@ -14,8 +14,6 @@ namespace io
|
|||||||
{
|
{
|
||||||
|
|
||||||
class CZipReader;
|
class CZipReader;
|
||||||
class CPakReader;
|
|
||||||
class CMountPointReader;
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
FileSystem which uses normal files and one zipfile
|
FileSystem which uses normal files and one zipfile
|
||||||
@ -31,109 +29,104 @@ public:
|
|||||||
virtual ~CFileSystem();
|
virtual ~CFileSystem();
|
||||||
|
|
||||||
//! opens a file for read access
|
//! opens a file for read access
|
||||||
virtual IReadFile* createAndOpenFile(const io::path& filename) _IRR_OVERRIDE_;
|
IReadFile* createAndOpenFile(const io::path& filename) override;
|
||||||
|
|
||||||
//! Creates an IReadFile interface for accessing memory like a file.
|
//! Creates an IReadFile interface for accessing memory like a file.
|
||||||
virtual IReadFile* createMemoryReadFile(const void* memory, s32 len, const io::path& fileName, bool deleteMemoryWhenDropped = false) _IRR_OVERRIDE_;
|
IReadFile* createMemoryReadFile(const void* memory, s32 len, const io::path& fileName, bool deleteMemoryWhenDropped = false) override;
|
||||||
|
|
||||||
//! Creates an IReadFile interface for accessing files inside files
|
//! Creates an IReadFile interface for accessing files inside files
|
||||||
virtual IReadFile* createLimitReadFile(const io::path& fileName, IReadFile* alreadyOpenedFile, long pos, long areaSize) _IRR_OVERRIDE_;
|
IReadFile* createLimitReadFile(const io::path& fileName, IReadFile* alreadyOpenedFile, long pos, long areaSize) override;
|
||||||
|
|
||||||
//! Creates an IWriteFile interface for accessing memory like a file.
|
//! Creates an IWriteFile interface for accessing memory like a file.
|
||||||
virtual IWriteFile* createMemoryWriteFile(void* memory, s32 len, const io::path& fileName, bool deleteMemoryWhenDropped=false) _IRR_OVERRIDE_;
|
IWriteFile* createMemoryWriteFile(void* memory, s32 len, const io::path& fileName, bool deleteMemoryWhenDropped=false) override;
|
||||||
|
|
||||||
//! Opens a file for write access.
|
//! Opens a file for write access.
|
||||||
virtual IWriteFile* createAndWriteFile(const io::path& filename, bool append=false) _IRR_OVERRIDE_;
|
IWriteFile* createAndWriteFile(const io::path& filename, bool append=false) override;
|
||||||
|
|
||||||
//! Adds an archive to the file system.
|
//! Adds an archive to the file system.
|
||||||
virtual bool addFileArchive(const io::path& filename,
|
virtual bool addFileArchive(const io::path& filename,
|
||||||
bool ignoreCase = true, bool ignorePaths = true,
|
bool ignoreCase = true, bool ignorePaths = true,
|
||||||
E_FILE_ARCHIVE_TYPE archiveType = EFAT_UNKNOWN,
|
E_FILE_ARCHIVE_TYPE archiveType = EFAT_UNKNOWN,
|
||||||
const core::stringc& password="",
|
const core::stringc& password="",
|
||||||
IFileArchive** retArchive = 0) _IRR_OVERRIDE_;
|
IFileArchive** retArchive = 0) override;
|
||||||
|
|
||||||
//! Adds an archive to the file system.
|
//! Adds an archive to the file system.
|
||||||
virtual bool addFileArchive(IReadFile* file, bool ignoreCase=true,
|
virtual bool addFileArchive(IReadFile* file, bool ignoreCase=true,
|
||||||
bool ignorePaths=true,
|
bool ignorePaths=true,
|
||||||
E_FILE_ARCHIVE_TYPE archiveType=EFAT_UNKNOWN,
|
E_FILE_ARCHIVE_TYPE archiveType=EFAT_UNKNOWN,
|
||||||
const core::stringc& password="",
|
const core::stringc& password="",
|
||||||
IFileArchive** retArchive = 0) _IRR_OVERRIDE_;
|
IFileArchive** retArchive = 0) override;
|
||||||
|
|
||||||
//! Adds an archive to the file system.
|
//! Adds an archive to the file system.
|
||||||
virtual bool addFileArchive(IFileArchive* archive) _IRR_OVERRIDE_;
|
bool addFileArchive(IFileArchive* archive) override;
|
||||||
|
|
||||||
//! move the hirarchy of the filesystem. moves sourceIndex relative up or down
|
//! move the hirarchy of the filesystem. moves sourceIndex relative up or down
|
||||||
virtual bool moveFileArchive(u32 sourceIndex, s32 relative) _IRR_OVERRIDE_;
|
bool moveFileArchive(u32 sourceIndex, s32 relative) override;
|
||||||
|
|
||||||
//! Adds an external archive loader to the engine.
|
//! Adds an external archive loader to the engine.
|
||||||
virtual void addArchiveLoader(IArchiveLoader* loader) _IRR_OVERRIDE_;
|
void addArchiveLoader(IArchiveLoader* loader) override;
|
||||||
|
|
||||||
//! Returns the total number of archive loaders added.
|
//! Returns the total number of archive loaders added.
|
||||||
virtual u32 getArchiveLoaderCount() const _IRR_OVERRIDE_;
|
u32 getArchiveLoaderCount() const override;
|
||||||
|
|
||||||
//! Gets the archive loader by index.
|
//! Gets the archive loader by index.
|
||||||
virtual IArchiveLoader* getArchiveLoader(u32 index) const _IRR_OVERRIDE_;
|
IArchiveLoader* getArchiveLoader(u32 index) const override;
|
||||||
|
|
||||||
//! gets the file archive count
|
//! gets the file archive count
|
||||||
virtual u32 getFileArchiveCount() const _IRR_OVERRIDE_;
|
u32 getFileArchiveCount() const override;
|
||||||
|
|
||||||
//! gets an archive
|
//! gets an archive
|
||||||
virtual IFileArchive* getFileArchive(u32 index) _IRR_OVERRIDE_;
|
IFileArchive* getFileArchive(u32 index) override;
|
||||||
|
|
||||||
//! removes an archive from the file system.
|
//! removes an archive from the file system.
|
||||||
virtual bool removeFileArchive(u32 index) _IRR_OVERRIDE_;
|
bool removeFileArchive(u32 index) override;
|
||||||
|
|
||||||
//! removes an archive from the file system.
|
//! removes an archive from the file system.
|
||||||
virtual bool removeFileArchive(const io::path& filename) _IRR_OVERRIDE_;
|
bool removeFileArchive(const io::path& filename) override;
|
||||||
|
|
||||||
//! Removes an archive from the file system.
|
//! Removes an archive from the file system.
|
||||||
virtual bool removeFileArchive(const IFileArchive* archive) _IRR_OVERRIDE_;
|
bool removeFileArchive(const IFileArchive* archive) override;
|
||||||
|
|
||||||
//! Returns the string of the current working directory
|
//! Returns the string of the current working directory
|
||||||
virtual const io::path& getWorkingDirectory() _IRR_OVERRIDE_;
|
const io::path& getWorkingDirectory() override;
|
||||||
|
|
||||||
//! Changes the current Working Directory to the string given.
|
//! Changes the current Working Directory to the string given.
|
||||||
//! The string is operating system dependent. Under Windows it will look
|
//! The string is operating system dependent. Under Windows it will look
|
||||||
//! like this: "drive:\directory\sudirectory\"
|
//! like this: "drive:\directory\sudirectory\"
|
||||||
virtual bool changeWorkingDirectoryTo(const io::path& newDirectory) _IRR_OVERRIDE_;
|
bool changeWorkingDirectoryTo(const io::path& newDirectory) override;
|
||||||
|
|
||||||
//! Converts a relative path to an absolute (unique) path, resolving symbolic links
|
//! Converts a relative path to an absolute (unique) path, resolving symbolic links
|
||||||
virtual io::path getAbsolutePath(const io::path& filename) const _IRR_OVERRIDE_;
|
io::path getAbsolutePath(const io::path& filename) const override;
|
||||||
|
|
||||||
//! Returns the directory a file is located in.
|
//! Returns the directory a file is located in.
|
||||||
/** \param filename: The file to get the directory from */
|
/** \param filename: The file to get the directory from */
|
||||||
virtual io::path getFileDir(const io::path& filename) const _IRR_OVERRIDE_;
|
io::path getFileDir(const io::path& filename) const override;
|
||||||
|
|
||||||
//! Returns the base part of a filename, i.e. the name without the directory
|
//! Returns the base part of a filename, i.e. the name without the directory
|
||||||
//! part. If no directory is prefixed, the full name is returned.
|
//! part. If no directory is prefixed, the full name is returned.
|
||||||
/** \param filename: The file to get the basename from */
|
/** \param filename: The file to get the basename from */
|
||||||
virtual io::path getFileBasename(const io::path& filename, bool keepExtension=true) const _IRR_OVERRIDE_;
|
io::path getFileBasename(const io::path& filename, bool keepExtension=true) const override;
|
||||||
|
|
||||||
//! flatten a path and file name for example: "/you/me/../." becomes "/you"
|
//! flatten a path and file name for example: "/you/me/../." becomes "/you"
|
||||||
virtual io::path& flattenFilename( io::path& directory, const io::path& root = "/" ) const _IRR_OVERRIDE_;
|
io::path& flattenFilename( io::path& directory, const io::path& root = "/" ) const override;
|
||||||
|
|
||||||
//! Get the relative filename, relative to the given directory
|
//! Get the relative filename, relative to the given directory
|
||||||
virtual path getRelativeFilename(const path& filename, const path& directory) const _IRR_OVERRIDE_;
|
path getRelativeFilename(const path& filename, const path& directory) const override;
|
||||||
|
|
||||||
virtual EFileSystemType setFileListSystem(EFileSystemType listType) _IRR_OVERRIDE_;
|
EFileSystemType setFileListSystem(EFileSystemType listType) override;
|
||||||
|
|
||||||
//! Creates a list of files and directories in the current working directory
|
//! Creates a list of files and directories in the current working directory
|
||||||
//! and returns it.
|
//! and returns it.
|
||||||
virtual IFileList* createFileList() _IRR_OVERRIDE_;
|
IFileList* createFileList() override;
|
||||||
|
|
||||||
//! Creates an empty filelist
|
//! Creates an empty filelist
|
||||||
virtual IFileList* createEmptyFileList(const io::path& path, bool ignoreCase, bool ignorePaths) _IRR_OVERRIDE_;
|
IFileList* createEmptyFileList(const io::path& path, bool ignoreCase, bool ignorePaths) override;
|
||||||
|
|
||||||
//! determines if a file exists and would be able to be opened.
|
//! determines if a file exists and would be able to be opened.
|
||||||
virtual bool existFile(const io::path& filename) const _IRR_OVERRIDE_;
|
bool existFile(const io::path& filename) const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
// don't expose, needs refactoring
|
|
||||||
bool changeArchivePassword(const path& filename,
|
|
||||||
const core::stringc& password,
|
|
||||||
IFileArchive** archive = 0);
|
|
||||||
|
|
||||||
//! Currently used FileSystemType
|
//! Currently used FileSystemType
|
||||||
EFileSystemType FileSystemType;
|
EFileSystemType FileSystemType;
|
||||||
//! WorkingDirectory for Native and Virtual filesystems
|
//! WorkingDirectory for Native and Virtual filesystems
|
||||||
|
@ -7,7 +7,6 @@
|
|||||||
#ifdef _IRR_COMPILE_WITH_GLX_MANAGER_
|
#ifdef _IRR_COMPILE_WITH_GLX_MANAGER_
|
||||||
|
|
||||||
#include "os.h"
|
#include "os.h"
|
||||||
#include <dlfcn.h>
|
|
||||||
|
|
||||||
#if defined(_IRR_OPENGL_USE_EXTPOINTER_)
|
#if defined(_IRR_OPENGL_USE_EXTPOINTER_)
|
||||||
#define GL_GLEXT_LEGACY 1
|
#define GL_GLEXT_LEGACY 1
|
||||||
@ -29,7 +28,7 @@ namespace video
|
|||||||
{
|
{
|
||||||
|
|
||||||
CGLXManager::CGLXManager(const SIrrlichtCreationParameters& params, const SExposedVideoData& videodata, int screennr)
|
CGLXManager::CGLXManager(const SIrrlichtCreationParameters& params, const SExposedVideoData& videodata, int screennr)
|
||||||
: Params(params), PrimaryContext(videodata), VisualInfo(0), glxFBConfig(0), GlxWin(0), libHandle(NULL)
|
: Params(params), PrimaryContext(videodata), VisualInfo(0), glxFBConfig(0), GlxWin(0)
|
||||||
{
|
{
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
setDebugName("CGLXManager");
|
setDebugName("CGLXManager");
|
||||||
@ -280,8 +279,6 @@ bool CGLXManager::initialize(const SIrrlichtCreationParameters& params, const SE
|
|||||||
|
|
||||||
void CGLXManager::terminate()
|
void CGLXManager::terminate()
|
||||||
{
|
{
|
||||||
if (libHandle)
|
|
||||||
dlclose(libHandle);
|
|
||||||
memset((void*)&CurrentContext, 0, sizeof(CurrentContext));
|
memset((void*)&CurrentContext, 0, sizeof(CurrentContext));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -311,6 +308,16 @@ void CGLXManager::destroySurface()
|
|||||||
glXDestroyWindow((Display*)CurrentContext.OpenGLLinux.X11Display, GlxWin);
|
glXDestroyWindow((Display*)CurrentContext.OpenGLLinux.X11Display, GlxWin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(GLX_ARB_create_context)
|
||||||
|
static int IrrIgnoreError(Display *display, XErrorEvent *event)
|
||||||
|
{
|
||||||
|
char msg[256];
|
||||||
|
XGetErrorText(display, event->error_code, msg, 256);
|
||||||
|
os::Printer::log("Ignoring an X error", msg, ELL_DEBUG);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
bool CGLXManager::generateContext()
|
bool CGLXManager::generateContext()
|
||||||
{
|
{
|
||||||
GLXContext context = 0;
|
GLXContext context = 0;
|
||||||
@ -329,13 +336,16 @@ bool CGLXManager::generateContext()
|
|||||||
|
|
||||||
if (glxCreateContextAttribsARB)
|
if (glxCreateContextAttribsARB)
|
||||||
{
|
{
|
||||||
|
os::Printer::log("GLX with GLX_ARB_create_context", ELL_DEBUG);
|
||||||
int contextAttrBuffer[] = {
|
int contextAttrBuffer[] = {
|
||||||
GLX_CONTEXT_MAJOR_VERSION_ARB, 3,
|
GLX_CONTEXT_MAJOR_VERSION_ARB, 3,
|
||||||
GLX_CONTEXT_MINOR_VERSION_ARB, 0,
|
GLX_CONTEXT_MINOR_VERSION_ARB, 0,
|
||||||
// GLX_CONTEXT_PROFILE_MASK_ARB, GLX_CONTEXT_CORE_PROFILE_BIT_ARB,
|
// GLX_CONTEXT_PROFILE_MASK_ARB, GLX_CONTEXT_CORE_PROFILE_BIT_ARB,
|
||||||
None
|
None
|
||||||
};
|
};
|
||||||
|
XErrorHandler old = XSetErrorHandler(IrrIgnoreError);
|
||||||
context = glxCreateContextAttribsARB((Display*)CurrentContext.OpenGLLinux.X11Display, (GLXFBConfig)glxFBConfig, NULL, True, contextAttrBuffer);
|
context = glxCreateContextAttribsARB((Display*)CurrentContext.OpenGLLinux.X11Display, (GLXFBConfig)glxFBConfig, NULL, True, contextAttrBuffer);
|
||||||
|
XSetErrorHandler(old);
|
||||||
// transparently fall back to legacy call
|
// transparently fall back to legacy call
|
||||||
}
|
}
|
||||||
if (!context)
|
if (!context)
|
||||||
@ -456,15 +466,7 @@ void CGLXManager::destroyContext()
|
|||||||
|
|
||||||
void* CGLXManager::getProcAddress(const std::string &procName)
|
void* CGLXManager::getProcAddress(const std::string &procName)
|
||||||
{
|
{
|
||||||
void* proc = NULL;
|
return (void*)glXGetProcAddressARB(reinterpret_cast<const GLubyte*>(procName.c_str()));
|
||||||
proc = (void*)glXGetProcAddressARB(reinterpret_cast<const GLubyte*>(procName.c_str()));
|
|
||||||
if (!proc) {
|
|
||||||
if (!libHandle)
|
|
||||||
libHandle = dlopen("libGL.so", RTLD_LAZY);
|
|
||||||
if (libHandle)
|
|
||||||
proc = dlsym(libHandle, procName.c_str());
|
|
||||||
}
|
|
||||||
return proc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CGLXManager::swapBuffers()
|
bool CGLXManager::swapBuffers()
|
||||||
|
@ -34,34 +34,34 @@ namespace video
|
|||||||
~CGLXManager();
|
~CGLXManager();
|
||||||
|
|
||||||
// Initialize
|
// Initialize
|
||||||
virtual bool initialize(const SIrrlichtCreationParameters& params, const SExposedVideoData& data) _IRR_OVERRIDE_;
|
bool initialize(const SIrrlichtCreationParameters& params, const SExposedVideoData& data) override;
|
||||||
|
|
||||||
// Terminate
|
// Terminate
|
||||||
virtual void terminate() _IRR_OVERRIDE_;
|
void terminate() override;
|
||||||
|
|
||||||
// Create surface.
|
// Create surface.
|
||||||
virtual bool generateSurface() _IRR_OVERRIDE_;
|
bool generateSurface() override;
|
||||||
|
|
||||||
// Destroy surface.
|
// Destroy surface.
|
||||||
virtual void destroySurface() _IRR_OVERRIDE_;
|
void destroySurface() override;
|
||||||
|
|
||||||
// Create context.
|
// Create context.
|
||||||
virtual bool generateContext() _IRR_OVERRIDE_;
|
bool generateContext() override;
|
||||||
|
|
||||||
// Destroy context.
|
// Destroy context.
|
||||||
virtual void destroyContext() _IRR_OVERRIDE_;
|
void destroyContext() override;
|
||||||
|
|
||||||
//! Get current context
|
//! Get current context
|
||||||
virtual const SExposedVideoData& getContext() const _IRR_OVERRIDE_;
|
const SExposedVideoData& getContext() const override;
|
||||||
|
|
||||||
//! Change render context, disable old and activate new defined by videoData
|
//! Change render context, disable old and activate new defined by videoData
|
||||||
virtual bool activateContext(const SExposedVideoData& videoData, bool restorePrimaryOnZero) _IRR_OVERRIDE_;
|
bool activateContext(const SExposedVideoData& videoData, bool restorePrimaryOnZero) override;
|
||||||
|
|
||||||
// Get procedure address.
|
// Get procedure address.
|
||||||
virtual void* getProcAddress(const std::string &procName) _IRR_OVERRIDE_;
|
void* getProcAddress(const std::string &procName) override;
|
||||||
|
|
||||||
// Swap buffers.
|
// Swap buffers.
|
||||||
virtual bool swapBuffers() _IRR_OVERRIDE_;
|
bool swapBuffers() override;
|
||||||
|
|
||||||
XVisualInfo* getVisual() const {return VisualInfo;} // return XVisualInfo
|
XVisualInfo* getVisual() const {return VisualInfo;} // return XVisualInfo
|
||||||
|
|
||||||
@ -72,7 +72,6 @@ namespace video
|
|||||||
XVisualInfo* VisualInfo;
|
XVisualInfo* VisualInfo;
|
||||||
void* glxFBConfig; // GLXFBConfig
|
void* glxFBConfig; // GLXFBConfig
|
||||||
XID GlxWin; // GLXWindow
|
XID GlxWin; // GLXWindow
|
||||||
void* libHandle; // handle to libGL.so
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,64 +30,64 @@ namespace gui
|
|||||||
virtual ~CGUIButton();
|
virtual ~CGUIButton();
|
||||||
|
|
||||||
//! called if an event happened.
|
//! called if an event happened.
|
||||||
virtual bool OnEvent(const SEvent& event) _IRR_OVERRIDE_;
|
bool OnEvent(const SEvent& event) override;
|
||||||
|
|
||||||
//! draws the element and its children
|
//! draws the element and its children
|
||||||
virtual void draw() _IRR_OVERRIDE_;
|
void draw() override;
|
||||||
|
|
||||||
//! sets another skin independent font. if this is set to zero, the button uses the font of the skin.
|
//! sets another skin independent font. if this is set to zero, the button uses the font of the skin.
|
||||||
virtual void setOverrideFont(IGUIFont* font=0) _IRR_OVERRIDE_;
|
void setOverrideFont(IGUIFont* font=0) override;
|
||||||
|
|
||||||
//! Gets the override font (if any)
|
//! Gets the override font (if any)
|
||||||
virtual IGUIFont* getOverrideFont() const _IRR_OVERRIDE_;
|
IGUIFont* getOverrideFont() const override;
|
||||||
|
|
||||||
//! Get the font which is used right now for drawing
|
//! Get the font which is used right now for drawing
|
||||||
virtual IGUIFont* getActiveFont() const _IRR_OVERRIDE_;
|
IGUIFont* getActiveFont() const override;
|
||||||
|
|
||||||
//! Sets another color for the button text.
|
//! Sets another color for the button text.
|
||||||
virtual void setOverrideColor(video::SColor color) _IRR_OVERRIDE_;
|
void setOverrideColor(video::SColor color) override;
|
||||||
|
|
||||||
//! Gets the override color
|
//! Gets the override color
|
||||||
virtual video::SColor getOverrideColor(void) const _IRR_OVERRIDE_;
|
video::SColor getOverrideColor(void) const override;
|
||||||
|
|
||||||
//! Gets the currently used text color
|
//! Gets the currently used text color
|
||||||
virtual video::SColor getActiveColor() const _IRR_OVERRIDE_;
|
video::SColor getActiveColor() const override;
|
||||||
|
|
||||||
//! Sets if the button text should use the override color or the color in the gui skin.
|
//! Sets if the button text should use the override color or the color in the gui skin.
|
||||||
virtual void enableOverrideColor(bool enable) _IRR_OVERRIDE_;
|
void enableOverrideColor(bool enable) override;
|
||||||
|
|
||||||
//! Checks if an override color is enabled
|
//! Checks if an override color is enabled
|
||||||
virtual bool isOverrideColorEnabled(void) const _IRR_OVERRIDE_;
|
bool isOverrideColorEnabled(void) const override;
|
||||||
|
|
||||||
//! Sets an image which should be displayed on the button when it is in the given state.
|
//! Sets an image which should be displayed on the button when it is in the given state.
|
||||||
virtual void setImage(EGUI_BUTTON_IMAGE_STATE state, video::ITexture* image=0, const core::rect<s32>& sourceRect=core::rect<s32>(0,0,0,0)) _IRR_OVERRIDE_;
|
void setImage(EGUI_BUTTON_IMAGE_STATE state, video::ITexture* image=0, const core::rect<s32>& sourceRect=core::rect<s32>(0,0,0,0)) override;
|
||||||
|
|
||||||
//! Sets an image which should be displayed on the button when it is in normal state.
|
//! Sets an image which should be displayed on the button when it is in normal state.
|
||||||
virtual void setImage(video::ITexture* image=0) _IRR_OVERRIDE_
|
void setImage(video::ITexture* image=0) override
|
||||||
{
|
{
|
||||||
setImage(EGBIS_IMAGE_UP, image);
|
setImage(EGBIS_IMAGE_UP, image);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Sets an image which should be displayed on the button when it is in normal state.
|
//! Sets an image which should be displayed on the button when it is in normal state.
|
||||||
virtual void setImage(video::ITexture* image, const core::rect<s32>& pos) _IRR_OVERRIDE_
|
void setImage(video::ITexture* image, const core::rect<s32>& pos) override
|
||||||
{
|
{
|
||||||
setImage(EGBIS_IMAGE_UP, image, pos);
|
setImage(EGBIS_IMAGE_UP, image, pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Sets an image which should be displayed on the button when it is in pressed state.
|
//! Sets an image which should be displayed on the button when it is in pressed state.
|
||||||
virtual void setPressedImage(video::ITexture* image=0) _IRR_OVERRIDE_
|
void setPressedImage(video::ITexture* image=0) override
|
||||||
{
|
{
|
||||||
setImage(EGBIS_IMAGE_DOWN, image);
|
setImage(EGBIS_IMAGE_DOWN, image);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Sets an image which should be displayed on the button when it is in pressed state.
|
//! Sets an image which should be displayed on the button when it is in pressed state.
|
||||||
virtual void setPressedImage(video::ITexture* image, const core::rect<s32>& pos) _IRR_OVERRIDE_
|
void setPressedImage(video::ITexture* image, const core::rect<s32>& pos) override
|
||||||
{
|
{
|
||||||
setImage(EGBIS_IMAGE_DOWN, image, pos);
|
setImage(EGBIS_IMAGE_DOWN, image, pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Sets the sprite bank used by the button
|
//! Sets the sprite bank used by the button
|
||||||
virtual void setSpriteBank(IGUISpriteBank* bank=0) _IRR_OVERRIDE_;
|
void setSpriteBank(IGUISpriteBank* bank=0) override;
|
||||||
|
|
||||||
//! Sets the animated sprite for a specific button state
|
//! Sets the animated sprite for a specific button state
|
||||||
/** \param index: Number of the sprite within the sprite bank, use -1 for no sprite
|
/** \param index: Number of the sprite within the sprite bank, use -1 for no sprite
|
||||||
@ -97,60 +97,60 @@ namespace gui
|
|||||||
*/
|
*/
|
||||||
virtual void setSprite(EGUI_BUTTON_STATE state, s32 index,
|
virtual void setSprite(EGUI_BUTTON_STATE state, s32 index,
|
||||||
video::SColor color=video::SColor(255,255,255,255),
|
video::SColor color=video::SColor(255,255,255,255),
|
||||||
bool loop=false, bool scale=false) _IRR_OVERRIDE_;
|
bool loop=false, bool scale=false) override;
|
||||||
|
|
||||||
//! Get the sprite-index for the given state or -1 when no sprite is set
|
//! Get the sprite-index for the given state or -1 when no sprite is set
|
||||||
virtual s32 getSpriteIndex(EGUI_BUTTON_STATE state) const _IRR_OVERRIDE_;
|
s32 getSpriteIndex(EGUI_BUTTON_STATE state) const override;
|
||||||
|
|
||||||
//! Get the sprite color for the given state. Color is only used when a sprite is set.
|
//! Get the sprite color for the given state. Color is only used when a sprite is set.
|
||||||
virtual video::SColor getSpriteColor(EGUI_BUTTON_STATE state) const _IRR_OVERRIDE_;
|
video::SColor getSpriteColor(EGUI_BUTTON_STATE state) const override;
|
||||||
|
|
||||||
//! Returns if the sprite in the given state does loop
|
//! Returns if the sprite in the given state does loop
|
||||||
virtual bool getSpriteLoop(EGUI_BUTTON_STATE state) const _IRR_OVERRIDE_;
|
bool getSpriteLoop(EGUI_BUTTON_STATE state) const override;
|
||||||
|
|
||||||
//! Returns if the sprite in the given state is scaled
|
//! Returns if the sprite in the given state is scaled
|
||||||
virtual bool getSpriteScale(EGUI_BUTTON_STATE state) const _IRR_OVERRIDE_;
|
bool getSpriteScale(EGUI_BUTTON_STATE state) const override;
|
||||||
|
|
||||||
//! Sets if the button should behave like a push button. Which means it
|
//! Sets if the button should behave like a push button. Which means it
|
||||||
//! can be in two states: Normal or Pressed. With a click on the button,
|
//! can be in two states: Normal or Pressed. With a click on the button,
|
||||||
//! the user can change the state of the button.
|
//! the user can change the state of the button.
|
||||||
virtual void setIsPushButton(bool isPushButton=true) _IRR_OVERRIDE_;
|
void setIsPushButton(bool isPushButton=true) override;
|
||||||
|
|
||||||
//! Checks whether the button is a push button
|
//! Checks whether the button is a push button
|
||||||
virtual bool isPushButton() const _IRR_OVERRIDE_;
|
bool isPushButton() const override;
|
||||||
|
|
||||||
//! Sets the pressed state of the button if this is a pushbutton
|
//! Sets the pressed state of the button if this is a pushbutton
|
||||||
virtual void setPressed(bool pressed=true) _IRR_OVERRIDE_;
|
void setPressed(bool pressed=true) override;
|
||||||
|
|
||||||
//! Returns if the button is currently pressed
|
//! Returns if the button is currently pressed
|
||||||
virtual bool isPressed() const _IRR_OVERRIDE_;
|
bool isPressed() const override;
|
||||||
|
|
||||||
//! Sets if the button should use the skin to draw its border
|
//! Sets if the button should use the skin to draw its border
|
||||||
virtual void setDrawBorder(bool border=true) _IRR_OVERRIDE_;
|
void setDrawBorder(bool border=true) override;
|
||||||
|
|
||||||
//! Checks if the button face and border are being drawn
|
//! Checks if the button face and border are being drawn
|
||||||
virtual bool isDrawingBorder() const _IRR_OVERRIDE_;
|
bool isDrawingBorder() const override;
|
||||||
|
|
||||||
//! Sets if the alpha channel should be used for drawing images on the button (default is false)
|
//! Sets if the alpha channel should be used for drawing images on the button (default is false)
|
||||||
virtual void setUseAlphaChannel(bool useAlphaChannel=true) _IRR_OVERRIDE_;
|
void setUseAlphaChannel(bool useAlphaChannel=true) override;
|
||||||
|
|
||||||
//! Checks if the alpha channel should be used for drawing images on the button
|
//! Checks if the alpha channel should be used for drawing images on the button
|
||||||
virtual bool isAlphaChannelUsed() const _IRR_OVERRIDE_;
|
bool isAlphaChannelUsed() const override;
|
||||||
|
|
||||||
//! Sets if the button should scale the button images to fit
|
//! Sets if the button should scale the button images to fit
|
||||||
virtual void setScaleImage(bool scaleImage=true) _IRR_OVERRIDE_;
|
void setScaleImage(bool scaleImage=true) override;
|
||||||
|
|
||||||
//! Checks whether the button scales the used images
|
//! Checks whether the button scales the used images
|
||||||
virtual bool isScalingImage() const _IRR_OVERRIDE_;
|
bool isScalingImage() const override;
|
||||||
|
|
||||||
//! Get if the shift key was pressed in last EGET_BUTTON_CLICKED event
|
//! Get if the shift key was pressed in last EGET_BUTTON_CLICKED event
|
||||||
virtual bool getClickShiftState() const _IRR_OVERRIDE_
|
bool getClickShiftState() const override
|
||||||
{
|
{
|
||||||
return ClickShiftState;
|
return ClickShiftState;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Get if the control key was pressed in last EGET_BUTTON_CLICKED event
|
//! Get if the control key was pressed in last EGET_BUTTON_CLICKED event
|
||||||
virtual bool getClickControlState() const _IRR_OVERRIDE_
|
bool getClickControlState() const override
|
||||||
{
|
{
|
||||||
return ClickControlState;
|
return ClickControlState;
|
||||||
}
|
}
|
||||||
|
@ -23,30 +23,30 @@ namespace gui
|
|||||||
CGUICheckBox(bool checked, IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle);
|
CGUICheckBox(bool checked, IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle);
|
||||||
|
|
||||||
//! set if box is checked
|
//! set if box is checked
|
||||||
virtual void setChecked(bool checked) _IRR_OVERRIDE_;
|
void setChecked(bool checked) override;
|
||||||
|
|
||||||
//! returns if box is checked
|
//! returns if box is checked
|
||||||
virtual bool isChecked() const _IRR_OVERRIDE_;
|
bool isChecked() const override;
|
||||||
|
|
||||||
//! Sets whether to draw the background
|
//! Sets whether to draw the background
|
||||||
virtual void setDrawBackground(bool draw) _IRR_OVERRIDE_;
|
void setDrawBackground(bool draw) override;
|
||||||
|
|
||||||
//! Checks if background drawing is enabled
|
//! Checks if background drawing is enabled
|
||||||
/** \return true if background drawing is enabled, false otherwise */
|
/** \return true if background drawing is enabled, false otherwise */
|
||||||
virtual bool isDrawBackgroundEnabled() const _IRR_OVERRIDE_;
|
bool isDrawBackgroundEnabled() const override;
|
||||||
|
|
||||||
//! Sets whether to draw the border
|
//! Sets whether to draw the border
|
||||||
virtual void setDrawBorder(bool draw) _IRR_OVERRIDE_;
|
void setDrawBorder(bool draw) override;
|
||||||
|
|
||||||
//! Checks if border drawing is enabled
|
//! Checks if border drawing is enabled
|
||||||
/** \return true if border drawing is enabled, false otherwise */
|
/** \return true if border drawing is enabled, false otherwise */
|
||||||
virtual bool isDrawBorderEnabled() const _IRR_OVERRIDE_;
|
bool isDrawBorderEnabled() const override;
|
||||||
|
|
||||||
//! called if an event happened.
|
//! called if an event happened.
|
||||||
virtual bool OnEvent(const SEvent& event) _IRR_OVERRIDE_;
|
bool OnEvent(const SEvent& event) override;
|
||||||
|
|
||||||
//! draws the element and its children
|
//! draws the element and its children
|
||||||
virtual void draw() _IRR_OVERRIDE_;
|
void draw() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
@ -1,479 +0,0 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
|
||||||
// This file is part of the "Irrlicht Engine".
|
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
|
||||||
|
|
||||||
#include "CGUIColorSelectDialog.h"
|
|
||||||
|
|
||||||
#ifdef _IRR_COMPILE_WITH_GUI_
|
|
||||||
|
|
||||||
#include "IGUISkin.h"
|
|
||||||
#include "IGUIEnvironment.h"
|
|
||||||
#include "IVideoDriver.h"
|
|
||||||
#include "IGUIButton.h"
|
|
||||||
#include "IGUIStaticText.h"
|
|
||||||
#include "IGUIFont.h"
|
|
||||||
#include "IGUISpriteBank.h"
|
|
||||||
#include "IFileList.h"
|
|
||||||
#include "os.h"
|
|
||||||
#include "fast_atof.h"
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
namespace gui
|
|
||||||
{
|
|
||||||
|
|
||||||
const s32 CSD_WIDTH = 350;
|
|
||||||
const s32 CSD_HEIGHT = 300;
|
|
||||||
|
|
||||||
namespace
|
|
||||||
{
|
|
||||||
|
|
||||||
struct subElementPredefines
|
|
||||||
{
|
|
||||||
const wchar_t *pre;
|
|
||||||
const wchar_t *init;
|
|
||||||
const wchar_t *post;
|
|
||||||
int x, y;
|
|
||||||
int range_down ,range_up;
|
|
||||||
};
|
|
||||||
|
|
||||||
static const subElementPredefines Template [] =
|
|
||||||
{
|
|
||||||
{ L"A:", L"0", 0,50,165, 0, 255 },
|
|
||||||
{ L"R:", L"0", 0,20,205, 0, 255 },
|
|
||||||
{ L"G:", L"0", 0,20,230, 0, 255 },
|
|
||||||
{ L"B:", L"0", 0,20,255, 0, 255 },
|
|
||||||
{ L"H:", L"0", L"°",80,205, 0, 360 },
|
|
||||||
{ L"S:", L"0", L"%",80,230, 0, 100 },
|
|
||||||
{ L"L:", L"0", L"%",80,255, 0, 100 },
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//! constructor
|
|
||||||
CGUIColorSelectDialog::CGUIColorSelectDialog(const wchar_t* title, IGUIEnvironment* environment, IGUIElement* parent, s32 id)
|
|
||||||
: IGUIColorSelectDialog(environment, parent, id,
|
|
||||||
core::rect<s32>((parent->getAbsolutePosition().getWidth()-CSD_WIDTH)/2,
|
|
||||||
(parent->getAbsolutePosition().getHeight()-CSD_HEIGHT)/2,
|
|
||||||
(parent->getAbsolutePosition().getWidth()-CSD_WIDTH)/2+CSD_WIDTH,
|
|
||||||
(parent->getAbsolutePosition().getHeight()-CSD_HEIGHT)/2+CSD_HEIGHT)),
|
|
||||||
Dragging(false)
|
|
||||||
{
|
|
||||||
#ifdef _DEBUG
|
|
||||||
IGUIElement::setDebugName("CGUIColorSelectDialog");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
Text = title;
|
|
||||||
|
|
||||||
IGUISkin* skin = Environment->getSkin();
|
|
||||||
|
|
||||||
const s32 buttonw = environment->getSkin()->getSize(EGDS_WINDOW_BUTTON_WIDTH);
|
|
||||||
const s32 posx = RelativeRect.getWidth() - buttonw - 4;
|
|
||||||
|
|
||||||
CloseButton = Environment->addButton(core::rect<s32>(posx, 3, posx + buttonw, 3 + buttonw),
|
|
||||||
this, -1, L"", skin ? skin->getDefaultText(EGDT_WINDOW_CLOSE) : L"Close");
|
|
||||||
if (skin && skin->getSpriteBank())
|
|
||||||
{
|
|
||||||
CloseButton->setSpriteBank(skin->getSpriteBank());
|
|
||||||
CloseButton->setSprite(EGBS_BUTTON_UP, skin->getIcon(EGDI_WINDOW_CLOSE), skin->getColor(EGDC_WINDOW_SYMBOL));
|
|
||||||
CloseButton->setSprite(EGBS_BUTTON_DOWN, skin->getIcon(EGDI_WINDOW_CLOSE), skin->getColor(EGDC_WINDOW_SYMBOL));
|
|
||||||
}
|
|
||||||
CloseButton->setSubElement(true);
|
|
||||||
CloseButton->setTabStop(false);
|
|
||||||
CloseButton->setAlignment(EGUIA_LOWERRIGHT, EGUIA_LOWERRIGHT, EGUIA_UPPERLEFT, EGUIA_UPPERLEFT);
|
|
||||||
CloseButton->grab();
|
|
||||||
|
|
||||||
OKButton = Environment->addButton(
|
|
||||||
core::rect<s32>(RelativeRect.getWidth()-80, 30, RelativeRect.getWidth()-10, 50),
|
|
||||||
this, -1, skin ? skin->getDefaultText(EGDT_MSG_BOX_OK) : L"OK");
|
|
||||||
OKButton->setSubElement(true);
|
|
||||||
OKButton->setAlignment(EGUIA_LOWERRIGHT, EGUIA_LOWERRIGHT, EGUIA_UPPERLEFT, EGUIA_UPPERLEFT);
|
|
||||||
OKButton->grab();
|
|
||||||
|
|
||||||
CancelButton = Environment->addButton(
|
|
||||||
core::rect<s32>(RelativeRect.getWidth()-80, 55, RelativeRect.getWidth()-10, 75),
|
|
||||||
this, -1, skin ? skin->getDefaultText(EGDT_MSG_BOX_CANCEL) : L"Cancel");
|
|
||||||
CancelButton->setSubElement(true);
|
|
||||||
CancelButton->setAlignment(EGUIA_LOWERRIGHT, EGUIA_LOWERRIGHT, EGUIA_UPPERLEFT, EGUIA_UPPERLEFT);
|
|
||||||
CancelButton->grab();
|
|
||||||
|
|
||||||
video::IVideoDriver* driver = Environment->getVideoDriver();
|
|
||||||
ColorRing.Texture = driver->getTexture ( "#colorring" );
|
|
||||||
if ( 0 == ColorRing.Texture )
|
|
||||||
{
|
|
||||||
buildColorRing(core::dimension2d<u32>(128, 128), 1,
|
|
||||||
Environment->getSkin()->getColor(EGDC_3D_SHADOW));
|
|
||||||
}
|
|
||||||
|
|
||||||
core::rect<s32> r(20,20, 0,0);
|
|
||||||
|
|
||||||
ColorRing.Control = Environment->addImage(ColorRing.Texture, r.UpperLeftCorner, true, this);
|
|
||||||
ColorRing.Control->setSubElement(true);
|
|
||||||
ColorRing.Control->grab();
|
|
||||||
|
|
||||||
for ( u32 i = 0; i != sizeof (Template) / sizeof ( subElementPredefines ); ++i )
|
|
||||||
{
|
|
||||||
if ( Template[i].pre )
|
|
||||||
{
|
|
||||||
r.UpperLeftCorner.X = Template[i].x;
|
|
||||||
r.UpperLeftCorner.Y = Template[i].y;
|
|
||||||
r.LowerRightCorner.X = r.UpperLeftCorner.X + 15;
|
|
||||||
r.LowerRightCorner.Y = r.UpperLeftCorner.Y + 20;
|
|
||||||
IGUIElement *t = Environment->addStaticText(Template[i].pre, r, false, false, this);
|
|
||||||
t->setSubElement(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( Template[i].post )
|
|
||||||
{
|
|
||||||
r.UpperLeftCorner.X = Template[i].x + 56;
|
|
||||||
r.UpperLeftCorner.Y = Template[i].y;
|
|
||||||
r.LowerRightCorner.X = r.UpperLeftCorner.X + 15;
|
|
||||||
r.LowerRightCorner.Y = r.UpperLeftCorner.Y + 20;
|
|
||||||
IGUIElement *t = Environment->addStaticText( Template[i].post, r, false, false, this);
|
|
||||||
t->setSubElement(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
r.UpperLeftCorner.X = Template[i].x + 15;
|
|
||||||
r.UpperLeftCorner.Y = Template[i].y-2;
|
|
||||||
r.LowerRightCorner.X = r.UpperLeftCorner.X + 40;
|
|
||||||
r.LowerRightCorner.Y = r.UpperLeftCorner.Y + 20;
|
|
||||||
|
|
||||||
gui::IGUISpinBox* spin = Environment->addSpinBox( Template[i].init, r, true, this);
|
|
||||||
spin->setSubElement(true);
|
|
||||||
spin->setDecimalPlaces(0);
|
|
||||||
spin->setRange((f32)Template[i].range_down, (f32)Template[i].range_up);
|
|
||||||
spin->grab();
|
|
||||||
|
|
||||||
Battery.push_back(spin);
|
|
||||||
}
|
|
||||||
|
|
||||||
bringToFront(CancelButton);
|
|
||||||
bringToFront(OKButton);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! destructor
|
|
||||||
CGUIColorSelectDialog::~CGUIColorSelectDialog()
|
|
||||||
{
|
|
||||||
if (CloseButton)
|
|
||||||
CloseButton->drop();
|
|
||||||
|
|
||||||
if (OKButton)
|
|
||||||
OKButton->drop();
|
|
||||||
|
|
||||||
if (CancelButton)
|
|
||||||
CancelButton->drop();
|
|
||||||
|
|
||||||
for (u32 i = 0; i != Battery.size(); ++i)
|
|
||||||
Battery[i]->drop();
|
|
||||||
|
|
||||||
if (ColorRing.Control)
|
|
||||||
ColorRing.Control->drop();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! renders a antialiased, colored ring
|
|
||||||
void CGUIColorSelectDialog::buildColorRing( const core::dimension2d<u32> & dim, s32 supersample, const video::SColor& borderColor )
|
|
||||||
{
|
|
||||||
const core::dimension2d<u32> d(dim.Width * supersample, dim.Height * supersample);
|
|
||||||
video::IVideoDriver* driver = Environment->getVideoDriver();
|
|
||||||
|
|
||||||
video::IImage *RawTexture = driver->createImage(video::ECF_A8R8G8B8, d);
|
|
||||||
|
|
||||||
RawTexture->fill ( 0x00808080 );
|
|
||||||
|
|
||||||
const s32 radiusOut = ( d.Width / 2 ) - 4;
|
|
||||||
const s32 fullR2 = radiusOut * radiusOut;
|
|
||||||
|
|
||||||
video::SColorf rgb(0,0,0);
|
|
||||||
video::SColorHSL hsl;
|
|
||||||
hsl.Luminance = 50;
|
|
||||||
hsl.Saturation = 100;
|
|
||||||
|
|
||||||
core::position2d<s32> p;
|
|
||||||
for ( p.Y = -radiusOut; p.Y <= radiusOut; p.Y += 1 )
|
|
||||||
{
|
|
||||||
s32 y2 = p.Y * p.Y;
|
|
||||||
|
|
||||||
for (p.X = -radiusOut; p.X <= radiusOut; p.X += 1)
|
|
||||||
{
|
|
||||||
s32 r2 = y2 + ( p.X * p.X );
|
|
||||||
|
|
||||||
// test point in circle
|
|
||||||
s32 testa = r2 - fullR2;
|
|
||||||
|
|
||||||
if ( testa < 0 )
|
|
||||||
{
|
|
||||||
// dotproduct u ( x,y ) * v ( 1, 0 ) = cosinus(a)
|
|
||||||
|
|
||||||
const f32 r = sqrtf((f32) r2);
|
|
||||||
|
|
||||||
// normalize, dotproduct = xnorm
|
|
||||||
const f32 xn = r == 0.f ? 0.f : -p.X * core::reciprocal(r);
|
|
||||||
|
|
||||||
hsl.Hue = acosf(xn)*core::RADTODEG;
|
|
||||||
if ( p.Y > 0 )
|
|
||||||
hsl.Hue = 360 - hsl.Hue;
|
|
||||||
hsl.Hue -= 90;
|
|
||||||
|
|
||||||
const f32 rTest = r / radiusOut;
|
|
||||||
#if 0
|
|
||||||
if (rTest < 0.33f)
|
|
||||||
{
|
|
||||||
// luminance from 0 to 50
|
|
||||||
hsl.Luminance = 50*(rTest/0.33);
|
|
||||||
hsl.Saturation = 0.f;
|
|
||||||
hsl.toRGB(rgb);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
if ( rTest < 0.66f )
|
|
||||||
{
|
|
||||||
// saturation from 0 to 100
|
|
||||||
hsl.Saturation = 100*(( rTest - 0.33f ) / 0.33f);
|
|
||||||
hsl.Luminance = 50;
|
|
||||||
hsl.toRGB(rgb);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// luminance from 50 to 100
|
|
||||||
hsl.Luminance = 100*(0.5f + ( ( rTest - 0.66f ) / .66f ));
|
|
||||||
hsl.Saturation = 100;
|
|
||||||
hsl.toRGB(rgb);
|
|
||||||
}
|
|
||||||
// borders should be slightly transparent
|
|
||||||
if ( rTest >= 0.95f )
|
|
||||||
rgb.a = (1.f-rTest)*20;
|
|
||||||
else
|
|
||||||
rgb.a=1.f;
|
|
||||||
#else
|
|
||||||
if ( rTest > 0.5f )
|
|
||||||
{
|
|
||||||
hsl.Saturation = 100;
|
|
||||||
hsl.Luminance = 50;
|
|
||||||
hsl.toRGB(rgb);
|
|
||||||
}
|
|
||||||
// borders should be slightly transparent
|
|
||||||
if ( rTest < 0.5f )
|
|
||||||
rgb.a = 0;
|
|
||||||
else if ( rTest >= 0.95f )
|
|
||||||
rgb.a = (1.f-rTest)*20;
|
|
||||||
else if ( rTest <= 0.55f )
|
|
||||||
rgb.a = (rTest-0.5f)*20;
|
|
||||||
else
|
|
||||||
rgb.a=1.f;
|
|
||||||
#endif
|
|
||||||
RawTexture->setPixel(4+p.X+radiusOut, 4+p.Y+radiusOut, rgb.toSColor());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( supersample > 1 )
|
|
||||||
{
|
|
||||||
video::IImage * filter = driver->createImage(video::ECF_A8R8G8B8, dim );
|
|
||||||
RawTexture->copyToScalingBoxFilter(filter);
|
|
||||||
RawTexture->drop();
|
|
||||||
RawTexture = filter;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool generateMipLevels = driver->getTextureCreationFlag(video::ETCF_CREATE_MIP_MAPS);
|
|
||||||
driver->setTextureCreationFlag( video::ETCF_CREATE_MIP_MAPS, false);
|
|
||||||
|
|
||||||
ColorRing.Texture = driver->addTexture ( "#colorring", RawTexture);
|
|
||||||
RawTexture->drop();
|
|
||||||
|
|
||||||
driver->setTextureCreationFlag(video::ETCF_CREATE_MIP_MAPS, generateMipLevels);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! called if an event happened.
|
|
||||||
bool CGUIColorSelectDialog::OnEvent(const SEvent& event)
|
|
||||||
{
|
|
||||||
if (isEnabled())
|
|
||||||
{
|
|
||||||
switch(event.EventType)
|
|
||||||
{
|
|
||||||
case EET_GUI_EVENT:
|
|
||||||
switch(event.GUIEvent.EventType)
|
|
||||||
{
|
|
||||||
case EGET_SPINBOX_CHANGED:
|
|
||||||
{
|
|
||||||
for ( u32 i = 0; i!= Battery.size (); ++i )
|
|
||||||
{
|
|
||||||
if ( event.GUIEvent.Caller == Battery[i] )
|
|
||||||
{
|
|
||||||
if (i<4)
|
|
||||||
{
|
|
||||||
video::SColor rgb((u32)Battery[0]->getValue(), (u32)Battery[1]->getValue(),
|
|
||||||
(u32)Battery[2]->getValue(), (u32)Battery[3]->getValue());
|
|
||||||
video::SColorHSL hsl;
|
|
||||||
video::SColorf rgb2(rgb);
|
|
||||||
hsl.fromRGB(rgb2);
|
|
||||||
Battery[4]->setValue(hsl.Hue);
|
|
||||||
Battery[5]->setValue(hsl.Saturation);
|
|
||||||
Battery[6]->setValue(hsl.Luminance);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
video::SColorHSL hsl(Battery[4]->getValue(), Battery[5]->getValue(),
|
|
||||||
Battery[6]->getValue());
|
|
||||||
video::SColorf rgb2;
|
|
||||||
hsl.toRGB(rgb2);
|
|
||||||
video::SColor rgb = rgb2.toSColor();
|
|
||||||
Battery[1]->setValue((f32)rgb.getRed());
|
|
||||||
Battery[2]->setValue((f32)rgb.getGreen());
|
|
||||||
Battery[3]->setValue((f32)rgb.getBlue());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
case EGET_ELEMENT_FOCUS_LOST:
|
|
||||||
Dragging = false;
|
|
||||||
break;
|
|
||||||
case EGET_BUTTON_CLICKED:
|
|
||||||
if (event.GUIEvent.Caller == CloseButton ||
|
|
||||||
event.GUIEvent.Caller == CancelButton)
|
|
||||||
{
|
|
||||||
sendCancelEvent();
|
|
||||||
remove();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
if (event.GUIEvent.Caller == OKButton)
|
|
||||||
{
|
|
||||||
sendSelectedEvent();
|
|
||||||
remove();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EGET_LISTBOX_CHANGED:
|
|
||||||
case EGET_LISTBOX_SELECTED_AGAIN:
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case EET_MOUSE_INPUT_EVENT:
|
|
||||||
switch(event.MouseInput.Event)
|
|
||||||
{
|
|
||||||
case EMIE_LMOUSE_PRESSED_DOWN:
|
|
||||||
DragStart.X = event.MouseInput.X;
|
|
||||||
DragStart.Y = event.MouseInput.Y;
|
|
||||||
Dragging = true;
|
|
||||||
return true;
|
|
||||||
case EMIE_LMOUSE_LEFT_UP:
|
|
||||||
Dragging = false;
|
|
||||||
return true;
|
|
||||||
case EMIE_MOUSE_MOVED:
|
|
||||||
if (Dragging)
|
|
||||||
{
|
|
||||||
// gui window should not be dragged outside its parent
|
|
||||||
if (Parent)
|
|
||||||
if (event.MouseInput.X < Parent->getAbsolutePosition().UpperLeftCorner.X +1 ||
|
|
||||||
event.MouseInput.Y < Parent->getAbsolutePosition().UpperLeftCorner.Y +1 ||
|
|
||||||
event.MouseInput.X > Parent->getAbsolutePosition().LowerRightCorner.X -1 ||
|
|
||||||
event.MouseInput.Y > Parent->getAbsolutePosition().LowerRightCorner.Y -1)
|
|
||||||
|
|
||||||
return true;
|
|
||||||
|
|
||||||
move(core::position2d<s32>(event.MouseInput.X - DragStart.X, event.MouseInput.Y - DragStart.Y));
|
|
||||||
DragStart.X = event.MouseInput.X;
|
|
||||||
DragStart.Y = event.MouseInput.Y;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return IGUIElement::OnEvent(event);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! draws the element and its children
|
|
||||||
void CGUIColorSelectDialog::draw()
|
|
||||||
{
|
|
||||||
if (!IsVisible)
|
|
||||||
return;
|
|
||||||
|
|
||||||
IGUISkin* skin = Environment->getSkin();
|
|
||||||
core::rect<s32> rect = skin->draw3DWindowBackground(this, true, skin->getColor(EGDC_ACTIVE_BORDER),
|
|
||||||
AbsoluteRect, &AbsoluteClippingRect);
|
|
||||||
|
|
||||||
if (Text.size())
|
|
||||||
{
|
|
||||||
rect.UpperLeftCorner.X += 2;
|
|
||||||
rect.LowerRightCorner.X -= skin->getSize(EGDS_WINDOW_BUTTON_WIDTH) + 5;
|
|
||||||
|
|
||||||
IGUIFont* font = skin->getFont(EGDF_WINDOW);
|
|
||||||
if (font)
|
|
||||||
font->draw(Text.c_str(), rect, skin->getColor(EGDC_ACTIVE_CAPTION), false, true,
|
|
||||||
&AbsoluteClippingRect);
|
|
||||||
}
|
|
||||||
|
|
||||||
IGUIElement::draw();
|
|
||||||
|
|
||||||
// draw color selector after the window elements
|
|
||||||
core::vector2di pos(ColorRing.Control->getAbsolutePosition().UpperLeftCorner);
|
|
||||||
pos.X += ColorRing.Texture->getOriginalSize().Width/2;
|
|
||||||
pos.Y += ColorRing.Texture->getOriginalSize().Height/2;
|
|
||||||
#if 0
|
|
||||||
const f32 h = Battery[4]->getValue();
|
|
||||||
const f32 s = Battery[5]->getValue();
|
|
||||||
const f32 l = Battery[6]->getValue();
|
|
||||||
const f32 factor = 58.f*(((s==0)&&(l<50))?(l*0.33f/50):(
|
|
||||||
(s<100)?((.33f+(s*0.33f/100))):((0.66f+(l-50)*0.33f/50))));
|
|
||||||
|
|
||||||
#else
|
|
||||||
const f32 factor = 44;
|
|
||||||
#endif
|
|
||||||
pos.X += core::round32(sinf(Battery[4]->getValue()*core::DEGTORAD)*factor);
|
|
||||||
pos.Y -= core::round32(cosf(Battery[4]->getValue()*core::DEGTORAD)*factor);
|
|
||||||
Environment->getVideoDriver()->draw2DPolygon(pos, 4, 0xffffffff, 4);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
video::SColor CGUIColorSelectDialog::getColor()
|
|
||||||
{
|
|
||||||
return video::SColor((u32)Battery[0]->getValue(), (u32)Battery[1]->getValue(),
|
|
||||||
(u32)Battery[2]->getValue(), (u32)Battery[3]->getValue());
|
|
||||||
}
|
|
||||||
|
|
||||||
video::SColorHSL CGUIColorSelectDialog::getColorHSL()
|
|
||||||
{
|
|
||||||
return video::SColorHSL(Battery[4]->getValue(), Battery[5]->getValue(),
|
|
||||||
Battery[6]->getValue());
|
|
||||||
}
|
|
||||||
|
|
||||||
//! sends the event that the file has been selected.
|
|
||||||
void CGUIColorSelectDialog::sendSelectedEvent()
|
|
||||||
{
|
|
||||||
SEvent event;
|
|
||||||
event.EventType = EET_GUI_EVENT;
|
|
||||||
event.GUIEvent.Caller = this;
|
|
||||||
event.GUIEvent.Element = 0;
|
|
||||||
event.GUIEvent.EventType = EGET_FILE_SELECTED;
|
|
||||||
Parent->OnEvent(event);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! sends the event that the file choose process has been canceld
|
|
||||||
void CGUIColorSelectDialog::sendCancelEvent()
|
|
||||||
{
|
|
||||||
SEvent event;
|
|
||||||
event.EventType = EET_GUI_EVENT;
|
|
||||||
event.GUIEvent.Caller = this;
|
|
||||||
event.GUIEvent.Element = 0;
|
|
||||||
event.GUIEvent.EventType = EGET_FILE_CHOOSE_DIALOG_CANCELLED;
|
|
||||||
Parent->OnEvent(event);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
#endif // _IRR_COMPILE_WITH_GUI_
|
|
@ -1,74 +0,0 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
|
||||||
// This file is part of the "Irrlicht Engine".
|
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
|
||||||
|
|
||||||
#ifndef __C_GUI_COLOR_SELECT_DIALOG_H_INCLUDED__
|
|
||||||
#define __C_GUI_COLOR_SELECT_DIALOG_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IrrCompileConfig.h"
|
|
||||||
#ifdef _IRR_COMPILE_WITH_GUI_
|
|
||||||
|
|
||||||
#include "IGUIColorSelectDialog.h"
|
|
||||||
#include "IGUIButton.h"
|
|
||||||
#include "IGUISpinBox.h"
|
|
||||||
#include "IGUIImage.h"
|
|
||||||
#include "irrArray.h"
|
|
||||||
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
namespace gui
|
|
||||||
{
|
|
||||||
|
|
||||||
class CGUIColorSelectDialog : public IGUIColorSelectDialog
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
//! constructor
|
|
||||||
CGUIColorSelectDialog(const wchar_t* title, IGUIEnvironment* environment, IGUIElement* parent, s32 id);
|
|
||||||
|
|
||||||
//! destructor
|
|
||||||
virtual ~CGUIColorSelectDialog();
|
|
||||||
|
|
||||||
//! called if an event happened.
|
|
||||||
virtual bool OnEvent(const SEvent& event) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! draws the element and its children
|
|
||||||
virtual void draw() _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
virtual video::SColor getColor() _IRR_OVERRIDE_;
|
|
||||||
virtual video::SColorHSL getColorHSL() _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
//! sends the event that the file has been selected.
|
|
||||||
void sendSelectedEvent();
|
|
||||||
|
|
||||||
//! sends the event that the file choose process has been canceld
|
|
||||||
void sendCancelEvent();
|
|
||||||
|
|
||||||
core::position2d<s32> DragStart;
|
|
||||||
bool Dragging;
|
|
||||||
IGUIButton* CloseButton;
|
|
||||||
IGUIButton* OKButton;
|
|
||||||
IGUIButton* CancelButton;
|
|
||||||
|
|
||||||
core::array<IGUISpinBox*> Battery;
|
|
||||||
|
|
||||||
struct SColorCircle
|
|
||||||
{
|
|
||||||
IGUIImage * Control;
|
|
||||||
video::ITexture * Texture;
|
|
||||||
};
|
|
||||||
SColorCircle ColorRing;
|
|
||||||
|
|
||||||
void buildColorRing( const core::dimension2d<u32> & dim, s32 supersample, const video::SColor& borderColor );
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
#endif // _IRR_COMPILE_WITH_GUI_
|
|
||||||
|
|
||||||
#endif // __C_GUI_COLOR_SELECT_DIALOG_H_INCLUDED__
|
|
@ -30,49 +30,49 @@ namespace gui
|
|||||||
s32 id, core::rect<s32> rectangle);
|
s32 id, core::rect<s32> rectangle);
|
||||||
|
|
||||||
//! Returns amount of items in box
|
//! Returns amount of items in box
|
||||||
virtual u32 getItemCount() const _IRR_OVERRIDE_;
|
u32 getItemCount() const override;
|
||||||
|
|
||||||
//! returns string of an item. the idx may be a value from 0 to itemCount-1
|
//! returns string of an item. the idx may be a value from 0 to itemCount-1
|
||||||
virtual const wchar_t* getItem(u32 idx) const _IRR_OVERRIDE_;
|
const wchar_t* getItem(u32 idx) const override;
|
||||||
|
|
||||||
//! Returns item data of an item. the idx may be a value from 0 to itemCount-1
|
//! Returns item data of an item. the idx may be a value from 0 to itemCount-1
|
||||||
virtual u32 getItemData(u32 idx) const _IRR_OVERRIDE_;
|
u32 getItemData(u32 idx) const override;
|
||||||
|
|
||||||
//! Returns index based on item data
|
//! Returns index based on item data
|
||||||
virtual s32 getIndexForItemData( u32 data ) const _IRR_OVERRIDE_;
|
s32 getIndexForItemData( u32 data ) const override;
|
||||||
|
|
||||||
//! adds an item and returns the index of it
|
//! adds an item and returns the index of it
|
||||||
virtual u32 addItem(const wchar_t* text, u32 data) _IRR_OVERRIDE_;
|
u32 addItem(const wchar_t* text, u32 data) override;
|
||||||
|
|
||||||
//! Removes an item from the combo box.
|
//! Removes an item from the combo box.
|
||||||
virtual void removeItem(u32 id) _IRR_OVERRIDE_;
|
void removeItem(u32 id) override;
|
||||||
|
|
||||||
//! deletes all items in the combo box
|
//! deletes all items in the combo box
|
||||||
virtual void clear() _IRR_OVERRIDE_;
|
void clear() override;
|
||||||
|
|
||||||
//! returns the text of the currently selected item
|
//! returns the text of the currently selected item
|
||||||
virtual const wchar_t* getText() const _IRR_OVERRIDE_;
|
const wchar_t* getText() const override;
|
||||||
|
|
||||||
//! returns id of selected item. returns -1 if no item is selected.
|
//! returns id of selected item. returns -1 if no item is selected.
|
||||||
virtual s32 getSelected() const _IRR_OVERRIDE_;
|
s32 getSelected() const override;
|
||||||
|
|
||||||
//! sets the selected item. Set this to -1 if no item should be selected
|
//! sets the selected item. Set this to -1 if no item should be selected
|
||||||
virtual void setSelected(s32 idx) _IRR_OVERRIDE_;
|
void setSelected(s32 idx) override;
|
||||||
|
|
||||||
//! sets the text alignment of the text part
|
//! sets the text alignment of the text part
|
||||||
virtual void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical) _IRR_OVERRIDE_;
|
void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical) override;
|
||||||
|
|
||||||
//! Set the maximal number of rows for the selection listbox
|
//! Set the maximal number of rows for the selection listbox
|
||||||
virtual void setMaxSelectionRows(u32 max) _IRR_OVERRIDE_;
|
void setMaxSelectionRows(u32 max) override;
|
||||||
|
|
||||||
//! Get the maximal number of rows for the selection listbox
|
//! Get the maximal number of rows for the selection listbox
|
||||||
virtual u32 getMaxSelectionRows() const _IRR_OVERRIDE_;
|
u32 getMaxSelectionRows() const override;
|
||||||
|
|
||||||
//! called if an event happened.
|
//! called if an event happened.
|
||||||
virtual bool OnEvent(const SEvent& event) _IRR_OVERRIDE_;
|
bool OnEvent(const SEvent& event) override;
|
||||||
|
|
||||||
//! draws the element and its children
|
//! draws the element and its children
|
||||||
virtual void draw() _IRR_OVERRIDE_;
|
void draw() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
@ -1,773 +0,0 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
|
||||||
// This file is part of the "Irrlicht Engine".
|
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
|
||||||
|
|
||||||
#include "CGUIContextMenu.h"
|
|
||||||
|
|
||||||
#ifdef _IRR_COMPILE_WITH_GUI_
|
|
||||||
|
|
||||||
#include "IGUISkin.h"
|
|
||||||
#include "IGUIEnvironment.h"
|
|
||||||
#include "IVideoDriver.h"
|
|
||||||
#include "IGUIFont.h"
|
|
||||||
#include "IGUISpriteBank.h"
|
|
||||||
#include "os.h"
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
namespace gui
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
//! constructor
|
|
||||||
CGUIContextMenu::CGUIContextMenu(IGUIEnvironment* environment,
|
|
||||||
IGUIElement* parent, s32 id,
|
|
||||||
core::rect<s32> rectangle, bool getFocus, bool allowFocus)
|
|
||||||
: IGUIContextMenu(environment, parent, id, rectangle), EventParent(0), LastFont(0),
|
|
||||||
CloseHandling(ECMC_REMOVE), HighLighted(-1), ChangeTime(0), AllowFocus(allowFocus)
|
|
||||||
{
|
|
||||||
#ifdef _DEBUG
|
|
||||||
setDebugName("CGUIContextMenu");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
Pos = rectangle.UpperLeftCorner;
|
|
||||||
recalculateSize();
|
|
||||||
|
|
||||||
if (getFocus)
|
|
||||||
Environment->setFocus(this);
|
|
||||||
|
|
||||||
setNotClipped(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! destructor
|
|
||||||
CGUIContextMenu::~CGUIContextMenu()
|
|
||||||
{
|
|
||||||
for (u32 i=0; i<Items.size(); ++i)
|
|
||||||
if (Items[i].SubMenu)
|
|
||||||
Items[i].SubMenu->drop();
|
|
||||||
|
|
||||||
if (LastFont)
|
|
||||||
LastFont->drop();
|
|
||||||
}
|
|
||||||
|
|
||||||
//! set behavior when menus are closed
|
|
||||||
void CGUIContextMenu::setCloseHandling(ECONTEXT_MENU_CLOSE onClose)
|
|
||||||
{
|
|
||||||
CloseHandling = onClose;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! get current behavior when the menue will be closed
|
|
||||||
ECONTEXT_MENU_CLOSE CGUIContextMenu::getCloseHandling() const
|
|
||||||
{
|
|
||||||
return CloseHandling;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Returns amount of menu items
|
|
||||||
u32 CGUIContextMenu::getItemCount() const
|
|
||||||
{
|
|
||||||
return Items.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Adds a menu item.
|
|
||||||
u32 CGUIContextMenu::addItem(const wchar_t* text, s32 commandId, bool enabled, bool hasSubMenu, bool checked, bool autoChecking)
|
|
||||||
{
|
|
||||||
return insertItem(Items.size(), text, commandId, enabled, hasSubMenu, checked, autoChecking);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Insert a menu item at specified position.
|
|
||||||
u32 CGUIContextMenu::insertItem(u32 idx, const wchar_t* text, s32 commandId, bool enabled,
|
|
||||||
bool hasSubMenu, bool checked, bool autoChecking)
|
|
||||||
{
|
|
||||||
SItem s;
|
|
||||||
s.Enabled = enabled;
|
|
||||||
s.Checked = checked;
|
|
||||||
s.AutoChecking = autoChecking;
|
|
||||||
s.Text = text;
|
|
||||||
s.IsSeparator = (text == 0);
|
|
||||||
s.SubMenu = 0;
|
|
||||||
s.CommandId = commandId;
|
|
||||||
s.PosY = 0;
|
|
||||||
|
|
||||||
if (hasSubMenu)
|
|
||||||
{
|
|
||||||
s.SubMenu = new CGUIContextMenu(Environment, this, commandId,
|
|
||||||
core::rect<s32>(0,0,100,100), false, false);
|
|
||||||
s.SubMenu->setVisible(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
u32 result = idx;
|
|
||||||
if ( idx < Items.size() )
|
|
||||||
{
|
|
||||||
Items.insert(s, idx);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Items.push_back(s);
|
|
||||||
result = Items.size() - 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
recalculateSize();
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
s32 CGUIContextMenu::findItemWithCommandId(s32 commandId, u32 idxStartSearch) const
|
|
||||||
{
|
|
||||||
for ( u32 i=idxStartSearch; i<Items.size(); ++i )
|
|
||||||
{
|
|
||||||
if ( Items[i].CommandId == commandId )
|
|
||||||
{
|
|
||||||
return (s32)i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Adds a sub menu from an element that already exists.
|
|
||||||
void CGUIContextMenu::setSubMenu(u32 index, CGUIContextMenu* menu)
|
|
||||||
{
|
|
||||||
if (index >= Items.size())
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (menu)
|
|
||||||
menu->grab();
|
|
||||||
if (Items[index].SubMenu)
|
|
||||||
Items[index].SubMenu->drop();
|
|
||||||
|
|
||||||
Items[index].SubMenu = menu;
|
|
||||||
|
|
||||||
if (menu)
|
|
||||||
{
|
|
||||||
menu->setVisible(false);
|
|
||||||
menu->AllowFocus = false;
|
|
||||||
if ( Environment->getFocus() == menu )
|
|
||||||
{
|
|
||||||
Environment->setFocus( this );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
recalculateSize();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Adds a separator item to the menu
|
|
||||||
void CGUIContextMenu::addSeparator()
|
|
||||||
{
|
|
||||||
addItem(0, -1, true, false, false, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Returns text of the menu item.
|
|
||||||
const wchar_t* CGUIContextMenu::getItemText(u32 idx) const
|
|
||||||
{
|
|
||||||
if (idx >= Items.size())
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return Items[idx].Text.c_str();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Sets text of the menu item.
|
|
||||||
void CGUIContextMenu::setItemText(u32 idx, const wchar_t* text)
|
|
||||||
{
|
|
||||||
if (idx >= Items.size())
|
|
||||||
return;
|
|
||||||
|
|
||||||
Items[idx].Text = text;
|
|
||||||
recalculateSize();
|
|
||||||
}
|
|
||||||
|
|
||||||
//! should the element change the checked status on clicking
|
|
||||||
void CGUIContextMenu::setItemAutoChecking(u32 idx, bool autoChecking)
|
|
||||||
{
|
|
||||||
if ( idx >= Items.size())
|
|
||||||
return;
|
|
||||||
|
|
||||||
Items[idx].AutoChecking = autoChecking;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! does the element change the checked status on clicking
|
|
||||||
bool CGUIContextMenu::getItemAutoChecking(u32 idx) const
|
|
||||||
{
|
|
||||||
if (idx >= Items.size())
|
|
||||||
return false;
|
|
||||||
|
|
||||||
return Items[idx].AutoChecking;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Returns if a menu item is enabled
|
|
||||||
bool CGUIContextMenu::isItemEnabled(u32 idx) const
|
|
||||||
{
|
|
||||||
if (idx >= Items.size())
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return Items[idx].Enabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Returns if a menu item is checked
|
|
||||||
bool CGUIContextMenu::isItemChecked(u32 idx) const
|
|
||||||
{
|
|
||||||
if (idx >= Items.size())
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return Items[idx].Checked;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Sets if the menu item should be enabled.
|
|
||||||
void CGUIContextMenu::setItemEnabled(u32 idx, bool enabled)
|
|
||||||
{
|
|
||||||
if (idx >= Items.size())
|
|
||||||
return;
|
|
||||||
|
|
||||||
Items[idx].Enabled = enabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Sets if the menu item should be checked.
|
|
||||||
void CGUIContextMenu::setItemChecked(u32 idx, bool checked )
|
|
||||||
{
|
|
||||||
if (idx >= Items.size())
|
|
||||||
return;
|
|
||||||
|
|
||||||
Items[idx].Checked = checked;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Removes a menu item
|
|
||||||
void CGUIContextMenu::removeItem(u32 idx)
|
|
||||||
{
|
|
||||||
if (idx >= Items.size())
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (Items[idx].SubMenu)
|
|
||||||
{
|
|
||||||
Items[idx].SubMenu->drop();
|
|
||||||
Items[idx].SubMenu = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
Items.erase(idx);
|
|
||||||
recalculateSize();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Removes all menu items
|
|
||||||
void CGUIContextMenu::removeAllItems()
|
|
||||||
{
|
|
||||||
for (u32 i=0; i<Items.size(); ++i)
|
|
||||||
if (Items[i].SubMenu)
|
|
||||||
Items[i].SubMenu->drop();
|
|
||||||
|
|
||||||
Items.clear();
|
|
||||||
recalculateSize();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! called if an event happened.
|
|
||||||
bool CGUIContextMenu::OnEvent(const SEvent& event)
|
|
||||||
{
|
|
||||||
if (isEnabled())
|
|
||||||
{
|
|
||||||
|
|
||||||
switch(event.EventType)
|
|
||||||
{
|
|
||||||
case EET_GUI_EVENT:
|
|
||||||
switch(event.GUIEvent.EventType)
|
|
||||||
{
|
|
||||||
case EGET_ELEMENT_FOCUS_LOST:
|
|
||||||
if (event.GUIEvent.Caller == this && !isMyChild(event.GUIEvent.Element) && AllowFocus)
|
|
||||||
{
|
|
||||||
// set event parent of submenus
|
|
||||||
IGUIElement * p = EventParent ? EventParent : Parent;
|
|
||||||
if ( p ) // can be 0 when element got removed already
|
|
||||||
{
|
|
||||||
setEventParent(p);
|
|
||||||
|
|
||||||
SEvent eventClose;
|
|
||||||
eventClose.EventType = EET_GUI_EVENT;
|
|
||||||
eventClose.GUIEvent.Caller = this;
|
|
||||||
eventClose.GUIEvent.Element = 0;
|
|
||||||
eventClose.GUIEvent.EventType = EGET_ELEMENT_CLOSED;
|
|
||||||
if ( !p->OnEvent(eventClose) )
|
|
||||||
{
|
|
||||||
if ( CloseHandling & ECMC_HIDE )
|
|
||||||
{
|
|
||||||
setVisible(false);
|
|
||||||
}
|
|
||||||
if ( CloseHandling & ECMC_REMOVE )
|
|
||||||
{
|
|
||||||
remove();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case EGET_ELEMENT_FOCUSED:
|
|
||||||
if (event.GUIEvent.Caller == this && !AllowFocus)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case EET_MOUSE_INPUT_EVENT:
|
|
||||||
switch(event.MouseInput.Event)
|
|
||||||
{
|
|
||||||
case EMIE_LMOUSE_LEFT_UP:
|
|
||||||
{
|
|
||||||
// menu might be removed if it loses focus in sendClick, so grab a reference
|
|
||||||
grab();
|
|
||||||
const u32 t = sendClick(core::position2d<s32>(event.MouseInput.X, event.MouseInput.Y));
|
|
||||||
if ((t==0 || t==1) && Environment->hasFocus(this))
|
|
||||||
Environment->removeFocus(this);
|
|
||||||
drop();
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
case EMIE_LMOUSE_PRESSED_DOWN:
|
|
||||||
return true;
|
|
||||||
case EMIE_MOUSE_MOVED:
|
|
||||||
if (Environment->hasFocus(this))
|
|
||||||
highlight(core::position2d<s32>(event.MouseInput.X, event.MouseInput.Y), true);
|
|
||||||
return true;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return IGUIElement::OnEvent(event);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Sets the visible state of this element.
|
|
||||||
void CGUIContextMenu::setVisible(bool visible)
|
|
||||||
{
|
|
||||||
HighLighted = -1;
|
|
||||||
ChangeTime = os::Timer::getTime();
|
|
||||||
for (u32 j=0; j<Items.size(); ++j)
|
|
||||||
if (Items[j].SubMenu)
|
|
||||||
Items[j].SubMenu->setVisible(false);
|
|
||||||
|
|
||||||
IGUIElement::setVisible(visible);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! sends a click Returns:
|
|
||||||
//! 0 if click went outside of the element,
|
|
||||||
//! 1 if a valid button was clicked,
|
|
||||||
//! 2 if a nonclickable element was clicked
|
|
||||||
u32 CGUIContextMenu::sendClick(const core::position2d<s32>& p)
|
|
||||||
{
|
|
||||||
u32 t = 0;
|
|
||||||
|
|
||||||
// get number of open submenu
|
|
||||||
s32 openmenu = -1;
|
|
||||||
s32 j;
|
|
||||||
for (j=0; j<(s32)Items.size(); ++j)
|
|
||||||
if (Items[j].SubMenu && Items[j].SubMenu->isVisible())
|
|
||||||
{
|
|
||||||
openmenu = j;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// delegate click operation to submenu
|
|
||||||
if (openmenu != -1)
|
|
||||||
{
|
|
||||||
t = Items[j].SubMenu->sendClick(p);
|
|
||||||
if (t != 0)
|
|
||||||
return t; // clicked something
|
|
||||||
}
|
|
||||||
|
|
||||||
// check click on myself
|
|
||||||
if (isPointInside(p) &&
|
|
||||||
(u32)HighLighted < Items.size())
|
|
||||||
{
|
|
||||||
if (!Items[HighLighted].Enabled ||
|
|
||||||
Items[HighLighted].IsSeparator ||
|
|
||||||
Items[HighLighted].SubMenu)
|
|
||||||
return 2;
|
|
||||||
|
|
||||||
if ( Items[HighLighted].AutoChecking )
|
|
||||||
{
|
|
||||||
Items[HighLighted].Checked = Items[HighLighted].Checked ? false : true;
|
|
||||||
}
|
|
||||||
|
|
||||||
SEvent event;
|
|
||||||
event.EventType = EET_GUI_EVENT;
|
|
||||||
event.GUIEvent.Caller = this;
|
|
||||||
event.GUIEvent.Element = 0;
|
|
||||||
event.GUIEvent.EventType = EGET_MENU_ITEM_SELECTED;
|
|
||||||
if (EventParent)
|
|
||||||
EventParent->OnEvent(event);
|
|
||||||
else if (Parent)
|
|
||||||
Parent->OnEvent(event);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! returns true, if an element was highligted
|
|
||||||
bool CGUIContextMenu::highlight(const core::position2d<s32>& p, bool canOpenSubMenu)
|
|
||||||
{
|
|
||||||
if (!isEnabled())
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// get number of open submenu
|
|
||||||
s32 openmenu = -1;
|
|
||||||
s32 i;
|
|
||||||
for (i=0; i<(s32)Items.size(); ++i)
|
|
||||||
if (Items[i].Enabled && Items[i].SubMenu && Items[i].SubMenu->isVisible())
|
|
||||||
{
|
|
||||||
openmenu = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// delegate highlight operation to submenu
|
|
||||||
if (openmenu != -1)
|
|
||||||
{
|
|
||||||
if (Items[openmenu].Enabled && Items[openmenu].SubMenu->highlight(p, canOpenSubMenu))
|
|
||||||
{
|
|
||||||
HighLighted = openmenu;
|
|
||||||
ChangeTime = os::Timer::getTime();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// highlight myself
|
|
||||||
for (i=0; i<(s32)Items.size(); ++i)
|
|
||||||
{
|
|
||||||
if (Items[i].Enabled && getHRect(Items[i], AbsoluteRect).isPointInside(p))
|
|
||||||
{
|
|
||||||
HighLighted = i;
|
|
||||||
ChangeTime = os::Timer::getTime();
|
|
||||||
|
|
||||||
// make submenus visible/invisible
|
|
||||||
for (s32 j=0; j<(s32)Items.size(); ++j)
|
|
||||||
if (Items[j].SubMenu)
|
|
||||||
{
|
|
||||||
if ( j == i && canOpenSubMenu && Items[j].Enabled )
|
|
||||||
Items[j].SubMenu->setVisible(true);
|
|
||||||
else if ( j != i )
|
|
||||||
Items[j].SubMenu->setVisible(false);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
HighLighted = openmenu;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! returns the item highlight-area
|
|
||||||
core::rect<s32> CGUIContextMenu::getHRect(const SItem& i, const core::rect<s32>& absolute) const
|
|
||||||
{
|
|
||||||
core::rect<s32> r = absolute;
|
|
||||||
r.UpperLeftCorner.Y += i.PosY;
|
|
||||||
r.LowerRightCorner.Y = r.UpperLeftCorner.Y + i.Dim.Height;
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Gets drawing rect of Item
|
|
||||||
core::rect<s32> CGUIContextMenu::getRect(const SItem& i, const core::rect<s32>& absolute) const
|
|
||||||
{
|
|
||||||
core::rect<s32> r = absolute;
|
|
||||||
r.UpperLeftCorner.Y += i.PosY;
|
|
||||||
r.LowerRightCorner.Y = r.UpperLeftCorner.Y + i.Dim.Height;
|
|
||||||
r.UpperLeftCorner.X += 20;
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! draws the element and its children
|
|
||||||
void CGUIContextMenu::draw()
|
|
||||||
{
|
|
||||||
if (!IsVisible)
|
|
||||||
return;
|
|
||||||
|
|
||||||
IGUISkin* skin = Environment->getSkin();
|
|
||||||
|
|
||||||
if (!skin)
|
|
||||||
return;
|
|
||||||
|
|
||||||
IGUIFont* font = skin->getFont(EGDF_MENU);
|
|
||||||
if (font != LastFont)
|
|
||||||
{
|
|
||||||
if (LastFont)
|
|
||||||
LastFont->drop();
|
|
||||||
LastFont = font;
|
|
||||||
if (LastFont)
|
|
||||||
LastFont->grab();
|
|
||||||
|
|
||||||
recalculateSize();
|
|
||||||
}
|
|
||||||
|
|
||||||
IGUISpriteBank* sprites = skin->getSpriteBank();
|
|
||||||
|
|
||||||
core::rect<s32> rect = AbsoluteRect;
|
|
||||||
core::rect<s32>* clip = 0;
|
|
||||||
|
|
||||||
// draw frame
|
|
||||||
skin->draw3DMenuPane(this, AbsoluteRect, clip);
|
|
||||||
|
|
||||||
// loop through all menu items
|
|
||||||
|
|
||||||
rect = AbsoluteRect;
|
|
||||||
s32 y = AbsoluteRect.UpperLeftCorner.Y;
|
|
||||||
|
|
||||||
for (s32 i=0; i<(s32)Items.size(); ++i)
|
|
||||||
{
|
|
||||||
if (Items[i].IsSeparator)
|
|
||||||
{
|
|
||||||
// draw separator
|
|
||||||
rect = AbsoluteRect;
|
|
||||||
rect.UpperLeftCorner.Y += Items[i].PosY + 3;
|
|
||||||
rect.LowerRightCorner.Y = rect.UpperLeftCorner.Y + 1;
|
|
||||||
rect.UpperLeftCorner.X += 5;
|
|
||||||
rect.LowerRightCorner.X -= 5;
|
|
||||||
skin->draw2DRectangle(this, skin->getColor(EGDC_3D_SHADOW), rect, clip);
|
|
||||||
|
|
||||||
rect.LowerRightCorner.Y += 1;
|
|
||||||
rect.UpperLeftCorner.Y += 1;
|
|
||||||
skin->draw2DRectangle(this, skin->getColor(EGDC_3D_HIGH_LIGHT), rect, clip);
|
|
||||||
|
|
||||||
y += 10;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
rect = getRect(Items[i], AbsoluteRect);
|
|
||||||
|
|
||||||
// draw highlighted
|
|
||||||
|
|
||||||
if (i == HighLighted && Items[i].Enabled)
|
|
||||||
{
|
|
||||||
core::rect<s32> r = AbsoluteRect;
|
|
||||||
r.LowerRightCorner.Y = rect.LowerRightCorner.Y;
|
|
||||||
r.UpperLeftCorner.Y = rect.UpperLeftCorner.Y;
|
|
||||||
r.LowerRightCorner.X -= 5;
|
|
||||||
r.UpperLeftCorner.X += 5;
|
|
||||||
skin->draw2DRectangle(this, skin->getColor(EGDC_HIGH_LIGHT), r, clip);
|
|
||||||
}
|
|
||||||
|
|
||||||
// draw text
|
|
||||||
|
|
||||||
EGUI_DEFAULT_COLOR c = EGDC_BUTTON_TEXT;
|
|
||||||
|
|
||||||
if (i == HighLighted)
|
|
||||||
c = EGDC_HIGH_LIGHT_TEXT;
|
|
||||||
|
|
||||||
if (!Items[i].Enabled)
|
|
||||||
c = EGDC_GRAY_TEXT;
|
|
||||||
|
|
||||||
if (font)
|
|
||||||
font->draw(Items[i].Text.c_str(), rect,
|
|
||||||
skin->getColor(c), false, true, clip);
|
|
||||||
|
|
||||||
// draw submenu symbol
|
|
||||||
if (Items[i].SubMenu && sprites)
|
|
||||||
{
|
|
||||||
core::rect<s32> r = rect;
|
|
||||||
r.UpperLeftCorner.X = r.LowerRightCorner.X - 15;
|
|
||||||
|
|
||||||
sprites->draw2DSprite(skin->getIcon(EGDI_CURSOR_RIGHT),
|
|
||||||
r.getCenter(), clip, skin->getColor(c),
|
|
||||||
(i == HighLighted) ? ChangeTime : 0,
|
|
||||||
(i == HighLighted) ? os::Timer::getTime() : 0,
|
|
||||||
(i == HighLighted), true);
|
|
||||||
}
|
|
||||||
|
|
||||||
// draw checked symbol
|
|
||||||
if (Items[i].Checked && sprites)
|
|
||||||
{
|
|
||||||
core::rect<s32> r = rect;
|
|
||||||
r.LowerRightCorner.X = r.UpperLeftCorner.X - 15;
|
|
||||||
r.UpperLeftCorner.X = r.LowerRightCorner.X + 15;
|
|
||||||
sprites->draw2DSprite(skin->getIcon(EGDI_CHECK_BOX_CHECKED),
|
|
||||||
r.getCenter(), clip, skin->getColor(c),
|
|
||||||
(i == HighLighted) ? ChangeTime : 0,
|
|
||||||
(i == HighLighted) ? os::Timer::getTime() : 0,
|
|
||||||
(i == HighLighted), true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
IGUIElement::draw();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void CGUIContextMenu::recalculateSize()
|
|
||||||
{
|
|
||||||
IGUIFont* font = Environment->getSkin()->getFont(EGDF_MENU);
|
|
||||||
|
|
||||||
if (!font)
|
|
||||||
return;
|
|
||||||
|
|
||||||
core::rect<s32> rect;
|
|
||||||
rect.UpperLeftCorner = RelativeRect.UpperLeftCorner;
|
|
||||||
u32 width = 100;
|
|
||||||
u32 height = 3;
|
|
||||||
|
|
||||||
u32 i;
|
|
||||||
for (i=0; i<Items.size(); ++i)
|
|
||||||
{
|
|
||||||
if (Items[i].IsSeparator)
|
|
||||||
{
|
|
||||||
Items[i].Dim.Width = 100;
|
|
||||||
Items[i].Dim.Height = 10;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Items[i].Dim = font->getDimension(Items[i].Text.c_str());
|
|
||||||
Items[i].Dim.Width += 40;
|
|
||||||
|
|
||||||
if (Items[i].Dim.Width > width)
|
|
||||||
width = Items[i].Dim.Width;
|
|
||||||
}
|
|
||||||
|
|
||||||
Items[i].PosY = height;
|
|
||||||
height += Items[i].Dim.Height;
|
|
||||||
}
|
|
||||||
|
|
||||||
height += 5;
|
|
||||||
|
|
||||||
if (height < 10)
|
|
||||||
height = 10;
|
|
||||||
|
|
||||||
rect.LowerRightCorner.X = RelativeRect.UpperLeftCorner.X + width;
|
|
||||||
rect.LowerRightCorner.Y = RelativeRect.UpperLeftCorner.Y + height;
|
|
||||||
|
|
||||||
setRelativePosition(rect);
|
|
||||||
|
|
||||||
// recalculate submenus
|
|
||||||
for (i=0; i<Items.size(); ++i)
|
|
||||||
{
|
|
||||||
if (Items[i].SubMenu)
|
|
||||||
{
|
|
||||||
// move submenu
|
|
||||||
const s32 w = Items[i].SubMenu->getAbsolutePosition().getWidth();
|
|
||||||
const s32 h = Items[i].SubMenu->getAbsolutePosition().getHeight();
|
|
||||||
|
|
||||||
core::rect<s32> subRect(width-5, Items[i].PosY, width+w-5, Items[i].PosY+h);
|
|
||||||
|
|
||||||
gui::IGUIElement * root = Environment->getRootGUIElement();
|
|
||||||
if ( root )
|
|
||||||
{
|
|
||||||
core::rect<s32> rectRoot( root->getAbsolutePosition() );
|
|
||||||
|
|
||||||
// if it would be drawn beyond the right border, then add it to the left side
|
|
||||||
if ( getAbsolutePosition().UpperLeftCorner.X+subRect.LowerRightCorner.X > rectRoot.LowerRightCorner.X )
|
|
||||||
{
|
|
||||||
subRect.UpperLeftCorner.X = -w;
|
|
||||||
subRect.LowerRightCorner.X = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if it would be drawn below bottom border, move it up, but not further than to top.
|
|
||||||
irr::s32 belowBottom = getAbsolutePosition().UpperLeftCorner.Y+subRect.LowerRightCorner.Y - rectRoot.LowerRightCorner.Y;
|
|
||||||
if ( belowBottom > 0 )
|
|
||||||
{
|
|
||||||
irr::s32 belowTop = getAbsolutePosition().UpperLeftCorner.Y+subRect.UpperLeftCorner.Y;
|
|
||||||
irr::s32 moveUp = belowBottom < belowTop ? belowBottom : belowTop;
|
|
||||||
subRect.UpperLeftCorner.Y -= moveUp;
|
|
||||||
subRect.LowerRightCorner.Y -= moveUp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Items[i].SubMenu->setRelativePosition(subRect);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Returns the selected item in the menu
|
|
||||||
s32 CGUIContextMenu::getSelectedItem() const
|
|
||||||
{
|
|
||||||
return HighLighted;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! \return Returns a pointer to the submenu of an item.
|
|
||||||
IGUIContextMenu* CGUIContextMenu::getSubMenu(u32 idx) const
|
|
||||||
{
|
|
||||||
if (idx >= Items.size())
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return Items[idx].SubMenu;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Returns command id of a menu item
|
|
||||||
s32 CGUIContextMenu::getItemCommandId(u32 idx) const
|
|
||||||
{
|
|
||||||
if (idx >= Items.size())
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
return Items[idx].CommandId;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Sets the command id of a menu item
|
|
||||||
void CGUIContextMenu::setItemCommandId(u32 idx, s32 id)
|
|
||||||
{
|
|
||||||
if (idx >= Items.size())
|
|
||||||
return;
|
|
||||||
|
|
||||||
Items[idx].CommandId = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// because sometimes the element has no parent at click time
|
|
||||||
void CGUIContextMenu::setEventParent(IGUIElement *parent)
|
|
||||||
{
|
|
||||||
EventParent = parent;
|
|
||||||
|
|
||||||
for (u32 i=0; i<Items.size(); ++i)
|
|
||||||
if (Items[i].SubMenu)
|
|
||||||
Items[i].SubMenu->setEventParent(parent);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool CGUIContextMenu::hasOpenSubMenu() const
|
|
||||||
{
|
|
||||||
for (u32 i=0; i<Items.size(); ++i)
|
|
||||||
if (Items[i].SubMenu && Items[i].SubMenu->isVisible())
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void CGUIContextMenu::closeAllSubMenus()
|
|
||||||
{
|
|
||||||
for (u32 i=0; i<Items.size(); ++i)
|
|
||||||
if (Items[i].SubMenu)
|
|
||||||
Items[i].SubMenu->setVisible(false);
|
|
||||||
|
|
||||||
//HighLighted = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
} // end namespace
|
|
||||||
} // end namespace
|
|
||||||
|
|
||||||
#endif // _IRR_COMPILE_WITH_GUI_
|
|
||||||
|
|
@ -1,168 +0,0 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
|
||||||
// This file is part of the "Irrlicht Engine".
|
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
|
||||||
|
|
||||||
#ifndef __C_GUI_CONTEXT_MENU_H_INCLUDED__
|
|
||||||
#define __C_GUI_CONTEXT_MENU_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IrrCompileConfig.h"
|
|
||||||
#ifdef _IRR_COMPILE_WITH_GUI_
|
|
||||||
|
|
||||||
#include "IGUIContextMenu.h"
|
|
||||||
#include "irrString.h"
|
|
||||||
#include "irrArray.h"
|
|
||||||
#include "IGUIFont.h"
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
namespace gui
|
|
||||||
{
|
|
||||||
|
|
||||||
//! GUI Context menu interface.
|
|
||||||
class CGUIContextMenu : public IGUIContextMenu
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
//! constructor
|
|
||||||
CGUIContextMenu(IGUIEnvironment* environment,
|
|
||||||
IGUIElement* parent, s32 id, core::rect<s32> rectangle,
|
|
||||||
bool getFocus = true, bool allowFocus = true);
|
|
||||||
|
|
||||||
//! destructor
|
|
||||||
virtual ~CGUIContextMenu();
|
|
||||||
|
|
||||||
//! set behavior when menus are closed
|
|
||||||
virtual void setCloseHandling(ECONTEXT_MENU_CLOSE onClose) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! get current behavior when the menue will be closed
|
|
||||||
virtual ECONTEXT_MENU_CLOSE getCloseHandling() const _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Returns amount of menu items
|
|
||||||
virtual u32 getItemCount() const _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Adds a menu item.
|
|
||||||
virtual u32 addItem(const wchar_t* text, s32 commandid,
|
|
||||||
bool enabled, bool hasSubMenu, bool checked, bool autoChecking) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Insert a menu item at specified position.
|
|
||||||
virtual u32 insertItem(u32 idx, const wchar_t* text, s32 commandId, bool enabled,
|
|
||||||
bool hasSubMenu, bool checked, bool autoChecking) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Find a item which has the given CommandId starting from given index
|
|
||||||
virtual s32 findItemWithCommandId(s32 commandId, u32 idxStartSearch) const _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Adds a separator item to the menu
|
|
||||||
virtual void addSeparator() _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Returns text of the menu item.
|
|
||||||
virtual const wchar_t* getItemText(u32 idx) const _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Sets text of the menu item.
|
|
||||||
virtual void setItemText(u32 idx, const wchar_t* text) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Returns if a menu item is enabled
|
|
||||||
virtual bool isItemEnabled(u32 idx) const _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Sets if the menu item should be enabled.
|
|
||||||
virtual void setItemEnabled(u32 idx, bool enabled) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Returns if a menu item is checked
|
|
||||||
virtual bool isItemChecked(u32 idx) const _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Sets if the menu item should be checked.
|
|
||||||
virtual void setItemChecked(u32 idx, bool enabled) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Removes a menu item
|
|
||||||
virtual void removeItem(u32 idx) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Removes all menu items
|
|
||||||
virtual void removeAllItems() _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! called if an event happened.
|
|
||||||
virtual bool OnEvent(const SEvent& event) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! draws the element and its children
|
|
||||||
virtual void draw() _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Returns the selected item in the menu
|
|
||||||
virtual s32 getSelectedItem() const _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Returns a pointer to the submenu of an item.
|
|
||||||
//! \return Pointer to the submenu of an item.
|
|
||||||
virtual IGUIContextMenu* getSubMenu(u32 idx) const _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Sets the visible state of this element.
|
|
||||||
virtual void setVisible(bool visible) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! should the element change the checked status on clicking
|
|
||||||
virtual void setItemAutoChecking(u32 idx, bool autoChecking) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! does the element change the checked status on clicking
|
|
||||||
virtual bool getItemAutoChecking(u32 idx) const _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Returns command id of a menu item
|
|
||||||
virtual s32 getItemCommandId(u32 idx) const _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Sets the command id of a menu item
|
|
||||||
virtual void setItemCommandId(u32 idx, s32 id) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Adds a sub menu from an element that already exists.
|
|
||||||
virtual void setSubMenu(u32 index, CGUIContextMenu* menu);
|
|
||||||
|
|
||||||
//! When an eventparent is set it receives events instead of the usual parent element
|
|
||||||
virtual void setEventParent(IGUIElement *parent) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
|
|
||||||
void closeAllSubMenus();
|
|
||||||
bool hasOpenSubMenu() const;
|
|
||||||
|
|
||||||
struct SItem
|
|
||||||
{
|
|
||||||
core::stringw Text;
|
|
||||||
bool IsSeparator;
|
|
||||||
bool Enabled;
|
|
||||||
bool Checked;
|
|
||||||
bool AutoChecking;
|
|
||||||
core::dimension2d<u32> Dim;
|
|
||||||
s32 PosY;
|
|
||||||
CGUIContextMenu* SubMenu;
|
|
||||||
s32 CommandId;
|
|
||||||
};
|
|
||||||
|
|
||||||
virtual void recalculateSize();
|
|
||||||
|
|
||||||
//! returns true, if an element was highlighted
|
|
||||||
virtual bool highlight(const core::position2d<s32>& p, bool canOpenSubMenu);
|
|
||||||
|
|
||||||
//! sends a click Returns:
|
|
||||||
//! 0 if click went outside of the element,
|
|
||||||
//! 1 if a valid button was clicked,
|
|
||||||
//! 2 if a nonclickable element was clicked
|
|
||||||
virtual u32 sendClick(const core::position2d<s32>& p);
|
|
||||||
|
|
||||||
//! returns the item highlight-area
|
|
||||||
virtual core::rect<s32> getHRect(const SItem& i, const core::rect<s32>& absolute) const;
|
|
||||||
|
|
||||||
//! Gets drawing rect of Item
|
|
||||||
virtual core::rect<s32> getRect(const SItem& i, const core::rect<s32>& absolute) const;
|
|
||||||
|
|
||||||
|
|
||||||
core::array<SItem> Items;
|
|
||||||
core::position2d<s32> Pos;
|
|
||||||
IGUIElement* EventParent;
|
|
||||||
IGUIFont *LastFont;
|
|
||||||
ECONTEXT_MENU_CLOSE CloseHandling;
|
|
||||||
s32 HighLighted;
|
|
||||||
u32 ChangeTime;
|
|
||||||
bool AllowFocus;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
#endif // _IRR_COMPILE_WITH_GUI_
|
|
||||||
|
|
||||||
#endif // __C_GUI_CONTEXT_MENU_H_INCLUDED__
|
|
||||||
|
|
@ -28,119 +28,119 @@ namespace gui
|
|||||||
virtual ~CGUIEditBox();
|
virtual ~CGUIEditBox();
|
||||||
|
|
||||||
//! Sets another skin independent font.
|
//! Sets another skin independent font.
|
||||||
virtual void setOverrideFont(IGUIFont* font=0) _IRR_OVERRIDE_;
|
void setOverrideFont(IGUIFont* font=0) override;
|
||||||
|
|
||||||
//! Gets the override font (if any)
|
//! Gets the override font (if any)
|
||||||
/** \return The override font (may be 0) */
|
/** \return The override font (may be 0) */
|
||||||
virtual IGUIFont* getOverrideFont() const _IRR_OVERRIDE_;
|
IGUIFont* getOverrideFont() const override;
|
||||||
|
|
||||||
//! Get the font which is used right now for drawing
|
//! Get the font which is used right now for drawing
|
||||||
/** Currently this is the override font when one is set and the
|
/** Currently this is the override font when one is set and the
|
||||||
font of the active skin otherwise */
|
font of the active skin otherwise */
|
||||||
virtual IGUIFont* getActiveFont() const _IRR_OVERRIDE_;
|
IGUIFont* getActiveFont() const override;
|
||||||
|
|
||||||
//! Sets another color for the text.
|
//! Sets another color for the text.
|
||||||
virtual void setOverrideColor(video::SColor color) _IRR_OVERRIDE_;
|
void setOverrideColor(video::SColor color) override;
|
||||||
|
|
||||||
//! Gets the override color
|
//! Gets the override color
|
||||||
virtual video::SColor getOverrideColor() const _IRR_OVERRIDE_;
|
video::SColor getOverrideColor() const override;
|
||||||
|
|
||||||
//! Sets if the text should use the override color or the
|
//! Sets if the text should use the override color or the
|
||||||
//! color in the gui skin.
|
//! color in the gui skin.
|
||||||
virtual void enableOverrideColor(bool enable) _IRR_OVERRIDE_;
|
void enableOverrideColor(bool enable) override;
|
||||||
|
|
||||||
//! Checks if an override color is enabled
|
//! Checks if an override color is enabled
|
||||||
/** \return true if the override color is enabled, false otherwise */
|
/** \return true if the override color is enabled, false otherwise */
|
||||||
virtual bool isOverrideColorEnabled(void) const _IRR_OVERRIDE_;
|
bool isOverrideColorEnabled(void) const override;
|
||||||
|
|
||||||
//! Sets whether to draw the background
|
//! Sets whether to draw the background
|
||||||
virtual void setDrawBackground(bool draw) _IRR_OVERRIDE_;
|
void setDrawBackground(bool draw) override;
|
||||||
|
|
||||||
//! Checks if background drawing is enabled
|
//! Checks if background drawing is enabled
|
||||||
virtual bool isDrawBackgroundEnabled() const _IRR_OVERRIDE_;
|
bool isDrawBackgroundEnabled() const override;
|
||||||
|
|
||||||
//! Turns the border on or off
|
//! Turns the border on or off
|
||||||
virtual void setDrawBorder(bool border) _IRR_OVERRIDE_;
|
void setDrawBorder(bool border) override;
|
||||||
|
|
||||||
//! Checks if border drawing is enabled
|
//! Checks if border drawing is enabled
|
||||||
virtual bool isDrawBorderEnabled() const _IRR_OVERRIDE_;
|
bool isDrawBorderEnabled() const override;
|
||||||
|
|
||||||
//! Enables or disables word wrap for using the edit box as multiline text editor.
|
//! Enables or disables word wrap for using the edit box as multiline text editor.
|
||||||
virtual void setWordWrap(bool enable) _IRR_OVERRIDE_;
|
void setWordWrap(bool enable) override;
|
||||||
|
|
||||||
//! Checks if word wrap is enabled
|
//! Checks if word wrap is enabled
|
||||||
//! \return true if word wrap is enabled, false otherwise
|
//! \return true if word wrap is enabled, false otherwise
|
||||||
virtual bool isWordWrapEnabled() const _IRR_OVERRIDE_;
|
bool isWordWrapEnabled() const override;
|
||||||
|
|
||||||
//! Enables or disables newlines.
|
//! Enables or disables newlines.
|
||||||
/** \param enable: If set to true, the EGET_EDITBOX_ENTER event will not be fired,
|
/** \param enable: If set to true, the EGET_EDITBOX_ENTER event will not be fired,
|
||||||
instead a newline character will be inserted. */
|
instead a newline character will be inserted. */
|
||||||
virtual void setMultiLine(bool enable) _IRR_OVERRIDE_;
|
void setMultiLine(bool enable) override;
|
||||||
|
|
||||||
//! Checks if multi line editing is enabled
|
//! Checks if multi line editing is enabled
|
||||||
//! \return true if mult-line is enabled, false otherwise
|
//! \return true if mult-line is enabled, false otherwise
|
||||||
virtual bool isMultiLineEnabled() const _IRR_OVERRIDE_;
|
bool isMultiLineEnabled() const override;
|
||||||
|
|
||||||
//! Enables or disables automatic scrolling with cursor position
|
//! Enables or disables automatic scrolling with cursor position
|
||||||
//! \param enable: If set to true, the text will move around with the cursor position
|
//! \param enable: If set to true, the text will move around with the cursor position
|
||||||
virtual void setAutoScroll(bool enable) _IRR_OVERRIDE_;
|
void setAutoScroll(bool enable) override;
|
||||||
|
|
||||||
//! Checks to see if automatic scrolling is enabled
|
//! Checks to see if automatic scrolling is enabled
|
||||||
//! \return true if automatic scrolling is enabled, false if not
|
//! \return true if automatic scrolling is enabled, false if not
|
||||||
virtual bool isAutoScrollEnabled() const _IRR_OVERRIDE_;
|
bool isAutoScrollEnabled() const override;
|
||||||
|
|
||||||
//! Gets the size area of the text in the edit box
|
//! Gets the size area of the text in the edit box
|
||||||
//! \return Returns the size in pixels of the text
|
//! \return Returns the size in pixels of the text
|
||||||
virtual core::dimension2du getTextDimension() _IRR_OVERRIDE_;
|
core::dimension2du getTextDimension() override;
|
||||||
|
|
||||||
//! Sets text justification
|
//! Sets text justification
|
||||||
virtual void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical) _IRR_OVERRIDE_;
|
void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical) override;
|
||||||
|
|
||||||
//! called if an event happened.
|
//! called if an event happened.
|
||||||
virtual bool OnEvent(const SEvent& event) _IRR_OVERRIDE_;
|
bool OnEvent(const SEvent& event) override;
|
||||||
|
|
||||||
//! draws the element and its children
|
//! draws the element and its children
|
||||||
virtual void draw() _IRR_OVERRIDE_;
|
void draw() override;
|
||||||
|
|
||||||
//! Sets the new caption of this element.
|
//! Sets the new caption of this element.
|
||||||
virtual void setText(const wchar_t* text) _IRR_OVERRIDE_;
|
void setText(const wchar_t* text) override;
|
||||||
|
|
||||||
//! Sets the maximum amount of characters which may be entered in the box.
|
//! Sets the maximum amount of characters which may be entered in the box.
|
||||||
//! \param max: Maximum amount of characters. If 0, the character amount is
|
//! \param max: Maximum amount of characters. If 0, the character amount is
|
||||||
//! infinity.
|
//! infinity.
|
||||||
virtual void setMax(u32 max) _IRR_OVERRIDE_;
|
void setMax(u32 max) override;
|
||||||
|
|
||||||
//! Returns maximum amount of characters, previously set by setMax();
|
//! Returns maximum amount of characters, previously set by setMax();
|
||||||
virtual u32 getMax() const _IRR_OVERRIDE_;
|
u32 getMax() const override;
|
||||||
|
|
||||||
//! Set the character used for the cursor.
|
//! Set the character used for the cursor.
|
||||||
/** By default it's "_" */
|
/** By default it's "_" */
|
||||||
virtual void setCursorChar(const wchar_t cursorChar) _IRR_OVERRIDE_;
|
void setCursorChar(const wchar_t cursorChar) override;
|
||||||
|
|
||||||
//! Get the character used for the cursor.
|
//! Get the character used for the cursor.
|
||||||
virtual wchar_t getCursorChar() const _IRR_OVERRIDE_;
|
wchar_t getCursorChar() const override;
|
||||||
|
|
||||||
//! Set the blinktime for the cursor. 2x blinktime is one full cycle.
|
//! Set the blinktime for the cursor. 2x blinktime is one full cycle.
|
||||||
//** \param timeMs Blinktime in milliseconds. When set to 0 the cursor is constantly on without blinking */
|
//** \param timeMs Blinktime in milliseconds. When set to 0 the cursor is constantly on without blinking */
|
||||||
virtual void setCursorBlinkTime(irr::u32 timeMs) _IRR_OVERRIDE_;
|
void setCursorBlinkTime(irr::u32 timeMs) override;
|
||||||
|
|
||||||
//! Get the cursor blinktime
|
//! Get the cursor blinktime
|
||||||
virtual irr::u32 getCursorBlinkTime() const _IRR_OVERRIDE_;
|
irr::u32 getCursorBlinkTime() const override;
|
||||||
|
|
||||||
//! Sets whether the edit box is a password box. Setting this to true will
|
//! Sets whether the edit box is a password box. Setting this to true will
|
||||||
/** disable MultiLine, WordWrap and the ability to copy with ctrl+c or ctrl+x
|
/** disable MultiLine, WordWrap and the ability to copy with ctrl+c or ctrl+x
|
||||||
\param passwordBox: true to enable password, false to disable
|
\param passwordBox: true to enable password, false to disable
|
||||||
\param passwordChar: the character that is displayed instead of letters */
|
\param passwordChar: the character that is displayed instead of letters */
|
||||||
virtual void setPasswordBox(bool passwordBox, wchar_t passwordChar = L'*') _IRR_OVERRIDE_;
|
void setPasswordBox(bool passwordBox, wchar_t passwordChar = L'*') override;
|
||||||
|
|
||||||
//! Returns true if the edit box is currently a password box.
|
//! Returns true if the edit box is currently a password box.
|
||||||
virtual bool isPasswordBox() const _IRR_OVERRIDE_;
|
bool isPasswordBox() const override;
|
||||||
|
|
||||||
//! Updates the absolute position, splits text if required
|
//! Updates the absolute position, splits text if required
|
||||||
virtual void updateAbsolutePosition() _IRR_OVERRIDE_;
|
void updateAbsolutePosition() override;
|
||||||
|
|
||||||
//! Returns whether the element takes input from the IME
|
//! Returns whether the element takes input from the IME
|
||||||
virtual bool acceptsIME() _IRR_OVERRIDE_;
|
bool acceptsIME() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
//! Breaks the single text line.
|
//! Breaks the single text line.
|
||||||
|
@ -11,33 +11,19 @@
|
|||||||
|
|
||||||
#include "CGUISkin.h"
|
#include "CGUISkin.h"
|
||||||
#include "CGUIButton.h"
|
#include "CGUIButton.h"
|
||||||
#include "CGUIWindow.h"
|
|
||||||
#include "CGUIScrollBar.h"
|
#include "CGUIScrollBar.h"
|
||||||
#include "CGUIFont.h"
|
#include "CGUIFont.h"
|
||||||
#include "CGUISpriteBank.h"
|
#include "CGUISpriteBank.h"
|
||||||
#include "CGUIImage.h"
|
#include "CGUIImage.h"
|
||||||
#include "CGUIMeshViewer.h"
|
|
||||||
#include "CGUICheckBox.h"
|
#include "CGUICheckBox.h"
|
||||||
#include "CGUIListBox.h"
|
#include "CGUIListBox.h"
|
||||||
#include "CGUITreeView.h"
|
|
||||||
#include "CGUIImageList.h"
|
#include "CGUIImageList.h"
|
||||||
#include "CGUIFileOpenDialog.h"
|
#include "CGUIFileOpenDialog.h"
|
||||||
#include "CGUIColorSelectDialog.h"
|
|
||||||
#include "CGUIStaticText.h"
|
#include "CGUIStaticText.h"
|
||||||
#include "CGUIEditBox.h"
|
#include "CGUIEditBox.h"
|
||||||
#include "CGUISpinBox.h"
|
|
||||||
#include "CGUIInOutFader.h"
|
|
||||||
#include "CGUIMessageBox.h"
|
|
||||||
#include "CGUIModalScreen.h"
|
|
||||||
#include "CGUITabControl.h"
|
#include "CGUITabControl.h"
|
||||||
#include "CGUIContextMenu.h"
|
|
||||||
#include "CGUIComboBox.h"
|
#include "CGUIComboBox.h"
|
||||||
#include "CGUIMenu.h"
|
|
||||||
#include "CGUIToolBar.h"
|
|
||||||
#include "CGUITable.h"
|
|
||||||
#include "CGUIProfiler.h"
|
|
||||||
|
|
||||||
#include "CDefaultGUIElementFactory.h"
|
|
||||||
#include "IWriteFile.h"
|
#include "IWriteFile.h"
|
||||||
|
|
||||||
#include "BuiltInFont.h"
|
#include "BuiltInFont.h"
|
||||||
@ -69,11 +55,6 @@ CGUIEnvironment::CGUIEnvironment(io::IFileSystem* fs, video::IVideoDriver* drive
|
|||||||
IGUIEnvironment::setDebugName("CGUIEnvironment");
|
IGUIEnvironment::setDebugName("CGUIEnvironment");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// gui factory
|
|
||||||
IGUIElementFactory* factory = new CDefaultGUIElementFactory(this);
|
|
||||||
registerGUIElementFactory(factory);
|
|
||||||
factory->drop();
|
|
||||||
|
|
||||||
loadBuiltInFont();
|
loadBuiltInFont();
|
||||||
|
|
||||||
IGUISkin* skin = createSkin( gui::EGST_WINDOWS_METALLIC );
|
IGUISkin* skin = createSkin( gui::EGST_WINDOWS_METALLIC );
|
||||||
@ -140,10 +121,6 @@ CGUIEnvironment::~CGUIEnvironment()
|
|||||||
for (i=0; i<Fonts.size(); ++i)
|
for (i=0; i<Fonts.size(); ++i)
|
||||||
Fonts[i].Font->drop();
|
Fonts[i].Font->drop();
|
||||||
|
|
||||||
// remove all factories
|
|
||||||
for (i=0; i<GUIElementFactoryList.size(); ++i)
|
|
||||||
GUIElementFactoryList[i]->drop();
|
|
||||||
|
|
||||||
if (Operator)
|
if (Operator)
|
||||||
{
|
{
|
||||||
Operator->drop();
|
Operator->drop();
|
||||||
@ -707,106 +684,6 @@ IGUISkin* CGUIEnvironment::createSkin(EGUI_SKIN_TYPE type)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Returns the default element factory which can create all built in elements
|
|
||||||
IGUIElementFactory* CGUIEnvironment::getDefaultGUIElementFactory() const
|
|
||||||
{
|
|
||||||
return getGUIElementFactory(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Adds an element factory to the gui environment.
|
|
||||||
/** Use this to extend the gui environment with new element types which it should be
|
|
||||||
able to create automatically, for example when loading data from xml files. */
|
|
||||||
void CGUIEnvironment::registerGUIElementFactory(IGUIElementFactory* factoryToAdd)
|
|
||||||
{
|
|
||||||
if (factoryToAdd)
|
|
||||||
{
|
|
||||||
factoryToAdd->grab();
|
|
||||||
GUIElementFactoryList.push_back(factoryToAdd);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Returns amount of registered scene node factories.
|
|
||||||
u32 CGUIEnvironment::getRegisteredGUIElementFactoryCount() const
|
|
||||||
{
|
|
||||||
return GUIElementFactoryList.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Returns a scene node factory by index
|
|
||||||
IGUIElementFactory* CGUIEnvironment::getGUIElementFactory(u32 index) const
|
|
||||||
{
|
|
||||||
if (index < GUIElementFactoryList.size())
|
|
||||||
return GUIElementFactoryList[index];
|
|
||||||
else
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! adds a GUI Element using its name
|
|
||||||
IGUIElement* CGUIEnvironment::addGUIElement(const c8* elementName, IGUIElement* parent)
|
|
||||||
{
|
|
||||||
IGUIElement* node=0;
|
|
||||||
|
|
||||||
if (!parent)
|
|
||||||
parent = this;
|
|
||||||
|
|
||||||
for (s32 i=GUIElementFactoryList.size()-1; i>=0 && !node; --i)
|
|
||||||
node = GUIElementFactoryList[i]->addGUIElement(elementName, parent);
|
|
||||||
|
|
||||||
|
|
||||||
return node;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Saves the current gui into a file.
|
|
||||||
//! \param filename: Name of the file .
|
|
||||||
bool CGUIEnvironment::saveGUI(const io::path& filename, IGUIElement* start)
|
|
||||||
{
|
|
||||||
io::IWriteFile* file = FileSystem->createAndWriteFile(filename);
|
|
||||||
if (!file)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ret = saveGUI(file, start);
|
|
||||||
file->drop();
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Saves the current gui into a file.
|
|
||||||
bool CGUIEnvironment::saveGUI(io::IWriteFile* file, IGUIElement* start)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Loads the gui. Note that the current gui is not cleared before.
|
|
||||||
//! \param filename: Name of the file.
|
|
||||||
bool CGUIEnvironment::loadGUI(const io::path& filename, IGUIElement* parent)
|
|
||||||
{
|
|
||||||
io::IReadFile* read = FileSystem->createAndOpenFile(filename);
|
|
||||||
if (!read)
|
|
||||||
{
|
|
||||||
os::Printer::log("Unable to open gui file", filename, ELL_ERROR);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ret = loadGUI(read, parent);
|
|
||||||
read->drop();
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Loads the gui. Note that the current gui is not cleared before.
|
|
||||||
bool CGUIEnvironment::loadGUI(io::IReadFile* file, IGUIElement* parent)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! adds a button. The returned pointer must not be dropped.
|
//! adds a button. The returned pointer must not be dropped.
|
||||||
IGUIButton* CGUIEnvironment::addButton(const core::rect<s32>& rectangle, IGUIElement* parent, s32 id, const wchar_t* text, const wchar_t *tooltiptext)
|
IGUIButton* CGUIEnvironment::addButton(const core::rect<s32>& rectangle, IGUIElement* parent, s32 id, const wchar_t* text, const wchar_t *tooltiptext)
|
||||||
{
|
{
|
||||||
@ -822,83 +699,6 @@ IGUIButton* CGUIEnvironment::addButton(const core::rect<s32>& rectangle, IGUIEle
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! adds a window. The returned pointer must not be dropped.
|
|
||||||
IGUIWindow* CGUIEnvironment::addWindow(const core::rect<s32>& rectangle, bool modal,
|
|
||||||
const wchar_t* text, IGUIElement* parent, s32 id)
|
|
||||||
{
|
|
||||||
parent = parent ? parent : this;
|
|
||||||
|
|
||||||
IGUIWindow* win = new CGUIWindow(this, parent, id, rectangle);
|
|
||||||
if (text)
|
|
||||||
win->setText(text);
|
|
||||||
win->drop();
|
|
||||||
|
|
||||||
if (modal)
|
|
||||||
{
|
|
||||||
// Careful, don't just set the modal as parent above. That will mess up the focus (and is hard to change because we have to be very
|
|
||||||
// careful not to get virtual function call, like OnEvent, in the window.
|
|
||||||
CGUIModalScreen * modalScreen = new CGUIModalScreen(this, parent, -1);
|
|
||||||
modalScreen->drop();
|
|
||||||
modalScreen->addChild(win);
|
|
||||||
}
|
|
||||||
|
|
||||||
return win;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! adds a modal screen. The returned pointer must not be dropped.
|
|
||||||
IGUIElement* CGUIEnvironment::addModalScreen(IGUIElement* parent, int blinkMode)
|
|
||||||
{
|
|
||||||
parent = parent ? parent : this;
|
|
||||||
|
|
||||||
CGUIModalScreen *win = new CGUIModalScreen(this, parent, -1);
|
|
||||||
win->setBlinkMode(blinkMode);
|
|
||||||
win->drop();
|
|
||||||
|
|
||||||
return win;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Adds a message box.
|
|
||||||
IGUIWindow* CGUIEnvironment::addMessageBox(const wchar_t* caption, const wchar_t* text,
|
|
||||||
bool modal, s32 flag, IGUIElement* parent, s32 id, video::ITexture* image)
|
|
||||||
{
|
|
||||||
if (!CurrentSkin)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
parent = parent ? parent : this;
|
|
||||||
|
|
||||||
core::rect<s32> rect;
|
|
||||||
core::dimension2d<u32> screenDim, msgBoxDim;
|
|
||||||
|
|
||||||
screenDim.Width = parent->getAbsolutePosition().getWidth();
|
|
||||||
screenDim.Height = parent->getAbsolutePosition().getHeight();
|
|
||||||
msgBoxDim.Width = 2;
|
|
||||||
msgBoxDim.Height = 2;
|
|
||||||
|
|
||||||
rect.UpperLeftCorner.X = (screenDim.Width - msgBoxDim.Width) / 2;
|
|
||||||
rect.UpperLeftCorner.Y = (screenDim.Height - msgBoxDim.Height) / 2;
|
|
||||||
rect.LowerRightCorner.X = rect.UpperLeftCorner.X + msgBoxDim.Width;
|
|
||||||
rect.LowerRightCorner.Y = rect.UpperLeftCorner.Y + msgBoxDim.Height;
|
|
||||||
|
|
||||||
IGUIWindow* win = new CGUIMessageBox(this, caption, text, flag,
|
|
||||||
parent, id, rect, image);
|
|
||||||
win->drop();
|
|
||||||
|
|
||||||
if (modal)
|
|
||||||
{
|
|
||||||
// Careful, don't just set the modal as parent above. That will mess up the focus (and is hard to change because we have to be very
|
|
||||||
// careful not to get virtual function call, like OnEvent, in the CGUIMessageBox.
|
|
||||||
CGUIModalScreen * modalScreen = new CGUIModalScreen(this, parent, -1);
|
|
||||||
modalScreen->drop();
|
|
||||||
modalScreen->addChild( win );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return win;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! adds a scrollbar. The returned pointer must not be dropped.
|
//! adds a scrollbar. The returned pointer must not be dropped.
|
||||||
IGUIScrollBar* CGUIEnvironment::addScrollBar(bool horizontal, const core::rect<s32>& rectangle, IGUIElement* parent, s32 id)
|
IGUIScrollBar* CGUIEnvironment::addScrollBar(bool horizontal, const core::rect<s32>& rectangle, IGUIElement* parent, s32 id)
|
||||||
{
|
{
|
||||||
@ -907,21 +707,6 @@ IGUIScrollBar* CGUIEnvironment::addScrollBar(bool horizontal, const core::rect<s
|
|||||||
return bar;
|
return bar;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Adds a table to the environment
|
|
||||||
IGUITable* CGUIEnvironment::addTable(const core::rect<s32>& rectangle, IGUIElement* parent, s32 id, bool drawBackground)
|
|
||||||
{
|
|
||||||
CGUITable* b = new CGUITable(this, parent ? parent : this, id, rectangle, true, drawBackground, false);
|
|
||||||
b->drop();
|
|
||||||
return b;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Adds an element to display the information from the Irrlicht profiler
|
|
||||||
IGUIProfiler* CGUIEnvironment::addProfilerDisplay(const core::rect<s32>& rectangle, IGUIElement* parent, s32 id)
|
|
||||||
{
|
|
||||||
CGUIProfiler* p = new CGUIProfiler(this, parent ? parent : this, id, rectangle, NULL);
|
|
||||||
p->drop();
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Adds an image element.
|
//! Adds an image element.
|
||||||
IGUIImage* CGUIEnvironment::addImage(video::ITexture* image, core::position2d<s32> pos,
|
IGUIImage* CGUIEnvironment::addImage(video::ITexture* image, core::position2d<s32> pos,
|
||||||
@ -965,20 +750,6 @@ IGUIImage* CGUIEnvironment::addImage(const core::rect<s32>& rectangle, IGUIEleme
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! adds an mesh viewer. The returned pointer must not be dropped.
|
|
||||||
IGUIMeshViewer* CGUIEnvironment::addMeshViewer(const core::rect<s32>& rectangle, IGUIElement* parent, s32 id, const wchar_t* text)
|
|
||||||
{
|
|
||||||
IGUIMeshViewer* v = new CGUIMeshViewer(this, parent ? parent : this,
|
|
||||||
id, rectangle);
|
|
||||||
|
|
||||||
if (text)
|
|
||||||
v->setText(text);
|
|
||||||
|
|
||||||
v->drop();
|
|
||||||
return v;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! adds a checkbox
|
//! adds a checkbox
|
||||||
IGUICheckBox* CGUIEnvironment::addCheckBox(bool checked, const core::rect<s32>& rectangle, IGUIElement* parent, s32 id, const wchar_t* text)
|
IGUICheckBox* CGUIEnvironment::addCheckBox(bool checked, const core::rect<s32>& rectangle, IGUIElement* parent, s32 id, const wchar_t* text)
|
||||||
{
|
{
|
||||||
@ -1013,19 +784,6 @@ IGUIListBox* CGUIEnvironment::addListBox(const core::rect<s32>& rectangle,
|
|||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! adds a tree view
|
|
||||||
IGUITreeView* CGUIEnvironment::addTreeView(const core::rect<s32>& rectangle,
|
|
||||||
IGUIElement* parent, s32 id,
|
|
||||||
bool drawBackground,
|
|
||||||
bool scrollBarVertical, bool scrollBarHorizontal)
|
|
||||||
{
|
|
||||||
IGUITreeView* b = new CGUITreeView(this, parent ? parent : this, id, rectangle,
|
|
||||||
true, drawBackground, scrollBarVertical, scrollBarHorizontal);
|
|
||||||
|
|
||||||
b->setIconFont ( getBuiltInFont () );
|
|
||||||
b->drop();
|
|
||||||
return b;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! adds a file open dialog. The returned pointer must not be dropped.
|
//! adds a file open dialog. The returned pointer must not be dropped.
|
||||||
IGUIFileOpenDialog* CGUIEnvironment::addFileOpenDialog(const wchar_t* title,
|
IGUIFileOpenDialog* CGUIEnvironment::addFileOpenDialog(const wchar_t* title,
|
||||||
@ -1034,42 +792,13 @@ IGUIFileOpenDialog* CGUIEnvironment::addFileOpenDialog(const wchar_t* title,
|
|||||||
{
|
{
|
||||||
parent = parent ? parent : this;
|
parent = parent ? parent : this;
|
||||||
|
|
||||||
|
if (modal)
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
IGUIFileOpenDialog* d = new CGUIFileOpenDialog(title, this, parent, id,
|
IGUIFileOpenDialog* d = new CGUIFileOpenDialog(title, this, parent, id,
|
||||||
restoreCWD, startDir);
|
restoreCWD, startDir);
|
||||||
d->drop();
|
d->drop();
|
||||||
|
|
||||||
if (modal)
|
|
||||||
{
|
|
||||||
// Careful, don't just set the modal as parent above. That will mess up the focus (and is hard to change because we have to be very
|
|
||||||
// careful not to get virtual function call, like OnEvent, in the window.
|
|
||||||
CGUIModalScreen * modalScreen = new CGUIModalScreen(this, parent, -1);
|
|
||||||
modalScreen->drop();
|
|
||||||
modalScreen->addChild(d);
|
|
||||||
}
|
|
||||||
|
|
||||||
return d;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! adds a color select dialog. The returned pointer must not be dropped.
|
|
||||||
IGUIColorSelectDialog* CGUIEnvironment::addColorSelectDialog(const wchar_t* title,
|
|
||||||
bool modal, IGUIElement* parent, s32 id)
|
|
||||||
{
|
|
||||||
parent = parent ? parent : this;
|
|
||||||
|
|
||||||
IGUIColorSelectDialog* d = new CGUIColorSelectDialog( title,
|
|
||||||
this, parent, id);
|
|
||||||
d->drop();
|
|
||||||
|
|
||||||
if (modal)
|
|
||||||
{
|
|
||||||
// Careful, don't just set the modal as parent above. That will mess up the focus (and is hard to change because we have to be very
|
|
||||||
// careful not to get virtual function call, like OnEvent, in the window.
|
|
||||||
CGUIModalScreen * modalScreen = new CGUIModalScreen(this, parent, -1);
|
|
||||||
modalScreen->drop();
|
|
||||||
modalScreen->addChild(d);
|
|
||||||
}
|
|
||||||
|
|
||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1103,19 +832,6 @@ IGUIEditBox* CGUIEnvironment::addEditBox(const wchar_t* text,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Adds a spin box to the environment
|
|
||||||
IGUISpinBox* CGUIEnvironment::addSpinBox(const wchar_t* text,
|
|
||||||
const core::rect<s32> &rectangle,
|
|
||||||
bool border,IGUIElement* parent, s32 id)
|
|
||||||
{
|
|
||||||
IGUISpinBox* d = new CGUISpinBox(text, border,this,
|
|
||||||
parent ? parent : this, id, rectangle);
|
|
||||||
|
|
||||||
d->drop();
|
|
||||||
return d;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Adds a tab control to the environment.
|
//! Adds a tab control to the environment.
|
||||||
IGUITabControl* CGUIEnvironment::addTabControl(const core::rect<s32>& rectangle,
|
IGUITabControl* CGUIEnvironment::addTabControl(const core::rect<s32>& rectangle,
|
||||||
IGUIElement* parent, bool fillbackground, bool border, s32 id)
|
IGUIElement* parent, bool fillbackground, bool border, s32 id)
|
||||||
@ -1138,65 +854,6 @@ IGUITab* CGUIEnvironment::addTab(const core::rect<s32>& rectangle,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Adds a context menu to the environment.
|
|
||||||
IGUIContextMenu* CGUIEnvironment::addContextMenu(const core::rect<s32>& rectangle,
|
|
||||||
IGUIElement* parent, s32 id)
|
|
||||||
{
|
|
||||||
IGUIContextMenu* c = new CGUIContextMenu(this,
|
|
||||||
parent ? parent : this, id, rectangle, true);
|
|
||||||
c->drop();
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Adds a menu to the environment.
|
|
||||||
IGUIContextMenu* CGUIEnvironment::addMenu(IGUIElement* parent, s32 id)
|
|
||||||
{
|
|
||||||
if (!parent)
|
|
||||||
parent = this;
|
|
||||||
|
|
||||||
IGUIContextMenu* c = new CGUIMenu(this,
|
|
||||||
parent, id, core::rect<s32>(0,0,
|
|
||||||
parent->getAbsolutePosition().getWidth(),
|
|
||||||
parent->getAbsolutePosition().getHeight()));
|
|
||||||
|
|
||||||
c->drop();
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Adds a toolbar to the environment. It is like a menu is always placed on top
|
|
||||||
//! in its parent, and contains buttons.
|
|
||||||
IGUIToolBar* CGUIEnvironment::addToolBar(IGUIElement* parent, s32 id)
|
|
||||||
{
|
|
||||||
if (!parent)
|
|
||||||
parent = this;
|
|
||||||
|
|
||||||
IGUIToolBar* b = new CGUIToolBar(this, parent, id, core::rect<s32>(0,0,10,10));
|
|
||||||
b->drop();
|
|
||||||
return b;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Adds an element for fading in or out.
|
|
||||||
IGUIInOutFader* CGUIEnvironment::addInOutFader(const core::rect<s32>* rectangle, IGUIElement* parent, s32 id)
|
|
||||||
{
|
|
||||||
core::rect<s32> rect;
|
|
||||||
|
|
||||||
if (rectangle)
|
|
||||||
rect = *rectangle;
|
|
||||||
else if (Driver)
|
|
||||||
rect = core::rect<s32>(core::dimension2di(Driver->getScreenSize()));
|
|
||||||
|
|
||||||
if (!parent)
|
|
||||||
parent = this;
|
|
||||||
|
|
||||||
IGUIInOutFader* fader = new CGUIInOutFader(this, parent, id, rect);
|
|
||||||
fader->drop();
|
|
||||||
return fader;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Adds a combo box to the environment.
|
//! Adds a combo box to the environment.
|
||||||
IGUIComboBox* CGUIEnvironment::addComboBox(const core::rect<s32>& rectangle,
|
IGUIComboBox* CGUIEnvironment::addComboBox(const core::rect<s32>& rectangle,
|
||||||
IGUIElement* parent, s32 id)
|
IGUIElement* parent, s32 id)
|
||||||
|
@ -31,234 +31,143 @@ public:
|
|||||||
virtual ~CGUIEnvironment();
|
virtual ~CGUIEnvironment();
|
||||||
|
|
||||||
//! draws all gui elements
|
//! draws all gui elements
|
||||||
virtual void drawAll(bool useScreenSize) _IRR_OVERRIDE_;
|
void drawAll(bool useScreenSize) override;
|
||||||
|
|
||||||
//! returns the current video driver
|
//! returns the current video driver
|
||||||
virtual video::IVideoDriver* getVideoDriver() const _IRR_OVERRIDE_;
|
video::IVideoDriver* getVideoDriver() const override;
|
||||||
|
|
||||||
//! returns pointer to the filesystem
|
//! returns pointer to the filesystem
|
||||||
virtual io::IFileSystem* getFileSystem() const _IRR_OVERRIDE_;
|
io::IFileSystem* getFileSystem() const override;
|
||||||
|
|
||||||
//! returns a pointer to the OS operator
|
//! returns a pointer to the OS operator
|
||||||
virtual IOSOperator* getOSOperator() const _IRR_OVERRIDE_;
|
IOSOperator* getOSOperator() const override;
|
||||||
|
|
||||||
//! posts an input event to the environment
|
//! posts an input event to the environment
|
||||||
virtual bool postEventFromUser(const SEvent& event) _IRR_OVERRIDE_;
|
bool postEventFromUser(const SEvent& event) override;
|
||||||
|
|
||||||
//! This sets a new event receiver for gui events. Usually you do not have to
|
//! This sets a new event receiver for gui events. Usually you do not have to
|
||||||
//! use this method, it is used by the internal engine.
|
//! use this method, it is used by the internal engine.
|
||||||
virtual void setUserEventReceiver(IEventReceiver* evr) _IRR_OVERRIDE_;
|
void setUserEventReceiver(IEventReceiver* evr) override;
|
||||||
|
|
||||||
//! removes all elements from the environment
|
//! removes all elements from the environment
|
||||||
virtual void clear() _IRR_OVERRIDE_;
|
void clear() override;
|
||||||
|
|
||||||
//! called if an event happened.
|
//! called if an event happened.
|
||||||
virtual bool OnEvent(const SEvent& event) _IRR_OVERRIDE_;
|
bool OnEvent(const SEvent& event) override;
|
||||||
|
|
||||||
//! returns the current gui skin
|
//! returns the current gui skin
|
||||||
virtual IGUISkin* getSkin() const _IRR_OVERRIDE_;
|
IGUISkin* getSkin() const override;
|
||||||
|
|
||||||
//! Sets a new GUI Skin
|
//! Sets a new GUI Skin
|
||||||
virtual void setSkin(IGUISkin* skin) _IRR_OVERRIDE_;
|
void setSkin(IGUISkin* skin) override;
|
||||||
|
|
||||||
//! Creates a new GUI Skin based on a template.
|
//! Creates a new GUI Skin based on a template.
|
||||||
/** \return Returns a pointer to the created skin.
|
/** \return Returns a pointer to the created skin.
|
||||||
If you no longer need the skin, you should call IGUISkin::drop().
|
If you no longer need the skin, you should call IGUISkin::drop().
|
||||||
See IReferenceCounted::drop() for more information. */
|
See IReferenceCounted::drop() for more information. */
|
||||||
virtual IGUISkin* createSkin(EGUI_SKIN_TYPE type) _IRR_OVERRIDE_;
|
IGUISkin* createSkin(EGUI_SKIN_TYPE type) override;
|
||||||
|
|
||||||
//! Creates the image list from the given texture.
|
//! Creates the image list from the given texture.
|
||||||
virtual IGUIImageList* createImageList(video::ITexture* texture,
|
virtual IGUIImageList* createImageList(video::ITexture* texture,
|
||||||
core::dimension2d<s32> imageSize, bool useAlphaChannel) _IRR_OVERRIDE_;
|
core::dimension2d<s32> imageSize, bool useAlphaChannel) override;
|
||||||
|
|
||||||
//! returns the font
|
//! returns the font
|
||||||
virtual IGUIFont* getFont(const io::path& filename) _IRR_OVERRIDE_;
|
IGUIFont* getFont(const io::path& filename) override;
|
||||||
|
|
||||||
//! add an externally loaded font
|
//! add an externally loaded font
|
||||||
virtual IGUIFont* addFont(const io::path& name, IGUIFont* font) _IRR_OVERRIDE_;
|
IGUIFont* addFont(const io::path& name, IGUIFont* font) override;
|
||||||
|
|
||||||
//! remove loaded font
|
//! remove loaded font
|
||||||
virtual void removeFont(IGUIFont* font) _IRR_OVERRIDE_;
|
void removeFont(IGUIFont* font) override;
|
||||||
|
|
||||||
//! returns default font
|
//! returns default font
|
||||||
virtual IGUIFont* getBuiltInFont() const _IRR_OVERRIDE_;
|
IGUIFont* getBuiltInFont() const override;
|
||||||
|
|
||||||
//! returns the sprite bank
|
//! returns the sprite bank
|
||||||
virtual IGUISpriteBank* getSpriteBank(const io::path& filename) _IRR_OVERRIDE_;
|
IGUISpriteBank* getSpriteBank(const io::path& filename) override;
|
||||||
|
|
||||||
//! returns the sprite bank
|
//! returns the sprite bank
|
||||||
virtual IGUISpriteBank* addEmptySpriteBank(const io::path& name) _IRR_OVERRIDE_;
|
IGUISpriteBank* addEmptySpriteBank(const io::path& name) override;
|
||||||
|
|
||||||
//! adds an button. The returned pointer must not be dropped.
|
//! adds an button. The returned pointer must not be dropped.
|
||||||
virtual IGUIButton* addButton(const core::rect<s32>& rectangle, IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0,const wchar_t* tooltiptext = 0) _IRR_OVERRIDE_;
|
IGUIButton* addButton(const core::rect<s32>& rectangle, IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0,const wchar_t* tooltiptext = 0) override;
|
||||||
|
|
||||||
//! adds a window. The returned pointer must not be dropped.
|
|
||||||
virtual IGUIWindow* addWindow(const core::rect<s32>& rectangle, bool modal = false,
|
|
||||||
const wchar_t* text=0, IGUIElement* parent=0, s32 id=-1) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! adds a modal screen. The returned pointer must not be dropped.
|
|
||||||
virtual IGUIElement* addModalScreen(IGUIElement* parent, int blinkMode) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Adds a message box.
|
|
||||||
virtual IGUIWindow* addMessageBox(const wchar_t* caption, const wchar_t* text=0,
|
|
||||||
bool modal = true, s32 flag = EMBF_OK, IGUIElement* parent=0, s32 id=-1, video::ITexture* image=0) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! adds a scrollbar. The returned pointer must not be dropped.
|
//! adds a scrollbar. The returned pointer must not be dropped.
|
||||||
virtual IGUIScrollBar* addScrollBar(bool horizontal, const core::rect<s32>& rectangle,
|
virtual IGUIScrollBar* addScrollBar(bool horizontal, const core::rect<s32>& rectangle,
|
||||||
IGUIElement* parent=0, s32 id=-1) _IRR_OVERRIDE_;
|
IGUIElement* parent=0, s32 id=-1) override;
|
||||||
|
|
||||||
//! Adds an image element.
|
//! Adds an image element.
|
||||||
virtual IGUIImage* addImage(video::ITexture* image, core::position2d<s32> pos,
|
virtual IGUIImage* addImage(video::ITexture* image, core::position2d<s32> pos,
|
||||||
bool useAlphaChannel=true, IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0) _IRR_OVERRIDE_;
|
bool useAlphaChannel=true, IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0) override;
|
||||||
|
|
||||||
//! adds an image. The returned pointer must not be dropped.
|
//! adds an image. The returned pointer must not be dropped.
|
||||||
virtual IGUIImage* addImage(const core::rect<s32>& rectangle,
|
virtual IGUIImage* addImage(const core::rect<s32>& rectangle,
|
||||||
IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0, bool useAlphaChannel=true) _IRR_OVERRIDE_;
|
IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0, bool useAlphaChannel=true) override;
|
||||||
|
|
||||||
//! adds a checkbox
|
//! adds a checkbox
|
||||||
virtual IGUICheckBox* addCheckBox(bool checked, const core::rect<s32>& rectangle,
|
virtual IGUICheckBox* addCheckBox(bool checked, const core::rect<s32>& rectangle,
|
||||||
IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0) _IRR_OVERRIDE_;
|
IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0) override;
|
||||||
|
|
||||||
//! adds a list box
|
//! adds a list box
|
||||||
virtual IGUIListBox* addListBox(const core::rect<s32>& rectangle,
|
virtual IGUIListBox* addListBox(const core::rect<s32>& rectangle,
|
||||||
IGUIElement* parent=0, s32 id=-1, bool drawBackground=false) _IRR_OVERRIDE_;
|
IGUIElement* parent=0, s32 id=-1, bool drawBackground=false) override;
|
||||||
|
|
||||||
//! adds a tree view
|
|
||||||
virtual IGUITreeView* addTreeView(const core::rect<s32>& rectangle,
|
|
||||||
IGUIElement* parent=0, s32 id=-1, bool drawBackground=false,
|
|
||||||
bool scrollBarVertical = true, bool scrollBarHorizontal = false) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! adds an mesh viewer. The returned pointer must not be dropped.
|
|
||||||
virtual IGUIMeshViewer* addMeshViewer(const core::rect<s32>& rectangle,
|
|
||||||
IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Adds a file open dialog.
|
//! Adds a file open dialog.
|
||||||
virtual IGUIFileOpenDialog* addFileOpenDialog(const wchar_t* title = 0,
|
virtual IGUIFileOpenDialog* addFileOpenDialog(const wchar_t* title = 0,
|
||||||
bool modal=true, IGUIElement* parent=0, s32 id=-1,
|
bool modal=true, IGUIElement* parent=0, s32 id=-1,
|
||||||
bool restoreCWD=false, io::path::char_type* startDir=0) _IRR_OVERRIDE_;
|
bool restoreCWD=false, io::path::char_type* startDir=0) override;
|
||||||
|
|
||||||
//! Adds a color select dialog.
|
|
||||||
virtual IGUIColorSelectDialog* addColorSelectDialog(const wchar_t* title = 0,
|
|
||||||
bool modal=true, IGUIElement* parent=0, s32 id=-1) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! adds a static text. The returned pointer must not be dropped.
|
//! adds a static text. The returned pointer must not be dropped.
|
||||||
virtual IGUIStaticText* addStaticText(const wchar_t* text, const core::rect<s32>& rectangle,
|
virtual IGUIStaticText* addStaticText(const wchar_t* text, const core::rect<s32>& rectangle,
|
||||||
bool border=false, bool wordWrap=true, IGUIElement* parent=0, s32 id=-1, bool drawBackground = false) _IRR_OVERRIDE_;
|
bool border=false, bool wordWrap=true, IGUIElement* parent=0, s32 id=-1, bool drawBackground = false) override;
|
||||||
|
|
||||||
//! Adds an edit box. The returned pointer must not be dropped.
|
//! Adds an edit box. The returned pointer must not be dropped.
|
||||||
virtual IGUIEditBox* addEditBox(const wchar_t* text, const core::rect<s32>& rectangle,
|
virtual IGUIEditBox* addEditBox(const wchar_t* text, const core::rect<s32>& rectangle,
|
||||||
bool border=false, IGUIElement* parent=0, s32 id=-1) _IRR_OVERRIDE_;
|
bool border=false, IGUIElement* parent=0, s32 id=-1) override;
|
||||||
|
|
||||||
//! Adds a spin box to the environment
|
|
||||||
virtual IGUISpinBox* addSpinBox(const wchar_t* text, const core::rect<s32>& rectangle,
|
|
||||||
bool border=false,IGUIElement* parent=0, s32 id=-1) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Adds a tab control to the environment.
|
//! Adds a tab control to the environment.
|
||||||
virtual IGUITabControl* addTabControl(const core::rect<s32>& rectangle,
|
virtual IGUITabControl* addTabControl(const core::rect<s32>& rectangle,
|
||||||
IGUIElement* parent=0, bool fillbackground=false, bool border=true, s32 id=-1) _IRR_OVERRIDE_;
|
IGUIElement* parent=0, bool fillbackground=false, bool border=true, s32 id=-1) override;
|
||||||
|
|
||||||
//! Adds tab to the environment.
|
//! Adds tab to the environment.
|
||||||
virtual IGUITab* addTab(const core::rect<s32>& rectangle,
|
virtual IGUITab* addTab(const core::rect<s32>& rectangle,
|
||||||
IGUIElement* parent=0, s32 id=-1) _IRR_OVERRIDE_;
|
IGUIElement* parent=0, s32 id=-1) override;
|
||||||
|
|
||||||
//! Adds a context menu to the environment.
|
|
||||||
virtual IGUIContextMenu* addContextMenu(const core::rect<s32>& rectangle,
|
|
||||||
IGUIElement* parent=0, s32 id=-1) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Adds a menu to the environment.
|
|
||||||
virtual IGUIContextMenu* addMenu(IGUIElement* parent=0, s32 id=-1) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Adds a toolbar to the environment. It is like a menu is always placed on top
|
|
||||||
//! in its parent, and contains buttons.
|
|
||||||
virtual IGUIToolBar* addToolBar(IGUIElement* parent=0, s32 id=-1) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Adds a combo box to the environment.
|
//! Adds a combo box to the environment.
|
||||||
virtual IGUIComboBox* addComboBox(const core::rect<s32>& rectangle,
|
virtual IGUIComboBox* addComboBox(const core::rect<s32>& rectangle,
|
||||||
IGUIElement* parent=0, s32 id=-1) _IRR_OVERRIDE_;
|
IGUIElement* parent=0, s32 id=-1) override;
|
||||||
|
|
||||||
//! Adds a table element.
|
|
||||||
virtual IGUITable* addTable(const core::rect<s32>& rectangle,
|
|
||||||
IGUIElement* parent=0, s32 id=-1, bool drawBackground=false) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Adds an element to display the information from the Irrlicht profiler
|
|
||||||
virtual IGUIProfiler* addProfilerDisplay(const core::rect<s32>& rectangle,
|
|
||||||
IGUIElement* parent=0, s32 id=-1) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! sets the focus to an element
|
//! sets the focus to an element
|
||||||
virtual bool setFocus(IGUIElement* element) _IRR_OVERRIDE_;
|
bool setFocus(IGUIElement* element) override;
|
||||||
|
|
||||||
//! removes the focus from an element
|
//! removes the focus from an element
|
||||||
virtual bool removeFocus(IGUIElement* element) _IRR_OVERRIDE_;
|
bool removeFocus(IGUIElement* element) override;
|
||||||
|
|
||||||
//! Returns if the element has focus
|
//! Returns if the element has focus
|
||||||
virtual bool hasFocus(const IGUIElement* element, bool checkSubElements=false) const _IRR_OVERRIDE_;
|
bool hasFocus(const IGUIElement* element, bool checkSubElements=false) const override;
|
||||||
|
|
||||||
//! Returns the element with the focus
|
//! Returns the element with the focus
|
||||||
virtual IGUIElement* getFocus() const _IRR_OVERRIDE_;
|
IGUIElement* getFocus() const override;
|
||||||
|
|
||||||
//! Returns the element last known to be under the mouse
|
//! Returns the element last known to be under the mouse
|
||||||
virtual IGUIElement* getHovered() const _IRR_OVERRIDE_;
|
IGUIElement* getHovered() const override;
|
||||||
|
|
||||||
//! Adds an element for fading in or out.
|
|
||||||
virtual IGUIInOutFader* addInOutFader(const core::rect<s32>* rectangle=0, IGUIElement* parent=0, s32 id=-1) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Returns the root gui element.
|
//! Returns the root gui element.
|
||||||
virtual IGUIElement* getRootGUIElement() _IRR_OVERRIDE_;
|
IGUIElement* getRootGUIElement() override;
|
||||||
|
|
||||||
virtual void OnPostRender( u32 time ) _IRR_OVERRIDE_;
|
void OnPostRender( u32 time ) override;
|
||||||
|
|
||||||
//! Returns the default element factory which can create all built in elements
|
|
||||||
virtual IGUIElementFactory* getDefaultGUIElementFactory() const _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Adds an element factory to the gui environment.
|
|
||||||
/** Use this to extend the gui environment with new element types which it should be
|
|
||||||
able to create automatically, for example when loading data from xml files. */
|
|
||||||
virtual void registerGUIElementFactory(IGUIElementFactory* factoryToAdd) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Returns amount of registered scene node factories.
|
|
||||||
virtual u32 getRegisteredGUIElementFactoryCount() const _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Returns a scene node factory by index
|
|
||||||
virtual IGUIElementFactory* getGUIElementFactory(u32 index) const _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Adds a GUI Element by its name
|
|
||||||
virtual IGUIElement* addGUIElement(const c8* elementName, IGUIElement* parent=0) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Saves the current gui into a file.
|
|
||||||
/** \param filename: Name of the file.
|
|
||||||
\param start: The element to start saving from.
|
|
||||||
if not specified, the root element will be used */
|
|
||||||
virtual bool saveGUI( const io::path& filename, IGUIElement* start=0) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Saves the current gui into a file.
|
|
||||||
/** \param file: The file to save the GUI to.
|
|
||||||
\param start: The element to start saving from.
|
|
||||||
if not specified, the root element will be used */
|
|
||||||
virtual bool saveGUI(io::IWriteFile* file, IGUIElement* start=0) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Loads the gui. Note that the current gui is not cleared before.
|
|
||||||
/** \param filename: Name of the file.
|
|
||||||
\param parent: The parent of all loaded GUI elements,
|
|
||||||
if not specified, the root element will be used */
|
|
||||||
virtual bool loadGUI(const io::path& filename, IGUIElement* parent=0) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Loads the gui. Note that the current gui is not cleared before.
|
|
||||||
/** \param file: IReadFile to load the GUI from
|
|
||||||
\param parent: The parent of all loaded GUI elements,
|
|
||||||
if not specified, the root element will be used */
|
|
||||||
virtual bool loadGUI(io::IReadFile* file, IGUIElement* parent=0) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Find the next element which would be selected when pressing the tab-key
|
//! Find the next element which would be selected when pressing the tab-key
|
||||||
virtual IGUIElement* getNextElement(bool reverse=false, bool group=false) _IRR_OVERRIDE_;
|
IGUIElement* getNextElement(bool reverse=false, bool group=false) override;
|
||||||
|
|
||||||
//! Set the way the gui will handle focus changes
|
//! Set the way the gui will handle focus changes
|
||||||
virtual void setFocusBehavior(u32 flags) _IRR_OVERRIDE_;
|
void setFocusBehavior(u32 flags) override;
|
||||||
|
|
||||||
//! Get the way the gui does handle focus changes
|
//! Get the way the gui does handle focus changes
|
||||||
virtual u32 getFocusBehavior() const _IRR_OVERRIDE_;
|
u32 getFocusBehavior() const override;
|
||||||
|
|
||||||
//! Adds a IGUIElement to deletion queue.
|
//! Adds a IGUIElement to deletion queue.
|
||||||
virtual void addToDeletionQueue(IGUIElement* element) _IRR_OVERRIDE_;
|
void addToDeletionQueue(IGUIElement* element) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
@ -302,8 +211,6 @@ private:
|
|||||||
|
|
||||||
SToolTip ToolTip;
|
SToolTip ToolTip;
|
||||||
|
|
||||||
core::array<IGUIElementFactory*> GUIElementFactoryList;
|
|
||||||
|
|
||||||
core::array<SFont> Fonts;
|
core::array<SFont> Fonts;
|
||||||
core::array<SSpriteBank> Banks;
|
core::array<SSpriteBank> Banks;
|
||||||
video::IVideoDriver* Driver;
|
video::IVideoDriver* Driver;
|
||||||
|
@ -74,7 +74,7 @@ CGUIFileOpenDialog::CGUIFileOpenDialog(const wchar_t* title,
|
|||||||
L"", skin ? skin->getDefaultText(EGDT_WINDOW_CLOSE) : L"Close");
|
L"", skin ? skin->getDefaultText(EGDT_WINDOW_CLOSE) : L"Close");
|
||||||
CloseButton->setSubElement(true);
|
CloseButton->setSubElement(true);
|
||||||
CloseButton->setTabStop(false);
|
CloseButton->setTabStop(false);
|
||||||
if (sprites)
|
if (sprites && skin)
|
||||||
{
|
{
|
||||||
CloseButton->setSpriteBank(sprites);
|
CloseButton->setSpriteBank(sprites);
|
||||||
CloseButton->setSprite(EGBS_BUTTON_UP, skin->getIcon(EGDI_WINDOW_CLOSE), color);
|
CloseButton->setSprite(EGBS_BUTTON_UP, skin->getIcon(EGDI_WINDOW_CLOSE), color);
|
||||||
|
@ -32,22 +32,22 @@ namespace gui
|
|||||||
virtual ~CGUIFileOpenDialog();
|
virtual ~CGUIFileOpenDialog();
|
||||||
|
|
||||||
//! returns the filename of the selected file. Returns NULL, if no file was selected.
|
//! returns the filename of the selected file. Returns NULL, if no file was selected.
|
||||||
virtual const wchar_t* getFileName() const _IRR_OVERRIDE_;
|
const wchar_t* getFileName() const override;
|
||||||
|
|
||||||
//! Returns the filename of the selected file. Is empty if no file was selected.
|
//! Returns the filename of the selected file. Is empty if no file was selected.
|
||||||
virtual const io::path& getFileNameP() const _IRR_OVERRIDE_;
|
const io::path& getFileNameP() const override;
|
||||||
|
|
||||||
//! Returns the directory of the selected file. Returns NULL, if no directory was selected.
|
//! Returns the directory of the selected file. Returns NULL, if no directory was selected.
|
||||||
virtual const io::path& getDirectoryName() const _IRR_OVERRIDE_;
|
const io::path& getDirectoryName() const override;
|
||||||
|
|
||||||
//! Returns the directory of the selected file converted to wide characters. Returns NULL if no directory was selected.
|
//! Returns the directory of the selected file converted to wide characters. Returns NULL if no directory was selected.
|
||||||
virtual const wchar_t* getDirectoryNameW() const _IRR_OVERRIDE_;
|
const wchar_t* getDirectoryNameW() const override;
|
||||||
|
|
||||||
//! called if an event happened.
|
//! called if an event happened.
|
||||||
virtual bool OnEvent(const SEvent& event) _IRR_OVERRIDE_;
|
bool OnEvent(const SEvent& event) override;
|
||||||
|
|
||||||
//! draws the element and its children
|
//! draws the element and its children
|
||||||
virtual void draw() _IRR_OVERRIDE_;
|
void draw() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
@ -47,32 +47,32 @@ public:
|
|||||||
//! draws an text and clips it to the specified rectangle if wanted
|
//! draws an text and clips it to the specified rectangle if wanted
|
||||||
virtual void draw(const core::stringw& text, const core::rect<s32>& position,
|
virtual void draw(const core::stringw& text, const core::rect<s32>& position,
|
||||||
video::SColor color, bool hcenter=false,
|
video::SColor color, bool hcenter=false,
|
||||||
bool vcenter=false, const core::rect<s32>* clip=0) _IRR_OVERRIDE_;
|
bool vcenter=false, const core::rect<s32>* clip=0) override;
|
||||||
|
|
||||||
//! returns the dimension of a text
|
//! returns the dimension of a text
|
||||||
virtual core::dimension2d<u32> getDimension(const wchar_t* text) const _IRR_OVERRIDE_;
|
core::dimension2d<u32> getDimension(const wchar_t* text) const override;
|
||||||
|
|
||||||
//! Calculates the index of the character in the text which is on a specific position.
|
//! Calculates the index of the character in the text which is on a specific position.
|
||||||
virtual s32 getCharacterFromPos(const wchar_t* text, s32 pixel_x) const _IRR_OVERRIDE_;
|
s32 getCharacterFromPos(const wchar_t* text, s32 pixel_x) const override;
|
||||||
|
|
||||||
//! Returns the type of this font
|
//! Returns the type of this font
|
||||||
virtual EGUI_FONT_TYPE getType() const _IRR_OVERRIDE_ { return EGFT_BITMAP; }
|
EGUI_FONT_TYPE getType() const override { return EGFT_BITMAP; }
|
||||||
|
|
||||||
//! set an Pixel Offset on Drawing ( scale position on width )
|
//! set an Pixel Offset on Drawing ( scale position on width )
|
||||||
virtual void setKerningWidth (s32 kerning) _IRR_OVERRIDE_;
|
void setKerningWidth (s32 kerning) override;
|
||||||
virtual void setKerningHeight (s32 kerning) _IRR_OVERRIDE_;
|
void setKerningHeight (s32 kerning) override;
|
||||||
|
|
||||||
//! set an Pixel Offset on Drawing ( scale position on width )
|
//! set an Pixel Offset on Drawing ( scale position on width )
|
||||||
virtual s32 getKerningWidth(const wchar_t* thisLetter=0, const wchar_t* previousLetter=0) const _IRR_OVERRIDE_;
|
s32 getKerningWidth(const wchar_t* thisLetter=0, const wchar_t* previousLetter=0) const override;
|
||||||
virtual s32 getKerningHeight() const _IRR_OVERRIDE_;
|
s32 getKerningHeight() const override;
|
||||||
|
|
||||||
//! gets the sprite bank
|
//! gets the sprite bank
|
||||||
virtual IGUISpriteBank* getSpriteBank() const _IRR_OVERRIDE_;
|
IGUISpriteBank* getSpriteBank() const override;
|
||||||
|
|
||||||
//! returns the sprite number from a given character
|
//! returns the sprite number from a given character
|
||||||
virtual u32 getSpriteNoFromChar(const wchar_t *c) const _IRR_OVERRIDE_;
|
u32 getSpriteNoFromChar(const wchar_t *c) const override;
|
||||||
|
|
||||||
virtual void setInvisibleCharacters( const wchar_t *s ) _IRR_OVERRIDE_;
|
void setInvisibleCharacters( const wchar_t *s ) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
@ -26,52 +26,52 @@ namespace gui
|
|||||||
virtual ~CGUIImage();
|
virtual ~CGUIImage();
|
||||||
|
|
||||||
//! sets an image
|
//! sets an image
|
||||||
virtual void setImage(video::ITexture* image) _IRR_OVERRIDE_;
|
void setImage(video::ITexture* image) override;
|
||||||
|
|
||||||
//! Gets the image texture
|
//! Gets the image texture
|
||||||
virtual video::ITexture* getImage() const _IRR_OVERRIDE_;
|
video::ITexture* getImage() const override;
|
||||||
|
|
||||||
//! sets the color of the image
|
//! sets the color of the image
|
||||||
virtual void setColor(video::SColor color) _IRR_OVERRIDE_;
|
void setColor(video::SColor color) override;
|
||||||
|
|
||||||
//! sets if the image should scale to fit the element
|
//! sets if the image should scale to fit the element
|
||||||
virtual void setScaleImage(bool scale) _IRR_OVERRIDE_;
|
void setScaleImage(bool scale) override;
|
||||||
|
|
||||||
//! draws the element and its children
|
//! draws the element and its children
|
||||||
virtual void draw() _IRR_OVERRIDE_;
|
void draw() override;
|
||||||
|
|
||||||
//! sets if the image should use its alpha channel to draw itself
|
//! sets if the image should use its alpha channel to draw itself
|
||||||
virtual void setUseAlphaChannel(bool use) _IRR_OVERRIDE_;
|
void setUseAlphaChannel(bool use) override;
|
||||||
|
|
||||||
//! Gets the color of the image
|
//! Gets the color of the image
|
||||||
virtual video::SColor getColor() const _IRR_OVERRIDE_;
|
video::SColor getColor() const override;
|
||||||
|
|
||||||
//! Returns true if the image is scaled to fit, false if not
|
//! Returns true if the image is scaled to fit, false if not
|
||||||
virtual bool isImageScaled() const _IRR_OVERRIDE_;
|
bool isImageScaled() const override;
|
||||||
|
|
||||||
//! Returns true if the image is using the alpha channel, false if not
|
//! Returns true if the image is using the alpha channel, false if not
|
||||||
virtual bool isAlphaChannelUsed() const _IRR_OVERRIDE_;
|
bool isAlphaChannelUsed() const override;
|
||||||
|
|
||||||
//! Sets the source rectangle of the image. By default the full image is used.
|
//! Sets the source rectangle of the image. By default the full image is used.
|
||||||
virtual void setSourceRect(const core::rect<s32>& sourceRect) _IRR_OVERRIDE_;
|
void setSourceRect(const core::rect<s32>& sourceRect) override;
|
||||||
|
|
||||||
//! Returns the customized source rectangle of the image to be used.
|
//! Returns the customized source rectangle of the image to be used.
|
||||||
virtual core::rect<s32> getSourceRect() const _IRR_OVERRIDE_;
|
core::rect<s32> getSourceRect() const override;
|
||||||
|
|
||||||
//! Restrict drawing-area.
|
//! Restrict drawing-area.
|
||||||
virtual void setDrawBounds(const core::rect<f32>& drawBoundUVs) _IRR_OVERRIDE_;
|
void setDrawBounds(const core::rect<f32>& drawBoundUVs) override;
|
||||||
|
|
||||||
//! Get drawing-area restrictions.
|
//! Get drawing-area restrictions.
|
||||||
virtual core::rect<f32> getDrawBounds() const _IRR_OVERRIDE_;
|
core::rect<f32> getDrawBounds() const override;
|
||||||
|
|
||||||
//! Sets whether to draw a background color (EGDC_3D_DARK_SHADOW) when no texture is set
|
//! Sets whether to draw a background color (EGDC_3D_DARK_SHADOW) when no texture is set
|
||||||
virtual void setDrawBackground(bool draw) _IRR_OVERRIDE_
|
void setDrawBackground(bool draw) override
|
||||||
{
|
{
|
||||||
DrawBackground = draw;
|
DrawBackground = draw;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Checks if a background is drawn when no texture is set
|
//! Checks if a background is drawn when no texture is set
|
||||||
virtual bool isDrawBackgroundEnabled() const _IRR_OVERRIDE_
|
bool isDrawBackgroundEnabled() const override
|
||||||
{
|
{
|
||||||
return DrawBackground;
|
return DrawBackground;
|
||||||
}
|
}
|
||||||
|
@ -38,16 +38,16 @@ public:
|
|||||||
//! \param clip: Optional pointer to a rectangle against which the text will be clipped.
|
//! \param clip: Optional pointer to a rectangle against which the text will be clipped.
|
||||||
//! If the pointer is null, no clipping will be done.
|
//! If the pointer is null, no clipping will be done.
|
||||||
virtual void draw( s32 index, const core::position2d<s32>& destPos,
|
virtual void draw( s32 index, const core::position2d<s32>& destPos,
|
||||||
const core::rect<s32>* clip = 0 ) _IRR_OVERRIDE_;
|
const core::rect<s32>* clip = 0 ) override;
|
||||||
|
|
||||||
//! Returns the count of Images in the list.
|
//! Returns the count of Images in the list.
|
||||||
//! \return Returns the count of Images in the list.
|
//! \return Returns the count of Images in the list.
|
||||||
virtual s32 getImageCount() const _IRR_OVERRIDE_
|
s32 getImageCount() const override
|
||||||
{ return ImageCount; }
|
{ return ImageCount; }
|
||||||
|
|
||||||
//! Returns the size of the images in the list.
|
//! Returns the size of the images in the list.
|
||||||
//! \return Returns the size of the images in the list.
|
//! \return Returns the size of the images in the list.
|
||||||
virtual core::dimension2d<s32> getImageSize() const _IRR_OVERRIDE_
|
core::dimension2d<s32> getImageSize() const override
|
||||||
{ return ImageSize; }
|
{ return ImageSize; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -1,156 +0,0 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
|
||||||
// This file is part of the "Irrlicht Engine".
|
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
|
||||||
|
|
||||||
#include "CGUIInOutFader.h"
|
|
||||||
#ifdef _IRR_COMPILE_WITH_GUI_
|
|
||||||
|
|
||||||
#include "IGUIEnvironment.h"
|
|
||||||
#include "IVideoDriver.h"
|
|
||||||
#include "os.h"
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
namespace gui
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
//! constructor
|
|
||||||
CGUIInOutFader::CGUIInOutFader(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
|
||||||
: IGUIInOutFader(environment, parent, id, rectangle)
|
|
||||||
{
|
|
||||||
#ifdef _DEBUG
|
|
||||||
setDebugName("CGUIInOutFader");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
Action = EFA_NOTHING;
|
|
||||||
StartTime = 0;
|
|
||||||
EndTime = 0;
|
|
||||||
|
|
||||||
setColor(video::SColor(0,0,0,0));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! draws the element and its children
|
|
||||||
void CGUIInOutFader::draw()
|
|
||||||
{
|
|
||||||
if (!IsVisible || !Action)
|
|
||||||
return;
|
|
||||||
|
|
||||||
u32 now = os::Timer::getTime();
|
|
||||||
if (now > EndTime && Action == EFA_FADE_IN)
|
|
||||||
{
|
|
||||||
Action = EFA_NOTHING;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
video::IVideoDriver* driver = Environment->getVideoDriver();
|
|
||||||
|
|
||||||
if (driver)
|
|
||||||
{
|
|
||||||
f32 d;
|
|
||||||
|
|
||||||
if (now > EndTime)
|
|
||||||
d = 0.0f;
|
|
||||||
else
|
|
||||||
d = (EndTime - now) / (f32)(EndTime - StartTime);
|
|
||||||
|
|
||||||
video::SColor newCol = FullColor.getInterpolated(TransColor, d);
|
|
||||||
driver->draw2DRectangle(newCol, AbsoluteRect, &AbsoluteClippingRect);
|
|
||||||
}
|
|
||||||
|
|
||||||
IGUIElement::draw();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Gets the color to fade out to or to fade in from.
|
|
||||||
video::SColor CGUIInOutFader::getColor() const
|
|
||||||
{
|
|
||||||
return Color[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Sets the color to fade out to or to fade in from.
|
|
||||||
void CGUIInOutFader::setColor(video::SColor color)
|
|
||||||
{
|
|
||||||
video::SColor s = color;
|
|
||||||
video::SColor d = color;
|
|
||||||
|
|
||||||
s.setAlpha ( 255 );
|
|
||||||
d.setAlpha ( 0 );
|
|
||||||
setColor ( s,d );
|
|
||||||
|
|
||||||
/*
|
|
||||||
Color[0] = color;
|
|
||||||
|
|
||||||
FullColor = Color[0];
|
|
||||||
TransColor = Color[0];
|
|
||||||
|
|
||||||
if (Action == EFA_FADE_OUT)
|
|
||||||
{
|
|
||||||
FullColor.setAlpha(0);
|
|
||||||
TransColor.setAlpha(255);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
if (Action == EFA_FADE_IN)
|
|
||||||
{
|
|
||||||
FullColor.setAlpha(255);
|
|
||||||
TransColor.setAlpha(0);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void CGUIInOutFader::setColor(video::SColor source, video::SColor dest)
|
|
||||||
{
|
|
||||||
Color[0] = source;
|
|
||||||
Color[1] = dest;
|
|
||||||
|
|
||||||
if (Action == EFA_FADE_OUT)
|
|
||||||
{
|
|
||||||
FullColor = Color[1];
|
|
||||||
TransColor = Color[0];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
if (Action == EFA_FADE_IN)
|
|
||||||
{
|
|
||||||
FullColor = Color[0];
|
|
||||||
TransColor = Color[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Returns if the fade in or out process is done.
|
|
||||||
bool CGUIInOutFader::isReady() const
|
|
||||||
{
|
|
||||||
u32 now = os::Timer::getTime();
|
|
||||||
bool ret = (now > EndTime);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Starts the fade in process.
|
|
||||||
void CGUIInOutFader::fadeIn(u32 time)
|
|
||||||
{
|
|
||||||
StartTime = os::Timer::getTime();
|
|
||||||
EndTime = StartTime + time;
|
|
||||||
Action = EFA_FADE_IN;
|
|
||||||
setColor(Color[0],Color[1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Starts the fade out process.
|
|
||||||
void CGUIInOutFader::fadeOut(u32 time)
|
|
||||||
{
|
|
||||||
StartTime = os::Timer::getTime();
|
|
||||||
EndTime = StartTime + time;
|
|
||||||
Action = EFA_FADE_OUT;
|
|
||||||
setColor(Color[0],Color[1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
#endif // _IRR_COMPILE_WITH_GUI_
|
|
||||||
|
|
@ -1,69 +0,0 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
|
||||||
// This file is part of the "Irrlicht Engine".
|
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
|
||||||
|
|
||||||
#ifndef __C_GUI_IN_OUT_FADER_H_INCLUDED__
|
|
||||||
#define __C_GUI_IN_OUT_FADER_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IrrCompileConfig.h"
|
|
||||||
#ifdef _IRR_COMPILE_WITH_GUI_
|
|
||||||
|
|
||||||
#include "IGUIInOutFader.h"
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
namespace gui
|
|
||||||
{
|
|
||||||
|
|
||||||
class CGUIInOutFader : public IGUIInOutFader
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
//! constructor
|
|
||||||
CGUIInOutFader(IGUIEnvironment* environment, IGUIElement* parent,
|
|
||||||
s32 id, core::rect<s32> rectangle);
|
|
||||||
|
|
||||||
//! draws the element and its children
|
|
||||||
virtual void draw() _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Gets the color to fade out to or to fade in from.
|
|
||||||
virtual video::SColor getColor() const _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Sets the color to fade out to or to fade in from.
|
|
||||||
virtual void setColor(video::SColor color ) _IRR_OVERRIDE_;
|
|
||||||
virtual void setColor(video::SColor source, video::SColor dest) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Starts the fade in process.
|
|
||||||
virtual void fadeIn(u32 time) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Starts the fade out process.
|
|
||||||
virtual void fadeOut(u32 time) _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Returns if the fade in or out process is done.
|
|
||||||
virtual bool isReady() const _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
enum EFadeAction
|
|
||||||
{
|
|
||||||
EFA_NOTHING = 0,
|
|
||||||
EFA_FADE_IN,
|
|
||||||
EFA_FADE_OUT
|
|
||||||
};
|
|
||||||
|
|
||||||
u32 StartTime;
|
|
||||||
u32 EndTime;
|
|
||||||
EFadeAction Action;
|
|
||||||
|
|
||||||
video::SColor Color[2];
|
|
||||||
video::SColor FullColor;
|
|
||||||
video::SColor TransColor;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
#endif // _IRR_COMPILE_WITH_GUI_
|
|
||||||
|
|
||||||
#endif // __C_GUI_IN_OUT_FADER_H_INCLUDED__
|
|
||||||
|
|
@ -31,121 +31,117 @@ namespace gui
|
|||||||
virtual ~CGUIListBox();
|
virtual ~CGUIListBox();
|
||||||
|
|
||||||
//! returns amount of list items
|
//! returns amount of list items
|
||||||
virtual u32 getItemCount() const _IRR_OVERRIDE_;
|
u32 getItemCount() const override;
|
||||||
|
|
||||||
//! returns string of a list item. the id may be a value from 0 to itemCount-1
|
//! returns string of a list item. the id may be a value from 0 to itemCount-1
|
||||||
virtual const wchar_t* getListItem(u32 id) const _IRR_OVERRIDE_;
|
const wchar_t* getListItem(u32 id) const override;
|
||||||
|
|
||||||
//! adds an list item, returns id of item
|
//! adds an list item, returns id of item
|
||||||
virtual u32 addItem(const wchar_t* text) _IRR_OVERRIDE_;
|
u32 addItem(const wchar_t* text) override;
|
||||||
|
|
||||||
//! clears the list
|
//! clears the list
|
||||||
virtual void clear() _IRR_OVERRIDE_;
|
void clear() override;
|
||||||
|
|
||||||
//! returns id of selected item. returns -1 if no item is selected.
|
//! returns id of selected item. returns -1 if no item is selected.
|
||||||
virtual s32 getSelected() const _IRR_OVERRIDE_;
|
s32 getSelected() const override;
|
||||||
|
|
||||||
//! sets the selected item. Set this to -1 if no item should be selected
|
//! sets the selected item. Set this to -1 if no item should be selected
|
||||||
virtual void setSelected(s32 id) _IRR_OVERRIDE_;
|
void setSelected(s32 id) override;
|
||||||
|
|
||||||
//! sets the selected item. Set this to -1 if no item should be selected
|
//! sets the selected item. Set this to -1 if no item should be selected
|
||||||
virtual void setSelected(const wchar_t *item) _IRR_OVERRIDE_;
|
void setSelected(const wchar_t *item) override;
|
||||||
|
|
||||||
//! called if an event happened.
|
//! called if an event happened.
|
||||||
virtual bool OnEvent(const SEvent& event) _IRR_OVERRIDE_;
|
bool OnEvent(const SEvent& event) override;
|
||||||
|
|
||||||
//! draws the element and its children
|
//! draws the element and its children
|
||||||
virtual void draw() _IRR_OVERRIDE_;
|
void draw() override;
|
||||||
|
|
||||||
//! adds an list item with an icon
|
//! adds an list item with an icon
|
||||||
//! \param text Text of list entry
|
//! \param text Text of list entry
|
||||||
//! \param icon Sprite index of the Icon within the current sprite bank. Set it to -1 if you want no icon
|
//! \param icon Sprite index of the Icon within the current sprite bank. Set it to -1 if you want no icon
|
||||||
//! \return
|
//! \return
|
||||||
//! returns the id of the new created item
|
//! returns the id of the new created item
|
||||||
virtual u32 addItem(const wchar_t* text, s32 icon) _IRR_OVERRIDE_;
|
u32 addItem(const wchar_t* text, s32 icon) override;
|
||||||
|
|
||||||
//! Returns the icon of an item
|
//! Returns the icon of an item
|
||||||
virtual s32 getIcon(u32 id) const _IRR_OVERRIDE_;
|
s32 getIcon(u32 id) const override;
|
||||||
|
|
||||||
//! removes an item from the list
|
//! removes an item from the list
|
||||||
virtual void removeItem(u32 id) _IRR_OVERRIDE_;
|
void removeItem(u32 id) override;
|
||||||
|
|
||||||
//! get the the id of the item at the given absolute coordinates
|
//! get the the id of the item at the given absolute coordinates
|
||||||
virtual s32 getItemAt(s32 xpos, s32 ypos) const _IRR_OVERRIDE_;
|
s32 getItemAt(s32 xpos, s32 ypos) const override;
|
||||||
|
|
||||||
//! Sets the sprite bank which should be used to draw list icons. This font is set to the sprite bank of
|
//! Sets the sprite bank which should be used to draw list icons. This font is set to the sprite bank of
|
||||||
//! the built-in-font by default. A sprite can be displayed in front of every list item.
|
//! the built-in-font by default. A sprite can be displayed in front of every list item.
|
||||||
//! An icon is an index within the icon sprite bank. Several default icons are available in the
|
//! An icon is an index within the icon sprite bank. Several default icons are available in the
|
||||||
//! skin through getIcon
|
//! skin through getIcon
|
||||||
virtual void setSpriteBank(IGUISpriteBank* bank) _IRR_OVERRIDE_;
|
void setSpriteBank(IGUISpriteBank* bank) override;
|
||||||
|
|
||||||
//! set whether the listbox should scroll to newly selected items
|
//! set whether the listbox should scroll to newly selected items
|
||||||
virtual void setAutoScrollEnabled(bool scroll) _IRR_OVERRIDE_;
|
void setAutoScrollEnabled(bool scroll) override;
|
||||||
|
|
||||||
//! returns true if automatic scrolling is enabled, false if not.
|
//! returns true if automatic scrolling is enabled, false if not.
|
||||||
virtual bool isAutoScrollEnabled() const _IRR_OVERRIDE_;
|
bool isAutoScrollEnabled() const override;
|
||||||
|
|
||||||
//! Update the position and size of the listbox, and update the scrollbar
|
//! Update the position and size of the listbox, and update the scrollbar
|
||||||
virtual void updateAbsolutePosition() _IRR_OVERRIDE_;
|
void updateAbsolutePosition() override;
|
||||||
|
|
||||||
//! set all item colors at given index to color
|
//! set all item colors at given index to color
|
||||||
virtual void setItemOverrideColor(u32 index, video::SColor color) _IRR_OVERRIDE_;
|
void setItemOverrideColor(u32 index, video::SColor color) override;
|
||||||
|
|
||||||
//! set all item colors of specified type at given index to color
|
//! set all item colors of specified type at given index to color
|
||||||
virtual void setItemOverrideColor(u32 index, EGUI_LISTBOX_COLOR colorType, video::SColor color) _IRR_OVERRIDE_;
|
void setItemOverrideColor(u32 index, EGUI_LISTBOX_COLOR colorType, video::SColor color) override;
|
||||||
|
|
||||||
//! clear all item colors at index
|
//! clear all item colors at index
|
||||||
virtual void clearItemOverrideColor(u32 index) _IRR_OVERRIDE_;
|
void clearItemOverrideColor(u32 index) override;
|
||||||
|
|
||||||
//! clear item color at index for given colortype
|
//! clear item color at index for given colortype
|
||||||
virtual void clearItemOverrideColor(u32 index, EGUI_LISTBOX_COLOR colorType) _IRR_OVERRIDE_;
|
void clearItemOverrideColor(u32 index, EGUI_LISTBOX_COLOR colorType) override;
|
||||||
|
|
||||||
//! has the item at index its color overwritten?
|
//! has the item at index its color overwritten?
|
||||||
virtual bool hasItemOverrideColor(u32 index, EGUI_LISTBOX_COLOR colorType) const _IRR_OVERRIDE_;
|
bool hasItemOverrideColor(u32 index, EGUI_LISTBOX_COLOR colorType) const override;
|
||||||
|
|
||||||
//! return the overwrite color at given item index.
|
//! return the overwrite color at given item index.
|
||||||
virtual video::SColor getItemOverrideColor(u32 index, EGUI_LISTBOX_COLOR colorType) const _IRR_OVERRIDE_;
|
video::SColor getItemOverrideColor(u32 index, EGUI_LISTBOX_COLOR colorType) const override;
|
||||||
|
|
||||||
//! return the default color which is used for the given colorType
|
//! return the default color which is used for the given colorType
|
||||||
virtual video::SColor getItemDefaultColor(EGUI_LISTBOX_COLOR colorType) const _IRR_OVERRIDE_;
|
video::SColor getItemDefaultColor(EGUI_LISTBOX_COLOR colorType) const override;
|
||||||
|
|
||||||
//! set the item at the given index
|
//! set the item at the given index
|
||||||
virtual void setItem(u32 index, const wchar_t* text, s32 icon) _IRR_OVERRIDE_;
|
void setItem(u32 index, const wchar_t* text, s32 icon) override;
|
||||||
|
|
||||||
//! Insert the item at the given index
|
//! Insert the item at the given index
|
||||||
//! Return the index on success or -1 on failure.
|
//! Return the index on success or -1 on failure.
|
||||||
virtual s32 insertItem(u32 index, const wchar_t* text, s32 icon) _IRR_OVERRIDE_;
|
s32 insertItem(u32 index, const wchar_t* text, s32 icon) override;
|
||||||
|
|
||||||
//! Swap the items at the given indices
|
//! Swap the items at the given indices
|
||||||
virtual void swapItems(u32 index1, u32 index2) _IRR_OVERRIDE_;
|
void swapItems(u32 index1, u32 index2) override;
|
||||||
|
|
||||||
//! set global itemHeight
|
//! set global itemHeight
|
||||||
virtual void setItemHeight( s32 height ) _IRR_OVERRIDE_;
|
void setItemHeight( s32 height ) override;
|
||||||
|
|
||||||
//! Sets whether to draw the background
|
//! Sets whether to draw the background
|
||||||
virtual void setDrawBackground(bool draw) _IRR_OVERRIDE_;
|
void setDrawBackground(bool draw) override;
|
||||||
|
|
||||||
//! Access the vertical scrollbar
|
//! Access the vertical scrollbar
|
||||||
virtual IGUIScrollBar* getVerticalScrollBar() const _IRR_OVERRIDE_;
|
IGUIScrollBar* getVerticalScrollBar() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
struct ListItem
|
struct ListItem
|
||||||
{
|
{
|
||||||
ListItem() : Icon(-1)
|
|
||||||
{}
|
|
||||||
|
|
||||||
core::stringw Text;
|
core::stringw Text;
|
||||||
s32 Icon;
|
s32 Icon = -1;
|
||||||
|
|
||||||
// A multicolor extension
|
// A multicolor extension
|
||||||
struct ListItemOverrideColor
|
struct ListItemOverrideColor
|
||||||
{
|
{
|
||||||
ListItemOverrideColor() : Use(false) {}
|
bool Use = false;
|
||||||
bool Use;
|
|
||||||
video::SColor Color;
|
video::SColor Color;
|
||||||
};
|
};
|
||||||
ListItemOverrideColor OverrideColors[EGUI_LBC_COUNT];
|
ListItemOverrideColor OverrideColors[EGUI_LBC_COUNT]{};
|
||||||
};
|
};
|
||||||
|
|
||||||
void recalculateItemHeight();
|
void recalculateItemHeight();
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user