Ansariel 2023-04-22 11:54:28 +02:00
commit 8ffa65d424
28 changed files with 217 additions and 154 deletions

View File

@ -736,9 +736,9 @@
<key>archive</key>
<map>
<key>hash</key>
<string>93db28a4c0185c054e705f7069830bcc</string>
<string>8b79711b4fa914c16f1284939d55dcc1</string>
<key>url</key>
<string>https://3p.firestormviewer.org/colladadom-2.3.230021615-linux64-230021615.tar.bz2</string>
<string>https://3p.firestormviewer.org/colladadom-2.3.230940029-linux64-230940029.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -2056,9 +2056,9 @@
<key>archive</key>
<map>
<key>hash</key>
<string>a01304d63a12ad3d11bde52c47a3134b</string>
<string>d72c6d8db827ce3d83c5703f519a2ac9</string>
<key>url</key>
<string>http://3p.firestormviewer.org/libxml2-2.10.3.230021454-linux64-230021454.tar.bz2</string>
<string>http://3p.firestormviewer.org/libxml2-2.10.3.230940019-linux64-230940019.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -3496,9 +3496,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<key>archive</key>
<map>
<key>hash</key>
<string>684de242071b78042c1837c15496d2b5</string>
<string>71a9c7c03a2c26cdb21fa476de485d9c</string>
<key>url</key>
<string>http://3p.firestormviewer.org/xmlrpc_epi-0.54.2.230021554-linux64-230021554.tar.bz2</string>
<string>http://3p.firestormviewer.org/xmlrpc_epi-0.54.2.230940042-linux64-230940042.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>

View File

@ -1,13 +1,19 @@
# -*- cmake -*-
include_guard()
add_library(fs::discord INTERFACE IMPORTED)
include(Prebuilt)
use_prebuilt_binary(discord-rpc)
set(DISCORD_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/discord-rpc)
if (WINDOWS)
set(DISCORD_LIBRARY discord-rpc)
target_link_libraries(fs::discord INTERFACE discord-rpc)
elseif (LINUX)
set(DISCORD_LIBRARY discord-rpc)
target_link_libraries(fs::discord INTERFACE discord-rpc)
elseif (DARWIN)
set(DISCORD_LIBRARY discord-rpc)
target_link_libraries(fs::discord INTERFACE discord-rpc)
endif (WINDOWS)
target_include_directories(fs::discord SYSTEM INTERFACE
${AUTOBUILD_INSTALL_DIR}/include/discord-rpc
)

View File

@ -19,5 +19,3 @@ target_include_directories( fs::growl SYSTEM INTERFACE
${AUTOBUILD_INSTALL_DIR}/include/Growl
)
endif (DARWIN OR WINDOWS) # <FS:Zi> no need to do these things on Linux
add_compile_definitions(HAS_GROWL)

View File

@ -1,13 +1,9 @@
# -*- cmake -*-
set(CMAKE_VERBOSE_MAKEFILE ON) # <FS:Zi> remove this once things work
# <FS:ND> Try to find pulse header, if we got them we can use the linux volume catcher
if (LINUX)
include(GLIB)
include_directories( ${GLIB_INCLUDE_DIRS} )
foreach( PULSE_FILE pulse/introspect.h pulse/context.h pulse/subscribe.h pulse/glib-mainloop.h )
foreach( PULSE_FILE pulse/introspect.h pulse/context.h pulse/subscribe.h )
find_path( PULSE_FILE_${PULSE_FILE}_FOUND ${PULSE_FILE} NO_CACHE)
if( NOT PULSE_FILE_${PULSE_FILE}_FOUND )
message( "Looking for ${PULSE_FILE} ... not found")

View File

@ -7,8 +7,6 @@ add_library( ll::tracy INTERFACE IMPORTED )
set(USE_TRACY OFF CACHE BOOL "Use Tracy profiler.")
if (USE_TRACY)
set(TRACY_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/tracy)
use_prebuilt_binary(tracy)
target_include_directories( ll::tracy SYSTEM INTERFACE ${LIBS_PREBUILT_DIR}/include/tracy)

View File

