Skip to content

Commit 8d1f0ab

Browse files
authored
Merge pull request #5 from ALiceYuko/master
update 7.3
2 parents 92bf84c + 3e729be commit 8d1f0ab

File tree

212 files changed

+4057
-156
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

212 files changed

+4057
-156
lines changed

.gitignore

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,18 @@
22
# Created by https://www.gitignore.io/api/oc,macos
33
# Edit at https://www.gitignore.io/?templates=oc,macos
44

5+
*.xcuserstate
6+
*.DS_Store
7+
58
build/
69
bin/
710
x64/
811

12+
FULivePC/MAC_DATA/Info.plist
13+
FULivePC/MAC_DATA/ResPic.bundle
14+
FULivePC/MAC_DATA/Resource.bundle
15+
16+
917
### macOS ###
1018
# General
1119
.DS_Store

CMakeLists.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
cmake_minimum_required(VERSION 3.5)
2-
2+
# 解决 Xcode 12 cmake 构建失败的问题
3+
if(APPLE)
4+
set(CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD_64_BIT)")
5+
endif()
36
project(FULivePC)
47
add_subdirectory(FULivePC)
58

FULivePC/CMakeLists.txt

Lines changed: 50 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@ cmake_minimum_required(VERSION 3.5)
22
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.12" CACHE STRING "Minimum OS X deployment version" FORCE)
33
project(FULivePC)
44
set(target FULivePC)
5-
set(CMAKE_CXX_STANDARD 11)
5+
set(CMAKE_CXX_STANDARD 14)
66

7-
message(${CMAKE_SIZEOF_VOID_P})
87

98
if(WIN32)
109
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_LIST_DIR}/../ThirdParty/Windows/cmakeScripts/Modules)
@@ -75,14 +74,18 @@ endif()
7574
if(WIN32)
7675
set(${target}_COMMON
7776
common/fu_tool.cpp
78-
../include/common/fu_tool.h
77+
../include/common/fu_tool.h
78+
common/fu_shared_obj.cpp
79+
../include/common/fu_shared_obj.h
7980
)
8081
else()
8182
set(${target}_COMMON
8283
common/fu_tool.cpp
8384
../include/common/fu_tool.h
8485
../include/common/fu_tool_mac.h
8586
common/fu_tool_mac.mm
87+
common/fu_shared_obj.cpp
88+
../include/common/fu_shared_obj.h
8689
)
8790
endif()
8891

@@ -106,6 +109,8 @@ set(${target}_GUI
106109
GUI/Texture.h
107110
GUI/MouseControl.cpp
108111
GUI/MouseControl.h
112+
GUI/GuiCustomMakeup.cpp
113+
GUI/GuiCustomMakeup.h
109114
)
110115

