<Compile Include="examples\hello-world.cs" />\r
<Compile Include="examples\image-view.cs" />\r
<Compile Include="examples\json-loader.cs" />\r
+ <Compile Include="examples\Main.cs" />\r
<Compile Include="examples\scroll-view.cs" />\r
<Compile Include="examples\test1.cs" />\r
<Compile Include="examples\user-alphafunction.cs" />\r
<Compile Include="examples\visuals-using-custom-view\ContactData.cs" />\r
<Compile Include="examples\visuals-using-custom-view\ContactView.cs" />\r
<Compile Include="examples\visuals-using-custom-view\visuals-using-custom-view.cs" />\r
+ <Compile Include="firstscreen\App.cs" />\r
+ <Compile Include="firstscreen\Constants.cs" />\r
+ <Compile Include="firstscreen\FocusData.cs" />\r
+ <Compile Include="firstscreen\FocusEffect.cs" />\r
+ <Compile Include="firstscreen\IFocusEffect.cs" />\r
+ <Compile Include="firstscreen\ScrollContainer.cs" />\r
<Compile Include="Properties\AssemblyInfo.cs" />\r
</ItemGroup>\r
<ItemGroup>\r
</ProjectReference>\r
</ItemGroup>\r
<ItemGroup>\r
+ <Content Include="res\images\focuseffect\0-normal.png" />\r
+ <Content Include="res\images\focuseffect\1-normal.png" />\r
+ <Content Include="res\images\focuseffect\2-normal.png" />\r
<Content Include="res\images\arrow.png" />\r
+ <Content Include="res\images\focuseffect\background.png" />\r
<Content Include="res\images\Dino-Painted_lambert2SG_color.png" />\r
<Content Include="res\images\Dino-Painted_lambert2SG_gloss.png" />\r
<Content Include="res\images\Dino-Painted_lambert2SG_nmap.png" />\r
<Content Include="res\images\Dino2_lambert2SG_color.png" />\r
<Content Include="res\images\Dino2_lambert2SG_nmap.png" />\r
+ <Content Include="res\images\focuseffect\halo.png" />\r
+ <Content Include="res\images\focuseffect\horizontalFrame.png" />\r
+ <Content Include="res\images\focuseffect\verticalFrame.png" />\r
+ <Content Include="res\images\focuseffect\focus_grid.9.png" />\r
+ <Content Include="res\images\focuseffect\focus_launcher_shadow.9.png" />\r
+ <Content Include="res\images\focuseffect\focus_launcher_shadow_n.png" />\r
<Content Include="res\images\gallery-0.jpg" />\r
<Content Include="res\images\gallery-1.jpg" />\r
<Content Include="res\images\gallery-2.jpg" />\r
<Content Include="res\images\gallery-4.jpg" />\r
<Content Include="res\images\gallery-5.jpg" />\r
<Content Include="res\images\gallery-small-43.jpg" />\r
+ <Content Include="res\images\focuseffect\highlight_spot.png" />\r
+ <Content Include="res\images\focuseffect\highlight_stroke.9.png" />\r
<Content Include="res\images\image-1.jpg" />\r
<Content Include="res\images\image-2.jpg" />\r
<Content Include="res\images\image-3.jpg" />\r
+ <Content Include="res\images\menu\0.png" />\r
+ <Content Include="res\images\menu\1.png" />\r
+ <Content Include="res\images\menu\2.png" />\r
+ <Content Include="res\images\menu\3.png" />\r
+ <Content Include="res\images\menu\4.png" />\r
+ <Content Include="res\images\menu\5.png" />\r
+ <Content Include="res\images\menu\6.png" />\r
<Content Include="res\images\not_yet_sign.png" />\r
+ <Content Include="res\images\poster0\0.jpg" />\r
+ <Content Include="res\images\poster0\1.jpg" />\r
+ <Content Include="res\images\poster0\10.jpg" />\r
+ <Content Include="res\images\poster0\11.jpg" />\r
+ <Content Include="res\images\poster0\12.jpg" />\r
+ <Content Include="res\images\poster0\13.jpg" />\r
+ <Content Include="res\images\poster0\2.jpg" />\r
+ <Content Include="res\images\poster0\3.jpg" />\r
+ <Content Include="res\images\poster0\4.jpg" />\r
+ <Content Include="res\images\poster0\5.jpg" />\r
+ <Content Include="res\images\poster0\6.jpg" />\r
+ <Content Include="res\images\poster0\7.jpg" />\r
+ <Content Include="res\images\poster0\8.jpg" />\r
+ <Content Include="res\images\poster0\9.jpg" />\r
+ <Content Include="res\images\poster1\0.jpg" />\r
+ <Content Include="res\images\poster1\1.jpg" />\r
+ <Content Include="res\images\poster1\2.jpg" />\r
+ <Content Include="res\images\poster1\3.jpg" />\r
+ <Content Include="res\images\poster1\4.jpg" />\r
+ <Content Include="res\images\poster1\5.jpg" />\r
<Content Include="res\images\star-dim.png" />\r
<Content Include="res\images\star-highlight.png" />\r
<Content Include="res\images\star-mod.png" />\r
+ <Content Include="res\images\focuseffect\thumbnail_shadow.9.png" />\r
+ <Content Include="res\images\focuseffect\white-pixel.png" />\r
</ItemGroup>\r
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />\r
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.\r
--- /dev/null
+using System;\r
+using Tizen.NUI;\r
+\r
+\r
+namespace NUISamples.TizenTV.examples\r
+{\r
+ /// <summary>\r
+ /// The main entry point for the application.\r
+ /// </summary>\r
+ /// \r
+\r
+ class Application\r
+ {\r
+ [STAThread]\r
+ static void Main(string[] args)\r
+ {\r
+ new VisualsUsingCustomView.VisualsExample().Run(args); //o\r
+ //new VisualsExample().Run(args); //o\r
+ //new ControlDashboard.Example().Run(args); //o\r
+ //new DatePickerTest.Example().Run(args); //o\r
+ //new HelloTest.Example().Run(args); //o\r
+ //new HelloWorldTest.Example().Run(args); //o\r
+ //new Test1.Example().Run(args); //o\r
+ //new UserAlphaFunctionTest.Example().Run(args); //o\r
+ //new MyCSharpExample.Example().Run(args); //o\r
+ //new VisualViewTest.Example().Run(args); //o\r
+ //new CustomControlTest.Example().Run(args); //o\r
+ //new ScrollViewTest.Example().Run(args); //o\r
+ //new ImageViewTest.Example().Run(args); //o\r
+ //new FlexContainerTest.SampleMain().Run(args); //o \r
+ \r
+ \r
+ //new JsonLoaderTest.Example().Run(args); //x 우분투용\r
+ //new DatePickerUsingJson.Example().Run(args); //x date-picker-theme.json없음\r
+ //new DaliTest.Example().Run(args); //x 검은화면 나오고 죽음\r
+\r
+ }\r
+ }\r
+ \r
+}\r
namespace CustomControlTest
{
+
// A custom control for star rating (draggable to change the rating)
class StarRating : CustomView
{
+ private const string resources = "/home/owner/apps_rw/NUISamples.TizenTV/res";
private FlexContainer _container;
private ImageView[] _images;
private Vector3 _gestureDisplacement;
for(int i = 0; i < 5; i++)
{
- _images[i] = new ImageView("./images/star-dim.png");
+ _images[i] = new ImageView(resources+"/images/star-dim.png");
_container.Add( _images[i] );
}
{
_images[i].WidthResizePolicy = ResizePolicyType.UseNaturalSize;
_images[i].HeightResizePolicy = ResizePolicyType.UseNaturalSize;
- _images[i].SetImage("./images/star-highlight.png");
+ _images[i].SetImage(resources+"/images/star-highlight.png");
}
for(int i = rating; i < 5; i++)
{
_images[i].WidthResizePolicy = ResizePolicyType.UseNaturalSize;
_images[i].HeightResizePolicy = ResizePolicyType.UseNaturalSize;
- _images[i].SetImage("./images/star-dim.png");
+ _images[i].SetImage(resources+"/images/star-dim.png");
}
}
{
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
delegate void CallbackDelegate();
+ private const string resources = "/home/owner/apps_rw/NUISamples.TizenTV/res";
+
public Example() : base()
{
container.Add(imageRow);
// Add the image view to the row
- ImageView image = new ImageView("./images/gallery-" + i + ".jpg");
+ ImageView image = new ImageView(resources+"/images/gallery-" + i + ".jpg");
image.Size = new Vector3(120.0f, 120.0f, 0.0f);
image.WidthResizePolicy = ResizePolicyType.Fixed;
image.HeightResizePolicy = ResizePolicyType.Fixed;
{
class Example : NUIApplication
{
+
+ private const string resources = "/home/owner/apps_rw/NUISamples.TizenTV/res";
public static void Log(string str)
{
Console.WriteLine("[DALI C# SAMPLE] " + str);
}
// Add a ImageView to the stage
_imageView = new ImageView();
- _imageView.ResourceUrl = "./images/gallery-3.jpg";
+ _imageView.ResourceUrl = resources+"/images/gallery-3.jpg";
_imageView.ParentOrigin = ParentOrigin.Center;
_imageView.AnchorPoint = AnchorPoint.Center;
_imageView.PixelArea = new Vector4(0.0f, 0.0f, 0.5f, 0.5f);
Log("OnPushButtonClicked2()!");
layer.Remove(_imageView);
_imageView = new ImageView();
- _imageView.ResourceUrl = "./images/gallery-3.jpg";
+ _imageView.ResourceUrl = resources+"/images/gallery-3.jpg";
_imageView.ParentOrigin = ParentOrigin.Center;
_imageView.AnchorPoint = AnchorPoint.Center;
_imageView.PixelArea = new Vector4(0.0f, 0.0f, 0.5f, 0.5f);
{
class Example : NUIApplication
{
+ private const string resources = "/home/owner/apps_rw/NUISamples.TizenTV/res";
+
+
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
delegate void CallbackDelegate(IntPtr data);
for(int column = 0; column < imageColumns;column++)
{
int imageId = (row * imageColumns + column) % 2 + 1;
- ImageView imageView = new ImageView("images/image-" + imageId + ".jpg");
+ ImageView imageView = new ImageView(resources+"/images/image-" + imageId + ".jpg");
imageView.ParentOrigin = ParentOrigin.Center;
imageView.AnchorPoint = AnchorPoint.Center;
imageView.Size = new Size(imageSize.X, imageSize.Y, imageSize.Z);
// Connect to the OnRelayout signal
_scrollView.OnRelayoutEvent += OnScrollViewRelayout;
- _scrollView.Touched += OnTouch;
+ //_scrollView.Touched += OnTouch;
_scrollView.WheelMoved += Onwheel;
_scrollView.FocusGained += OnKey;
_text = new TextLabel("View Touch Event Handler Test");
private void Initialize()
{
+ InternalSetting.DefaultParentOriginAsTopLeft = false;
Stage stage = Stage.Instance;
stage.BackgroundColor = Color.White;
/// The main entry point for the application.
/// </summary>
[STAThread]
- static void Main(string[] args)
+ static void _Main(string[] args)
{
+
VisualsExample visualsExample = new VisualsExample();
visualsExample.Run(args);
}
--- /dev/null
+using Tizen.NUI;
+using System;
+using System.Runtime.InteropServices;
+using System.Collections.Generic;
+using Tizen.NUI.Constants;
+
+namespace FirstScreen
+{
+ public class FirstScreenApp : NUIApplication
+ {
+ //private Application _application; // Reference to Dali Application.
+ private Stage _stage; // Reference to Dali stage.
+ private Size2D _stageSize; // Reference to Dali stage size.
+
+ private View _topContainer; // Top Container added to the Stage will contain Poster ScrollContainers.
+ private View _bottomContainer; // Bottom Container added to the Stage will contain Menu ScrollContainer.
+ private int _currentPostersContainerID; // Current Poster Container ID visible on the Top Container / Stage.
+ private int _totalPostersContainers; // Number of Poster ScrollContainers to be added on Top Container.
+ private List<ScrollContainer> _postersContainer; // List collection of Poster ScrollContainers used on the Top Container in this demo application.
+ private ScrollContainer _menuContainer; // Menu ScrollContainer used on the Bottom Container in this demo application.
+ private Layer _bottomClipLayer; // Clip layer (Dali Clip Layer instance) used for Bottom Container.
+ private Layer _topClipLayer; // Clip layer (Dali Clip Layer instance) used for Top Container.
+
+ private FocusEffect _focusEffect; // FocusEffect is used to apply Focus animation effect on any supplied item/image.
+ private string _imagePath; // Contains the physical location of all images used in the demo application.
+
+ private ImageView _keyboardFocusIndicator; // Reference to the ImageView (Keyboard Focus indicator) applied to the focused item on ScrollContainer.
+ private ImageView _launcherSeparator; // Reference to the ImageView used for launcher separation (Launcher consists of three image icons on left of Menu ScrollContainer).
+ private ImageView[] launcherIcon; // ImageViews used for launcher Icons.
+ private Animation _showBottomContainerAnimation; // Animation used to show/unhide Bottom Container (Menu ScrollContainer) when it is focused.
+ private Animation _hideBottomContainerAnimation; // Animation used to hide Bottom Container (Menu ScrollContainer) when it is focused.
+ private Animation _showAnimation; // Animation used to move Poster scrollContainer from bottom to top and make it non-transparent.
+ private Animation _hideAnimation; // Animation used to make the unused specified Poster scrollContainer transparent.
+ private ScrollContainer _hideScrollContainer; // The unused Poster scrollContainer which needs to be transparent.
+ FocusManager _keyboardFocusManager; // Reference to Dali KeyboardFocusManager.
+
+ protected override void OnCreate()\r
+ {\r
+ base.OnCreate();\r
+ OnInitialize();\r
+ }
+
+
+ // Create Items for Poster ScrollContainer
+ private void CreatePosters()
+ {
+ for (int j = 0; j < _totalPostersContainers; j++)
+ {
+ View posterContainer = _postersContainer[j].Container;
+ for (int i = 0; i < Constants.PostersItemsCount; i++)
+ {
+ if (j % _totalPostersContainers == 0)
+ {
+ View item = new ImageView(_imagePath + "/poster" + j + "/" + (i % 14) + ".jpg");
+ item.Name = ("poster-item-" + _postersContainer[j].ItemCount);
+ _postersContainer[j].Add(item);
+ }
+ else
+ {
+ View item = new ImageView(_imagePath + "/poster" + j + "/" + (i % 6) + ".jpg");
+ item.Name = ("poster-item-" + _postersContainer[j].ItemCount);
+ _postersContainer[j].Add(item);
+ }
+ }
+
+ if (j == 0)
+ {
+ Show(_postersContainer[j]);
+ }
+ else
+ {
+ Hide(_postersContainer[j]);
+ }
+
+ _postersContainer[j].SetFocused(false);
+ }
+
+ _currentPostersContainerID = 0;
+ }
+
+ // Create Items for Menu ScrollContainer
+ private void CreateMenu()
+ {
+ View menuContainer = _menuContainer.Container;
+ menuContainer.Position = new Position(Constants.LauncherWidth, 0.0f, 0.0f);
+
+ for (int i = 0; i < Constants.MenuItemsCount; i++)
+ {
+ View menuItem = new ImageView(_imagePath + "/menu/" + i % 7 + ".png");
+ menuItem.Name = ("menu-item-" + _menuContainer.ItemCount);
+ _menuContainer.Add(menuItem);
+ }
+ }
+
+ private View OnKeyboardPreFocusChangeSignal(object source, FocusManager.PreFocusChangeEventArgs e)
+ {
+ if (!e.CurrentView && !e.ProposedView)
+ {
+ return _menuContainer;
+ }
+
+ Actor actor = _menuContainer.Container;
+
+ if (e.Direction == View.FocusDirection.Up)
+ {
+ // Move the Focus to Poster ScrollContainer and hide Bottom Container (Menu ScrollContainer)
+ if (_menuContainer.IsFocused)
+ {
+ actor = _postersContainer[_currentPostersContainerID].GetCurrentFocusedActor();
+ _menuContainer.SetFocused(false);
+ _postersContainer[_currentPostersContainerID].SetFocused(true);
+ HideBottomContainer();
+
+ // Also apply Focus animation on Focused item on Poster ScrollContainer
+ FocusAnimation(_postersContainer[_currentPostersContainerID], FocusEffectDirection.BottomToTop);
+ }
+ }
+ else if (e.Direction == View.FocusDirection.Down)
+ {
+ // Show Bottom Container (Menu ScrollContainer) and move the Focus to it
+ if (!_menuContainer.IsFocused)
+ {
+ ShowBottomContainer();
+ actor = _menuContainer.GetCurrentFocusedActor();
+ _postersContainer[_currentPostersContainerID].SetFocused(false);
+ _menuContainer.SetFocused(true);
+
+ // Also apply Focus animation on Focused item on Menu ScrollContainer
+ FocusAnimation(_menuContainer, FocusEffectDirection.TopToBottom);
+ }
+ }
+ else
+ {
+ actor = e.ProposedView;
+ }
+
+ if (e.Direction == View.FocusDirection.Left)
+ {
+ if (_menuContainer.IsFocused)
+ {
+ int id = _menuContainer.FocusedItemID % _totalPostersContainers;
+ if (id != _currentPostersContainerID)
+ {
+ Hide(_postersContainer[_currentPostersContainerID]);
+ _currentPostersContainerID = id;
+
+ Show(_postersContainer[_currentPostersContainerID]);
+ }
+ }
+ }
+ else if (e.Direction == View.FocusDirection.Right)
+ {
+ if (_menuContainer.IsFocused)
+ {
+ int id = _menuContainer.FocusedItemID % _totalPostersContainers;
+ if (id != _currentPostersContainerID)
+ {
+ Hide(_postersContainer[_currentPostersContainerID]);
+ _currentPostersContainerID = id;
+ Show(_postersContainer[_currentPostersContainerID]);
+ }
+ }
+ }
+
+ return (Tizen.NUI.View)actor;
+ }
+
+ // Perform Focus animation Effect on the current Focused Item on ScrollContainer.
+ private void FocusAnimation(ScrollContainer scrollContainer, FocusEffectDirection direction)
+ {
+ _focusEffect.FocusAnimation(scrollContainer.GetCurrentFocusedActor(), scrollContainer.ItemSize, 1000, direction);
+ }
+
+ // Perform Show animation on ScrollContainer (used only for Poster Container)
+ private void Show(ScrollContainer scrollContainer)
+ {
+ scrollContainer.Add(scrollContainer.Container);
+
+ _hideScrollContainer = null;
+
+ // This animation will move Poster scrollContainer from bottom to top and make it non-transparent.
+ _showAnimation = new Animation(350);
+ _showAnimation.AnimateTo(scrollContainer.Container, "ColorAlpha", 1.0f);
+
+ scrollContainer.Container.PositionY = scrollContainer.Container.Position.Y + 200.0f;
+ float targetPositionY = scrollContainer.Container.Position.Y - 200.0f;
+
+ _showAnimation.AnimateTo(scrollContainer.Container, "PositionY", targetPositionY, new AlphaFunction(AlphaFunction.BuiltinFunctions.EaseOutSine));
+
+ _showAnimation.Play();
+ }
+
+ // Perform Hide animation on ScrollContainer (used only for Poster Container)
+ private void Hide(ScrollContainer scrollContainer)
+ {
+ if (_hideAnimation)
+ {
+ _hideAnimation.Clear();
+ _hideAnimation.Reset();
+ }
+
+ int duration = 350;
+ _hideAnimation = new Animation(duration);
+ _hideAnimation.Duration = duration;
+ _hideAnimation.AnimateTo(scrollContainer.Container, "ColorAlpha", 0.0f, 0, (int)((float)duration * 0.75f), new AlphaFunction(AlphaFunction.BuiltinFunctions.EaseOutSine));
+ _hideAnimation.Finished += OnHideAnimationFinished;
+ _hideScrollContainer = scrollContainer;
+ _hideAnimation.Play();
+ }
+
+ // This removes all the items from the specified unused Poster ScrollContainer (hence Stage) to improve performance.
+ private void OnHideAnimationFinished(object source, EventArgs e)
+ {
+ if (_hideScrollContainer)
+ {
+ _hideScrollContainer.Remove(_hideScrollContainer.Container);
+ }
+ }
+
+ // Hide Bottom Container (Menu ScrollContainer) when it is not focused
+ private void HideBottomContainer()
+ {
+ _topClipLayer.ClippingBox = new Rectangle(0,
+ Convert.ToInt32(_stageSize.Height * Constants.TopContainerPositionFactor),
+ Convert.ToInt32((_stageSize.Width)),
+ Convert.ToInt32((_stageSize.Height * Constants.TopClipLayerExpandHeightFactor))); // X, Y, Width, Height
+
+
+ _hideBottomContainerAnimation.AnimateTo(_bottomContainer, "Position", new Position(0.0f, _stageSize.Height * Constants.BottomContainerHidePositionFactor, 0.0f),\r
+ new AlphaFunction(AlphaFunction.BuiltinFunctions.EaseOutSine));
+
+ _hideBottomContainerAnimation.Play();
+ }
+
+ // Show (unhide) Bottom Container (Menu ScrollContainer) when it is focused
+ private void ShowBottomContainer()
+ {
+ _topClipLayer.ClippingBox = new Rectangle(0,
+ Convert.ToInt32(_stageSize.Height * Constants.TopContainerPositionFactor),
+ Convert.ToInt32((_stageSize.Width)),
+ Convert.ToInt32((_stageSize.Height * Constants.TopClipLayerHeightFactor))); // X, Y, Width, Height
+
+ _showBottomContainerAnimation.AnimateTo(_bottomContainer, "Position", new Position(0.0f, _stageSize.Height * Constants.BottomContainerShowPositionFactor, 0.0f),\r
+ new AlphaFunction(AlphaFunction.BuiltinFunctions.EaseOutSine));
+ _showBottomContainerAnimation.Play();
+ }
+
+ // First screen demo Application initialisation
+ private void OnInitialize()
+ {\r
+ Tizen.Log.Debug("NUI", "OnInitialize() is called!");\r
+ Tizen.NUI.InternalSetting.DefaultParentOriginAsTopLeft = false;
+ _hideScrollContainer = null;
+ _stage = Stage.Instance;
+ _stageSize = _stage.Size;
+ _totalPostersContainers = Constants.TotalPostersContainers;
+ _imagePath = Constants.ImageResourcePath;
+
+ _postersContainer = new List<ScrollContainer>();
+ _menuContainer = new ScrollContainer();
+
+ _hideBottomContainerAnimation = new Animation(250);
+ _showBottomContainerAnimation = new Animation(250);
+
+ // Create a Top Container for poster items
+ _topContainer = new View();
+ _topContainer.Size = new Size(_stageSize.Width, _stageSize.Height * Constants.TopContainerHeightFactor, 0);
+ _topContainer.Position = new Position(0.0f, _stageSize.Height * Constants.TopContainerPositionFactor, 0.0f);
+ _topContainer.ParentOrigin = ParentOrigin.TopLeft;
+ _topContainer.AnchorPoint = AnchorPoint.TopLeft;
+
+ // Add a background to Top container
+ PropertyMap visual = new PropertyMap();
+ visual.Insert(Visual.Property.Type, new PropertyValue((int)Visual.Type.Image));
+ visual.Insert(ImageVisualProperty.URL, new PropertyValue(_imagePath + "/focuseffect/background.png"));
+ _topContainer.Background = visual;
+ _topContainer.Name = "TopControl";
+
+ // Create a Bottom Container
+ _bottomContainer = new View();
+ _bottomContainer.Size = new Size(_stageSize.Width, _stageSize.Height * Constants.BottomContainerHeightFactor, 0);
+ _bottomContainer.Position = new Position(0.0f, _stageSize.Height * Constants.BottomContainerHidePositionFactor, 0.0f);
+ _bottomContainer.ParentOrigin = ParentOrigin.TopLeft;
+ _bottomContainer.AnchorPoint = AnchorPoint.TopLeft;
+
+ // Add a background to Bottom Container
+ visual = new PropertyMap();
+ visual.Insert(Visual.Property.Type, new PropertyValue((int)Visual.Type.Image));
+ visual.Insert(ImageVisualProperty.URL, new PropertyValue(_imagePath + "/focuseffect/background.png"));
+ _bottomContainer.Background = visual;
+ _bottomContainer.Name = "BottomControl";
+
+ // Add both Top and Bottom Containers to Stage
+ _stage.GetDefaultLayer().Add(_topContainer);
+ _stage.GetDefaultLayer().Add(_bottomContainer);\r
+\r
+ // Add a clip layer to Top Container\r
+ _topClipLayer = new Layer();
+ _topClipLayer.AnchorPoint = AnchorPoint.BottomCenter;
+ _topClipLayer.ParentOrigin = ParentOrigin.BottomCenter;
+ _topClipLayer.ClippingEnable = true;
+ _topClipLayer.ClippingBox = new Rectangle(0,
+ Convert.ToInt32(_stageSize.Height * Constants.TopContainerPositionFactor),
+ Convert.ToInt32((_stageSize.Width)),
+ Convert.ToInt32((_stageSize.Height * Constants.TopClipLayerHeightFactor))); // X, Y, Width, Height
+ _topContainer.Add(_topClipLayer);
+
+ // Create a SpotLight for items / images of both Poster and Menu ScrollContainers
+ ImageView spotLight = new ImageView(_imagePath + "/focuseffect/highlight_spot.png");
+ spotLight.WidthResizePolicy = ResizePolicyType.UseNaturalSize;
+ spotLight.HeightResizePolicy = ResizePolicyType.UseNaturalSize;
+ spotLight.ParentOrigin = ParentOrigin.Center;
+ spotLight.AnchorPoint = AnchorPoint.Center;
+ spotLight.Name = "spotLight";
+
+ // Create a shadowBorder for items / images of Poster ScrollContainers
+ ImageView shadowBorder = new ImageView(_imagePath + "/focuseffect/thumbnail_shadow.9.png");
+ shadowBorder.ParentOrigin = ParentOrigin.Center;
+ shadowBorder.AnchorPoint = AnchorPoint.Center;
+ shadowBorder.WidthResizePolicy = ResizePolicyType.SizeFixedOffsetFromParent;
+ shadowBorder.HeightResizePolicy = ResizePolicyType.SizeFixedOffsetFromParent;
+ shadowBorder.SizeModeFactor = (new Vector3(32.0f, 41.0f, 0.0f));
+ shadowBorder.Name = "poster shadowBorder";
+
+ // Create Poster Containers and add them to Top Clip layer
+ for (int i = 0; i < _totalPostersContainers; i++)
+ {
+ _postersContainer.Add(new ScrollContainer());
+ _postersContainer[i].Container.Name = "poster" + i;
+ if (i == 0)
+ {
+ _postersContainer[i].ItemSize = new Size((_stageSize.Width * Constants.Poster0ItemWidthFactor) - Constants.PostersContainerPadding,
+ _stageSize.Height * Constants.PostersItemHeightFactor, 0.0f);
+ }
+ else
+ {
+ _postersContainer[i].ItemSize = new Size((_stageSize.Width * Constants.Poster1ItemWidthFactor) - Constants.PostersContainerPadding,
+ _stageSize.Height * Constants.PostersItemHeightFactor, 0.0f);
+ }
+
+ _postersContainer[i].Gap = Constants.PostersContainerPadding;
+ _postersContainer[i].MarginX = Constants.PostersContainerMargin;
+ _postersContainer[i].OffsetYFator = Constants.PostersContainerOffsetYFactor;
+ _postersContainer[i].Width = _stageSize.Width;
+ _postersContainer[i].Height = _stageSize.Height * Constants.PostersContainerHeightFactor;
+ _postersContainer[i].ShadowBorder = shadowBorder;
+ _postersContainer[i].ShadowBorder.Position = new Position(0.0f, 4.0f, 0.0f);
+ _postersContainer[i].SpotLight = spotLight;
+ _topClipLayer.Add(_postersContainer[i]);
+ }
+
+ // Add a clip layer to Bottom Container
+ _bottomClipLayer = new Layer();
+ _bottomClipLayer.AnchorPoint = AnchorPoint.BottomCenter;
+ _bottomClipLayer.ParentOrigin = ParentOrigin.BottomCenter;
+ _bottomClipLayer.ClippingEnable = true;
+ _bottomClipLayer.ClippingBox = new Rectangle(Convert.ToInt32(Constants.LauncherWidth),
+ Convert.ToInt32(_stageSize.Height * Constants.BottomContainerShowPositionFactor),
+ Convert.ToInt32((_stageSize.Width)),
+ Convert.ToInt32((_stageSize.Height - (_stageSize.Height * Constants.BottomClipLayerHeightFactor)))); // X, Y, Width, Height
+ _bottomContainer.Add(_bottomClipLayer);
+
+ // Add Launcher items to Bottom Container. Launcher is used to display three images on left of Menu ScrollContainer
+ launcherIcon = new ImageView[Convert.ToInt32(Constants.LauncherItemsCount)];
+ for (int launcherIndex = 0; launcherIndex < Constants.LauncherItemsCount; launcherIndex++)
+ {
+ launcherIcon[launcherIndex] = new ImageView(_imagePath + "/focuseffect/" + launcherIndex + "-normal.png");
+ launcherIcon[launcherIndex].Name = "launcherIcon" + launcherIndex;
+ launcherIcon[launcherIndex].WidthResizePolicy = ResizePolicyType.UseNaturalSize;
+ launcherIcon[launcherIndex].HeightResizePolicy = ResizePolicyType.UseNaturalSize;
+ launcherIcon[launcherIndex].ParentOrigin = ParentOrigin.CenterLeft;
+ launcherIcon[launcherIndex].AnchorPoint = AnchorPoint.CenterLeft;
+ launcherIcon[launcherIndex].Position = new Position(Constants.LauncherIconWidth * launcherIndex + Constants.LauncherLeftMargin, 0.0f, 0.0f);
+ _bottomContainer.Add(launcherIcon[launcherIndex]);
+ }
+
+ // Add a shadow seperator image between last Launcher icon and Menu ScrollContainer
+ _launcherSeparator = new ImageView(_imagePath + "/focuseffect/focus_launcher_shadow_n.png");
+ _launcherSeparator.Name = "launcherSeparator";
+ _launcherSeparator.WidthResizePolicy = ResizePolicyType.UseNaturalSize;
+ _launcherSeparator.HeightResizePolicy = ResizePolicyType.FillToParent;
+ _launcherSeparator.ParentOrigin = ParentOrigin.CenterLeft;
+ _launcherSeparator.AnchorPoint = AnchorPoint.CenterLeft;
+ _launcherSeparator.Position = new Position(Constants.LauncherIconWidth * Constants.LauncherItemsCount + Constants.LauncherLeftMargin, 0.0f, 0.0f);
+ _bottomContainer.Add(_launcherSeparator);
+
+ // Create Menu Container and add it to Bottom Clip Layer
+ Size menuItemSize = new Size((_stageSize.Width * Constants.MenuItemWidthFactor) - Constants.MenuContainerPadding,
+ _stageSize.Height * Constants.MenuItemHeightFactor, 0.0f);
+ _menuContainer.Container.Name = "menu";
+ _menuContainer.ItemSize = menuItemSize;
+ _menuContainer.Gap = Constants.MenuContainerPadding;
+ _menuContainer.MarginX = Constants.MenuContainerMargin;
+ _menuContainer.OffsetYFator = Constants.MenuContainerOffsetYFactor;
+ _menuContainer.OffsetX = Constants.LauncherWidth;
+ _menuContainer.Width = _stageSize.Width - Constants.LauncherWidth;
+ _menuContainer.Height = _stageSize.Height * Constants.MenuContainerHeightFactor;
+ _menuContainer.ShadowBorder = new ImageView(_imagePath + "/focuseffect/focus_launcher_shadow.9.png");
+ _menuContainer.ShadowBorder.Name = "_menuContainer.ShadowBorder";
+ _menuContainer.ShadowBorder.Size = new Size(_menuContainer.ItemSize.Width + 40.0f, _menuContainer.ItemSize.Height + 50.0f, 0.0f);
+ _menuContainer.ShadowBorder.Position = new Position(0.0f, 5.0f, 0.0f);
+ _menuContainer.ShadowBorder.ParentOrigin = ParentOrigin.Center;
+ _menuContainer.ShadowBorder.AnchorPoint = AnchorPoint.Center;
+ //_menuContainer.ShadowBorder.MixColor = Color.Red;
+ _menuContainer.SpotLight = spotLight;
+ _bottomClipLayer.Add(_menuContainer);
+
+ CreatePosters(); // Create Items for Poster ScrollContainer
+ CreateMenu(); // Create Items for Menu ScrollContainer
+
+ // Initialize PreFocusChange event of KeyboardFocusManager
+ _keyboardFocusManager = FocusManager.Instance;
+ _keyboardFocusManager.PreFocusChange += OnKeyboardPreFocusChangeSignal;
+
+ _keyboardFocusIndicator = new ImageView(_imagePath + "/focuseffect/highlight_stroke.9.png");
+ _keyboardFocusIndicator.ParentOrigin = ParentOrigin.Center;
+ _keyboardFocusIndicator.AnchorPoint = AnchorPoint.Center;
+ _keyboardFocusIndicator.WidthResizePolicy = ResizePolicyType.FillToParent;
+ _keyboardFocusIndicator.HeightResizePolicy = ResizePolicyType.FillToParent;
+
+ _keyboardFocusManager.FocusIndicator = (_keyboardFocusIndicator);
+
+ _keyboardFocusManager.SetAsFocusGroup(_menuContainer, true);
+ _keyboardFocusManager.SetAsFocusGroup(_postersContainer[0], true);
+ _keyboardFocusManager.SetAsFocusGroup(_postersContainer[1], true);
+ _keyboardFocusManager.FocusGroupLoop = (true);
+
+ _focusEffect = new FocusEffect();
+
+ // Move Fcous to Bottom Container (Menu ScrollContainer)
+ ShowBottomContainer();
+ _menuContainer.SetFocused(true);
+
+#if true
+ //test.
+ TextLabel _dateOfTest = new TextLabel();
+ _dateOfTest.WidthResizePolicy = ResizePolicyType.FillToParent;
+ _dateOfTest.HeightResizePolicy = ResizePolicyType.SizeRelativeToParent;
+ _dateOfTest.AnchorPoint = AnchorPoint.TopCenter;
+ _dateOfTest.ParentOrigin = ParentOrigin.TopCenter;
+ _dateOfTest.SizeModeFactor = new Vector3(0.0f, 0.1f, 0.0f);
+ _dateOfTest.BackgroundColor = new Color(43.0f / 255.0f, 145.0f / 255.0f, 175.0f / 255.0f, 1.0f);
+ _dateOfTest.TextColor = Color.White;
+ _dateOfTest.Text = " Common Interface Define Verification Test of 2017-02-10 #1";
+ _dateOfTest.HorizontalAlignment = "BEGIN";
+ _dateOfTest.VerticalAlignment = "CENTER";
+ _dateOfTest.PointSize = 12.0f;
+ _dateOfTest.UnderlineEnabled = true;
+ _stage.GetDefaultLayer().Add(_dateOfTest);
+ Tizen.Log.Debug("NUI", "### 1) ColorMode = " + _dateOfTest.ColorMode);
+ _dateOfTest.ColorMode = ColorMode.UseParentColor;\r
+ Tizen.Log.Debug("NUI", "### 2) ColorMode = " + _dateOfTest.ColorMode);\r
+ _dateOfTest.ColorMode = ColorMode.UseOwnMultiplyParentColor;\r
+ Tizen.Log.Debug("NUI", "### 3) ColorMode = " + _dateOfTest.ColorMode);
+ Tizen.Log.Debug("NUI", "### 1) DrawModeType = " + _dateOfTest.DrawMode);
+ _dateOfTest.DrawMode = DrawModeType.Overlay2D;\r
+ Tizen.Log.Debug("NUI", "### 2) DrawModeType = " + _dateOfTest.DrawMode);\r
+\r
+#endif
+\r
+ }\r
+
+ [STAThread]
+ static void _Main(string[] args)
+ {\r
+ Tizen.Log.Debug("NUI", "Main() is called! ");\r
+
+ FirstScreenApp app = new FirstScreenApp();
+ app.Run(args);
+ }\r
+\r
+ }
+}
--- /dev/null
+using System;
+
+namespace FirstScreen
+{
+ public class Constants
+ {
+ public const int TotalPostersContainers = 2; // Number of Poster ScrollContainers to be added on Top Container
+
+ public const float TopContainerHeightFactor = 0.38f; // Height Factor of stage height used for Top Container total height
+ public const float TopContainerPositionFactor = 0.50f; // Position Factor of stage height used for Top Container position
+ public const float TopClipLayerHeightFactor = 0.34f; // Height Factor of stage height used for Top Clip layer height
+ public const float TopClipLayerExpandHeightFactor = 0.36f; // Expanded Height Factor of stage height used for Top Clip layer height (used when Bottom container is hidden)
+ public const float PostersContainerHeightFactor = 0.32f; // Height Factor of stage height used for Poster ScrollContainers
+ public const float PostersContainerPadding = 2.0f; // Padding size used between items / images in Poster ScrollContainer
+ public const float PostersContainerMargin = 60.0f; // Extra margin Padding size used between items / images in Poster ScrollContainer when item / image is focused
+ public const float PostersContainerOffsetYFactor = 0.17f; // Position Factor of Poster item height used for Poster items / images position
+
+ public const float BottomContainerHeightFactor = 0.16f; // Height Factor of stage height used for Bottom Container total height
+ public const float BottomContainerHidePositionFactor = 0.88f; // Position Factor of stage height used for Bottom Container position when bottom container is hidden (not focused)
+ public const float BottomContainerShowPositionFactor = 0.84f; // Position Factor of stage height used for Bottom Container position when bottom container is not hidden (focused)
+ public const float MenuContainerHeightFactor = 0.16f; // Height Factor of stage height used for Bottom ScrollContainers
+ public const float BottomClipLayerHeightFactor = 0.84f; // Height Factor of stage height used for Bottom Clip layer height
+ public const float MenuContainerPadding = 10.0f; // Padding size used between items / images in Menu ScrollContainer
+ public const float MenuContainerMargin = 25.0f; // Extra margin Padding size used between items / images in Menu ScrollContainer when item / image is focused
+ public const float MenuContainerOffsetYFactor = 0.35f; // Position Factor of Menu item height used for Menu items / images position
+
+ public const float MenuItemWidthFactor = 0.125f; // Width Factor (1/8) of stage Width used for Menu items / images Width
+ public const float MenuItemHeightFactor = 0.10f; // Height Factor of stage height used for Menu items / images Height
+ public const float MenuItemsCount = 14; // Number of Menu items / images used in a Menu ScrollContainer
+
+ public const float Poster0ItemWidthFactor = 0.25f; // Width Factor (1/4) of stage Width used for Poster items / images Width in a Poster ScrollContainer 0
+ public const float Poster1ItemWidthFactor = 0.20f; // Width Factor of stage Width used for Poster items / images Width in a Poster ScrollContainer 1
+ public const float PostersItemHeightFactor = 0.24f; // Height Factor of stage height used for Poster items / images Height
+ public const float PostersItemsCount = 24; // Number of Menu items / images used in a Poster ScrollContainer
+
+ public const float LauncherWidth = 280.0f; // Width of Launcher. Launcher is used to display three images on left of Menu ScrollContainer
+ public const float LauncherLeftMargin = 40.0f; // Extra Spaces to the left of first Launcher item / image
+ public const float LauncherSeparatorWidth = 20.0f; // Extra area / space to the left of Menu ScrollContainer used for a speration shadow image
+ public const float LauncherItemsCount = 3.0f; // Total number of Launcher items / images
+ public const float LauncherIconWidth = (LauncherWidth - LauncherLeftMargin - LauncherSeparatorWidth) / LauncherItemsCount; // Width of each Launcher item / image
+
+ public const int SpotLightDuration = 5000; // Duration of Spot Light Animation.
+ public const int FocusTransitionDuration = 350; // MilliSecond Duration of Focus Transition Animation.
+ public const int FocusDuration = 350; // Duration of Focus Animation.
+ public const int ScrollDuration = 350; // Duration of Scroll Animation.\r
+\r
+ // public const string ImageResourcePath = "./firstscreen/images/"; // for Ubuntu\r
+ public const string ImageResourcePath = "/home/owner/apps_rw/NUISamples.TizenTV/res/images/"; // for target
+
+ }
+}
--- /dev/null
+using Tizen.NUI;
+using Tizen.NUI.Constants;
+using System;
+
+namespace FirstScreen
+{
+ public class FocusData
+ {
+ private string _name; // Name used for FocusData object (mainly to differentiate key frame animation )
+ private string _imageName; // Image File Name (to be loaded from disk) used for ImageView used in key frame animation
+ private Position _parentOrigin; // ParentOrigin applied to ImageView
+ private Size _initSize; // InitSize used for key frame animation
+ private Size _targetSize; // TargetSize used for key frame animation
+ private float _keyFrameStart; // KeyFrameStart used for key frame animation
+ private float _keyFrameEnd; // KeyFrameEnd used for key frame animation
+ private Direction _direction; // Direction used for key frame animation
+ private ImageView _imageFocus; // ImageView used in key frame animation
+
+ // Initialize FocusData used for key frame animation
+ public FocusData(string name, string imageName, Direction direction, Position parentOrigin, Size initSize,
+ Size targetSize, float keyFrameStart, float keyFrameEnd)
+ {
+ _name = name;
+ _imageName = imageName;
+ _parentOrigin = parentOrigin;
+ _initSize = initSize;
+ _targetSize = targetSize;
+ _keyFrameStart = keyFrameStart;
+ _keyFrameEnd = keyFrameEnd;
+ _direction = direction;
+
+ _imageFocus = new ImageView(Constants.ImageResourcePath + "/focuseffect/" + _imageName); // Target
+
+ _imageFocus.ParentOrigin = _parentOrigin;
+ _imageFocus.AnchorPoint = AnchorPoint.Center;
+ _imageFocus.Name = _name;
+ }
+
+ public enum Direction
+ {
+ Horizontal,
+ Vertical
+ };
+
+ public Direction FocusDirection
+ {
+ get { return _direction; }
+ set { _direction = value; }
+ }
+
+ public string Name
+ {
+ get { return _name; }
+ set { _name = value; }
+ }
+
+ public string ImageName
+ {
+ get { return _imageName; }
+ set { _imageName = value; }
+ }
+
+ public Position ParentOrigin
+ {
+ get
+ {
+ return _parentOrigin;
+ }
+
+ set
+ {
+ _parentOrigin = value;
+ _imageFocus.ParentOrigin = _parentOrigin;
+ }
+ }
+
+ public Size InitSize
+ {
+ get { return _initSize; }
+ set { _initSize = value; }
+ }
+
+ public Size TargetSize
+ {
+ get { return _targetSize; }
+ set { _targetSize = value; }
+ }
+
+ public float KeyFrameStart
+ {
+ get { return _keyFrameStart; }
+ set { _keyFrameStart = value; }
+ }
+
+ public float KeyFrameEnd
+ {
+ get { return _keyFrameEnd; }
+ set { _keyFrameEnd = value; }
+ }
+
+ public ImageView ImageItem
+ {
+ get { return _imageFocus; }
+ }\r
+\r
+ }
+}
--- /dev/null
+using Tizen.NUI;
+using Tizen.NUI.Constants;
+using System;
+using System.Collections.Generic;
+
+namespace FirstScreen
+{
+ public class FocusEffect : IFocusEffect
+ {
+ private float _frameThickness;
+ private FocusData[] _focusData; // Each FocusData is used for one key frame animation (total 6 key frame animations needed for EddenEffect)
+ private Animation _animation; // Animation used to apply all six key frame animations
+
+ public FocusEffect()
+ {
+ _frameThickness = 10.0f;
+ float _bottomFrameTime = 0.6f; // complete the halo/bottom animation 60% of the way through
+ float _sideFrameTime = 0.8f; // Start the side frame animation after the bottom animation and complete at 80% of the way through
+ float _topFrameTime = 1.0f; // start the top frame animation after the side frame animation and complete at 100% way through
+
+ // Six key frame animations (FocusData objects) needed for EddenEffect
+ // Two key frame animations for top horizontal effect
+ // Two key frame animations for bottom horizontal effect
+ // Two key frame animations for vertical horizontal effect
+ _focusData = new FocusData[6];
+
+ FocusData focusData = new FocusData("halo", "halo.png", FocusData.Direction.Horizontal, ParentOrigin.TopCenter,
+ new Size(50.0f, 20.0f, 0.0f), new Size(0.0f, 100.0f, 0.0f), 0.0f, _bottomFrameTime);
+ _focusData[0] = focusData;
+
+ focusData = new FocusData("bottom", "horizontalFrame.png", FocusData.Direction.Horizontal, ParentOrigin.TopCenter,
+ new Size(0.0f, 0.0f, 0.0f), new Size(0.0f, _frameThickness, 0.0f), 0.0f, _bottomFrameTime);
+ _focusData[1] = focusData;
+
+ focusData = new FocusData("left", "verticalFrame.png", FocusData.Direction.Vertical, ParentOrigin.BottomLeft,
+ new Size(0.0f, 0.0f, 0.0f), new Size(_frameThickness, 0.0f, 0.0f), _bottomFrameTime, _sideFrameTime);
+ _focusData[2] = focusData;
+
+ focusData = new FocusData("right", "verticalFrame.png", FocusData.Direction.Vertical, ParentOrigin.BottomRight,
+ new Size(0.0f, 0.0f, 0.0f), new Size(_frameThickness, 0.0f, 0.0f), _bottomFrameTime, _sideFrameTime);
+ _focusData[3] = focusData;
+
+ focusData = new FocusData("top-left", "horizontalFrame.png", FocusData.Direction.Horizontal, ParentOrigin.BottomLeft,
+ new Size(0.0f, 0.0f, 0.0f), new Size(0.0f, _frameThickness, 0.0f), _sideFrameTime, _topFrameTime);
+ _focusData[4] = focusData;
+
+ focusData = new FocusData("top-right", "horizontalFrame.png", FocusData.Direction.Horizontal, ParentOrigin.BottomRight,
+ new Size(0.0f, 0.0f, 0.0f), new Size(0.0f, _frameThickness, 0.0f), _sideFrameTime, _topFrameTime);
+ _focusData[5] = focusData;
+ }
+
+ public void FocusAnimation(View parentItem, Size itemSize, int duration, FocusEffectDirection direction)
+ {
+ var itemWidth = itemSize.Width + _frameThickness / 2;
+ var itemHeight = itemSize.Height + _frameThickness / 3;
+
+ if (_animation)
+ {
+ _animation.Clear();
+ _animation.Reset();
+ }
+
+ _animation = new Animation(duration);
+ _animation.Duration = duration;
+
+ if (direction == FocusEffectDirection.BottomToTop)
+ {
+ _focusData[0].ParentOrigin = ParentOrigin.BottomCenter;
+ _focusData[1].ParentOrigin = ParentOrigin.BottomCenter;
+ _focusData[2].ParentOrigin = ParentOrigin.BottomLeft;
+ _focusData[3].ParentOrigin = ParentOrigin.BottomRight;
+ _focusData[4].ParentOrigin = ParentOrigin.TopLeft;
+ _focusData[5].ParentOrigin = ParentOrigin.TopRight;
+ }
+ else
+ {
+ _focusData[0].ParentOrigin = ParentOrigin.TopCenter;
+ _focusData[1].ParentOrigin = ParentOrigin.TopCenter;
+ _focusData[2].ParentOrigin = ParentOrigin.BottomLeft;
+ _focusData[3].ParentOrigin = ParentOrigin.BottomRight;
+ _focusData[4].ParentOrigin = ParentOrigin.BottomLeft;
+ _focusData[5].ParentOrigin = ParentOrigin.BottomRight;
+ }
+
+ foreach (FocusData focusData in _focusData)
+ {
+ var currentParent = focusData.ImageItem.Parent;
+
+ // first parent the controls
+ if (parentItem != currentParent)
+ {
+ parentItem.Add(focusData.ImageItem);
+ }
+
+ focusData.ImageItem.Size = new Size(100.0f, 100.0f, 0.0f);
+ parentItem.Add(focusData.ImageItem);
+
+ Size targetSize = focusData.TargetSize;
+ Size initSize = focusData.InitSize;
+
+ if (focusData.FocusDirection == FocusData.Direction.Horizontal)
+ {
+ // adjust the width to match the parent
+ targetSize.Width = itemWidth;
+ }
+ else // vertical frame
+ {
+ // adjust the height to match the parent
+ targetSize.Height = itemHeight;
+ }
+
+ // half the size for the top frame as we come out from both left / right sides
+ if (focusData.Name == "top-right" || focusData.Name == "top-left")
+ {
+ targetSize.Width = itemWidth - _frameThickness;
+ }
+
+ KeyFrames keyFrames = new KeyFrames();
+
+ keyFrames.Add(0.0f, initSize);
+ keyFrames.Add(focusData.KeyFrameStart, initSize);
+ keyFrames.Add(focusData.KeyFrameEnd, targetSize);
+
+ // for halo add an extra keyframe to shrink it ( in 20% of time after it has finished)
+ if (focusData.Name == "halo")
+ {
+ keyFrames.Add(focusData.KeyFrameEnd + 0.2f, initSize);
+ }
+
+ _animation.AnimateBetween(focusData.ImageItem, "Size", keyFrames, Animation.Interpolation.Linear, new AlphaFunction(AlphaFunction.BuiltinFunctions.EaseOutSine));
+
+ // Simulate the vertical frame growing from the top.
+ // Vertical items are anchored to the bottom of the parent... so when they grow
+ // we need to move them to the middle of the parent ( otherwise they stick out the bottom)
+ if (focusData.FocusDirection == FocusData.Direction.Vertical)
+ {
+ //animate position as well so it looks like animation is coming from bottom
+ KeyFrames keyFramesV = new KeyFrames();
+
+ if (direction == FocusEffectDirection.BottomToTop)
+ {
+ keyFramesV.Add(0.0f, 0.0f);
+ keyFramesV.Add(focusData.KeyFrameStart, 0.0f);
+ }
+ else
+ {
+ keyFramesV.Add(0.0f, -itemHeight);
+ keyFramesV.Add(focusData.KeyFrameStart, -itemHeight);
+ }
+
+ keyFramesV.Add(focusData.KeyFrameEnd, (-itemHeight / 2)); // animate to halfway up the control
+
+
+ _animation.AnimateBetween(focusData.ImageItem, "PositionY", keyFramesV, Animation.Interpolation.Linear, new AlphaFunction(AlphaFunction.BuiltinFunctions.EaseOutSine));
+
+
+ }
+
+ // Simulate the top frame growing from the sides.
+ if (focusData.Name == "top-left")
+ {
+ KeyFrames keyFramesTL = new KeyFrames();
+
+ keyFramesTL.Add(0.0f, 0.0f);
+ keyFramesTL.Add(focusData.KeyFrameStart, 0.0f);
+ keyFramesTL.Add(focusData.KeyFrameEnd, (itemWidth / 2)); // animate to halfway up the control
+
+ // grow these from the left or right
+ _animation.AnimateBetween(focusData.ImageItem, "PositionX", keyFramesTL, Animation.Interpolation.Linear, new AlphaFunction(AlphaFunction.BuiltinFunctions.EaseOutSine));
+
+
+ }
+
+ if (focusData.Name == "top-right")
+ {
+ KeyFrames keyFramesTR = new KeyFrames();
+
+ keyFramesTR.Add(0.0f, 0.0f);
+ keyFramesTR.Add(focusData.KeyFrameStart, 0.0f);
+ keyFramesTR.Add(focusData.KeyFrameEnd, (-itemWidth / 2)); // animate to halfway up the control
+
+ // grow these from the left or right
+ _animation.AnimateBetween(focusData.ImageItem, "PositionX", keyFramesTR, Animation.Interpolation.Linear, new AlphaFunction(AlphaFunction.BuiltinFunctions.EaseOutSine));
+
+ }
+
+ _animation.Finished += OnAnimationFinished;
+
+ _animation.Play();
+ }
+ }
+
+ private void OnAnimationFinished(object source, EventArgs e)
+ {
+ foreach (FocusData focusData in _focusData)
+ {
+ var currentParent = focusData.ImageItem.Parent;
+
+ if (currentParent)
+ {
+ currentParent.Remove(focusData.ImageItem);
+ }
+ }
+ }
+ }
+}
--- /dev/null
+using Tizen.NUI;
+using System;
+
+namespace FirstScreen
+{
+ public enum FocusEffectDirection
+ {
+ TopToBottom,
+ BottomToTop
+ };
+
+ public interface IFocusEffect
+ {
+ void FocusAnimation(View parentItem, Size itemSize, int duration, FocusEffectDirection direction);
+ }
+}
--- /dev/null
+using Tizen.NUI;
+using Tizen.NUI.Constants;
+using System;
+using System.Runtime.InteropServices;
+using System.Collections.Generic;
+
+namespace FirstScreen
+{
+ public class ScrollContainer : CustomView
+ {
+ private View _container; // View Container will be the first item added to ScrollContainer and parent to all the items added to the ScrollContainer.
+ private Size _itemSize; // Size of the item / images added to the ScrollContainer.
+ private List<View> _itemList; // List collection of View items/images added to the ScrollContainer.
+ private int _itemCount; // Number of items / images added to the ScrollContainer.
+ private int _focusedItem; // Index of currently focused View item / image on the ScrollContainer.
+ private float _scrollDisplacement; // Used for horizontal pan displacement.
+ private float _currentScrollPosition; // Used for horizontal scroll position.
+ private float _gap; // Used for gap / padding between items / images on the ScrollContainer.
+ private float _width; // Width of the ScrollContainer.
+ private float _height; // Height of the ScrollContainer.
+ private bool _isFocused; // Flag to check if ScrollContainer is enabled or not.
+ private float _marginX; // Extra horizontal margin is used to add an extra gap between items / images after a focused and scaled item / image.
+ private float _marginY; // Extra vertical margin (not used at the moment).
+ private float _offsetYFactor; // Vertical Position offset Factor of item height.
+ private float _offsetX; // Horizontal Position offset of ScrollContainer.
+ private Stage _stage; // Reference to Dali stage.
+ private Size2D _stageSize; // Reference to Dali stage size.
+ private ImageView _shadowBorder; // Reference to Shadow border ImageView applied to the focused item on ScrollContainer.
+ private ImageView _spotLight; // Reference to SpotLight ImageView applied to the focused item on ScrollContainer.
+ private Animation _spotLightAnimation; // SpotLight Animation applied to the focused item on ScrollContainer.
+ private Animation _focusAnimation; // Focused position animation on ScrollContainer.
+ private Animation _scrollAnimation; // Scroll animation on items of ScrollContainer.
+ private Animation _focusTransitionAnimation; // Focus Transition (scaling /unscaling) animation on items of ScrollContainer.
+ private Path _circularPath; // Circular path used for SpotLight Animation applied to the focused item on ScrollContainer.
+
+ static CustomView CreateInstance()\r
+ {\r
+ return new ScrollContainer();\r
+ }\r
+\r
+ // static constructor registers the control type (for user can add kinds of visuals to it)\r
+ static ScrollContainer()\r
+ {\r
+ // ViewRegistry registers control type with DALi type registery\r
+ // also uses introspection to find any properties that need to be registered with type registry\r
+ ViewRegistry.Instance.Register(CreateInstance, typeof(ScrollContainer));\r
+ }
+
+ public ScrollContainer() : base(typeof(ScrollContainer).Name, CustomViewBehaviour.DisableStyleChangeSignals |
+ CustomViewBehaviour.RequiresKeyboardNavigationSupport)
+ {
+ }
+
+ public bool IsFocused
+ {
+ get
+ {
+ return _isFocused;
+ }
+ }
+
+ public Tizen.NUI.View Container
+ {
+ get
+ {
+ return _container;
+ }
+ }
+
+ public int ItemCount
+ {
+ get
+ {
+ return _itemCount;
+ }
+ }
+
+ public Size ItemSize
+ {
+ get
+ {
+ return _itemSize;
+ }
+
+ set
+ {
+ _itemSize = value;
+
+ Position topLeft = new Position(-0.25f * _itemSize.Width, -0.25f * _itemSize.Height, 0.0f);
+ Position topRight = new Position(0.25f * _itemSize.Width, -0.25f * _itemSize.Height, 0.0f);
+ Position bottomRight = new Position(0.25f * _itemSize.Width, 0.25f * _itemSize.Height, 0.0f);
+ Position bottomLeft = new Position(-0.25f * _itemSize.Width, 0.25f * _itemSize.Height, 0.0f);
+
+ _circularPath = new Path();
+ _circularPath.AddPoint(topLeft);
+ _circularPath.AddPoint(topRight);
+ _circularPath.AddPoint(bottomRight);
+ _circularPath.AddPoint(bottomLeft);
+ _circularPath.AddPoint(topLeft);
+ _circularPath.GenerateControlPoints(0.5f);
+ }
+ }
+
+ public float Gap
+ {
+ get
+ {
+ return _gap;
+ }
+
+ set
+ {
+ _gap = value;
+ }
+ }
+
+ public float MarginX
+ {
+ get
+ {
+ return _marginX;
+ }
+
+ set
+ {
+ _marginX = value;
+ }
+ }
+
+ public float OffsetYFator
+ {
+ get
+ {
+ return _offsetYFactor;
+ }
+
+ set
+ {
+ _offsetYFactor = value;
+ }
+ }
+
+ public float OffsetX
+ {
+ get
+ {
+ return _offsetX;
+ }
+
+ set
+ {
+ _offsetX = value;
+ }
+ }
+
+ public float MarginY
+ {
+ get
+ {
+ return _marginY;
+ }
+
+ set
+ {
+ _marginY = value;
+ }
+ }
+
+ public float Width
+ {
+ get
+ {
+ return _width;
+ }
+
+ set
+ {
+ _width = value;
+ }
+ }
+
+ public float Height
+ {
+ get
+ {
+ return _height;
+ }
+
+ set
+ {
+ _height = value;
+ }
+ }
+
+ public ImageView ShadowBorder
+ {
+ get
+ {
+ return _shadowBorder;
+ }
+
+ set
+ {
+ _shadowBorder = value;
+ }
+ }
+
+ public ImageView SpotLight
+ {
+ get
+ {
+ return _spotLight;
+ }
+
+ set
+ {
+ _spotLight = value;
+ }
+ }
+
+ public int FocusedItemID
+ {
+ get
+ {
+ if (_focusedItem < 0)
+ {
+ _focusedItem = 0;
+ }
+
+ return _focusedItem;
+ }
+ }
+
+ // This override method is called automatically after the Control has been initialized.
+ // Any second phase initialization is done here.
+ public override void OnInitialize()
+ {
+ _itemSize = new Size(0.0f, 0.0f, 0.0f);
+ _gap = 0.0f;
+ _width = 0.0f;
+ _height = 0.0f;
+ _currentScrollPosition = 0.0f;
+ _itemCount = 0;
+ _focusedItem = -1;
+ _isFocused = false;
+ _marginX = 50.0f;
+ _marginY = 0.0f;
+ _offsetYFactor = 0.0f;
+ _offsetX = 0.0f;
+
+ _container = new View();
+ this.Add(_container);
+
+ _itemList = new List<View>();
+
+ this.ParentOrigin = Tizen.NUI.ParentOrigin.TopLeft;
+ this.AnchorPoint = Tizen.NUI.AnchorPoint.TopLeft;
+ this.WidthResizePolicy = ResizePolicyType.FillToParent;
+ this.HeightResizePolicy = ResizePolicyType.FillToParent;
+ this.Focusable = (true);
+
+ _container.ParentOrigin = Tizen.NUI.ParentOrigin.TopLeft;
+ _container.AnchorPoint = Tizen.NUI.AnchorPoint.TopLeft;
+ _container.WidthResizePolicy = ResizePolicyType.FillToParent;
+ _container.HeightResizePolicy = ResizePolicyType.FillToParent;
+
+ _stage = Stage.Instance;
+ _stageSize = _stage.Size;
+
+ _spotLightAnimation = new Animation(Constants.SpotLightDuration);
+ _focusTransitionAnimation = new Animation(Constants.FocusTransitionDuration);
+ _focusAnimation = new Animation(Constants.FocusDuration);
+ _focusAnimation.EndAction = Animation.EndActions.StopFinal;
+ _scrollAnimation = new Animation(Constants.ScrollDuration);
+ _scrollAnimation.EndAction = Animation.EndActions.StopFinal;\r
+\r
+ //changed to internal\r
+ //EnableGestureDetection(Gesture.Type.Pan);
+ }
+
+ // This will be invoked automatically if an item/image is added to the ScrollContainer
+ public override void OnChildAdd(Actor actor)
+ {
+ View item = View.DownCast(actor);
+ //View item = actor as View;
+
+ if (item is View && item != _container)
+ {
+ item.AnchorPoint = Tizen.NUI.AnchorPoint.BottomCenter;
+ item.ParentOrigin = Tizen.NUI.ParentOrigin.BottomCenter;
+
+ item.Size = _itemSize;
+ item.Focusable = (true);
+ item.Position = GetItemPosition(_itemCount, _currentScrollPosition);
+ item.Name = _itemCount.ToString();
+
+ _container.Add(item);
+ _itemList.Add(item);
+
+ _itemCount++;
+ }
+ }
+
+ // This will be invoked automatically if an item/image is removed from the ScrollContainer
+ public override void OnChildRemove(Actor actor)
+ {
+ View item = View.DownCast(actor);
+ //View item = actor as View;
+
+ if (item is View && item != _container)
+ {
+ _container.Remove(item);
+
+ _itemCount--;
+ _itemList.Remove(item);
+ }
+ }
+
+ // This override function supports two dimensional keyboard navigation.
+ // This function returns the next keyboard focusable actor in ScrollContainer control towards the given direction.
+ public override View GetNextKeyboardFocusableView(View currentFocusedView, View.FocusDirection direction, bool loopEnabled)\r
+ {\r
+ if (direction == View.FocusDirection.Left)\r
+ {\r
+ return View.DownCast(FocusPrevious(loopEnabled));\r
+ }\r
+ else if (direction == View.FocusDirection.Right)\r
+ {\r
+ return View.DownCast(FocusNext(loopEnabled));\r
+ }\r
+ else\r
+ {\r
+ return View.DownCast(currentFocusedView);\r
+ }\r
+ }\r
+ \r
+ public override void OnKeyboardFocusChangeCommitted(View commitedFocusableView)\r
+ {
+ Focus(_focusedItem);
+ }
+\r
+\r
+ // This override function is invoked before chosen focusable actor will be focused.\r
+ // This allows the application to preform any actions (i.e. Scroll and SpotLight animations) before the focus is actually moved to the chosen actor.\r
+\r
+ // This override function is invoked whenever a pan gesture is detected on this control.\r
+ // Perform Scroll Animation based upon pan gesture velocity / speed.\r
+ /*public override void OnPan(PanGesture pan)\r
+ {\r
+ return; //currently not used\r
+ }*/\r
+\r
+ // This function returns current focused actor\r
+ public View GetCurrentFocusedActor()
+ {
+ if (_focusedItem < 0)
+ {
+ _focusedItem = 0;
+ }
+
+ return _itemList[_focusedItem];
+ }
+
+ public void SetFocused(bool focused)
+ {
+ _isFocused = focused;
+
+ // Perform Focus animation if the ScrollContainer is not focused already
+ if (!_isFocused)
+ {
+ Actor parent = _shadowBorder.Parent;
+ if (parent)
+ {
+ parent.Remove(_shadowBorder);
+ }
+
+ parent = _spotLight.Parent;
+ if (parent)
+ {
+ parent.Remove(_spotLight);
+ }
+
+ _focusTransitionAnimation.Clear();
+
+ for (int i = 0; i < _itemList.Count; ++i)
+ {
+ Position targetPosition = GetItemPosition(i, _currentScrollPosition);
+
+ _focusTransitionAnimation.AnimateTo(_itemList[i], "Position", targetPosition, new AlphaFunction(AlphaFunction.BuiltinFunctions.EaseOutSine));
+
+ _focusTransitionAnimation.AnimateTo(_itemList[i], "Scale", new Size(1.0f, 1.0f, 1.0f), new AlphaFunction(AlphaFunction.BuiltinFunctions.EaseOutSine));
+ }
+
+ _focusTransitionAnimation.Play();
+ }
+ else
+ {
+ Focus(_focusedItem);
+ }
+ }
+
+ // Obtain ID of first visible item/image on the screen of the ScrollContainer
+ private int GetFirstVisibleItemId()
+ {
+ int firstItemId = -1;
+
+ if (_isFocused)
+ {
+ firstItemId = (int)Math.Floor((-1.0 * _currentScrollPosition + _marginX * 2.0f) / (_itemSize.Width + _gap));
+ }
+ else
+ {
+ firstItemId = (int)Math.Floor(-1.0 * _currentScrollPosition / (_itemSize.Width + _gap));
+ }
+
+ if (firstItemId < 0)
+ {
+ firstItemId = 0;
+ }
+
+ return firstItemId;
+ }
+
+ // Obtain ID of last visible item/image on the screen of the ScrollContainer
+ private int GetLastVisibleItemId()
+ {
+ int lastItemId = -1;
+
+ if (_isFocused)
+ {
+ lastItemId = (int)Math.Ceiling(((_width - _currentScrollPosition - _marginX * 2.0f) / _itemSize.Width) - 1);
+ }
+ else
+ {
+ lastItemId = (int)Math.Ceiling(((_width - _currentScrollPosition) / _itemSize.Width) - 1);
+ }
+
+ if (lastItemId >= _itemList.Count)
+ {
+
+ lastItemId = _itemList.Count - 1;
+ }
+
+ return lastItemId;
+ }
+
+ // Obtain Next item/image (Right of the currently focused item) of the ScrollContainer
+ private Actor FocusNext(bool loopEnabled)
+ {
+ int nextItem = -1;
+
+ if (_focusedItem < GetFirstVisibleItemId() || _focusedItem > GetLastVisibleItemId())
+ {
+ nextItem = GetFirstVisibleItemId();
+ }
+ else
+ {
+ nextItem = _focusedItem + 1;
+ }
+
+ if (nextItem >= _itemList.Count)
+ {
+ if (loopEnabled)
+ {
+ nextItem = 0;
+ }
+ else
+ {
+ nextItem = _itemList.Count - 1;
+ }
+ }
+
+ _focusedItem = nextItem;
+ return _itemList[_focusedItem];
+ }
+
+ // Obtain Previous item/image (left of the currently focused item) of the ScrollContainer
+ private Actor FocusPrevious(bool loopEnabled)
+ {
+ int previousItem = -1;
+
+ if (_focusedItem < GetFirstVisibleItemId() || _focusedItem > GetLastVisibleItemId())
+ {
+ previousItem = GetFirstVisibleItemId();
+ }
+ else
+ {
+ previousItem = _focusedItem - 1;
+ }
+
+ if (previousItem < 0)
+ {
+ if (loopEnabled)
+ {
+ previousItem = _itemList.Count - 1;
+ }
+ else
+ {
+ previousItem = 0;
+ }
+ }
+
+ _focusedItem = previousItem;
+ return _itemList[_focusedItem];
+ }
+
+ // Perform ScrollAnimation on each item
+ private void Scroll(float amount, int baseItem)
+ {
+ float tagetScrollPosition = _currentScrollPosition + amount;
+ float totalItemSize = _itemList.Count * (_itemSize.Width + _gap) + _gap + (_marginX * 2.0f);
+
+ float maxScrollPosition = _width - totalItemSize;
+
+ if (tagetScrollPosition < maxScrollPosition)
+ {
+ tagetScrollPosition = maxScrollPosition;
+ }
+
+ if (tagetScrollPosition > 0.0f)
+ {
+ tagetScrollPosition = 0.0f;
+ }
+
+ _scrollAnimation.Clear();
+
+ for (int i = 0; i < _itemList.Count; ++i)
+ {
+ Position targetPosition = GetItemPosition(i, tagetScrollPosition);
+
+ _scrollAnimation.AnimateTo(_itemList[i], "Position", targetPosition, new AlphaFunction(AlphaFunction.BuiltinFunctions.EaseOutSine));
+ }
+
+ _currentScrollPosition = tagetScrollPosition;
+ _scrollAnimation.Play();
+ }
+
+ // This function uses ItemId as next FocusedItem and preforms Scroll and SpotLight animations on that item.
+ private void Focus(int itemId)
+ {
+
+ if (itemId < 0)
+ {
+ itemId = 0;
+ }
+ else if (itemId >= _itemList.Count)
+ {
+ itemId = _itemList.Count - 1;
+ }
+
+ _itemList[itemId].Add(_shadowBorder);
+ _itemList[itemId].Add(_spotLight);
+
+ // Perform Spot Light animation
+ if (_focusedItem != itemId && _spotLight != null)
+ {
+ _spotLightAnimation.Clear();
+ _spotLightAnimation.AnimatePath(_spotLight, _circularPath, new Vector3(0.0f, 0.0f, 0.0f));
+ _spotLightAnimation.Looping = true;
+ _spotLightAnimation.Play();
+ }
+
+ _focusedItem = itemId;
+
+ Position itemPosition = GetItemPosition(_focusedItem, _currentScrollPosition);
+
+ _focusAnimation.Clear();
+
+ float relativeItemPositionX = itemPosition.X - _itemSize.Width * 0.5f + (_stageSize.Width * 0.5f) + _offsetX;
+ if (relativeItemPositionX < _marginX + _offsetX + _gap)
+ {
+ float amount = _marginX + _offsetX + _gap - relativeItemPositionX;
+ Scroll(amount, itemId + 1); // Perform Scroll animation
+ }
+ else if (relativeItemPositionX + _itemSize.Width + _gap + _marginX > _stageSize.Width)
+ {
+ float amount = relativeItemPositionX + _marginX + _gap + _itemSize.Width - _stageSize.Width;
+ Scroll(-amount, itemId - 1); // Perform Scroll animation
+ }
+ else
+ {
+ // Perform animation when item is focused
+ for (int i = 0; i < _itemList.Count; ++i)
+ {
+ Position targetPosition = GetItemPosition(i, _currentScrollPosition);
+
+ _focusAnimation.AnimateTo(_itemList[i], "Position",targetPosition, new AlphaFunction(AlphaFunction.BuiltinFunctions.EaseOutSine) );
+ }
+ }
+
+ for (int i = 0; i < _itemList.Count; ++i)
+ {
+ // Perform scale animation on Focused item
+ if (i == _focusedItem)
+ {
+ _focusAnimation.AnimateTo(_itemList[i], "Scale", new Size(1.2f, 1.2f, 1.2f), new AlphaFunction(AlphaFunction.BuiltinFunctions.EaseOutSine));
+ }
+ else
+ {
+
+ _focusAnimation.AnimateTo(_itemList[i], "Scale", new Size(1.0f, 1.0f, 1.0f), new AlphaFunction(AlphaFunction.BuiltinFunctions.EaseOutSine) );
+ }
+ }
+
+ _focusAnimation.Play();
+
+ }
+
+ // Calculate Position of any item/image of ScrollContainer
+ private Position GetItemPosition(int itemId, float scrollPosition)
+ {
+ if (_isFocused)
+ {
+ // used (_itemSize.Width * 0.5f) because of AnchorPointCenter
+ // used (_stageSize.Width * 0.5f) because of ParentOriginCenter
+ if (_focusedItem > itemId)
+ {
+ float positionX = (_itemSize.Width * itemId) + (_gap * (itemId + 1)) + scrollPosition + (_itemSize.Width * 0.5f) - (_stageSize.Width * 0.5f);
+ return new Position(positionX, -_itemSize.Height * _offsetYFactor, 0.0f);
+ }
+ else if (_focusedItem == itemId)
+ {
+ float positionX = (_itemSize.Width * itemId) + (_gap * (itemId + 1)) + scrollPosition + _marginX + (_itemSize.Width * 0.5f) - (_stageSize.Width * 0.5f);
+ return new Position(positionX, -_itemSize.Height * _offsetYFactor, 0.0f);
+ }
+ else
+ {
+ float positionX = (_itemSize.Width * itemId) + (_gap * (itemId + 1)) + scrollPosition + _marginX * 2.0f + (_itemSize.Width * 0.5f) - (_stageSize.Width * 0.5f);
+ return new Position(positionX, -_itemSize.Height * _offsetYFactor, 0.0f);
+ }
+ }
+ else
+ {
+ float positionX = (_itemSize.Width * itemId) + (_gap * (itemId + 1)) + scrollPosition + (_itemSize.Width * 0.5f) - (_stageSize.Width * 0.5f);
+ return new Position(positionX, -_itemSize.Height * _offsetYFactor, 0.0f);
+ }
+ }
+
+
+ }
+
+}
+
int ver2 = -1;
int ver3 = -1;
+ try
+ {
if (NDalicManualPINVOKE.NativeVersionCheck(ref ver1, ref ver2, ref ver3))
{
if (ver1 != Version.ver1 || ver2 != Version.ver2 || ver3 != Version.ver3)
{
- throw new System.InvalidOperationException("Dali native version mismatch error! nui=" + Version.ver1 + "." + Version.ver2 + "." + Version.ver3 + " but dali=" + ver1 + "." + ver2 + "." + ver3);
+ //throw new System.InvalidOperationException("Dali native version mismatch error! nui=" + Version.ver1 + "." + Version.ver2 + "." + Version.ver3 + " but dali=" + ver1 + "." + ver2 + "." + ver3);
+ Tizen.Log.Fatal("NUI", "Dali native version mismatch error! nui=" + Version.ver1 + "." + Version.ver2 + "." + Version.ver3 + " but dali=" + ver1 + "." + ver2 + "." + ver3);
}
}
else
{
- throw new System.InvalidOperationException("Dali native version mismatch error! nui=" + Version.ver1 + "." + Version.ver2 + "." + Version.ver3 + " but dali=" + ver1 + "." + ver2 + "." + ver3);
+ //throw new System.InvalidOperationException("Dali native version mismatch error! nui=" + Version.ver1 + "." + Version.ver2 + "." + Version.ver3 + " but dali=" + ver1 + "." + ver2 + "." + ver3);
+ Tizen.Log.Fatal("NUI", "Dali native version mismatch error! nui=" + Version.ver1 + "." + Version.ver2 + "." + Version.ver3 + " but dali=" + ver1 + "." + ver2 + "." + ver3);
+ }
+ }
+ catch (Exception e)
+ {
+ //throw new System.InvalidOperationException("Dali native version is very old! nui=" + Version.ver1 + "." + Version.ver2 + "." + Version.ver3);
+ Tizen.Log.Fatal("NUI", "Dali native version is very old! nui=" + Version.ver1 + "." + Version.ver2 + "." + Version.ver3);
}
}
}
}
} // namespace Constants
+
+ public struct InternalSetting
+ {
+ public static bool DefaultParentOriginAsTopLeft = true;
+ }
} // namesapce Dali
/// Note: If false, then the top-left of the actor is used for the position.
/// Setting this to false will allow scaling or rotation around the anchor-point without affecting the actor's position.
/// </summary>
- public bool PositionUsesAnchorPoint
+ protected bool PositionUsesAnchorPoint
{
get
{
bool temp = false;
- GetProperty(Actor.Property.POSITION_USES_ANCHOR_POINT).Get(ref temp);
+ if(this) GetProperty(Actor.Property.POSITION_USES_ANCHOR_POINT).Get(ref temp);
return temp;
}
set
{
- SetProperty(Actor.Property.POSITION_USES_ANCHOR_POINT, new Tizen.NUI.PropertyValue(value));
+ if(this) SetProperty(Actor.Property.POSITION_USES_ANCHOR_POINT, new Tizen.NUI.PropertyValue(value));
}
}
// By default, we do not want the position to use the anchor point
//this.PositionUsesAnchorPoint = false;
+ this.PositionUsesAnchorPoint = !(InternalSetting.DefaultParentOriginAsTopLeft);
}
internal static global::System.Runtime.InteropServices.HandleRef getCPtr(View obj)