@ -534,7 +534,7 @@ void LLDiskCache::removeOldVFSFiles()
}
}
uintmax_t LLDiskCache::dirFileSize(const std::string dir)
uintmax_t LLDiskCache::dirFileSize(const std::string& dir)
{
uintmax_t total_file_size = 0;

View File

@ -164,7 +164,7 @@ class LLDiskCache :
* directory. Primarily used here to determine the directory size
* before and after the cache purge
*/
uintmax_t dirFileSize(const std::string dir);
uintmax_t dirFileSize(const std::string& dir);
/**
* Utility function to convert an LLAssetType enum into a

View File

@ -31,8 +31,6 @@ set(media_plugin_cef_HEADER_FILES
volume_catcher.h
)
if (NOT DISABLE_VOLUME_CATCHER) # <FS:Zi> disable volume catcher in cef with -DDISABLE_VOLUME_CATCHER=TRUE
add_compile_definitions(LL_VOLUME_CATCHER)
# Select which VolumeCatcher implementation to use
@ -54,8 +52,6 @@ elseif (WINDOWS)
list(APPEND media_plugin_cef_SOURCE_FILES windows_volume_catcher.cpp)
endif (LINUX)
endif (NOT DISABLE_VOLUME_CATCHER)
list(APPEND media_plugin_cef_SOURCE_FILES ${media_plugin_cef_HEADER_FILES})
add_library(media_plugin_cef

View File

@ -41,13 +41,11 @@
extern "C" {
#include <glib.h>
#include <glib-object.h>
#include <pulse/introspect.h>
#include <pulse/context.h>
#include <pulse/subscribe.h>
#include <pulse/glib-mainloop.h> // There's no special reason why we want the *glib* PA mainloop, but the generic polling implementation seems broken.
#include <pulse/mainloop.h>
#include "apr_pools.h"
#include "apr_dso.h"
@ -62,7 +60,6 @@ extern "C" {
#define LL_PA_SYM(REQUIRED, PASYM, RTN, ...) RTN (*ll##PASYM)(__VA_ARGS__) = NULL
#include "linux_volume_catcher_pa_syms.inc"
#include "linux_volume_catcher_paglib_syms.inc"
#undef LL_PA_SYM
static bool sSymsGrabbed = false;
@ -94,7 +91,6 @@ bool grab_pa_syms(std::string pulse_dso_name)
INFOMSG("Found DSO: %s", pulse_dso_name.c_str());
#include "linux_volume_catcher_pa_syms.inc"
#include "linux_volume_catcher_paglib_syms.inc"
if ( sSymPADSOHandle )
{
@ -141,7 +137,6 @@ void ungrab_pa_syms()
// NULL-out all of the symbols we'd grabbed
#define LL_PA_SYM(REQUIRED, PASYM, RTN, ...) do{ll##PASYM = NULL;}while(0)
#include "linux_volume_catcher_pa_syms.inc"
#include "linux_volume_catcher_paglib_syms.inc"
#undef LL_PA_SYM
sSymsGrabbed = false;
@ -178,7 +173,7 @@ public:
std::set<U32> mSinkInputIndices;
std::map<U32,U32> mSinkInputNumChannels;
F32 mDesiredVolume;
pa_glib_mainloop *mMainloop;
pa_mainloop *mMainloop;
pa_context *mPAContext;
bool mConnected;
bool mGotSyms;
@ -210,18 +205,14 @@ void VolumeCatcherImpl::init()
// bit fragile and (for our purposes) we'd rather simply not function
// than crash
// we cheat and rely upon libpulse-mainloop-glib.so.0 to pull-in
// libpulse.so.0 - this isn't a great assumption, and the two DSOs should
// probably be loaded separately. Our Linux DSO framework needs refactoring,
// we do this sort of thing a lot with practically identical logic...
mGotSyms = loadsyms("libpulse-mainloop-glib.so.0");
mGotSyms = loadsyms("libpulse.so.0");
if (!mGotSyms) return;
mMainloop = llpa_glib_mainloop_new(g_main_context_default());
mMainloop = llpa_mainloop_new();
if (mMainloop)
{
pa_mainloop_api *api = llpa_glib_mainloop_get_api(mMainloop);
pa_mainloop_api *api = llpa_mainloop_get_api(mMainloop);
if (api)
{
@ -274,7 +265,7 @@ void VolumeCatcherImpl::cleanup()
if (mGotSyms && mMainloop)
{
llpa_glib_mainloop_free(mMainloop);
llpa_mainloop_free(mMainloop);
}
mMainloop = NULL;
}
@ -295,8 +286,7 @@ void VolumeCatcherImpl::setVolume(F32 volume)
void VolumeCatcherImpl::pump()
{
gboolean may_block = FALSE;
g_main_context_iteration(g_main_context_default(), may_block);
return;
}
void VolumeCatcherImpl::connected_okay()

View File

@ -18,4 +18,8 @@ LL_PA_SYM(true, pa_proplist_new, pa_proplist*, void);
LL_PA_SYM(true, pa_proplist_sets, int, pa_proplist *p, const char *key, const char *value);
LL_PA_SYM(true, pa_sw_volume_from_linear, pa_volume_t, double v);
LL_PA_SYM(true, pa_mainloop_free, void, pa_mainloop* m);
LL_PA_SYM(true, pa_mainloop_get_api, pa_mainloop_api*, pa_mainloop* m);
LL_PA_SYM(true, pa_mainloop_new, pa_mainloop*, void);
// optional symbols to grab

View File

@ -1,6 +1,9 @@
// <FS:Zi> No longer needed
/*
// required symbols to grab
LL_PA_SYM(true, pa_glib_mainloop_free, void, pa_glib_mainloop* g);
LL_PA_SYM(true, pa_glib_mainloop_get_api, pa_mainloop_api*, pa_glib_mainloop* g);
LL_PA_SYM(true, pa_glib_mainloop_new, pa_glib_mainloop *, GMainContext *c);
// optional symbols to grab
*/

View File

@ -2172,7 +2172,7 @@ if (WINDOWS)
${CMAKE_CURRENT_SOURCE_DIR}/featuretable.txt
${viewer_APPSETTINGS_FILES}
${ARCH_PREBUILT_DIRS_RELEASE}/growl.dll
${SHARED_LIB_STAGING_DIR}/Release/glod.dll # <FS:Beq> Restore GLOD build dependencies
${SHARED_LIB_STAGING_DIR}/glod.dll # <FS:Beq> Restore GLOD build dependencies
SLPlugin
media_plugin_cef
media_plugin_libvlc
@ -2182,7 +2182,7 @@ if (WINDOWS)
# <FS:Ansariel> Only copy OpenJPEG dll if needed
if (NOT USE_KDU)
list(APPEND COPY_INPUT_DEPENDENCIES
${SHARED_LIB_STAGING_DIR}/Release/openjp2.dll
${SHARED_LIB_STAGING_DIR}/openjp2.dll
)
endif (NOT USE_KDU)
# </FS:Ansariel>
@ -2385,27 +2385,24 @@ target_link_libraries(${VIEWER_BINARY_NAME}
ll::tracy
ll::icu4c
fs::glod # <FS:Beq/> restore GLOD dependencies
# fs::growl # <FS:Ansariel> Growl support <FS:Zi> added further down for win/mac only
fs::discord # <FS:Ansariel> Discord support
)
if( TARGET ll::intel_memops )
target_link_libraries(${VIEWER_BINARY_NAME} ll::intel_memops )
endif()
target_link_libraries(${VIEWER_BINARY_NAME} ${DISCORD_LIBRARY} )
if (USE_BUGSPLAT)
target_link_libraries(${VIEWER_BINARY_NAME}
${BUGSPLAT_LIBRARIES}
)
endif (USE_BUGSPLAT)
# <FS:Ansariel> Growl support
if (WINDOWS OR DARWIN)
target_link_libraries(${VIEWER_BINARY_NAME}
fs::growl # <FS:Ansariel> Growl support
${GROWL_LIBRARY}
)
target_link_libraries(${VIEWER_BINARY_NAME} fs::growl)
endif (WINDOWS OR DARWIN)
# </FS:Ansariel>
if( TARGET ll::nvapi )
target_link_libraries(${VIEWER_BINARY_NAME} ll::nvapi )

View File

@ -110,7 +110,6 @@ private:
LLSD mResultsContent;
LLUUID mQueryID;
FSFloaterSearch* mParent;
LLSearchComboBox* mSearchComboBox;
FSScrollListCtrl* mSearchResults;
};
@ -145,7 +144,6 @@ private:
LLSD mResultsContent;
LLUUID mQueryID;
FSFloaterSearch* mParent;
LLSearchComboBox* mSearchComboBox;
LLScrollListCtrl* mSearchResults;
};
@ -180,7 +178,6 @@ private:
LLSD mResultsContent;
LLUUID mQueryID;
FSFloaterSearch* mParent;
LLSearchComboBox* mSearchComboBox;
LLScrollListCtrl* mSearchResults;
LLComboBox* mPlacesCategory;
@ -214,7 +211,6 @@ private:
LLSD mResultsContent;
LLUUID mQueryID;
FSFloaterSearch* mParent;
LLLineEditor* mPriceEditor;
LLLineEditor* mAreaEditor;
LLScrollListCtrl* mSearchResults;
@ -250,7 +246,6 @@ private:
LLSD mResultsContent;
LLUUID mQueryID;
FSFloaterSearch* mParent;
LLSearchComboBox* mSearchComboBox;
LLScrollListCtrl* mSearchResults;
LLComboBox* mClassifiedsCategory;
@ -292,7 +287,6 @@ private:
LLSD mResultsContent;
LLUUID mQueryID;
FSFloaterSearch* mParent;
LLSearchComboBox* mSearchComboBox;
LLScrollListCtrl* mSearchResults;
LLRadioGroup* mEventsMode;

