From 1140ae3489a9e260a0abb808b4152f2d57384d67 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Thu, 29 Dec 2022 19:51:33 +0100 Subject: Add a texture inspector and show it when hovering over an inventory textory (or folder containing - among others - exactly one texture) and when hovering over notecard embedded textures --- indra/newview/llinspecttexture.cpp | 301 +++++++++++++++++++++++++++++++++++++ 1 file changed, 301 insertions(+) create mode 100644 indra/newview/llinspecttexture.cpp (limited to 'indra/newview/llinspecttexture.cpp') diff --git a/indra/newview/llinspecttexture.cpp b/indra/newview/llinspecttexture.cpp new file mode 100644 index 0000000000..cd288e9603 --- /dev/null +++ b/indra/newview/llinspecttexture.cpp @@ -0,0 +1,301 @@ +/** + * @file llinspecttexture.cpp + * + * $LicenseInfo:firstyear=2009&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" + +#include "llfloaterreg.h" +#include "llinspect.h" +#include "llinspecttexture.h" +#include "llinventoryfunctions.h" +#include "llinventorymodel.h" +#include "lltexturectrl.h" +#include "lltrans.h" +#include "llviewertexturelist.h" + +// ============================================================================ +// LLInspectTexture class +// + +class LLInspectTexture : public LLInspect +{ + friend class LLFloaterReg; +public: + LLInspectTexture(const LLSD& sdKey); + ~LLInspectTexture(); + +public: + void onOpen(const LLSD& sdData) override; + BOOL postBuild() override; + +public: + const LLUUID& getAssetId() const { return mAssetId; } + const LLUUID& getItemId() const { return mItemId; } + +protected: + LLUUID mAssetId; + LLUUID mItemId; // Item UUID relative to gInventoryModel (or null if not displaying an inventory texture) + LLUUID mNotecardId; + LLTextureCtrl* mTextureCtrl = nullptr; + LLTextBox* mTextureName = nullptr; +}; + +LLInspectTexture::LLInspectTexture(const LLSD& sdKey) + : LLInspect(LLSD()) +{ +} + +LLInspectTexture::~LLInspectTexture() +{ +} + +void LLInspectTexture::onOpen(const LLSD& sdData) +{ + // Start fade animation + LLInspect::onOpen(sdData); + + bool fIsAsset = sdData.has("asset_id"); + bool fIsInventory = sdData.has("item_id"); + + // Skip if we're being asked to display the same thing + const LLUUID idAsset = (fIsAsset) ? sdData["asset_id"].asUUID() : LLUUID::null; + const LLUUID idItem = (fIsInventory) ? sdData["item_id"].asUUID() : LLUUID::null; + if ( (getVisible()) && ( ((fIsAsset) && (idAsset == mAssetId)) || ((fIsInventory) && (idItem == mItemId)) ) ) + { + return; + } + + // Position the inspector relative to the mouse cursor + // Similar to how tooltips are positioned [see LLToolTipMgr::createToolTip()] + if (sdData.has("pos")) + LLUI::instance().positionViewNearMouse(this, sdData["pos"]["x"].asInteger(), sdData["pos"]["y"].asInteger()); + else + LLUI::instance().positionViewNearMouse(this); + + std::string strName = sdData["name"].asString(); + if (fIsAsset) + { + mAssetId = idAsset; + mItemId = idItem; // Will be non-null in the case of a notecard + mNotecardId = sdData["notecard_id"].asUUID(); + } + else if (fIsInventory) + { + const LLViewerInventoryItem* pItem = gInventory.getItem(idItem); + if ( (pItem) && (LLAssetType::AT_TEXTURE == pItem->getType()) ) + { + if (strName.empty()) + strName = pItem->getName(); + mAssetId = pItem->getAssetUUID(); + mItemId = idItem; + } + else + { + mAssetId.setNull(); + mItemId.setNull(); + } + mNotecardId = LLUUID::null; + } + + mTextureCtrl->setImageAssetID(mAssetId); + mTextureName->setText(strName); +} + +BOOL LLInspectTexture::postBuild() +{ + mTextureCtrl = getChild("texture_ctrl"); + mTextureName = getChild("texture_name"); + + return TRUE; +} + +// ============================================================================ +// Helper functions +// + +LLToolTip* LLInspectTextureUtil::createInventoryToolTip(LLToolTip::Params p) +{ + const LLSD& sdTooltip = p.create_params; + + LLInventoryType::EType eInvType = (sdTooltip.has("inv_type")) ? (LLInventoryType::EType)sdTooltip["inv_type"].asInteger() : LLInventoryType::IT_NONE; + switch (eInvType) + { + case LLInventoryType::IT_SNAPSHOT: + case LLInventoryType::IT_TEXTURE: + return LLUICtrlFactory::create(p); + case LLInventoryType::IT_CATEGORY: + { + if (sdTooltip.has("item_id")) + { + const LLUUID idCategory = sdTooltip["item_id"].asUUID(); + + LLInventoryModel::cat_array_t cats; + LLInventoryModel::item_array_t items; + LLIsOfAssetType f(LLAssetType::AT_TEXTURE); + gInventory.getDirectDescendentsOf(idCategory, cats, items, f); + + // Exactly one texture found => show the texture tooltip + if (1 == items.size()) + { + p.create_params.getValue()["asset_id"] = items.front()->getAssetUUID(); + return LLUICtrlFactory::create(p); + } + } + + // No or more than one texture found => show default tooltip + return LLUICtrlFactory::create(p); + } + default: + return LLUICtrlFactory::create(p); + } +} + +void LLInspectTextureUtil::registerFloater() +{ + LLFloaterReg::add("inspect_texture", "inspect_texture.xml", &LLFloaterReg::build); +} + +// ============================================================================ +// LLTexturePreviewView helper class +// + +class LLTexturePreviewView : public LLView +{ +public: + LLTexturePreviewView(const LLView::Params& p); + ~LLTexturePreviewView(); + +public: + void draw() override; + +public: + void setImageFromAssetId(const LLUUID& idAsset); + void setImageFromItemId(const LLUUID& idItem); + +protected: + LLPointer m_Image; + S32 mImageBoostLevel = LLGLTexture::BOOST_NONE; + std::string mLoadingText; +}; + + +LLTexturePreviewView::LLTexturePreviewView(const LLView::Params& p) + : LLView(p) +{ + mLoadingText = LLTrans::getString("texture_loading"); +} + +LLTexturePreviewView::~LLTexturePreviewView() +{ + if (m_Image) + { + m_Image->setBoostLevel(mImageBoostLevel); + m_Image = nullptr; + } +} + +void LLTexturePreviewView::draw() +{ + if (m_Image) + { + LLRect rctClient = getLocalRect(); + + gl_rect_2d(rctClient, LLColor4::black); + rctClient.stretch(-2); + if (4 == m_Image->getComponents()) + gl_rect_2d_checkerboard(rctClient); + gl_draw_scaled_image(rctClient.mLeft, rctClient.mBottom, rctClient.getWidth(), rctClient.getHeight(), m_Image); + + bool isLoading = (!m_Image->isFullyLoaded()) && (m_Image->getDiscardLevel() > 0); + if (isLoading) + LLFontGL::getFontSansSerif()->renderUTF8(mLoadingText, 0, llfloor(rctClient.mLeft + 3), llfloor(rctClient.mTop - 25), LLColor4::white, LLFontGL::LEFT, LLFontGL::BASELINE, LLFontGL::DROP_SHADOW); + m_Image->addTextureStats((isLoading) ? MAX_IMAGE_AREA : (F32)(rctClient.getWidth() * rctClient.getHeight())); + } +} + +void LLTexturePreviewView::setImageFromAssetId(const LLUUID& idAsset) +{ + m_Image = LLViewerTextureManager::getFetchedTexture(idAsset, FTT_DEFAULT, MIPMAP_TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE); + if (m_Image) + { + mImageBoostLevel = m_Image->getBoostLevel(); + m_Image->setBoostLevel(LLGLTexture::BOOST_PREVIEW); + m_Image->forceToSaveRawImage(0); + if ( (!m_Image->isFullyLoaded()) && (!m_Image->hasFetcher()) ) + { + if (m_Image->isInFastCacheList()) + { + m_Image->loadFromFastCache(); + } + gTextureList.forceImmediateUpdate(m_Image); + } + } +} + +void LLTexturePreviewView::setImageFromItemId(const LLUUID& idItem) +{ + const LLViewerInventoryItem* pItem = gInventory.getItem(idItem); + setImageFromAssetId( (pItem) ? pItem->getAssetUUID() : LLUUID::null ); +} + +// ============================================================================ +// LLTextureToolTip class +// + +LLTextureToolTip::LLTextureToolTip(const LLToolTip::Params& p) + : LLToolTip(p) + , mPreviewView(nullptr) + , mPreviewSize(256) +{ + mMaxWidth = llmax(mMaxWidth, mPreviewSize); +} + +LLTextureToolTip::~LLTextureToolTip() +{ +} + +void LLTextureToolTip::initFromParams(const LLToolTip::Params& p) +{ + LLToolTip::initFromParams(p); + + // Create and add the preview control + LLView::Params p_preview; + p_preview.name = "texture_preview"; + LLRect rctPreview; + rctPreview.setOriginAndSize(mPadding, mTextBox->getRect().mTop, mPreviewSize, mPreviewSize); + p_preview.rect = rctPreview; + mPreviewView = LLUICtrlFactory::create(p_preview); + addChild(mPreviewView); + + // Parse the control params + const LLSD& sdTextureParams = p.create_params; + if (sdTextureParams.has("asset_id")) + mPreviewView->setImageFromAssetId(sdTextureParams["asset_id"].asUUID()); + else if (sdTextureParams.has("item_id")) + mPreviewView->setImageFromItemId(sdTextureParams["item_id"].asUUID()); + + snapToChildren(); +} + +// ============================================================================ -- cgit v1.2.3 From 6ada89ce0b9372d6a7f49ac45bad6713ad5d3355 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Wed, 1 Feb 2023 00:35:22 +0200 Subject: SL-19117 Extend texture preview to show thumbnails when present --- indra/newview/llinspecttexture.cpp | 49 ++++++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 21 deletions(-) (limited to 'indra/newview/llinspecttexture.cpp') diff --git a/indra/newview/llinspecttexture.cpp b/indra/newview/llinspecttexture.cpp index cd288e9603..af96561c45 100644 --- a/indra/newview/llinspecttexture.cpp +++ b/indra/newview/llinspecttexture.cpp @@ -136,14 +136,17 @@ BOOL LLInspectTexture::postBuild() LLToolTip* LLInspectTextureUtil::createInventoryToolTip(LLToolTip::Params p) { - const LLSD& sdTooltip = p.create_params; + const LLSD& sdTooltip = p.create_params; + + if (sdTooltip.has("thumbnail_id")) + { + // go straight for tooltip regardless of type + return LLUICtrlFactory::create(p); + } LLInventoryType::EType eInvType = (sdTooltip.has("inv_type")) ? (LLInventoryType::EType)sdTooltip["inv_type"].asInteger() : LLInventoryType::IT_NONE; switch (eInvType) { - case LLInventoryType::IT_SNAPSHOT: - case LLInventoryType::IT_TEXTURE: - return LLUICtrlFactory::create(p); case LLInventoryType::IT_CATEGORY: { if (sdTooltip.has("item_id")) @@ -277,23 +280,27 @@ LLTextureToolTip::~LLTextureToolTip() void LLTextureToolTip::initFromParams(const LLToolTip::Params& p) { - LLToolTip::initFromParams(p); - - // Create and add the preview control - LLView::Params p_preview; - p_preview.name = "texture_preview"; - LLRect rctPreview; - rctPreview.setOriginAndSize(mPadding, mTextBox->getRect().mTop, mPreviewSize, mPreviewSize); - p_preview.rect = rctPreview; - mPreviewView = LLUICtrlFactory::create(p_preview); - addChild(mPreviewView); - - // Parse the control params - const LLSD& sdTextureParams = p.create_params; - if (sdTextureParams.has("asset_id")) - mPreviewView->setImageFromAssetId(sdTextureParams["asset_id"].asUUID()); - else if (sdTextureParams.has("item_id")) - mPreviewView->setImageFromItemId(sdTextureParams["item_id"].asUUID()); + LLToolTip::initFromParams(p); + + // Create and add the preview control + LLView::Params p_preview; + p_preview.name = "texture_preview"; + LLRect rctPreview; + rctPreview.setOriginAndSize(mPadding, mTextBox->getRect().mTop, mPreviewSize, mPreviewSize); + p_preview.rect = rctPreview; + mPreviewView = LLUICtrlFactory::create(p_preview); + addChild(mPreviewView); + + // Parse the control params + const LLSD& sdTextureParams = p.create_params; + if (sdTextureParams.has("thumbnail_id")) + { + mPreviewView->setImageFromAssetId(sdTextureParams["thumbnail_id"].asUUID()); + } + else if (sdTextureParams.has("item_id")) + { + mPreviewView->setImageFromItemId(sdTextureParams["item_id"].asUUID()); + } snapToChildren(); } -- cgit v1.2.3 From 999c8cd3b92cdc64549167a261c8c629edc03c55 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Wed, 1 Feb 2023 01:33:30 +0200 Subject: SL-19117 Textures should return asset id when thumbnail is not set --- indra/newview/llinspecttexture.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/newview/llinspecttexture.cpp') diff --git a/indra/newview/llinspecttexture.cpp b/indra/newview/llinspecttexture.cpp index af96561c45..8a8d7ed1bb 100644 --- a/indra/newview/llinspecttexture.cpp +++ b/indra/newview/llinspecttexture.cpp @@ -138,7 +138,7 @@ LLToolTip* LLInspectTextureUtil::createInventoryToolTip(LLToolTip::Params p) { const LLSD& sdTooltip = p.create_params; - if (sdTooltip.has("thumbnail_id")) + if (sdTooltip.has("thumbnail_id") && sdTooltip["thumbnail_id"].asUUID().notNull()) { // go straight for tooltip regardless of type return LLUICtrlFactory::create(p); -- cgit v1.2.3 From 69f6caac73d406b0f0fe9b913e9d2f439677b279 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Fri, 17 Feb 2023 23:08:31 +0200 Subject: SL-19117 Fix thumbnail preview not working for outfits --- indra/newview/llinspecttexture.cpp | 57 ++++++++++++++++++++++++++++---------- 1 file changed, 42 insertions(+), 15 deletions(-) (limited to 'indra/newview/llinspecttexture.cpp') diff --git a/indra/newview/llinspecttexture.cpp b/indra/newview/llinspecttexture.cpp index 8a8d7ed1bb..de0d65eb7e 100644 --- a/indra/newview/llinspecttexture.cpp +++ b/indra/newview/llinspecttexture.cpp @@ -75,11 +75,11 @@ void LLInspectTexture::onOpen(const LLSD& sdData) // Start fade animation LLInspect::onOpen(sdData); - bool fIsAsset = sdData.has("asset_id"); + bool fIsAsset = sdData.has("thumbnail_id"); bool fIsInventory = sdData.has("item_id"); // Skip if we're being asked to display the same thing - const LLUUID idAsset = (fIsAsset) ? sdData["asset_id"].asUUID() : LLUUID::null; + const LLUUID idAsset = (fIsAsset) ? sdData["thumbnail_id"].asUUID() : LLUUID::null; const LLUUID idItem = (fIsInventory) ? sdData["item_id"].asUUID() : LLUUID::null; if ( (getVisible()) && ( ((fIsAsset) && (idAsset == mAssetId)) || ((fIsInventory) && (idItem == mItemId)) ) ) { @@ -134,13 +134,27 @@ BOOL LLInspectTexture::postBuild() // Helper functions // +class LLIsTextureType : public LLInventoryCollectFunctor +{ +public: + LLIsTextureType() {} + virtual ~LLIsTextureType() {} + virtual bool operator()(LLInventoryCategory* cat, + LLInventoryItem* item); +}; + +bool LLIsTextureType::operator()(LLInventoryCategory* cat, LLInventoryItem* item) +{ + return item && (item->getType() == LLAssetType::AT_TEXTURE); +} + LLToolTip* LLInspectTextureUtil::createInventoryToolTip(LLToolTip::Params p) { const LLSD& sdTooltip = p.create_params; if (sdTooltip.has("thumbnail_id") && sdTooltip["thumbnail_id"].asUUID().notNull()) { - // go straight for tooltip regardless of type + // go straight for thumbnail regardless of type return LLUICtrlFactory::create(p); } @@ -152,18 +166,31 @@ LLToolTip* LLInspectTextureUtil::createInventoryToolTip(LLToolTip::Params p) if (sdTooltip.has("item_id")) { const LLUUID idCategory = sdTooltip["item_id"].asUUID(); - - LLInventoryModel::cat_array_t cats; - LLInventoryModel::item_array_t items; - LLIsOfAssetType f(LLAssetType::AT_TEXTURE); - gInventory.getDirectDescendentsOf(idCategory, cats, items, f); - - // Exactly one texture found => show the texture tooltip - if (1 == items.size()) - { - p.create_params.getValue()["asset_id"] = items.front()->getAssetUUID(); - return LLUICtrlFactory::create(p); - } + LLViewerInventoryCategory* cat = gInventory.getCategory(idCategory); + if (cat && cat->getPreferredType() == LLFolderType::FT_OUTFIT) + { + LLInventoryModel::cat_array_t cats; + LLInventoryModel::item_array_t items; + // Not LLIsOfAssetType, because we allow links + LLIsTextureType f; + gInventory.getDirectDescendentsOf(idCategory, cats, items, f); + + // Exactly one texture found => show the texture tooltip + if (1 == items.size()) + { + LLViewerInventoryItem* item = items.front(); + if (item && item->getIsLinkType()) + { + item = item->getLinkedItem(); + } + if (item) + { + // Todo: write this into folder's thumbnail id + p.create_params.getValue()["thumbnail_id"] = item->getAssetUUID(); + return LLUICtrlFactory::create(p); + } + } + } } // No or more than one texture found => show default tooltip -- cgit v1.2.3 From 2d68a7c33622aa28c49989e959c2a9be1f053d03 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Tue, 21 Feb 2023 23:03:00 +0200 Subject: SL-19108 Update Simple snapshot floater --- indra/newview/llinspecttexture.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'indra/newview/llinspecttexture.cpp') diff --git a/indra/newview/llinspecttexture.cpp b/indra/newview/llinspecttexture.cpp index de0d65eb7e..2e8273d6cf 100644 --- a/indra/newview/llinspecttexture.cpp +++ b/indra/newview/llinspecttexture.cpp @@ -185,7 +185,8 @@ LLToolTip* LLInspectTextureUtil::createInventoryToolTip(LLToolTip::Params p) } if (item) { - // Todo: write this into folder's thumbnail id + // Note: LLFloaterChangeItemThumbnail will attempt to write this + // into folder's thumbnail id when opened p.create_params.getValue()["thumbnail_id"] = item->getAssetUUID(); return LLUICtrlFactory::create(p); } -- cgit v1.2.3 From 4d2bdbb05ac24b4121f05107399fa7be33539f74 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Wed, 1 Mar 2023 23:37:05 +0200 Subject: SL-19282 Removed LLInspectTexture floater LLInspectTexture floater appears to be incomplete and doesn't have a function --- indra/newview/llinspecttexture.cpp | 101 ------------------------------------- 1 file changed, 101 deletions(-) (limited to 'indra/newview/llinspecttexture.cpp') diff --git a/indra/newview/llinspecttexture.cpp b/indra/newview/llinspecttexture.cpp index 2e8273d6cf..4ec0767c4e 100644 --- a/indra/newview/llinspecttexture.cpp +++ b/indra/newview/llinspecttexture.cpp @@ -25,7 +25,6 @@ #include "llviewerprecompiledheaders.h" -#include "llfloaterreg.h" #include "llinspect.h" #include "llinspecttexture.h" #include "llinventoryfunctions.h" @@ -34,101 +33,6 @@ #include "lltrans.h" #include "llviewertexturelist.h" -// ============================================================================ -// LLInspectTexture class -// - -class LLInspectTexture : public LLInspect -{ - friend class LLFloaterReg; -public: - LLInspectTexture(const LLSD& sdKey); - ~LLInspectTexture(); - -public: - void onOpen(const LLSD& sdData) override; - BOOL postBuild() override; - -public: - const LLUUID& getAssetId() const { return mAssetId; } - const LLUUID& getItemId() const { return mItemId; } - -protected: - LLUUID mAssetId; - LLUUID mItemId; // Item UUID relative to gInventoryModel (or null if not displaying an inventory texture) - LLUUID mNotecardId; - LLTextureCtrl* mTextureCtrl = nullptr; - LLTextBox* mTextureName = nullptr; -}; - -LLInspectTexture::LLInspectTexture(const LLSD& sdKey) - : LLInspect(LLSD()) -{ -} - -LLInspectTexture::~LLInspectTexture() -{ -} - -void LLInspectTexture::onOpen(const LLSD& sdData) -{ - // Start fade animation - LLInspect::onOpen(sdData); - - bool fIsAsset = sdData.has("thumbnail_id"); - bool fIsInventory = sdData.has("item_id"); - - // Skip if we're being asked to display the same thing - const LLUUID idAsset = (fIsAsset) ? sdData["thumbnail_id"].asUUID() : LLUUID::null; - const LLUUID idItem = (fIsInventory) ? sdData["item_id"].asUUID() : LLUUID::null; - if ( (getVisible()) && ( ((fIsAsset) && (idAsset == mAssetId)) || ((fIsInventory) && (idItem == mItemId)) ) ) - { - return; - } - - // Position the inspector relative to the mouse cursor - // Similar to how tooltips are positioned [see LLToolTipMgr::createToolTip()] - if (sdData.has("pos")) - LLUI::instance().positionViewNearMouse(this, sdData["pos"]["x"].asInteger(), sdData["pos"]["y"].asInteger()); - else - LLUI::instance().positionViewNearMouse(this); - - std::string strName = sdData["name"].asString(); - if (fIsAsset) - { - mAssetId = idAsset; - mItemId = idItem; // Will be non-null in the case of a notecard - mNotecardId = sdData["notecard_id"].asUUID(); - } - else if (fIsInventory) - { - const LLViewerInventoryItem* pItem = gInventory.getItem(idItem); - if ( (pItem) && (LLAssetType::AT_TEXTURE == pItem->getType()) ) - { - if (strName.empty()) - strName = pItem->getName(); - mAssetId = pItem->getAssetUUID(); - mItemId = idItem; - } - else - { - mAssetId.setNull(); - mItemId.setNull(); - } - mNotecardId = LLUUID::null; - } - - mTextureCtrl->setImageAssetID(mAssetId); - mTextureName->setText(strName); -} - -BOOL LLInspectTexture::postBuild() -{ - mTextureCtrl = getChild("texture_ctrl"); - mTextureName = getChild("texture_name"); - - return TRUE; -} // ============================================================================ // Helper functions @@ -202,11 +106,6 @@ LLToolTip* LLInspectTextureUtil::createInventoryToolTip(LLToolTip::Params p) } } -void LLInspectTextureUtil::registerFloater() -{ - LLFloaterReg::add("inspect_texture", "inspect_texture.xml", &LLFloaterReg::build); -} - // ============================================================================ // LLTexturePreviewView helper class // -- cgit v1.2.3 From cf901b5abbe5c24da92c6c0320e3831a3798a539 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Thu, 2 Mar 2023 01:46:38 +0200 Subject: SL-19282 Thumbnail adjustments Follow links, fix outfts missing 'image' option, adjust inspector, recolor 'worn' in gallery --- indra/newview/llinspecttexture.cpp | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) (limited to 'indra/newview/llinspecttexture.cpp') diff --git a/indra/newview/llinspecttexture.cpp b/indra/newview/llinspecttexture.cpp index 4ec0767c4e..843b4da757 100644 --- a/indra/newview/llinspecttexture.cpp +++ b/indra/newview/llinspecttexture.cpp @@ -59,6 +59,7 @@ LLToolTip* LLInspectTextureUtil::createInventoryToolTip(LLToolTip::Params p) if (sdTooltip.has("thumbnail_id") && sdTooltip["thumbnail_id"].asUUID().notNull()) { // go straight for thumbnail regardless of type + // TODO: make a tooltip factory? return LLUICtrlFactory::create(p); } @@ -147,12 +148,12 @@ LLTexturePreviewView::~LLTexturePreviewView() void LLTexturePreviewView::draw() { + LLView::draw(); + if (m_Image) { LLRect rctClient = getLocalRect(); - gl_rect_2d(rctClient, LLColor4::black); - rctClient.stretch(-2); if (4 == m_Image->getComponents()) gl_rect_2d_checkerboard(rctClient); gl_draw_scaled_image(rctClient.mLeft, rctClient.mBottom, rctClient.getWidth(), rctClient.getHeight(), m_Image); @@ -199,6 +200,11 @@ LLTextureToolTip::LLTextureToolTip(const LLToolTip::Params& p) , mPreviewSize(256) { mMaxWidth = llmax(mMaxWidth, mPreviewSize); + + // Currently has to share params with LLToolTip, override values + setBackgroundColor(LLColor4::black); + setTransparentColor(LLColor4::black); + setBorderVisible(true); } LLTextureToolTip::~LLTextureToolTip() @@ -229,6 +235,25 @@ void LLTextureToolTip::initFromParams(const LLToolTip::Params& p) mPreviewView->setImageFromItemId(sdTextureParams["item_id"].asUUID()); } + // Currently has to share params with LLToolTip, override values manually + // Todo: provide from own params instead, may be like object inspector does it + LLViewBorder::Params border_params; + border_params.border_thickness(LLPANEL_BORDER_WIDTH); + border_params.highlight_light_color(LLColor4::white); + border_params.highlight_dark_color(LLColor4::white); + border_params.shadow_light_color(LLColor4::white); + border_params.shadow_dark_color(LLColor4::white); + addBorder(border_params); + setBorderVisible(true); + + setBackgroundColor(LLColor4::black); + setBackgroundVisible(true); + setBackgroundOpaque(true); + setBackgroundImage(nullptr); + setTransparentImage(nullptr); + + mTextBox->setColor(LLColor4::white); + snapToChildren(); } -- cgit v1.2.3 From 1eab3247111e66a3b81153173d1624a5c1c9fb72 Mon Sep 17 00:00:00 2001 From: Maxim Nikolenko Date: Tue, 21 Mar 2023 17:47:26 +0200 Subject: SL-19379 WIP Gallery view Inventory: first pass --- indra/newview/llinspecttexture.cpp | 14 -------------- 1 file changed, 14 deletions(-) (limited to 'indra/newview/llinspecttexture.cpp') diff --git a/indra/newview/llinspecttexture.cpp b/indra/newview/llinspecttexture.cpp index 843b4da757..82676bced8 100644 --- a/indra/newview/llinspecttexture.cpp +++ b/indra/newview/llinspecttexture.cpp @@ -38,20 +38,6 @@ // Helper functions // -class LLIsTextureType : public LLInventoryCollectFunctor -{ -public: - LLIsTextureType() {} - virtual ~LLIsTextureType() {} - virtual bool operator()(LLInventoryCategory* cat, - LLInventoryItem* item); -}; - -bool LLIsTextureType::operator()(LLInventoryCategory* cat, LLInventoryItem* item) -{ - return item && (item->getType() == LLAssetType::AT_TEXTURE); -} - LLToolTip* LLInspectTextureUtil::createInventoryToolTip(LLToolTip::Params p) { const LLSD& sdTooltip = p.create_params; -- cgit v1.2.3 From 78d66efe1a60ad599ede4e459fb04bb9cb962404 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Fri, 18 Aug 2023 00:57:15 +0300 Subject: SL-20143 Alpha thumbnails should show solid color instead of checkerboard #2 --- indra/newview/llinspecttexture.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'indra/newview/llinspecttexture.cpp') diff --git a/indra/newview/llinspecttexture.cpp b/indra/newview/llinspecttexture.cpp index 82676bced8..da4e3c0949 100644 --- a/indra/newview/llinspecttexture.cpp +++ b/indra/newview/llinspecttexture.cpp @@ -140,8 +140,11 @@ void LLTexturePreviewView::draw() { LLRect rctClient = getLocalRect(); - if (4 == m_Image->getComponents()) - gl_rect_2d_checkerboard(rctClient); + if (4 == m_Image->getComponents()) + { + const LLColor4 color(.098f, .098f, .098f); + gl_rect_2d(rctClient, color, TRUE); + } gl_draw_scaled_image(rctClient.mLeft, rctClient.mBottom, rctClient.getWidth(), rctClient.getHeight(), m_Image); bool isLoading = (!m_Image->isFullyLoaded()) && (m_Image->getDiscardLevel() > 0); -- cgit v1.2.3