Merge "Transfer uploadOnly flag to the core and update manager" into devel/master
authorSeungho BAEK <sbsh.baek@samsung.com>
Thu, 21 Apr 2022 05:13:50 +0000 (05:13 +0000)
committerGerrit Code Review <gerrit@review>
Thu, 21 Apr 2022 05:13:50 +0000 (05:13 +0000)
dali-toolkit/devel-api/utility/npatch-utilities.cpp
dali-toolkit/internal/text/text-controller-relayouter.cpp

index 78a6268..aead2a5 100644 (file)
@@ -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;
index ebab609..42199ad 100644 (file)
@@ -67,6 +67,8 @@ Size Controller::Relayouter::CalculateLayoutSizeOnRequiredControllerSize(Control
                                                                         SHAPE_TEXT |
                                                                         GET_GLYPH_METRICS);
 
+  const OperationsMask sizeOperations     = static_cast<OperationsMask>(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<OperationsMask>(operationsPending | requestedOperationsMask | onlyOnceOperations);
-
-  // Make sure the model is up-to-date before layouting
-  impl.UpdateModel(static_cast<OperationsMask>(operationsPending & ~UPDATE_LAYOUT_SIZE));
-
   // Store the actual control's size to restore later.
   const Size actualControlSize = visualModel->mControlSize;
 
-  DoRelayout(impl,
-             requestedControllerSize,
-             static_cast<OperationsMask>(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<OperationsMask>(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<OperationsMask>(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<OperationsMask>(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<OperationsMask>(operationsPending | requestedOperationsMask | onlyOnceOperations);
 
-  // Do the size related operations again.
+    // Make sure the model is up-to-date before layouting
+    impl.UpdateModel(static_cast<OperationsMask>(operationsPending & ~UPDATE_LAYOUT_SIZE));
 
-  const OperationsMask sizeOperations = static_cast<OperationsMask>(LAYOUT |
-                                                                    ALIGN |
-                                                                    REORDER);
+    DoRelayout(impl,
+               requestedControllerSize,
+               static_cast<OperationsMask>(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<OperationsMask>(operationsPending | sizeOperations);
 
   // Restore the actual control's size.