View File

@ -36,9 +36,7 @@
#include "llviewerprecompiledheaders.h"
#include "growlnotifierwin.h"
#ifdef HAS_GROWL
#include "growl.h"
#endif
#include "llviewercontrol.h"
@ -55,9 +53,7 @@ void __cdecl GrowlLogSink( char const *aMessage, int aLevel )
GrowlNotifierWin::GrowlNotifierWin() :
mApplicationName("")
{
#ifdef HAS_GROWL
mGrowlImpl = NULL;
#endif
LL_INFOS("GrowlNotifierWin") << "Windows growl notifier initialized." << LL_ENDL;
#ifdef GROWL_HAS_LOG
@ -69,20 +65,17 @@ GrowlNotifierWin::GrowlNotifierWin() :
GrowlNotifierWin::~GrowlNotifierWin()
{
LL_INFOS("GrowlNotifierWin") << "Windows growl notifier destroyed." << LL_ENDL;
#ifdef HAS_GROWL
if (mGrowlImpl)
{
delete mGrowlImpl;
mGrowlImpl = NULL;
}
#endif
}
void GrowlNotifierWin::registerApplication(const std::string& application, const std::set<std::string>& notificationTypes)
{
mApplicationName = application;
#ifdef HAS_GROWL
char **arr = (char**)malloc(sizeof(*arr) * notificationTypes.size());
S32 i = 0;
for (std::set<std::string>::const_iterator it = notificationTypes.begin(); it != notificationTypes.end(); ++it, ++i)
@ -99,25 +92,18 @@ void GrowlNotifierWin::registerApplication(const std::string& application, const
free(arr[i]);
}
free(arr);
#endif
}
void GrowlNotifierWin::showNotification(const std::string& notification_title, const std::string& notification_message,
const std::string& notification_type)
{
#ifdef HAS_GROWL
if (mGrowlImpl)
{
mGrowlImpl->Notify(notification_type.c_str(), notification_title.c_str(), notification_message.c_str());
}
#endif
}
bool GrowlNotifierWin::isUsable()
{
#ifdef HAS_GROWL
return (mGrowlImpl && mGrowlImpl->isConnected());
#else
return false;
#endif
}

View File

@ -36,10 +36,7 @@
#define GROWLNOTIFIERWIN_H
#include "growlnotifier.h"
#ifdef HAS_GROWL
#include <growl++.hpp>
#endif
class GrowlNotifierWin : public GrowlNotifier
{
@ -53,9 +50,7 @@ public:
private:
std::string mApplicationName;
#ifdef HAS_GROWL
Growl* mGrowlImpl;
#endif
};
#endif // GROWLNOTIFIERWIN_H

View File

@ -263,9 +263,7 @@ using namespace LL;
#include "llcoproceduremanager.h"
#include "llviewereventrecorder.h"
#if HAS_GROWL
#include "growlmanager.h"
#endif
#include "fsavatarrenderpersistence.h"
// *FIX: These extern globals should be cleaned up.
@ -2019,9 +2017,7 @@ bool LLAppViewer::cleanup()
// workaround for DEV-35406 crash on shutdown
LLEventPumps::instance().reset();
#if HAS_GROWL
GrowlManager::destroyManager();
#endif
GrowlManager::destroyManager(); // <FS> Growl support
//dump scene loading monitor results
if (LLSceneMonitor::instanceExists())

View File

@ -81,7 +81,8 @@ static S32 bump_channel = -1;
// Enabled after changing LLViewerTexture::mNeedsCreateTexture to an
// LLAtomicBool; this should work just fine, now. HB
#define LL_BUMPLIST_MULTITHREADED 1
// #define LL_BUMPLIST_MULTITHREADED 1 // <FS:Beq/> Enabling this causes issues on some machines
#define LL_BUMPLIST_MULTITHREADED 0
// static

View File

@ -67,12 +67,14 @@
#include "llnotificationsutil.h" // <FS:Zi> detect and strip empty alpha layers from images on upload
const S32 PREVIEW_BORDER_WIDTH = 2;
const S32 PREVIEW_RESIZE_HANDLE_SIZE = S32(RESIZE_HANDLE_WIDTH * OO_SQRT2) + PREVIEW_BORDER_WIDTH;
const S32 PREVIEW_HPAD = PREVIEW_RESIZE_HANDLE_SIZE;
const S32 PREVIEW_VPAD = -24 + 35; // yuk, hard coded
const S32 PREF_BUTTON_HEIGHT = 16 + 7 + 16 + 35;
const S32 PREVIEW_TEXTURE_HEIGHT = 320;
// <FS:Zi> Make preview area position to be not hard-coded
// const S32 PREVIEW_BORDER_WIDTH = 2;
// const S32 PREVIEW_RESIZE_HANDLE_SIZE = S32(RESIZE_HANDLE_WIDTH * OO_SQRT2) + PREVIEW_BORDER_WIDTH;
// const S32 PREVIEW_HPAD = PREVIEW_RESIZE_HANDLE_SIZE;
// const S32 PREVIEW_VPAD = -24 + 35; // yuk, hard coded
// const S32 PREF_BUTTON_HEIGHT = 16 + 7 + 16 + 35;
// const S32 PREVIEW_TEXTURE_HEIGHT = 320;
// </FS:Zi>
// <FS:Zi> detect and strip empty alpha layers from images on upload
const U8 ALPHA_EMPTY_THRESHOLD = 253;
@ -110,10 +112,13 @@ BOOL LLFloaterImagePreview::postBuild()
}
childSetCommitCallback("clothing_type_combo", onPreviewTypeCommit, this);
mPreviewRect.set(PREVIEW_HPAD,
PREVIEW_TEXTURE_HEIGHT + PREVIEW_VPAD,
getRect().getWidth() - PREVIEW_HPAD,
PREVIEW_HPAD + PREF_BUTTON_HEIGHT + PREVIEW_HPAD);
// <FS:Zi> Make preview area position to be not hard-coded
// mPreviewRect.set(PREVIEW_HPAD,
// PREVIEW_TEXTURE_HEIGHT + PREVIEW_VPAD,
// getRect().getWidth() - PREVIEW_HPAD,
// PREVIEW_HPAD + PREF_BUTTON_HEIGHT + PREVIEW_HPAD);
mPreviewRect = getChildView("preview_area")->getRect();
// </FS:Zi>
mPreviewImageRect.set(0.f, 1.f, 1.f, 0.f);
getChildView("bad_image_text")->setVisible(FALSE);
@ -178,9 +183,16 @@ BOOL LLFloaterImagePreview::postBuild()
// getChild<LLUICtrl>("ok_btn")->setCommitCallback(boost::bind(&LLFloaterNameDesc::onBtnOK, this));
getChild<LLUICtrl>("ok_btn")->setCommitCallback(boost::bind(&LLFloaterImagePreview::onBtnUpload, this));
getChild<LLUICtrl>("uploaded_size_text")->setTextArg("[X_RES]", llformat("%d", mRawImagep->getWidth()));
getChild<LLUICtrl>("uploaded_size_text")->setTextArg("[Y_RES]", llformat("%d", mRawImagep->getHeight()));
mEmptyAlphaCheck = getChild<LLCheckBoxCtrl>("strip_alpha_check");
if (mRawImagep->getComponents() != 4)
{
return TRUE;
getChild<LLUICtrl>("image_alpha_warning")->setVisible(false);
getChild<LLUICtrl>("uploaded_size_text")->setTextArg("[ALPHA]", getString("no_alpha"));
return true;
}
U32 imageBytes = mRawImagep->getWidth() * mRawImagep->getHeight() * 4;
@ -195,8 +207,6 @@ BOOL LLFloaterImagePreview::postBuild()
}
}
mEmptyAlphaCheck = getChild<LLCheckBoxCtrl>("strip_alpha_check");
if (emptyAlphaCount > (imageBytes / 4 * ALPHA_EMPTY_THRESHOLD_RATIO))
{
getChild<LLUICtrl>("image_alpha_warning")->setVisible(true);
@ -209,6 +219,8 @@ BOOL LLFloaterImagePreview::postBuild()
getChild<LLUICtrl>("image_alpha_warning")->setVisible(false);
mEmptyAlphaCheck->setValue(false);
}
getChild<LLUICtrl>("uploaded_size_text")->setTextArg("[ALPHA]", getString(mEmptyAlphaCheck->getValue() ? "no_alpha" : "with_alpha"));
// </FS:Zi>
return TRUE;
}
@ -216,7 +228,11 @@ BOOL LLFloaterImagePreview::postBuild()
// <FS:Zi> detect and strip empty alpha layers from images on upload
void LLFloaterImagePreview::emptyAlphaCheckboxCallback()
{
if (!mEmptyAlphaCheck->getValue())
if (mEmptyAlphaCheck->getValue())
{
getChild<LLUICtrl>("uploaded_size_text")->setTextArg("[ALPHA]", getString("no_alpha"));
}
else
{
LLNotificationsUtil::add("ImageEmptyAlphaLayer", LLSD(), LLSD(), boost::bind(&LLFloaterImagePreview::imageEmptyAlphaCallback, this, _1, _2));
}
@ -232,6 +248,7 @@ bool LLFloaterImagePreview::imageEmptyAlphaCallback(const LLSD& notification, co
mEmptyAlphaCheck->setValue(true);
}
getChild<LLUICtrl>("uploaded_size_text")->setTextArg("[ALPHA]", getString(option == 0 ? "no_alpha" : "with_alpha"));
return true;
}
@ -407,24 +424,27 @@ void LLFloaterImagePreview::draw()
// gGL.vertex2i(r.getWidth() - PREVIEW_HPAD, PREVIEW_TEXTURE_HEIGHT + PREVIEW_VPAD);
//}
//gGL.end();
// </FS:Ansariel>
// <FS:Zi> Make preview area position to be not hard-coded
gGL.begin( LLRender::TRIANGLES );
{
gGL.texCoord2f(mPreviewImageRect.mLeft, mPreviewImageRect.mTop);
gGL.vertex2i(PREVIEW_HPAD, PREVIEW_TEXTURE_HEIGHT + PREVIEW_VPAD);
gGL.vertex2i(mPreviewRect.mLeft, mPreviewRect.mTop);
gGL.texCoord2f(mPreviewImageRect.mLeft, mPreviewImageRect.mBottom);
gGL.vertex2i(PREVIEW_HPAD, PREVIEW_HPAD + PREF_BUTTON_HEIGHT + PREVIEW_HPAD);
gGL.vertex2i(mPreviewRect.mLeft, mPreviewRect.mBottom);
gGL.texCoord2f(mPreviewImageRect.mRight, mPreviewImageRect.mBottom);
gGL.vertex2i(r.getWidth() - PREVIEW_HPAD, PREVIEW_HPAD + PREF_BUTTON_HEIGHT + PREVIEW_HPAD);
gGL.vertex2i(mPreviewRect.mRight, mPreviewRect.mBottom);
gGL.texCoord2f(mPreviewImageRect.mLeft, mPreviewImageRect.mTop);
gGL.vertex2i(PREVIEW_HPAD, PREVIEW_TEXTURE_HEIGHT + PREVIEW_VPAD);
gGL.vertex2i(mPreviewRect.mLeft, mPreviewRect.mTop);
gGL.texCoord2f(mPreviewImageRect.mRight, mPreviewImageRect.mBottom);
gGL.vertex2i(r.getWidth() - PREVIEW_HPAD, PREVIEW_HPAD + PREF_BUTTON_HEIGHT + PREVIEW_HPAD);
gGL.vertex2i(mPreviewRect.mRight, mPreviewRect.mBottom);
gGL.texCoord2f(mPreviewImageRect.mRight, mPreviewImageRect.mTop);
gGL.vertex2i(r.getWidth() - PREVIEW_HPAD, PREVIEW_TEXTURE_HEIGHT + PREVIEW_VPAD);
gGL.vertex2i(mPreviewRect.mRight, mPreviewRect.mTop);
}
gGL.end();
// </FS:Ansariel>
// </FS:Zi>
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
@ -458,24 +478,27 @@ void LLFloaterImagePreview::draw()
// gGL.vertex2i(r.getWidth() - PREVIEW_HPAD, PREVIEW_TEXTURE_HEIGHT + PREVIEW_VPAD);
//}
//gGL.end();
// </FS:Ansariel>
// <FS:Zi> Make preview area position to be not hard-coded
gGL.begin( LLRender::TRIANGLES );
{
gGL.texCoord2f(0.f, 1.f);
gGL.vertex2i(PREVIEW_HPAD, PREVIEW_TEXTURE_HEIGHT + PREVIEW_VPAD);
gGL.vertex2i(mPreviewRect.mLeft, mPreviewRect.mTop);
gGL.texCoord2f(0.f, 0.f);
gGL.vertex2i(PREVIEW_HPAD, PREVIEW_HPAD + PREF_BUTTON_HEIGHT + PREVIEW_HPAD);
gGL.vertex2i(mPreviewRect.mLeft, mPreviewRect.mBottom);
gGL.texCoord2f(1.f, 0.f);
gGL.vertex2i(r.getWidth() - PREVIEW_HPAD, PREVIEW_HPAD + PREF_BUTTON_HEIGHT + PREVIEW_HPAD);
gGL.vertex2i(mPreviewRect.mRight, mPreviewRect.mBottom);
gGL.texCoord2f(1.f, 0.f);
gGL.vertex2i(r.getWidth() - PREVIEW_HPAD, PREVIEW_HPAD + PREF_BUTTON_HEIGHT + PREVIEW_HPAD);
gGL.texCoord2f(0.f, 1.f);
gGL.vertex2i(PREVIEW_HPAD, PREVIEW_TEXTURE_HEIGHT + PREVIEW_VPAD);
gGL.vertex2i(mPreviewRect.mLeft, mPreviewRect.mTop);
gGL.texCoord2f(1.f, 0.f);
gGL.vertex2i(mPreviewRect.mRight, mPreviewRect.mBottom);
gGL.texCoord2f(1.f, 1.f);
gGL.vertex2i(r.getWidth() - PREVIEW_HPAD, PREVIEW_TEXTURE_HEIGHT + PREVIEW_VPAD);
gGL.vertex2i(mPreviewRect.mRight, mPreviewRect.mTop);
}
gGL.end();
// </FS:Ansariel>
// </FS:Zi>
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
}

