PlayStore & Debug Build Changes
*Updated Icon *Upgraded NDK to 29.0.14206865 *Rebuilt Libs To 16KB Page Sizr Compatible *Updated Debug APK Name And Package
@@ -17,6 +17,7 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(IS_CLANG_CL TRUE)
|
||||
set(CMAKE_INCLUDE_SYSTEM_FLAG_CXX "-imsvc")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-old-style-cast -Wno-reserved-id-macro -Wno-c++98-compat-pedantic -funwind-tables -fopenmp -static-openmp -Wl,--no-merge-exidx-entries")
|
||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,common-page-size=16384 -Wl,-z,max-page-size=16384")
|
||||
add_compile_options(-fsigned-char)
|
||||
|
||||
# Suppress all warnings
|
||||
@@ -1351,4 +1352,11 @@ target_link_libraries(slic3r PRIVATE
|
||||
boost_wave
|
||||
boost_wserialization
|
||||
${OCCT_LIBS}
|
||||
)
|
||||
)
|
||||
|
||||
if(ANDROID)
|
||||
target_link_options(slic3r PRIVATE
|
||||
"-Wl,-z,common-page-size=16384"
|
||||
"-Wl,-z,max-page-size=16384"
|
||||
"-Wl,--rosegment")
|
||||
endif()
|
||||
|
||||
@@ -17,7 +17,7 @@ android {
|
||||
applicationId "com.dark98.santoku"
|
||||
minSdk 21
|
||||
targetSdk 35
|
||||
versionCode 8
|
||||
versionCode 1
|
||||
versionName "0.0.1"
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
@@ -50,6 +50,8 @@ android {
|
||||
}
|
||||
}
|
||||
debug {
|
||||
applicationIdSuffix ".debug"
|
||||
resValue "string", "AppName", "Santoku (Debug)"
|
||||
buildConfigField "String", "COMMIT", "\"" + commit + "\""
|
||||
ndk {
|
||||
debugSymbolLevel 'NONE'
|
||||
@@ -67,7 +69,7 @@ android {
|
||||
cmake {
|
||||
path file('CMakeLists.txt')
|
||||
}
|
||||
ndkVersion "23.1.7779620"
|
||||
ndkVersion "29.0.14206865"
|
||||
}
|
||||
|
||||
buildFeatures {
|
||||
@@ -76,7 +78,9 @@ android {
|
||||
|
||||
applicationVariants.all { variant ->
|
||||
variant.outputs.all {
|
||||
outputFileName = "Santoku_" + commit + ".apk"
|
||||
def isDebug = variant.buildType.name == "debug"
|
||||
def suffix = isDebug ? "_debug" : ""
|
||||
outputFileName = "Santoku_" + commit + suffix + ".apk"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -151,6 +155,8 @@ def toolchainFile = "${ndkDir}/build/cmake/android.toolchain.cmake"
|
||||
def wslExe = "${System.getenv("SystemRoot") ?: "C:/Windows"}/System32/wsl.exe"
|
||||
def prebuiltTag = isWindows ? "windows-x86_64" : (isMac ? "darwin-x86_64" : "linux-x86_64")
|
||||
def llvmBinDir = "${ndkDir}/toolchains/llvm/prebuilt/${prebuiltTag}/bin"
|
||||
def pageSizeLinkerFlags = "-Wl,-z,common-page-size=16384 -Wl,-z,max-page-size=16384"
|
||||
def forceNativeRebuild = project.hasProperty("forceNativeRebuild") && project.property("forceNativeRebuild").toString().toLowerCase() == "true"
|
||||
|
||||
def tbbSrc = "${rootDir}/third_party/openvdb-android/tbb-aarch64"
|
||||
def tbbBuildArm64 = "${rootDir}/third_party/openvdb-android/build-tbb-android-21-arm64"
|
||||
@@ -287,6 +293,7 @@ tasks.register("patchBoostForAndroid") {
|
||||
tasks.register("buildTbbArm64") {
|
||||
dependsOn("ensureThirdParty")
|
||||
onlyIf {
|
||||
forceNativeRebuild ||
|
||||
!file("${projectDir}/src/main/jniImports/oneTBB/lib/arm64-v8a/libtbb.a").exists() ||
|
||||
!file("${projectDir}/src/main/jniImports/oneTBB/lib/arm64-v8a/libtbbmalloc.a").exists() ||
|
||||
!file("${projectDir}/src/main/jniLibs/arm64-v8a/libtbb.so").exists() ||
|
||||
@@ -304,6 +311,7 @@ tasks.register("buildTbbArm64") {
|
||||
"-DANDROID_PLATFORM=android-21",
|
||||
"-DANDROID_STL=c++_shared",
|
||||
"-DCMAKE_BUILD_TYPE=Release",
|
||||
"-DCMAKE_SHARED_LINKER_FLAGS=${pageSizeLinkerFlags}",
|
||||
"-DCMAKE_INSTALL_PREFIX=${tbbInstallArm64}",
|
||||
"-DTBB_BUILD_TESTS=Off"
|
||||
}
|
||||
@@ -316,6 +324,7 @@ tasks.register("buildTbbArm64") {
|
||||
tasks.register("buildTbbArmv7") {
|
||||
dependsOn("ensureThirdParty")
|
||||
onlyIf {
|
||||
forceNativeRebuild ||
|
||||
!file("${projectDir}/src/main/jniImports/oneTBB/lib/armeabi-v7a/libtbb.a").exists() ||
|
||||
!file("${projectDir}/src/main/jniImports/oneTBB/lib/armeabi-v7a/libtbbmalloc.a").exists() ||
|
||||
!file("${projectDir}/src/main/jniLibs/armeabi-v7a/libtbb.so").exists() ||
|
||||
@@ -333,6 +342,7 @@ tasks.register("buildTbbArmv7") {
|
||||
"-DANDROID_PLATFORM=android-21",
|
||||
"-DANDROID_STL=c++_shared",
|
||||
"-DCMAKE_BUILD_TYPE=Release",
|
||||
"-DCMAKE_SHARED_LINKER_FLAGS=${pageSizeLinkerFlags}",
|
||||
"-DCMAKE_INSTALL_PREFIX=${tbbInstallArmv7}",
|
||||
"-DTBB_BUILD_TESTS=Off"
|
||||
}
|
||||
@@ -345,6 +355,7 @@ tasks.register("buildTbbArmv7") {
|
||||
tasks.register("copyTbbArm64", Copy) {
|
||||
dependsOn("buildTbbArm64")
|
||||
onlyIf {
|
||||
forceNativeRebuild ||
|
||||
!file("${projectDir}/src/main/jniImports/oneTBB/lib/arm64-v8a/libtbb.a").exists() ||
|
||||
!file("${projectDir}/src/main/jniImports/oneTBB/lib/arm64-v8a/libtbbmalloc.a").exists() ||
|
||||
!file("${projectDir}/src/main/jniLibs/arm64-v8a/libtbb.so").exists() ||
|
||||
@@ -383,6 +394,7 @@ tasks.register("copyTbbArm64", Copy) {
|
||||
tasks.register("copyTbbArmv7", Copy) {
|
||||
dependsOn("buildTbbArmv7")
|
||||
onlyIf {
|
||||
forceNativeRebuild ||
|
||||
!file("${projectDir}/src/main/jniImports/oneTBB/lib/armeabi-v7a/libtbb.a").exists() ||
|
||||
!file("${projectDir}/src/main/jniImports/oneTBB/lib/armeabi-v7a/libtbbmalloc.a").exists() ||
|
||||
!file("${projectDir}/src/main/jniLibs/armeabi-v7a/libtbb.so").exists() ||
|
||||
@@ -504,7 +516,7 @@ tasks.register("copyBoostHeaders", Copy) {
|
||||
|
||||
tasks.register("buildOcctArm64") {
|
||||
dependsOn("ensureThirdParty")
|
||||
onlyIf { !file("${projectDir}/src/main/occt/jniLibs/arm64-v8a/libTKDESTEP.so").exists() }
|
||||
onlyIf { forceNativeRebuild || !file("${projectDir}/src/main/occt/jniLibs/arm64-v8a/libTKDESTEP.so").exists() }
|
||||
doLast {
|
||||
exec {
|
||||
commandLine cmakeExe, "-G", "Ninja",
|
||||
@@ -516,6 +528,7 @@ tasks.register("buildOcctArm64") {
|
||||
"-DANDROID_PLATFORM=android-21",
|
||||
"-DCMAKE_BUILD_TYPE=Release",
|
||||
"-DBUILD_LIBRARY_TYPE=Shared",
|
||||
"-DCMAKE_SHARED_LINKER_FLAGS=${pageSizeLinkerFlags}",
|
||||
"-DINSTALL_DIR_LIB=libs/arm64-v8a",
|
||||
"-DINSTALL_DIR_INCLUDE=inc",
|
||||
"-DBUILD_DOC_Overview=OFF",
|
||||
@@ -533,7 +546,7 @@ tasks.register("buildOcctArm64") {
|
||||
|
||||
tasks.register("buildOcctArmv7") {
|
||||
dependsOn("ensureThirdParty")
|
||||
onlyIf { !file("${projectDir}/src/main/occt/jniLibs/armeabi-v7a/libTKDESTEP.so").exists() }
|
||||
onlyIf { forceNativeRebuild || !file("${projectDir}/src/main/occt/jniLibs/armeabi-v7a/libTKDESTEP.so").exists() }
|
||||
doLast {
|
||||
exec {
|
||||
commandLine cmakeExe, "-G", "Ninja",
|
||||
@@ -545,6 +558,7 @@ tasks.register("buildOcctArmv7") {
|
||||
"-DANDROID_PLATFORM=android-21",
|
||||
"-DCMAKE_BUILD_TYPE=Release",
|
||||
"-DBUILD_LIBRARY_TYPE=Shared",
|
||||
"-DCMAKE_SHARED_LINKER_FLAGS=${pageSizeLinkerFlags}",
|
||||
"-DINSTALL_DIR_LIB=libs/armeabi-v7a",
|
||||
"-DINSTALL_DIR_INCLUDE=inc",
|
||||
"-DBUILD_DOC_Overview=OFF",
|
||||
@@ -562,7 +576,7 @@ tasks.register("buildOcctArmv7") {
|
||||
|
||||
tasks.register("copyOcctArm64", Copy) {
|
||||
dependsOn("buildOcctArm64")
|
||||
onlyIf { !file("${projectDir}/src/main/occt/jniLibs/arm64-v8a/libTKDESTEP.so").exists() }
|
||||
onlyIf { forceNativeRebuild || !file("${projectDir}/src/main/occt/jniLibs/arm64-v8a/libTKDESTEP.so").exists() }
|
||||
from("${occtDistArm64}/libs/arm64-v8a") {
|
||||
include "*.so"
|
||||
}
|
||||
@@ -571,7 +585,7 @@ tasks.register("copyOcctArm64", Copy) {
|
||||
|
||||
tasks.register("copyOcctArmv7", Copy) {
|
||||
dependsOn("buildOcctArmv7")
|
||||
onlyIf { !file("${projectDir}/src/main/occt/jniLibs/armeabi-v7a/libTKDESTEP.so").exists() }
|
||||
onlyIf { forceNativeRebuild || !file("${projectDir}/src/main/occt/jniLibs/armeabi-v7a/libTKDESTEP.so").exists() }
|
||||
from("${occtDistArmv7}/libs/armeabi-v7a") {
|
||||
include "*.so"
|
||||
}
|
||||
|
||||
@@ -18,4 +18,8 @@
|
||||
|
||||
# If you keep the line number information, uncomment this to
|
||||
# hide the original source file name.
|
||||
#-renamesourcefileattribute SourceFile
|
||||
#-renamesourcefileattribute SourceFile
|
||||
|
||||
# Keep cloud API and SAPIL runtime proxies.
|
||||
-keep class com.dark98.santoku.cloud.** { *; }
|
||||
-keep class ru.ytkab0bp.sapil.** { *; }
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
android:allowBackup="true"
|
||||
android:dataExtractionRules="@xml/data_extraction_rules"
|
||||
android:fullBackupContent="@xml/backup_rules"
|
||||
android:icon="@mipmap/icon"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/AppName"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/Theme.Santoku"
|
||||
@@ -59,7 +59,7 @@
|
||||
<activity android:name=".SetupActivity" android:exported="false"/>
|
||||
<activity android:name=".SafeStartActivity" android:exported="false"/>
|
||||
<provider
|
||||
android:authorities="com.dark98.santoku.provider"
|
||||
android:authorities="${applicationId}.provider"
|
||||
android:name="androidx.core.content.FileProvider"
|
||||
android:grantUriPermissions="true"
|
||||
android:exported="false">
|
||||
|
||||
|
After Width: | Height: | Size: 6.8 KiB |
@@ -898,9 +898,14 @@ public class SetupActivity extends AppCompatActivity {
|
||||
Toast.makeText(ctx, R.string.SettingsCloudManageSignUpMissingFields, Toast.LENGTH_SHORT).show();
|
||||
return;
|
||||
}
|
||||
CloudAPI api = CloudController.getApiSafe();
|
||||
if (api == null) {
|
||||
Toast.makeText(ctx, R.string.SettingsCloudManageSignUpFailed, Toast.LENGTH_SHORT).show();
|
||||
return;
|
||||
}
|
||||
signUpInProgress = true;
|
||||
bindLoginButton(true);
|
||||
CloudAPI.INSTANCE.signup(email, password, displayName, new APICallback<CloudAPI.AuthToken>() {
|
||||
api.signup(email, password, displayName, new APICallback<CloudAPI.AuthToken>() {
|
||||
@Override
|
||||
public void onResponse(CloudAPI.AuthToken response) {
|
||||
Prefs.setCloudAPIToken(response.bearer);
|
||||
|
||||
@@ -6,7 +6,13 @@ import com.dark98.santoku.BuildConfig;
|
||||
public class EventBusTask extends BootTask {
|
||||
|
||||
public EventBusTask() {
|
||||
super(() -> EventBus.registerImpl(BuildConfig.APPLICATION_ID));
|
||||
super(() -> {
|
||||
String appId = BuildConfig.APPLICATION_ID;
|
||||
if (BuildConfig.DEBUG && appId.endsWith(".debug")) {
|
||||
appId = appId.substring(0, appId.length() - ".debug".length());
|
||||
}
|
||||
EventBus.registerImpl(appId);
|
||||
});
|
||||
onWorker();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,6 +38,11 @@ public interface CloudAPI extends APIRunner {
|
||||
}
|
||||
return headers;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ru.ytkab0bp.sapil.util.Pair<String, String> getNamingTransformPolicy() {
|
||||
return null;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
|
||||
@@ -51,7 +51,14 @@ public class CloudController {
|
||||
private static Runnable loginCheck = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
CloudAPI.INSTANCE.loginCheck(loginSessionId, new APICallback<CloudAPI.LoginState>() {
|
||||
CloudAPI api = getApiSafe();
|
||||
if (api == null) {
|
||||
loginSessionId = null;
|
||||
isLoggingIn = false;
|
||||
Santoku.EVENT_BUS.fireEvent(new CloudLoginStateUpdatedEvent());
|
||||
return;
|
||||
}
|
||||
api.loginCheck(loginSessionId, new APICallback<CloudAPI.LoginState>() {
|
||||
@Override
|
||||
public void onResponse(CloudAPI.LoginState response) {
|
||||
if (response.loggedIn) {
|
||||
@@ -77,6 +84,15 @@ public class CloudController {
|
||||
|
||||
private static Gson gson = new Gson();
|
||||
|
||||
public static CloudAPI getApiSafe() {
|
||||
try {
|
||||
return CloudAPI.INSTANCE;
|
||||
} catch (Throwable t) {
|
||||
Log.e(TAG, "Cloud API unavailable", t);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static void initCached() {
|
||||
if (Prefs.getCloudAPIToken() != null) {
|
||||
if (Prefs.getCloudCachedUserInfo() != null) {
|
||||
@@ -101,7 +117,11 @@ public class CloudController {
|
||||
}
|
||||
|
||||
private static void loadUserInfo() {
|
||||
CloudAPI.INSTANCE.userGetInfo(new APICallback<CloudAPI.UserInfo>() {
|
||||
CloudAPI api = getApiSafe();
|
||||
if (api == null) {
|
||||
return;
|
||||
}
|
||||
api.userGetInfo(new APICallback<CloudAPI.UserInfo>() {
|
||||
@Override
|
||||
public void onResponse(CloudAPI.UserInfo response) {
|
||||
userInfo = response;
|
||||
@@ -145,7 +165,13 @@ public class CloudController {
|
||||
}
|
||||
|
||||
private static void beginLogin0() {
|
||||
beginLoginHandle = CloudAPI.INSTANCE.loginBegin(new APICallback<CloudAPI.LoginData>() {
|
||||
CloudAPI api = getApiSafe();
|
||||
if (api == null) {
|
||||
isLoggingIn = false;
|
||||
Santoku.EVENT_BUS.fireEvent(new CloudLoginStateUpdatedEvent());
|
||||
return;
|
||||
}
|
||||
beginLoginHandle = api.loginBegin(new APICallback<CloudAPI.LoginData>() {
|
||||
@Override
|
||||
public void onResponse(CloudAPI.LoginData response) {
|
||||
loginSessionId = response.sessionId;
|
||||
@@ -172,7 +198,10 @@ public class CloudController {
|
||||
isLoggingIn = false;
|
||||
Santoku.EVENT_BUS.fireEvent(new CloudLoginStateUpdatedEvent());
|
||||
if (loginSessionId != null) {
|
||||
CloudAPI.INSTANCE.loginCancel(loginSessionId, response -> {});
|
||||
CloudAPI api = getApiSafe();
|
||||
if (api != null) {
|
||||
api.loginCancel(loginSessionId, response -> {});
|
||||
}
|
||||
}
|
||||
if (beginLoginHandle != null && beginLoginHandle.isRunning()) {
|
||||
beginLoginHandle.cancel();
|
||||
@@ -184,7 +213,10 @@ public class CloudController {
|
||||
}
|
||||
|
||||
public static void logout() {
|
||||
CloudAPI.INSTANCE.logout(response -> {});
|
||||
CloudAPI api = getApiSafe();
|
||||
if (api != null) {
|
||||
api.logout(response -> {});
|
||||
}
|
||||
Prefs.setCloudAPIToken(null);
|
||||
userInfo = null;
|
||||
Santoku.EVENT_BUS.fireEvent(new CloudLoginStateUpdatedEvent());
|
||||
@@ -204,7 +236,12 @@ public class CloudController {
|
||||
}
|
||||
|
||||
private static void downloadData(long lastModified) {
|
||||
CloudAPI.INSTANCE.syncGet(new APICallback<String>() {
|
||||
CloudAPI api = getApiSafe();
|
||||
if (api == null) {
|
||||
isSyncInProgress = false;
|
||||
return;
|
||||
}
|
||||
api.syncGet(new APICallback<String>() {
|
||||
@Override
|
||||
public void onResponse(String response) {
|
||||
IOUtils.IO_POOL.submit(() -> {
|
||||
@@ -251,11 +288,15 @@ public class CloudController {
|
||||
if (isSyncInProgress) {
|
||||
return;
|
||||
}
|
||||
CloudAPI api = getApiSafe();
|
||||
if (api == null) {
|
||||
return;
|
||||
}
|
||||
long modified = Prefs.getCloudLocalLastModified();
|
||||
isSyncInProgress = true;
|
||||
Santoku.EVENT_BUS.fireEvent(new NeedSnackbarEvent(SnackbarsLayout.Type.LOADING, R.string.CloudSyncInProgress).tag(CLOUD_SYNC_TAG));
|
||||
|
||||
CloudAPI.INSTANCE.syncGetState(new APICallback<CloudAPI.SyncState>() {
|
||||
api.syncGetState(new APICallback<CloudAPI.SyncState>() {
|
||||
@Override
|
||||
public void onResponse(CloudAPI.SyncState response) {
|
||||
if (Santoku.CONFIG == null && response.usedSize != 0) {
|
||||
@@ -324,7 +365,12 @@ public class CloudController {
|
||||
bos.close();
|
||||
fis.close();
|
||||
|
||||
CloudAPI.INSTANCE.syncUpload(Base64.encodeToString(bos.toByteArray(), Base64.NO_WRAP), "application/ini", new APICallback<CloudAPI.SyncState>() {
|
||||
CloudAPI api = getApiSafe();
|
||||
if (api == null) {
|
||||
isSyncInProgress = false;
|
||||
return;
|
||||
}
|
||||
api.syncUpload(Base64.encodeToString(bos.toByteArray(), Base64.NO_WRAP), "application/ini", new APICallback<CloudAPI.SyncState>() {
|
||||
@Override
|
||||
public void onResponse(CloudAPI.SyncState response) {
|
||||
isSyncInProgress = false;
|
||||
|
||||
@@ -81,7 +81,7 @@ public class ConfigObject implements ProfileListFragment.ProfileListItem {
|
||||
|
||||
public String serialize() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("# generated by Slice Beam ").append(BuildConfig.VERSION_NAME).append("\n\n");
|
||||
sb.append("# generated by Santoku ").append(BuildConfig.VERSION_NAME).append("\n\n");
|
||||
for (Map.Entry<String, String> en : values.entrySet()) {
|
||||
String value = en.getValue();
|
||||
if (value != null) {
|
||||
|
||||
@@ -214,7 +214,7 @@ public class Slic3rConfigWrapper {
|
||||
|
||||
public String serialize() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("# generated by Slice Beam ").append(BuildConfig.VERSION_NAME).append("\n\n");
|
||||
sb.append("# generated by Santoku ").append(BuildConfig.VERSION_NAME).append("\n\n");
|
||||
serializeList(sb, "printer", printerConfigs);
|
||||
serializeList(sb, "print", printConfigs);
|
||||
serializeList(sb, "filament", filamentConfigs);
|
||||
|
||||
@@ -71,7 +71,7 @@ public class Slic3rLocalization {
|
||||
}
|
||||
|
||||
private static String replaceStr(String val) {
|
||||
return val.replace("\\n", "\n").replaceAll("\\\\(.)", "$1").replace("Slic3r", "Slice Beam").replace("PrusaSlicer", "Slice Beam");
|
||||
return val.replace("\\n", "\n").replaceAll("\\\\(.)", "$1").replace("Slic3r", "Santoku").replace("PrusaSlicer", "Santoku");
|
||||
}
|
||||
|
||||
public static String getString(String key) {
|
||||
|
||||
@@ -553,7 +553,7 @@ public:
|
||||
traits.intersection(query, singleton_data());
|
||||
break;
|
||||
default: // if(size() >= 2)
|
||||
root_node()->template traversal_with_priority_and_group_traversal(m_primitives, query, traits, m_primitives.size(), 0, group_traversal_bound);
|
||||
root_node()->traversal_with_priority_and_group_traversal(m_primitives, query, traits, m_primitives.size(), 0, group_traversal_bound);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -221,7 +221,7 @@ public:
|
||||
|
||||
operator bool_type() const
|
||||
{
|
||||
return (! (this->base() == nullptr)) ?
|
||||
return (g != nullptr) ?
|
||||
&Halfedge_around_source_iterator::this_type_does_not_support_comparisons : 0;
|
||||
}
|
||||
|
||||
@@ -321,7 +321,7 @@ public:
|
||||
|
||||
operator bool_type() const
|
||||
{
|
||||
return (! (this->base() == nullptr)) ?
|
||||
return (g != nullptr) ?
|
||||
&Halfedge_around_target_iterator::this_type_does_not_support_comparisons : 0;
|
||||
}
|
||||
|
||||
@@ -420,7 +420,7 @@ public:
|
||||
|
||||
operator bool_type() const
|
||||
{
|
||||
return (! (this->base() == nullptr)) ?
|
||||
return (g != nullptr) ?
|
||||
&Halfedge_around_face_iterator::this_type_does_not_support_comparisons : 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -71,7 +71,7 @@ template<class T, class TT = T> using WritableDataStoreOnly = std::enable_if_t<I
|
||||
template<class T, class ArrItem>
|
||||
void set_data(ArrItem &itm, const std::string &key, T &&data)
|
||||
{
|
||||
WritableDataStoreTraits<ArrItem>::template set(itm, key, std::forward<T>(data));
|
||||
WritableDataStoreTraits<ArrItem>::set(itm, key, std::forward<T>(data));
|
||||
}
|
||||
|
||||
template<class T> constexpr bool IsReadWritableDataStore = IsDataStore<T> && IsWritableDataStore<T>;
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#include <algorithm>
|
||||
#include <iterator>
|
||||
#include <list>
|
||||
#include <functional>
|
||||
|
||||
#include "linalg.h"
|
||||
|
||||
@@ -36,7 +37,7 @@ public:
|
||||
friend ostream & operator << (ostream &, RCTrial) ;
|
||||
};
|
||||
|
||||
class TrialGT : public unary_function<Trial, bool>
|
||||
class TrialGT
|
||||
// Predicate for Trial (needed for remove_if)
|
||||
{
|
||||
public:
|
||||
|
||||
@@ -327,7 +327,7 @@ private:
|
||||
void operator()(const NodeRange& range) const
|
||||
{
|
||||
for (typename NodeRange::Iterator it = range.begin(); it; ++it) {
|
||||
OpT::template eval(mNodeOp, it);
|
||||
OpT::eval(mNodeOp, it);
|
||||
}
|
||||
}
|
||||
const NodeOp mNodeOp;
|
||||
@@ -347,7 +347,7 @@ private:
|
||||
void operator()(const NodeRange& range) const
|
||||
{
|
||||
for (typename NodeRange::Iterator it = range.begin(); it; ++it) {
|
||||
OpT::template eval(mNodeOp, it);
|
||||
OpT::eval(mNodeOp, it);
|
||||
}
|
||||
}
|
||||
const NodeOp& mNodeOp;
|
||||
@@ -372,7 +372,7 @@ private:
|
||||
void operator()(const NodeRange& range)
|
||||
{
|
||||
for (typename NodeRange::Iterator it = range.begin(); it; ++it) {
|
||||
OpT::template eval(*mNodeOp, it);
|
||||
OpT::eval(*mNodeOp, it);
|
||||
}
|
||||
}
|
||||
void join(const NodeReducer& other)
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
*/
|
||||
|
||||
#include "gzguts.h"
|
||||
#include <unistd.h>
|
||||
|
||||
#if defined(_WIN32) && !defined(__BORLANDC__)
|
||||
# define LSEEK _lseeki64
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
*/
|
||||
|
||||
#include "gzguts.h"
|
||||
#include <unistd.h>
|
||||
|
||||
/* Use read() to load a buffer -- return -1 on error, otherwise 0. Read from
|
||||
state->fd, and update state->eof, state->err, and state->msg as appropriate.
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
*/
|
||||
|
||||
#include "gzguts.h"
|
||||
#include <unistd.h>
|
||||
|
||||
/* Initialize state for writing a gzip file. Mark initialization by setting
|
||||
state->size to non-zero. Return -1 on a memory allocation failure, or 0 on
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="#000000">
|
||||
<group android:scaleX="0.696"
|
||||
android:scaleY="0.696"
|
||||
android:translateX="3.648"
|
||||
android:translateY="3.648">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M19,8L5,8c-1.66,0 -3,1.34 -3,3v6h4v4h12v-4h4v-6c0,-1.66 -1.34,-3 -3,-3zM16,19L8,19v-5h8v5zM19,12c-0.55,0 -1,-0.45 -1,-1s0.45,-1 1,-1 1,0.45 1,1 -0.45,1 -1,1zM18,3L6,3v4h12L18,3z"/>
|
||||
</group>
|
||||
</vector>
|
||||
|
Before Width: | Height: | Size: 4.6 KiB |
|
Before Width: | Height: | Size: 113 KiB |
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/ic_launcher_background"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
||||
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/ic_launcher_background"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
||||
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
@@ -1,4 +0,0 @@
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<foreground android:drawable="@drawable/icon_adaptive_foreground"/>
|
||||
<background android:drawable="@drawable/icon_adaptive_background"/>
|
||||
</adaptive-icon>
|
||||
|
After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 6.9 KiB |
|
After Width: | Height: | Size: 6.9 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 113 KiB |
@@ -140,7 +140,7 @@
|
||||
<string name="IntroConfigured">Похоже всё настроено.\nПросто нажмите завершить!</string>
|
||||
<string name="IntroFinish">Завершить</string>
|
||||
<string name="IntroEarlyAccess">Ранний доступ</string>
|
||||
<string name="IntroEarlyAccessMessage">Вы используете ранний доступ Slice Beam.\nПожалуйста обратите внимание, что некоторые функции могут быть недоступны, содержать ошибки или работать не так, как ожидается.\nДля получения новостей о приложении подпишитесь на Telegram-канал разработчика.</string>
|
||||
<string name="IntroEarlyAccessMessage">Вы используете ранний доступ Santoku.\nОбратите внимание, что некоторые функции могут быть недоступны, содержать ошибки или работать не так, как ожидается.</string>
|
||||
<string name="SettingsResetToDefault">Сбросить настройки по-умолчанию</string>
|
||||
<string name="SettingsResetToDefaultTitle">Вы уверены?</string>
|
||||
<string name="SettingsResetToDefaultDescription">Это действие не может быть отменено.</string>
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="ic_launcher_background">#DC3D3D</color>
|
||||
</resources>
|
||||
@@ -140,7 +140,7 @@
|
||||
<string name="IntroConfigured">All seems to be configured.\nJust tap finish!</string>
|
||||
<string name="IntroFinish">Finish</string>
|
||||
<string name="IntroEarlyAccess">Early access</string>
|
||||
<string name="IntroEarlyAccessMessage">You are using an Early Access of Slice Beam.\nPlease note that some features may be unavailable, buggy or work not as expected.\nPlease subscribe to developer\'s Telegram for app\'s news.</string>
|
||||
<string name="IntroEarlyAccessMessage">You are using an Early Access of Santoku.\nPlease note that some features may be unavailable, buggy or work not as expected.</string>
|
||||
<string name="SettingsResetToDefault">Reset to defaults</string>
|
||||
<string name="SettingsResetToDefaultTitle">Are you sure?</string>
|
||||
<string name="SettingsResetToDefaultDescription">This action can not be undone.</string>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<style name="Base.Theme.Santoku" parent="Theme.Material3.Light.NoActionBar">
|
||||
<item name="android:windowBackground">#FFF</item>
|
||||
<item name="android:windowSplashScreenAnimatedIcon" tools:targetApi="s">@drawable/icon_adaptive_foreground</item>
|
||||
<item name="android:windowSplashScreenAnimatedIcon" tools:targetApi="s">@drawable/ic_launcher_foreground</item>
|
||||
<item name="android:windowSplashScreenIconBackgroundColor" tools:targetApi="s">#3A3A3A</item>
|
||||
<item name="android:enforceNavigationBarContrast" tools:targetApi="q">false</item>
|
||||
<item name="android:forceDarkAllowed" tools:targetApi="q">false</item>
|
||||
|
||||
@@ -38,7 +38,7 @@ if (hasSubmodules && missingSubmodule) {
|
||||
}
|
||||
}
|
||||
|
||||
rootProject.name = "Slice Beam"
|
||||
rootProject.name = "Santoku"
|
||||
include ':app', ':eventbus', ':eventbus_api', ':eventbus_processor', ':sapil'
|
||||
|
||||
project(':eventbus').projectDir = file('EventBus/eventbus')
|
||||
|
||||