From: Seungho BAEK Date: Thu, 21 Apr 2022 05:13:50 +0000 (+0000) Subject: Merge "Transfer uploadOnly flag to the core and update manager" into devel/master X-Git-Tag: dali_2.1.19~1 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=commitdiff_plain;h=b04ffbb54b26f82e3292bef2381f591b6102f9db;hp=47ed00e14a602c80bd2273833064ad2b6ff81a3e Merge "Transfer uploadOnly flag to the core and update manager" into devel/master --- diff --git a/dali-toolkit/devel-api/utility/npatch-utilities.cpp b/dali-toolkit/devel-api/utility/npatch-utilities.cpp index 78a6268..aead2a5 100644 --- a/dali-toolkit/devel-api/utility/npatch-utilities.cpp +++ b/dali-toolkit/devel-api/utility/npatch-utilities.cpp @@ -1,5 +1,5 @@ /* -* Copyright (c) 2021 Samsung Electronics Co., Ltd. +* Copyright (c) 2022 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -176,6 +176,8 @@ void GetRedOffsetAndMask(Dali::Pixel::Format pixelFormat, int32_t& byteOffset, i case Dali::Pixel::DEPTH_FLOAT: case Dali::Pixel::DEPTH_STENCIL: case Dali::Pixel::R11G11B10F: + case Dali::Pixel::CHROMINANCE_U: + case Dali::Pixel::CHROMINANCE_V: { DALI_LOG_ERROR("Pixel format not compatible.\n"); byteOffset = 0; diff --git a/dali-toolkit/internal/text/text-controller-relayouter.cpp b/dali-toolkit/internal/text/text-controller-relayouter.cpp index ebab609..42199ad 100644 --- a/dali-toolkit/internal/text/text-controller-relayouter.cpp +++ b/dali-toolkit/internal/text/text-controller-relayouter.cpp @@ -67,6 +67,8 @@ Size Controller::Relayouter::CalculateLayoutSizeOnRequiredControllerSize(Control SHAPE_TEXT | GET_GLYPH_METRICS); + const OperationsMask sizeOperations = static_cast(LAYOUT | ALIGN | REORDER); + // Set the update info to relayout the whole text. TextUpdateInfo& textUpdateInfo = impl.mTextUpdateInfo; if((0 == textUpdateInfo.mNumberOfCharactersToAdd) && @@ -78,55 +80,68 @@ Size Controller::Relayouter::CalculateLayoutSizeOnRequiredControllerSize(Control textUpdateInfo.mParagraphCharacterIndex = 0u; textUpdateInfo.mRequestedNumberOfCharacters = model->mLogicalModel->mText.Count(); - // This is to keep Index to the first character to be updated. - // Then restore it after calling Clear method. - auto updateInfoCharIndexBackup = textUpdateInfo.mCharacterIndex; - // Get a reference to the pending operations member OperationsMask& operationsPending = impl.mOperationsPending; - // Layout the text for the new width. - // Apply the pending operations, requested operations and the only once operations. - // Then remove onlyOnceOperations - operationsPending = static_cast(operationsPending | requestedOperationsMask | onlyOnceOperations); - - // Make sure the model is up-to-date before layouting - impl.UpdateModel(static_cast(operationsPending & ~UPDATE_LAYOUT_SIZE)); - // Store the actual control's size to restore later. const Size actualControlSize = visualModel->mControlSize; - DoRelayout(impl, - requestedControllerSize, - static_cast(operationsPending & ~UPDATE_LAYOUT_SIZE), - calculatedLayoutSize); + // Whether the text control is editable + const bool isEditable = NULL != impl.mEventData; - // Clear the update info. This info will be set the next time the text is updated. - textUpdateInfo.Clear(); + if(!isEditable) + { + impl.UpdateModel(onlyOnceOperations); - //TODO: Refactor "DoRelayout" and extract common code of size calculation without modifying attributes of mVisualModel, - //TODO: then calculate GlyphPositions. Lines, Size, Layout for Natural-Size - //TODO: and utilize the values in OperationsPending and TextUpdateInfo without changing the original one. - //TODO: Also it will improve performance because there is no need todo FullRelyout on the next need for layouting. + DoRelayout(impl, + requestedControllerSize, + static_cast(onlyOnceOperations | requestedOperationsMask), + calculatedLayoutSize); - // FullRelayoutNeeded should be true because DoRelayout is MAX_FLOAT, MAX_FLOAT. - // By this no need to take backup and restore it. - textUpdateInfo.mFullRelayoutNeeded = true; + textUpdateInfo.Clear(); + textUpdateInfo.mClearAll = true; - // Restore mCharacterIndex. Because "Clear" set it to the maximum integer. - // The "CalculateTextUpdateIndices" does not work proprely because the mCharacterIndex will be greater than mPreviousNumberOfCharacters. - // Which apply an assumption to update only the last paragraph. That could cause many of out of index crashes. - textUpdateInfo.mCharacterIndex = updateInfoCharIndexBackup; + // Do not do again the only once operations. + operationsPending = static_cast(operationsPending & ~onlyOnceOperations); + } + else + { + // This is to keep Index to the first character to be updated. + // Then restore it after calling Clear method. + auto updateInfoCharIndexBackup = textUpdateInfo.mCharacterIndex; - // Do not do again the only once operations. - operationsPending = static_cast(operationsPending & ~onlyOnceOperations); + // Layout the text for the new width. + // Apply the pending operations, requested operations and the only once operations. + // Then remove onlyOnceOperations + operationsPending = static_cast(operationsPending | requestedOperationsMask | onlyOnceOperations); - // Do the size related operations again. + // Make sure the model is up-to-date before layouting + impl.UpdateModel(static_cast(operationsPending & ~UPDATE_LAYOUT_SIZE)); - const OperationsMask sizeOperations = static_cast(LAYOUT | - ALIGN | - REORDER); + DoRelayout(impl, + requestedControllerSize, + static_cast(operationsPending & ~UPDATE_LAYOUT_SIZE), + calculatedLayoutSize); + + // Clear the update info. This info will be set the next time the text is updated. + textUpdateInfo.Clear(); + //TODO: Refactor "DoRelayout" and extract common code of size calculation without modifying attributes of mVisualModel, + //TODO: then calculate GlyphPositions. Lines, Size, Layout for Natural-Size + //TODO: and utilize the values in OperationsPending and TextUpdateInfo without changing the original one. + //TODO: Also it will improve performance because there is no need todo FullRelyout on the next need for layouting. + + // FullRelayoutNeeded should be true because DoRelayout is MAX_FLOAT, MAX_FLOAT. + // By this no need to take backup and restore it. + textUpdateInfo.mFullRelayoutNeeded = true; + + // Restore mCharacterIndex. Because "Clear" set it to the maximum integer. + // The "CalculateTextUpdateIndices" does not work proprely because the mCharacterIndex will be greater than mPreviousNumberOfCharacters. + // Which apply an assumption to update only the last paragraph. That could cause many of out of index crashes. + textUpdateInfo.mCharacterIndex = updateInfoCharIndexBackup; + } + + // Do the size related operations again. operationsPending = static_cast(operationsPending | sizeOperations); // Restore the actual control's size.