View File

@ -225,9 +225,7 @@
//#include "llfloaterimsession.h"
#include "fsfloaterim.h"
// </FS:Ansariel> [FS communication UI]
#if HAS_GROWL
#include "growlmanager.h"
#endif
#include "fsassetblacklist.h"
#include "fsavatarrenderpersistence.h"
@ -662,10 +660,8 @@ bool idle_startup()
//
std::string lastGPU = gSavedSettings.getString("LastGPUString");
std::string thisGPU = LLFeatureManager::getInstance()->getGPUString();
#if HAS_GROWL
GrowlManager::initiateManager();
#endif
GrowlManager::initiateManager(); // <FS> Growl support
// <FS:Ansariel> Store current font and skin for system info (FIRE-6806)
gSavedSettings.setString("FSInternalFontSettingsFile", gSavedSettings.getString("FSFontSettingsFile"));

View File

@ -1,5 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Image Preview" title="">
<string name="with_alpha">
mit Alpha
</string>
<string name="no_alpha">
ohne Alpha
</string>
<text name="name_label">
Name:
</text>
@ -29,8 +35,11 @@
Speichern Sie das Bild als 24 Bit Targa (.tga).
</text>
<text name="uploaded_size_text">
Größe hochgeladen: [X_RES]x[Y_RES], [ALPHA]
</text>
<check_box label="Verlustfrei komprimieren" name="lossless_check" left_delta="-5"/>
<check_box name="temp_check" label="Temporär (kostenlos)" tool_tip="Lädt das Bild temporär hoch, d.h. der Upload ist kostenlos. Im Gegenzug wird es nach einiger Zeit automatisch gelöscht." />
<button label="Abbrechen" name="cancel_btn"/>
<button label="Hochladen ([AMOUNT] L$)" name="ok_btn" width="146"/>
<button label="Abbrechen" name="cancel_btn"/>
</floater>

