-//
-// Copyright (c) 2014 Samsung Electronics Co., Ltd.
-//
-// Licensed under the Flora License, Version 1.0 (the License);
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://floralicense.org/license/
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an AS IS BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
+/*
+ * Copyright (c) 2014 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
// CLASS HEADER
-#include "text-view-impl.h"
+#include <dali-toolkit/internal/controls/text-view/text-view-impl.h>
// INTERNAL INCLUDES
-#include "split-by-new-line-char-policies.h"
-#include "split-by-word-policies.h"
-#include "split-by-char-policies.h"
-#include "text-view-processor.h"
-#include "text-view-word-processor.h"
-#include "relayout-utilities.h"
-#include "text-view-processor-dbg.h"
+#include <dali-toolkit/internal/controls/text-view/split-by-new-line-char-policies.h>
+#include <dali-toolkit/internal/controls/text-view/split-by-word-policies.h>
+#include <dali-toolkit/internal/controls/text-view/split-by-char-policies.h>
+#include <dali-toolkit/internal/controls/text-view/text-view-processor.h>
+#include <dali-toolkit/internal/controls/text-view/text-view-word-processor.h>
+#include <dali-toolkit/internal/controls/text-view/relayout-utilities.h>
namespace Dali
{
namespace
{
-
const char* MULTILINE_POLICY_NAME[] = {"SplitByNewLineChar", "SplitByWord", "SplitByChar"};
const char* EXCEED_POLICY_NAME[] = {"Original", "Truncate", "Fade", "Split","ShrinkToFit","EllipsizeEnd"};
const char* LINE_JUSTIFICATION_NAME[] = {"Left","Center","Right","Justified"};
TextView::TextViewProcessorMetadata::TextViewProcessorMetadata()
: mType( TextView::TextSet ),
- mPosition( 0 ),
- mNumberOfCharacters( 0 ),
+ mPosition( 0u ),
+ mNumberOfCharacters( 0u ),
mText()
{
}
// This can only be done after the CustomActor connection has been made...
textView->Initialize();
- // Enables by default the offscreen rendering.
- textView->SetSnapshotModeEnabled( false ); /// @note Temporary disabled due to some issues with text quality and glyph loading.
+ // Disables by default the offscreen rendering.
+ textView->SetSnapshotModeEnabled( false );
return handle;
}
InsertTextAt( position, styledText );
}
-void TextView::InsertTextAt( const std::size_t position, const MarkupProcessor::StyledTextArray& text )
+void TextView::InsertTextAt( std::size_t position, const MarkupProcessor::StyledTextArray& text )
{
// Creates metadata with the Insert operation.
TextViewProcessorMetadata metadata;
mRelayoutOperations = RELAYOUT_ALL;
}
-void TextView::ReplaceTextFromTo( const std::size_t position, const std::size_t numberOfCharacters, const std::string& text )
+void TextView::ReplaceTextFromTo( std::size_t position, std::size_t numberOfCharacters, const std::string& text )
{
// Creates a styled text with the markup or plain string.
MarkupProcessor::StyledTextArray styledText;
ReplaceTextFromTo( position, numberOfCharacters, styledText );
}
-void TextView::ReplaceTextFromTo( const std::size_t position, const std::size_t numberOfCharacters, const MarkupProcessor::StyledTextArray& text )
+void TextView::ReplaceTextFromTo( std::size_t position, std::size_t numberOfCharacters, const MarkupProcessor::StyledTextArray& text )
{
// Creates metadata with the Insert operation.
TextViewProcessorMetadata metadata;
mRelayoutOperations = RELAYOUT_ALL;
}
-void TextView::RemoveTextFrom( const std::size_t position, const std::size_t numberOfCharacters )
+void TextView::RemoveTextFrom( std::size_t position, std::size_t numberOfCharacters )
{
// Creates metadata with the Remove operation.
TextViewProcessorMetadata metadata;
return text;
}
-void TextView::SetLineHeightOffset( const PointSize offset )
+void TextView::SetLineHeightOffset( PointSize offset )
{
if( fabsf( mLayoutParameters.mLineHeightOffset - offset ) > Math::MACHINE_EPSILON_1000 )
{
RELAYOUT_ALIGNMENT |
RELAYOUT_VISIBILITY |
RELAYOUT_TEXT_ACTOR_UPDATE |
- RELAYOUT_INSERT_TO_TEXT_VIEW |
- RELAYOUT_INSERT_TO_TEXT_ACTOR_LIST );
+ RELAYOUT_INSERT_TO_TEXT_VIEW );
}
}
}
return PointSize( mLayoutParameters.mLineHeightOffset );
}
-void TextView::SetStyleToCurrentText( const TextStyle& style, const TextStyle::Mask mask )
+void TextView::SetStyleToCurrentText( const TextStyle& style, TextStyle::Mask mask )
{
if( !mCurrentStyledText.empty() )
{
RELAYOUT_ALIGNMENT |
RELAYOUT_VISIBILITY |
RELAYOUT_TEXT_ACTOR_UPDATE |
- RELAYOUT_INSERT_TO_TEXT_VIEW |
- RELAYOUT_INSERT_TO_TEXT_ACTOR_LIST );
+ RELAYOUT_INSERT_TO_TEXT_VIEW );
}
}
}
RELAYOUT_ALIGNMENT |
RELAYOUT_VISIBILITY |
RELAYOUT_TEXT_ACTOR_UPDATE |
- RELAYOUT_INSERT_TO_TEXT_VIEW |
- RELAYOUT_INSERT_TO_TEXT_ACTOR_LIST );
+ RELAYOUT_INSERT_TO_TEXT_VIEW );
}
}
}
RELAYOUT_REMOVE_TEXT_ACTORS |
RELAYOUT_VISIBILITY |
RELAYOUT_TEXT_ACTOR_UPDATE |
- RELAYOUT_INSERT_TO_TEXT_VIEW |
- RELAYOUT_INSERT_TO_TEXT_ACTOR_LIST );
+ RELAYOUT_INSERT_TO_TEXT_VIEW );
}
}
}
if( hasGlyphActors )
{
mRelayoutOperations = static_cast<RelayoutOperationMask>( mRelayoutOperations | RELAYOUT_INSERT_TO_TEXT_VIEW );
- mRelayoutOperations = static_cast<RelayoutOperationMask>( mRelayoutOperations | RELAYOUT_INSERT_TO_TEXT_ACTOR_LIST );
}
}
mOffscreenImageActor.SetAnchorPoint( ParentOrigin::CENTER );
mOffscreenImageActor.SetParentOrigin( ParentOrigin::CENTER );
+ mOffscreenImageActor.SetBlendFunc( BlendingFactor::ONE, BlendingFactor::ONE_MINUS_SRC_ALPHA,
+ BlendingFactor::ONE, BlendingFactor::ONE );
Actor self = Self();
self.Add( mOffscreenRootActor );
self.Add( mOffscreenImageActor );
- mOffscreenImageActor.SetScale(Vector3(1.f, -1.f, 1.f));
+ mOffscreenImageActor.SetScale( Vector3( 1.f, -1.f, 1.f ) );
}
else
{
mRelayoutOperations = static_cast<RelayoutOperationMask>( mRelayoutOperations |
RELAYOUT_REMOVE_TEXT_ACTORS |
RELAYOUT_TEXT_ACTOR_UPDATE |
- RELAYOUT_INSERT_TO_TEXT_VIEW |
- RELAYOUT_INSERT_TO_TEXT_ACTOR_LIST );
+ RELAYOUT_INSERT_TO_TEXT_VIEW );
}
RelayoutRequest();
}
return mMarkUpEnabled;
}
-void TextView::SetScrollEnabled( const bool enable )
+void TextView::SetScrollEnabled( bool enable )
{
if( enable != mVisualParameters.mScrollEnabled )
{
MarkupProcessor::GetStyledTextArray( std::string( "..." ), mEllipsizeText, false );
}
-TextView::LayoutParameters::LayoutParameters( const Toolkit::TextView::MultilinePolicy multilinePolicy,
- const Toolkit::TextView::ExceedPolicy widthExceedPolicy,
- const Toolkit::TextView::ExceedPolicy heightExceedPolicy,
- const Toolkit::Alignment::Type alignmentType,
- const Toolkit::TextView::LineJustification lineJustification,
- const float lineHeightOffset,
- const std::string& ellipsizeText,
- const bool markUpEnabled )
+TextView::LayoutParameters::LayoutParameters( Toolkit::TextView::MultilinePolicy multilinePolicy,
+ Toolkit::TextView::ExceedPolicy widthExceedPolicy,
+ Toolkit::TextView::ExceedPolicy heightExceedPolicy,
+ Toolkit::Alignment::Type alignmentType,
+ Toolkit::TextView::LineJustification lineJustification,
+ float lineHeightOffset,
+ const std::string& ellipsizeText,
+ bool markUpEnabled )
: mMultilinePolicy( multilinePolicy ),
mWidthExceedPolicy( widthExceedPolicy ),
mHeightExceedPolicy( heightExceedPolicy ),
}
TextView::TextView()
-: ControlImpl( false ), // doesn't require touch events
+: Control( REQUIRES_STYLE_CHANGE_SIGNALS ),
mCurrentStyledText(),
mTextViewProcessorOperations(),
mLayoutParameters( Toolkit::TextView::SplitByNewLineChar,
mRelayoutData.mGlyphActors.clear();
mRelayoutOperations = static_cast<RelayoutOperationMask>( mRelayoutOperations | RELAYOUT_INSERT_TO_TEXT_VIEW );
- mRelayoutOperations = static_cast<RelayoutOperationMask>( mRelayoutOperations | RELAYOUT_INSERT_TO_TEXT_ACTOR_LIST );
}
PerformTextViewProcessorOperations();
if( hasGlyphActors )
{
mRelayoutOperations = static_cast<RelayoutOperationMask>( mRelayoutOperations | RELAYOUT_INSERT_TO_TEXT_VIEW );
- mRelayoutOperations = static_cast<RelayoutOperationMask>( mRelayoutOperations | RELAYOUT_INSERT_TO_TEXT_ACTOR_LIST );
}
if( differentWidth || hasGlyphActors )
}
-void TextView::OnStyleChange( StyleChange change )
+void TextView::OnFontChange( bool defaultFontChange, bool defaultFontSizeChange )
{
mRelayoutData.mTextLayoutInfo.mEllipsizeLayoutInfo = TextViewProcessor::WordLayoutInfo();
TextViewProcessor::CreateWordTextInfo( mLayoutParameters.mEllipsizeText,
RELAYOUT_ALIGNMENT |
RELAYOUT_VISIBILITY |
RELAYOUT_TEXT_ACTOR_UPDATE |
- RELAYOUT_INSERT_TO_TEXT_VIEW |
- RELAYOUT_INSERT_TO_TEXT_ACTOR_LIST );
+ RELAYOUT_INSERT_TO_TEXT_VIEW );
}
}
{
bool optimizationDone = false;
- if( it + 1 != endIt )
+ if( it + 1u != endIt )
{
- const TextViewProcessorMetadata& nextRelayoutMetadata( *( it + 1 ) );
+ const TextViewProcessorMetadata& nextRelayoutMetadata( *( it + 1u ) );
if( TextView::TextInserted == nextRelayoutMetadata.mType )
{
if( relayoutMetadata.mPosition == nextRelayoutMetadata.mPosition )
mTextViewProcessorOperations = textViewProcessorOperations;
}
-void TextView::DoRelayOut( const Size& textViewSize, const RelayoutOperationMask relayoutOperationMask )
+void TextView::DoRelayOut( const Size& textViewSize, RelayoutOperationMask relayoutOperationMask )
{
// Traverse the relayout operation vector. It fills the natural size, layout and glyph-actor data structures.
if( !mTextViewProcessorOperations.empty() )
mLayoutParameters.mExceedPolicy = SplitShrink;
break;
}
+ case Toolkit::TextView::EllipsizeEnd:
+ {
+ mLayoutParameters.mExceedPolicy = SplitEllipsizeEnd;
+ break;
+ }
default:
{
DALI_ASSERT_ALWAYS( !"TextView::CombineExceedPolicies() Invalid width and height exceed policies combination" );
{
SetWidthExceedPolicy(Toolkit::TextView::Original);
}
- else if(policyName == "Truncate")
- {
- SetWidthExceedPolicy(Toolkit::TextView::Truncate);
- }
else if(policyName == "Fade")
{
SetWidthExceedPolicy(Toolkit::TextView::Fade);
{
SetHeightExceedPolicy(Toolkit::TextView::Original);
}
- else if(policyName == "Truncate")
- {
- SetHeightExceedPolicy(Toolkit::TextView::Truncate);
- }
else if(policyName == "Fade")
{
SetHeightExceedPolicy(Toolkit::TextView::Fade);
void TextView::OnFadeBoundaryPropertySet( Property::Value propertyValue )
{
Vector4 value( propertyValue.Get<Vector4>() );
- DALI_ASSERT_ALWAYS( value.x >= 0 && value.y >= 0 && value.z >= 0 && value.w >= 0
+ DALI_ASSERT_ALWAYS( ( value.x >= 0.f ) && ( value.y >= 0.f ) && ( value.z >= 0.f ) && ( value.w >= 0.f )
&& "TextView::OnFadeBoundaryPropertySet(). Negative value is invalid. " );
Toolkit::TextView::FadeBoundary fadeBoundary( PixelSize( static_cast<unsigned int>( value.x ) ),