111116
set(${target}_IMGUI
@@ -219,7 +224,11 @@ import_custom_library(${target} FreeImage)
219224
import_custom_library(${target} Glfw)
220225
import_custom_library(${target} ffmpeg)
221226

227+
222228
if(WIN32)
229+
230+
import_custom_library(${target} VirtualCamera)
231+
223232
# set_target_properties(${target} PROPERTIES COMPILE_FLAGS "/MP" )
224233
set_target_properties(${target} PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_CURRENT_LIST_DIR}/../")
225234

@@ -229,16 +238,22 @@ if(WIN32)
229238
set(SrcOpenCVDLLFolder ${CMAKE_CURRENT_LIST_DIR}/../ThirdParty/Windows/opencv400/lib/win32)
230239
set(SrcOpenCVDLLFileFFmpeg ${CMAKE_CURRENT_LIST_DIR}/../ThirdParty/Windows/opencv400/lib/win32/opencv_ffmpeg400.dll)
231240
set(SrcFfmpegDLLFolder ${CMAKE_CURRENT_LIST_DIR}/../ThirdParty/Windows/ffmpeg/lib/win32)
241+
set(SrcVirtualDLLFolder ${CMAKE_CURRENT_LIST_DIR}/../ThirdParty/Windows/VirtualCamera/lib/win32)
232242
else()
233243
set(SrcNamaDLLFolder ${CMAKE_CURRENT_LIST_DIR}/../ThirdParty/Windows/FaceUnity-SDK-PC/lib/win64)
234244
set(SrcFreeImageDLLFolder ${CMAKE_CURRENT_LIST_DIR}/../ThirdParty/Windows/FreeImage/lib/win64)
235245
set(SrcOpenCVDLLFolder ${CMAKE_CURRENT_LIST_DIR}/../ThirdParty/Windows/opencv400/lib/win64)
236246
set(SrcOpenCVDLLFileFFmpeg ${CMAKE_CURRENT_LIST_DIR}/../ThirdParty/Windows/opencv400/lib/win64/opencv_ffmpeg400_64.dll)
237247
set(SrcFfmpegDLLFolder ${CMAKE_CURRENT_LIST_DIR}/../ThirdParty/Windows/ffmpeg/lib/win64)
248+
set(SrcVirtualDLLFolder ${CMAKE_CURRENT_LIST_DIR}/../ThirdParty/Windows/VirtualCamera/lib/win64)
238249
endif()
239250

240251
add_custom_command(TARGET ${target}
241252
POST_BUILD
253+
254+
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
255+
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG}
256+
242257
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SrcNamaDLLFolder}/fuai.dll ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
243258
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SrcNamaDLLFolder}/CNamaSDK.dll ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
244259
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SrcFreeImageDLLFolder}/FreeImage.dll ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
@@ -249,6 +264,9 @@ if(WIN32)
249264
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SrcFfmpegDLLFolder}/avformat-58.dll ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
250265
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SrcFfmpegDLLFolder}/avcodec-58.dll ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
251266
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SrcFfmpegDLLFolder}/swresample-3.dll ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
267+
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SrcFfmpegDLLFolder}/libwinpthread-1.dll ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
268+
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SrcVirtualDLLFolder}/VirtualCamera.dll ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
269+
252270

253271
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SrcNamaDLLFolder}/fuai.dll ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG}
254272
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SrcNamaDLLFolder}/CNamaSDK.dll ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG}
@@ -261,20 +279,12 @@ if(WIN32)
261279
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SrcFfmpegDLLFolder}/avformat-58.dll ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG}
262280
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SrcFfmpegDLLFolder}/avcodec-58.dll ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG}
263281
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SrcFfmpegDLLFolder}/swresample-3.dll ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG}
264-
282+
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SrcFfmpegDLLFolder}/libwinpthread-1.dll ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG}
283+
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SrcVirtualDLLFolder}/VirtualCamera.dll ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG}
265284

266285
COMMENT "copy dll"
267286
)
268287

269-
if(${CMAKE_SIZEOF_VOID_P} EQUAL 8)
270-
add_custom_command(TARGET ${target}
271-
POST_BUILD
272-
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SrcFfmpegDLLFolder}/libwinpthread-1.dll ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
273-
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SrcFfmpegDLLFolder}/libwinpthread-1.dll ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG}
274-
COMMENT "copy x64 ffmpeg libs"
275-
)
276-
endif()
277-
278288
elseif(APPLE)
279289