View File

@ -140,8 +140,8 @@
<menu_item_check label="Koordinaten" name="Coordinates"/>
<menu_item_check label="Parzelleneigenschaften" name="Parcel Properties"/>
<menu_item_check label="Menü „Erweitert“" name="Show Advanced Menu"/>
<menu_item_check label="Grafikgeschwindigkeit verbessern..." name="Performance"/>
</menu>
<menu_item_check label="Grafikgeschwindigkeit verbessern..." name="Performance"/>
<menu_item_call label="Nach Hause teleportieren" name="Teleport Home"/>
<menu_item_call label="Diesen Ort als Zuhause festlegen" name="Set Home to Here"/>
<menu label="Umgebung" name="Environment">

View File

@ -7,6 +7,17 @@
name="Image Preview"
help_topic="image_preview"
width="300">
<string
name="with_alpha"
value="with alpha"
/>
<string
name="no_alpha"
value="no alpha"
/>
<text
type="string"
length="1"
@ -60,7 +71,7 @@
height="18"
label="Clothing Type"
layout="topleft"
left_delta="110"
right="-10"
name="clothing_type_combo"
top_delta="-2"
width="160">
@ -106,23 +117,23 @@
name="SculptedPrim" />
</combo_box>
<panel
<panel
follows="left|right"
height="32"
height="24"
layout="topleft"
left="10"
name="image_alpha_warning"
right="-10"
top_pad="4"
visible="false">
visible="true">
<icon
<icon
height="24"
image_name="Popup_Caution"
left="0"
top="0"
width="24"
/>
/>
<check_box
follows="top|left|right"
@ -133,14 +144,28 @@
name="strip_alpha_check"
right="-1"
top_delta="10"
/>
/>
</panel>
<panel
background_opaque="true"
background_visible="true"
bg_opaque_color="0 0 0 0.333"
follows="top|left"
height="239"
layout="topleft"
left="10"
name="preview_area"
right="-10"
top_pad="4"
/>
<text
type="string"
length="1"
bottom="250"
halign="center"
height="45"
word_wrap="true"
follows="top|left"
@ -151,6 +176,22 @@
Try saving image as 24 bit Targa (.tga).
</text>
<text
type="string"
length="1"
height="16"
word_wrap="true"
follows="top|left"
halign="center"
layout="topleft"
left="10"
name="uploaded_size_text"
right="-10"
top_pad="142">
Uploaded Size: [X_RES]x[Y_RES], [ALPHA]
</text>
<check_box
enabled="false"
initial_value="false"
@ -158,50 +199,53 @@ Try saving image as 24 bit Targa (.tga).
height="16"
label="Use lossless compression"
layout="topleft"
left_delta="2"
left_delta="-3"
name="lossless_check"
top_pad="162"
top_pad="7"
width="280" />
<check_box
control_name="TemporaryUpload"
visible="false"
visible="true"
follows="bottom|left"
height="16"
initial_value="false"
left_delta="155"
left_delta="168"
name="temp_check"
width="280"
label="Temporary (Free)"
tool_tip="Sets the asset to be temporary, meaning its free, but in return, only good for a short time before it ceases to exist." />
<button
follows="bottom|right"
height="20"
label="Cancel"
layout="topleft"
left="165"
name="cancel_btn"
top="430"
width="125" />
<button
follows="bottom|left"
height="20"
label="Upload (L$[AMOUNT])"
layout="topleft"
left_delta="-150"
left="10"
name="ok_btn"
top_pad="4"
width="130" />
<button
follows="bottom|right"
height="20"
label="Cancel"
layout="topleft"
name="cancel_btn"
right="-10"
top_delta="0"
width="125" />
width="130" />
<text
type="string"
length="1"
follows="left|top"
halign="center"
height="35"
layout="topleft"
left="10"
mouse_opaque="false"
right="-10"
skip_link_underline="true"
name="info_text"
word_wrap="true"
top_pad="10"
width="270"/>
top_pad="5"
value="= upload fee information text goes here ="
/>
</floater>

View File

@ -23,8 +23,11 @@
Essayez d'enregistrer l'image au format Targa 24 bits (.tga).
</text>
<text name="uploaded_size_text">
Taille transférée : [X_RES]x[Y_RES], [ALPHA]
</text>
<check_box label="Utiliser une compression sans pertes" name="lossless_check"/>
<check_box name="temp_check" label="Temporaire (Gratuit)" tool_tip="Défini l'envoi comme étant temporaire, celui-ci étant gratuit, mais disponible uniquement pour un temps limité avant qu'il ne cesse d'exister définitivement."/>
<button label="Transferer (L$[AMOUNT])" name="ok_btn"/>
<button label="Annuler" name="cancel_btn"/>
<button label="Uploader ([AMOUNT] L$)" width="130" name="ok_btn"/>
</floater>

View File

@ -6,5 +6,18 @@
<line_editor name="desc" width="230" />
<button label="Jouer devant tout le monde" width="160" label_selected="Arrêter" name="Inworld" tool_tip="Jouer cette animation de façon à ce que les autres la voient"/>
<button label="Jouer localement" width="160" label_selected="Arrêter" name="Locally" tool_tip="Jouer cette animation de façon à ce que vous soyez la seule personne à la voir"/>
<button name="btn_expand" tool_tip="Développez pour voir des informations détaillées sur cette animation" />
</panel>
<panel name="advanced_info_panel">
<text name="AdvancedStatsLeft">
Priorité : [PRIORITY]
Durée : [DURATION]s
En boucle : [IS_LOOP]
</text>
<text name="AdvancedStatsRight">
Entrée : [EASE_IN]s
Sortie : [EASE_OUT]s
Joints : [NUM_JOINTS]
</text>
</panel>
</floater>