280290
target_link_libraries(${target}
@@ -301,6 +311,7 @@ elseif(APPLE)
301311
set_target_properties(${target} PROPERTIES
302312
MACOSX_BUNDLE TRUE
303313
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_LIST_DIR}/MAC_DATA/Info.plist
314+
XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH[variant=Debug] "YES"
304315
XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "Developer ID Application: Faceunity Technology Co., Ltd. (35A6KD62ZJ)"
305316
XCODE_ATTRIBUTE_OTHER_CODE_SIGN_FLAGS "--deep"
306317
XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "com.faceunity.FULiveMac"
@@ -309,37 +320,34 @@ elseif(APPLE)
309320

310321
set( MacOS_APP_Content "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/FULivePC.app/Contents")
311322

312-
# 如果不存在则创建,用于工程第一次运行的时候
313-
if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/MAC_DATA/Resource.bundle")
314-
else()
315-
file(COPY ${CMAKE_CURRENT_LIST_DIR}/../assets DESTINATION ${CMAKE_CURRENT_LIST_DIR}/MAC_DATA/Resource.bundle)
316-
file(COPY ${CMAKE_CURRENT_LIST_DIR}/../res/config.json DESTINATION ${CMAKE_CURRENT_LIST_DIR}/MAC_DATA/Resource.bundle)
317-
endif()
318-
if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/MAC_DATA/ResPic.bundle")
319-
else()
320-
file(COPY ${CMAKE_CURRENT_LIST_DIR}/../res DESTINATION ${CMAKE_CURRENT_LIST_DIR}/MAC_DATA/ResPic.bundle)
321-
endif()
322-
323-
add_custom_command(TARGET ${target} PRE_BUILD
324-
#需要先rm Resource.bundle 和 ResPic.bundle,否则删除时,无法刷新
325-
COMMAND ${CMAKE_COMMAND} -E rm -r ${CMAKE_CURRENT_LIST_DIR}/MAC_DATA/Resource.bundle
326-
COMMAND ${CMAKE_COMMAND} -E rm -r ${CMAKE_CURRENT_LIST_DIR}/MAC_DATA/ResPic.bundle
327-
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_LIST_DIR}/../assets ${CMAKE_CURRENT_LIST_DIR}/MAC_DATA/Resource.bundle
328-
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_DIR}/../res/config.json ${CMAKE_CURRENT_LIST_DIR}/MAC_DATA/Resource.bundle
329-
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_LIST_DIR}/../res ${CMAKE_CURRENT_LIST_DIR}/MAC_DATA/ResPic.bundle
330-
COMMAND ${CMAKE_COMMAND} -E make_directory ${MacOS_APP_Content}/Frameworks
331-
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_DIR}/../ThirdParty/Mac/glfw/lib/*.dylib ${MacOS_APP_Content}/Frameworks
332-
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_DIR}/../ThirdParty/Mac/FaceUnity-SDK-Mac/lib/*.dylib ${MacOS_APP_Content}/Frameworks
333-
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_DIR}/../ThirdParty/Mac/Framework/*.dylib ${MacOS_APP_Content}/Frameworks
334-
)
323+
# 如果不存在则创建,用于工程第一次运行的时候
324+
if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/MAC_DATA/Resource.bundle")
325+
else()
326+
file(COPY ${CMAKE_CURRENT_LIST_DIR}/../assets DESTINATION ${CMAKE_CURRENT_LIST_DIR}/MAC_DATA/Resource.bundle)
327+
file(COPY ${CMAKE_CURRENT_LIST_DIR}/../res/config.json DESTINATION ${CMAKE_CURRENT_LIST_DIR}/MAC_DATA/Resource.bundle)
328+
endif()
329+
if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/MAC_DATA/ResPic.bundle")
330+
else()
331+
file(COPY ${CMAKE_CURRENT_LIST_DIR}/../res DESTINATION ${CMAKE_CURRENT_LIST_DIR}/MAC_DATA/ResPic.bundle)
332+
endif()
335333

334+
add_custom_command(TARGET ${target} PRE_BUILD
335+
#需要先rm Resource.bundle 和 ResPic.bundle,否则删除时,无法刷新
336+
COMMAND ${CMAKE_COMMAND} -E rm -r ${CMAKE_CURRENT_LIST_DIR}/MAC_DATA/Resource.bundle
337+
COMMAND ${CMAKE_COMMAND} -E rm -r ${CMAKE_CURRENT_LIST_DIR}/MAC_DATA/ResPic.bundle
338+
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_LIST_DIR}/../assets ${CMAKE_CURRENT_LIST_DIR}/MAC_DATA/Resource.bundle
339+
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_DIR}/../res/config.json ${CMAKE_CURRENT_LIST_DIR}/MAC_DATA/Resource.bundle
340+
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_LIST_DIR}/../res ${CMAKE_CURRENT_LIST_DIR}/MAC_DATA/ResPic.bundle
341+
COMMAND ${CMAKE_COMMAND} -E make_directory ${MacOS_APP_Content}/Frameworks
342+
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_DIR}/../ThirdParty/Mac/glfw/lib/*.dylib ${MacOS_APP_Content}/Frameworks
343+
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_DIR}/../ThirdParty/Mac/FaceUnity-SDK-Mac/lib/*.dylib ${MacOS_APP_Content}/Frameworks
344+
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_DIR}/../ThirdParty/Mac/Framework/*.dylib ${MacOS_APP_Content}/Frameworks
345+
)
336346

337-
set_source_files_properties(${CMAKE_CURRENT_LIST_DIR}/MAC_DATA/ResPic.bundle PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
338-
set_source_files_properties(${CMAKE_CURRENT_LIST_DIR}/MAC_DATA/Resource.bundle PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
339-
set_source_files_properties(${CMAKE_CURRENT_LIST_DIR}/MAC_DATA/AppIcon.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
340347

348+
set_source_files_properties(${CMAKE_CURRENT_LIST_DIR}/MAC_DATA/ResPic.bundle PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
349+
set_source_files_properties(${CMAKE_CURRENT_LIST_DIR}/MAC_DATA/Resource.bundle PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
350+
set_source_files_properties(${CMAKE_CURRENT_LIST_DIR}/MAC_DATA/AppIcon.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
351+
elseif(UNIX)
341352

342-
343-
344-
elseif(UNIX)
345353
endif()

FULivePC/Config.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44
#include <string>
55
using namespace std;
66
#define MAX_NAMA_BUNDLE_NUM 1
7+
#define MAX_NAMA_CM_BUNDLE_NUM 35
78

8-
const string g_faceBeautification = "graphics/face_beautification_v2.bundle";
9+
const string g_faceBeautification = "graphics/face_beautification.bundle";
910

1011
const string g_Makeup = "graphics/face_makeup.bundle";
1112

FULivePC/GUI/Gui.cpp

Lines changed: 57 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,11 @@
1313
#include <stdlib.h>
1414
#include <stdio.h>
1515
#include "imgui/imgui_internal.h"
16+
#include "GuiCustomMakeup.h"
1617
#if __APPLE__
1718
#include "fu_tool_mac.h"
19+
#else
20+
#include "VirtualCamera.h"
1821
#endif
1922
using namespace gui_tool;
2023

@@ -34,6 +37,9 @@ bool UIBridge::showItemTipsWindow = false;
3437
bool UIBridge::showDegubInfoWindow = false;
3538
bool UIBridge::showFilterSlider = false;
3639
int UIBridge::showGreenScreen = false;
40+
bool UIBridge::showCustomMakeup = false;
41+
42+
3743
uint32_t UIBridge::mFPS = 60;
3844
uint32_t UIBridge::mResolutionWidth = 1280;
3945
uint32_t UIBridge::mResolutionHeight = 720;
@@ -292,6 +298,13 @@ static void ShowAvatarTip()
292298
ImGui::End();
293299
}
294300

301+
static void ShowCustomMakeupTip(Nama * nama)
302+
{
303+
304+
GUICustomMakeup::Draw(nama);
305+
306+
}
307+
295308
static void ShowAvatarMenu(Nama * nama)
296309
{
297310
ImGui::PushStyleColor(ImGuiCol_WindowBg, ImVec4(252.f / 255.f, 253.f / 255.f, 255.f / 255.f, 0.0f));
@@ -414,6 +427,8 @@ static void ShowDebugMenu()
414427
}
415428
}
416429

430+
#define MAKEUP_CUSTOM_NAME ("demo_icon_customize.bundle")
431+
417432
static void ShowFloatMenuAR(Nama * nama)
418433
{
419434
ImGui::PushStyleColor(ImGuiCol_WindowBg, ImVec4(252.f / 255.f, 253.f / 255.f, 255.f / 255.f, .70f));
@@ -468,7 +483,25 @@ static void ShowFloatMenuAR(Nama * nama)
468483
UIBridge::showItemTipsWindow = false;
469484
UIBridge::mNeedStopMP3 = true;
470485
}
471-
nama->SelectBundle(gBundlePath[UIBridge::bundleCategory] + "/" + itemName);
486+
487+
if (itemName == MAKEUP_CUSTOM_NAME)
488+
{
489+
UIBridge::showCustomMakeup = true;
490+
nama->UnbindCurFixedMakeup();
491+
}
492+
else
493+
{
494+
if (UIBridge::showCustomMakeup)
495+
{
496+
GUICustomMakeup::Reset(nama);
497+
nama->DestroyAll();
498+
}
499+
500+
UIBridge::showCustomMakeup = false;
501+
nama->SelectBundle(gBundlePath[UIBridge::bundleCategory] + "/" + itemName);
502+
}
503+
504+
472505
}
473506
ImGui::SameLine(0.f, 22.f * scaleRatioW);
474507
}
@@ -893,7 +926,7 @@ void Gui::UpdateFrame(Nama * nama)
893926
m_processedFrame.release();
894927
m_processedFrame = frameMat.clone();
895928

896-
929+
897930
cv::cvtColor(frameMat, m_processedFrame, cv::COLOR_BGR2RGBA);
898931

899932
bool bNeedOri = (Nama::mEnableAvatar && Gui::mIsOpenMiniWindow) || UIBridge::m_bSamplingColor;
@@ -913,13 +946,29 @@ void Gui::UpdateFrame(Nama * nama)
913946
{
914947
m_processedFrame.setTo(150);
915948
}else{
916-
cv::Mat bgra[4];
949+
cv::Mat bgra[4];
917950
cv::split(m_processedFrame, bgra);
918951
bgra[3] = 255.0;
919952
cv::merge(bgra, 4, m_processedFrame);
920953
}
921954

922955
UpdateFrame2Tex(m_processedFrame, m_texIDNamaProcess);
956+
957+
#if _WIN32
958+
959+
if (UIBridge::mNeedIpcWrite)
960+
{
961+
static bool is_create_vc = false;
962+
if (!is_create_vc)
963+
{
964+
createVirturalCamera(0);
965+
is_create_vc = true;
966+
}
967+
pushDataToVirturalCamera(m_processedFrame.data, m_processedFrame.cols, m_processedFrame.rows);
968+
}
969+
970+
#endif
971+
923972
}
924973
}
925974
static void ShowTipStr(string tipStr){
@@ -1015,16 +1064,7 @@ void Gui::ProcessGSSampleClick(Nama * nama)
10151064
if (frameMat.data)
10161065
{
10171066
cv::Point point;
1018-
point.x = (pos.x - window->Pos.x) / CurW * frameMat.cols;
1019-
1020-
auto srcType = nama->GetCameraCaptureType();
1021-
/* 相机输入需要镜像,文件不需要 */
1022-
bool bNeedFlip = srcType != GS_INPUT_TYPE_FILE;
1023-
if (bNeedFlip)
1024-
{
1025-
point.x = frameMat.cols - point.x;
1026-
}
1027-
1067+
point.x = (pos.x - window->Pos.x) / CurW * frameMat.cols;
10281068
point.y = (pos.y - window->Pos.y) / CurH * frameMat.rows;
10291069

10301070
printf("keycolor pos find:(%d,%d) \r\n", point.x, point.y);
@@ -1180,7 +1220,10 @@ void Gui::render(Nama::UniquePtr& nama)
11801220
{
11811221
ShowAvatarTip();
11821222
}
1183-
else
1223+
else if (UIBridge::showCustomMakeup)
1224+
{
1225+
ShowCustomMakeupTip(nama.get());
1226+
}else
11841227
{
11851228
ShowTabs("rightTabs", 0, nama);
11861229
}

0 commit comments

Comments
 (0)