View File

@ -152,17 +152,18 @@
<check_box label="Sauvegarder les textures sur le disque dur au format PNG au lieu de TGA" tool_tip="Utilisé dans l'aperçu de texture et dans le menu contextuel de l'inventaire." name="FSTextureDefaultSaveAsFormat"/>
<check_box label="Utiliser Ctrl+clic pour attraper et déplacer des objets" tool_tip="Quand coché, vous pourrez attraper et déplacer des objets en utilisant la souris et la touche Ctrl." name="FSEnableGrab"/>
<check_box label="Déplacer les textures directement en maintenant Shift-Clic en mode construction" tool_tip="Activer cette option vous permettra de faire glisser la texture sur la face de l'objet en mode de construction" name="FSExperimentalDragTexture"/>
<check_box label="Prévisualiser les animations sur son avatar pendant l'upload" tool_tip="Si activé, vous pouvez prévisualiser les animations sur votre propre avatar pendant le processus d'upload" name="FSUploadAnimationOnOwnAvatar"/>
<check_box label="Prévisualiser les animations sur son avatar pendant le téléchargement sur le serveur" tool_tip="Si activé, vous pouvez prévisualiser les animations sur votre propre avatar pendant le téléchargement sur le serveur" name="FSUploadAnimationOnOwnAvatar"/>
<check_box label="Toujours développer les informations détaillées de la prévisualisation de l'animation" tool_tip="Développer par défaut les informations détaillées sur l'animation dans le flotteur de l'aperçu de l'animation" name="FSAnimationPreviewExpanded"/>
<check_box label="Active les informations détaillées pour les script" tool_tip="Activée, ajoute aux informations de base sur les scripts des détails utiles aux créateurs" name="FSScriptInfoExtended"/>
</panel>
<panel label="Chargements" name="UploadsTab">
<text name="title">Dossiers de destination pour les chargements :</text>
<text name="title_sounds">Sons</text>
<text name="title_models">Modèles</text>
<text name="upload_help">Pour changer le dossier de destinatio, cliquez droit dessus dans l'inventaire et sélectionnez
<text name="title">Dossiers de destination pour les chargements :</text>
<text name="title_sounds">Sons</text>
<text name="title_models">Modèles</text>
<text name="upload_help">Pour changer le dossier de destination, cliquez droit dessus dans l'inventaire et sélectionnez
"Par défaut pour"
</text>
<button name="reset_default_folders" label="Réinitialiser les dossiers par défaut"/>
</text>
<button name="reset_default_folders" label="Réinitialiser les dossiers par défaut"/>
</panel>
</tab_container>
</panel>

View File

@ -1,5 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Image Preview">
<string name="with_alpha" value="z alfą" />
<string name="no_alpha" value="bez alfy" />
<text name="name_label">
Nazwa:
</text>
@ -29,8 +31,12 @@
Spróbuj zapisać obraz jako 24 bitową Targa (.tga).
</text>
<text name="uploaded_size_text">
Przesłano: [X_RES]x[Y_RES], [ALPHA]
</text>
<check_box label="Kompresja bezstratna" name="lossless_check"/>
<check_box name="temp_check" label="Tymczas. (darmowy)" tool_tip="Ustawia obraz na serwerze jako tymczasowy, a zatem jako darmowy, ale będzie on istnieć tylko przez krótki okres - po czym zostanie skasowany." />
<button label="Anuluj" name="cancel_btn"/>
<check_box left_delta="158" name="temp_check" label="Tymczas. (darmowy)" tool_tip="Ustawia obraz na serwerze jako tymczasowy, a zatem jako darmowy, ale będzie on istnieć tylko przez krótki okres - po czym zostanie skasowany." />
<button label="Prześlij ([AMOUNT]L$)" name="ok_btn"/>
<button label="Anuluj" name="cancel_btn"/>
<text name="info_text" value="= tu pojawią się informacje o koszcie przesyłania =" />
</floater>

View File

@ -1,5 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Image Preview">
<string name="with_alpha" value="с альфой"/>
<string name="no_alpha" value="нет альфы"/>
<text name="name_label">
Название:
</text>
@ -28,7 +30,12 @@
Невозможно прочитать изображение.
Попробуйте сохранить изображение как 24-битный TGA-файл (Targa).
</text>
<text name="uploaded_size_text">
Загруженный размер: [X_RES]x[Y_RES], [ALPHA]
</text>
<check_box label="Использовать сжатие без потерь" name="lossless_check"/>
<check_box name="temp_check" label="Временно (бесплатно)" tool_tip="Устанавливает актив как временный, что означает, что он бесплатный, но взамен годится только в течение короткого времени, прежде чем он перестанет существовать."/>
<button label="Отмена" name="cancel_btn"/>
<button label="Загрузить (L$[AMOUNT])" name="ok_btn"/>
<text name="info_text" value="= здесь будет текст информации о плате за загрузку ="/>
</floater>

View File

@ -75,6 +75,7 @@ def add_info(key, pkg, lines):
# <FS:Ansariel> Only add as duplicate of the version is duplicate and the copyright string does not match
#else:
elif info[key][pkg] != '\n'.join(lines):
print("key: %s - pkg: %s - line: %s" % (key, pkg, lines))
# </FS:Ansariel>
dups[key].add(pkg)