Search Unity

NoesisGUI : XAML-based User Interface [RELEASED]

Discussion in 'Assets and Asset Store' started by sfernandez, Jul 23, 2013.

  1. chandansin

    chandansin

    Joined:
    Oct 1, 2013
    Posts:
    1
  2. sfernandez

    sfernandez

    Joined:
    Feb 14, 2012
    Posts:
    104
    Hi,

    You probably don't have a Background set in the root element of your xaml. When rendering to texture we use that background brush to Clear the texture on each frame. If you want a transparent texture, then you should have a Transparent brush in the root element, like this:

    Code (csharp):
    1.  
    2. <Grid
    3.   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    4.   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    5.   Background="Transparent">
    6.  
    7.     <!-- ... -->
    8.  
    9. </Grid>
    10.  
    Let me know if this solves your problem.
     
  3. ClockworkWolf

    ClockworkWolf

    Joined:
    Sep 12, 2013
    Posts:
    55
    Looks damned awesome, no pro license yet though :-/
     
  4. sfernandez

    sfernandez

    Joined:
    Feb 14, 2012
    Posts:
    104
    Thanks :D

    The Pro license issue is a pain for many Asset Store Publishers. But you can help Unity understand this requirement should be eliminated, please feel free to vote for this: Allow Native Code Plugins in Unity Free
     
  5. fversnel

    fversnel

    Joined:
    Jan 7, 2013
    Posts:
    6
    Yes that works, thank you :). It's a bit weird though, you wouldn't expect the render texture to not clear itself it it doesn't have a background. What I would expect for GUIs is to have a transparent background by default. Visually that is the exact same thing as having no background but conceptually it makes a lot more sense to me.
     
  6. ronan-thibaudau

    ronan-thibaudau

    Joined:
    Jun 29, 2012
    Posts:
    1,722
    I assume it originally was as a sale point for ppl who need native code access themselves.

    If they really insist on keeping that ( i doubt it gets them any sales) they should have a way to sign native dlls on the asset store, and have those loadable even on free based on their signature, that way you still would have to buy pro to use native plugins EXCEPT those you buy from asset store, and asset store sellers finally can stop worrying about doing nice stuff losing out on free licensees!
     
  7. ronan-thibaudau

    ronan-thibaudau

    Joined:
    Jun 29, 2012
    Posts:
    1,722
    You can sign code to authentify it's author, unity could automatically take any unsigned dll submited to the asset store and sign it with their own certificate, then unity free could change from "don't load native dlls" to "don't load native dlls that aren't signed with unity's certificate"
     
  8. ronan-thibaudau

    ronan-thibaudau

    Joined:
    Jun 29, 2012
    Posts:
    1,722
    That's not how it works, you don't give the certificate (only unity has it) , it's used everywhere and is as safe as it gets, an explanation of how it works is outside the scope of this thread however, if you want to read on it read up on code signing certificates and root authorities on the web.
     
  9. ronan-thibaudau

    ronan-thibaudau

    Joined:
    Jun 29, 2012
    Posts:
    1,722
    Of course you can, it doesn't require an internet connection at all to verify, as i said read up on it, it doesn't work at all how you seem to think it does.
     
  10. ronan-thibaudau

    ronan-thibaudau

    Joined:
    Jun 29, 2012
    Posts:
    1,722
    No, because garbage isn't what you want, what you want is code, so generating garbage doesn't help, and you're not going to be able to say "i have code X, i want to guesstimate what the signed version would be". Because garbage wouldn't do, what you want is the signed version of what you currently have unsigned.
     
  11. ClockworkWolf

    ClockworkWolf

    Joined:
    Sep 12, 2013
    Posts:
    55
    Voted :3
     
  12. ibyte

    ibyte

    Joined:
    Aug 14, 2009
    Posts:
    1,047
    Hi received some new vector art from my artist and I want to try and import it into the Trial version of NoesisGUI. I took a svg file, copied one item that I would normally export as a PNG for a button and saved it as xaml. I tried to follow your earlier post with the svg example but I get this error below. I am not sure where and what I should be checking for in the file to correct this.

    Exception: [DX9] Errors found in Assets/XAML/ColoringBookIcon.xaml, please fix them
    Noesis.Error.Check () (at Assets/Plugins/NoesisGUI/Scripts/Core/NoesisError.cs:49)
    NoesisGUISystem.Noesis_LoadXAML (System.IntPtr root, System.String xamlFile) (at Assets/Plugins/NoesisGUI/Scripts/Core/NoesisGUISystem.cs:370)
    NoesisGUISystem.Load[FrameworkElement] (System.String xamlFile) (at Assets/Plugins/NoesisGUI/Scripts/Core/NoesisGUISystem.cs:80)
    NoesisGUISystem.LoadXaml[FrameworkElement] (System.String xamlFile) (at Assets/Plugins/NoesisGUI/Scripts/Core/NoesisGUISystem.cs:34)
    NoesisGUIPanel.Awake () (at Assets/Plugins/NoesisGUI/Scripts/NoesisGUIPanel.cs:61)

    iByte
     
  13. jc_lvngstn

    jc_lvngstn

    Joined:
    Jul 19, 2006
    Posts:
    1,508
    You might try to open this using Kaxaml or some other xaml editor, to get more info on where the error is.
     
  14. ibyte

    ibyte

    Joined:
    Aug 14, 2009
    Posts:
    1,047
    HI I exported the xaml from inkscape and then opened it in Blend for VS 2013 Preview. I copied the grid tags from the tux sample posted earlier but i get the error mentioned above in the editor when i press play. When the xaml file is first added to unity I did see a different error. I understand the xaml has to be parsed ... not sure how to re-invoke that step from within unity.
     
    Last edited: Oct 6, 2013
  15. sandboxgod

    sandboxgod

    Joined:
    Sep 27, 2013
    Posts:
    366
    Wow this plugin looks quite good. I am currently investigating what UI solutions I'll use for my project. Will have to check this out
     
  16. jdesantos

    jdesantos

    Joined:
    May 24, 2013
    Posts:
    312
    The error

    Exception: [DX9] Errors found in Assets/XAML/ColoringBookIcon.xaml, please fix them

    happens when a xaml that reported errors at build time is being used in your game. This means that a previous error was reported when the xaml was added to your project. The error can be reported again if you simply edit and save the xaml file. Just wait a second and Unity should report the problem.

    Could you send me the xaml?

    EDIT: ups, I saw you already posted the xaml in our forums. Thanks, going there.
     
  17. jsantos

    jsantos

    Joined:
    Dec 12, 2012
    Posts:
    1
    Being asked about 9-slice scaling many times by unity users I wanted to make this sample public.

    $ImagesTutorialImg7.jpg

    Code (csharp):
    1.  
    2. <Grid
    3.   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    4.   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    5.  
    6.     <Grid.Background>
    7.         <RadialGradientBrush Center="0.6,0.7" GradientOrigin="0.6,0.7" RadiusX="0.6" RadiusY="0.7">
    8.             <GradientStop Offset="0" Color="YellowGreen"/>
    9.             <GradientStop Offset="1" Color="OliveDrab"/>
    10.         </RadialGradientBrush>
    11.     </Grid.Background>
    12.  
    13.     <Grid.Resources>
    14.       <ImageBrush x:Key="WoodSignTL" ImageSource="Images/9slice.png" ViewboxUnits="Absolute" Viewbox="0,0,50,60"/>
    15.       <ImageBrush x:Key="WoodSignT" ImageSource="Images/9slice.png" ViewboxUnits="Absolute" Viewbox="50,0,200,60"/>
    16.       <ImageBrush x:Key="WoodSignTR" ImageSource="Images/9slice.png" ViewboxUnits="Absolute" Viewbox="250,0,50,60"/>
    17.  
    18.       <ImageBrush x:Key="WoodSignML" ImageSource="Images/9slice.png" ViewboxUnits="Absolute" Viewbox="0,60,50,80"/>
    19.       <ImageBrush x:Key="WoodSignM" ImageSource="Images/9slice.png" ViewboxUnits="Absolute" Viewbox="50,60,200,80"/>
    20.       <ImageBrush x:Key="WoodSignMR" ImageSource="Images/9slice.png" ViewboxUnits="Absolute" Viewbox="250,60,50,80"/>
    21.  
    22.       <ImageBrush x:Key="WoodSignBL" ImageSource="Images/9slice.png" ViewboxUnits="Absolute" Viewbox="0,140,50,60"/>
    23.       <ImageBrush x:Key="WoodSignB" ImageSource="Images/9slice.png" ViewboxUnits="Absolute" Viewbox="50,140,200,60"/>
    24.       <ImageBrush x:Key="WoodSignBR" ImageSource="Images/9slice.png" ViewboxUnits="Absolute" Viewbox="250,140,50,60"/>
    25.     </Grid.Resources>
    26.  
    27.     <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
    28.  
    29.         <Grid Width="200" Height="150">
    30.             <Grid.ColumnDefinitions>
    31.                 <ColumnDefinition Width="50"/>
    32.                 <ColumnDefinition Width="*"/>
    33.                 <ColumnDefinition Width="50"/>
    34.             </Grid.ColumnDefinitions>
    35.             <Grid.RowDefinitions>
    36.                 <RowDefinition Height="60"/>
    37.                 <RowDefinition Height="*"/>
    38.                 <RowDefinition Height="60"/>
    39.             </Grid.RowDefinitions>
    40.  
    41.             <Rectangle Grid.Column="0" Grid.Row="0" Fill="{StaticResource WoodSignTL}"/>
    42.             <Rectangle Grid.Column="1" Grid.Row="0" Fill="{StaticResource WoodSignT}"/>
    43.             <Rectangle Grid.Column="2" Grid.Row="0" Fill="{StaticResource WoodSignTR}"/>
    44.  
    45.             <Rectangle Grid.Column="0" Grid.Row="1" Fill="{StaticResource WoodSignML}"/>
    46.             <Rectangle Grid.Column="1" Grid.Row="1" Fill="{StaticResource WoodSignM}"/>
    47.             <Rectangle Grid.Column="2" Grid.Row="1" Fill="{StaticResource WoodSignMR}"/>
    48.  
    49.             <Rectangle Grid.Column="0" Grid.Row="2" Fill="{StaticResource WoodSignBL}"/>
    50.             <Rectangle Grid.Column="1" Grid.Row="2" Fill="{StaticResource WoodSignB}"/>
    51.             <Rectangle Grid.Column="2" Grid.Row="2" Fill="{StaticResource WoodSignBR}"/>
    52.  
    53.             <TextBlock Grid.ColumnSpan="3" Grid.RowSpan="3" HorizontalAlignment="Center" VerticalAlignment="Center"
    54.                 FontFamily="#Another" FontSize="40" Foreground="#402000" Text="Welcome!"/>
    55.         </Grid>
    56.  
    57.     </StackPanel>
    58.  
    59. </Grid>
    60.  
    Although this is the most compatible way (it works in Noesis and Blend) a better approach is coding an user control that mimics this behavior.
     
  18. charmandermon

    charmandermon

    Joined:
    Dec 4, 2011
    Posts:
    352
    This looks great, but $150 is pretty expensive for me. I would buy it instantly if it was less than $50.
     
  19. fversnel

    fversnel

    Joined:
    Jan 7, 2013
    Posts:
    6
    How can I disable keyboard input for a specific GUI instance? In this case I don't want Noesis to handle my Tab inputs.
     
  20. jdesantos

    jdesantos

    Joined:
    May 24, 2013
    Posts:
    312
    We are in fact a lot cheaper than the rest of alternatives equivalent to NoesisGUI:
    • Coherent ($350)
    • Scaleform ($295/platform = $1180)
    In fact, I would take the price of $150 as an on sale one because we are going to adjust a little bit the price as soon as 1.1 version is ready (almost there).
     
    Last edited: Oct 8, 2013
  21. sfernandez

    sfernandez

    Joined:
    Feb 14, 2012
    Posts:
    104
    We don't have support to do this right now.

    But you can add yourself a Enable/Disable Keyboard flag in the NoesisGUIPanel component and modify NoesisUIRenderer script also to process keyboard events only when necessary.
     
  22. jdesantos

    jdesantos

    Joined:
    May 24, 2013
    Posts:
    312
    We implemented this way to avoid clearing the texture two times: one to transparent (default) and another one to the color set in the xaml.

    But at the end, this logic is giving us trouble. We will probably deactivate it and will add instead a new option in the panel to specify if the texture must be cleared automatically to a color by default.
     
  23. jdesantos

    jdesantos

    Joined:
    May 24, 2013
    Posts:
    312
    I wanted to show you how the changed we made in NoesisGUI v1.1 to improve the way UserControl and rest of extensions are handled. Let me show a very basic color picker:

    Code (csharp):
    1.  
    2. <UserControl
    3.   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    4.   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    5.   x:Class="Sample.ColorPicker"
    6.   UseLayoutRounding="True">
    7.  
    8.   <UserControl.Resources>
    9.     <Style x:Key="SpectrumSliderButtonStyle" TargetType="{x:Type RepeatButton}">
    10.       <Setter Property="OverridesDefaultStyle" Value="True"/>
    11.       <Setter Property="UseLayoutRounding" Value="True"/>
    12.       <Setter Property="IsTabStop" Value="False"/>
    13.       <Setter Property="Focusable" Value="False"/>
    14.       <Setter Property="ClickMode" Value="Press"/>
    15.       <Setter Property="Delay" Value="250"/>
    16.       <Setter Property="Interval" Value="100"/>
    17.       <Setter Property="Template">
    18.         <Setter.Value>
    19.           <ControlTemplate TargetType="{x:Type RepeatButton}">
    20.             <Border Background="Transparent" />
    21.           </ControlTemplate>
    22.         </Setter.Value>
    23.       </Setter>
    24.     </Style>
    25.     <ControlTemplate x:Key="SpectrumSliderThumbTemplate" TargetType="{x:Type Thumb}">
    26.       <Grid Background="Transparent">
    27.         <Grid.ColumnDefinitions>
    28.           <ColumnDefinition Width="*"/>
    29.           <ColumnDefinition Width="20"/>
    30.           <ColumnDefinition Width="*"/>
    31.         </Grid.ColumnDefinitions>
    32.         <Path Grid.Column="0" Data="M0,0L8,5 0,10z" Fill="Black" HorizontalAlignment="Right"/>
    33.         <Path Grid.Column="2" Data="M8,0L0,5 8,10z" Fill="Black" HorizontalAlignment="Left"/>
    34.       </Grid>
    35.     </ControlTemplate>
    36.     <ControlTemplate x:Key="SpectrumSliderTemplate" TargetType="{x:Type Slider}">
    37.       <Grid>
    38.         <Rectangle StrokeThickness="1" Stroke="#000000" Width="20">
    39.           <Rectangle.Fill>
    40.             <LinearGradientBrush StartPoint="0.5, 0" EndPoint="0.5, 1">
    41.               <GradientStop Color="#FFFF0000" Offset="0"/>
    42.               <GradientStop Color="#FFFF00FF" Offset="0.1666666"/>
    43.               <GradientStop Color="#FF0000FF" Offset="0.3333333"/>
    44.               <GradientStop Color="#FF00FFFF" Offset="0.5"/>
    45.               <GradientStop Color="#FF00FF00" Offset="0.6666666"/>
    46.               <GradientStop Color="#FFFFFF00" Offset="0.8333333"/>
    47.               <GradientStop Color="#FFFF0000" Offset="1"/>
    48.             </LinearGradientBrush>
    49.           </Rectangle.Fill>
    50.         </Rectangle>
    51.         <Track x:Name="PART_Track">
    52.           <Track.Thumb>
    53.             <Thumb Template="{StaticResource SpectrumSliderThumbTemplate}" Margin="0,-4"/>
    54.           </Track.Thumb>
    55.           <Track.DecreaseRepeatButton>
    56.             <RepeatButton Style="{StaticResource SpectrumSliderButtonStyle}" Command="Slider.DecreaseLarge" />
    57.           </Track.DecreaseRepeatButton>
    58.           <Track.IncreaseRepeatButton>
    59.             <RepeatButton Style="{StaticResource SpectrumSliderButtonStyle}" Command="Slider.IncreaseLarge" />
    60.           </Track.IncreaseRepeatButton>
    61.         </Track>
    62.       </Grid>
    63.     </ControlTemplate>
    64.   </UserControl.Resources>
    65.  
    66.   <Grid Background="Gray">
    67.     <Grid.RowDefinitions>
    68.       <RowDefinition Height="Auto"/>
    69.       <RowDefinition Height="*"/>
    70.     </Grid.RowDefinitions>
    71.  
    72.     <Grid.ColumnDefinitions>
    73.       <ColumnDefinition Width="*"/>
    74.       <ColumnDefinition Width="Auto"/>
    75.     </Grid.ColumnDefinitions>
    76.  
    77.     <!-- Color selected -->
    78.     <Grid Grid.Row="0" Grid.ColumnSpan="2">
    79.       <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="0">
    80.         <TextBlock x:Name="Text" FontSize="15" VerticalAlignment="Center" Width = "70"/>
    81.         <Rectangle Width="50" Height="50" Margin="10" StrokeThickness="1" Stroke="#000000">
    82.           <Rectangle.Fill>
    83.             <SolidColorBrush x:Name="Color" Color="#FF0000"/>
    84.           </Rectangle.Fill>
    85.         </Rectangle>
    86.       </StackPanel>
    87.     </Grid>
    88.  
    89.     <!-- Picker -->
    90.     <Grid x:Name="HS" Grid.Row="1" Grid.Column="0">
    91.       <Rectangle>
    92.         <Rectangle.Fill>
    93.           <LinearGradientBrush StartPoint="0,1" EndPoint="0,0">
    94.             <GradientStop Color="White" Offset="0"/>
    95.             <GradientStop x:Name="Stop" Color="Red" Offset="1"/>
    96.           </LinearGradientBrush>
    97.         </Rectangle.Fill>
    98.       </Rectangle>
    99.       <Rectangle StrokeThickness="1" Stroke="#000000">
    100.         <Rectangle.Fill>
    101.           <LinearGradientBrush StartPoint="1,0" EndPoint="0,0">
    102.             <GradientStop Offset="0" Color="#00000000"/>
    103.             <GradientStop Offset="1" Color="#FF000000"/>
    104.           </LinearGradientBrush>
    105.         </Rectangle.Fill>
    106.       </Rectangle>
    107.  
    108.       <Canvas Height="12" Width="12" RenderTransformOrigin="0.5,0.5"  ClipToBounds="true">
    109.         <Canvas.RenderTransform>
    110.           <TranslateTransform x:Name="PickerTransform" X="0" Y="0"/>
    111.         </Canvas.RenderTransform>
    112.         <Grid>
    113.           <Ellipse Stroke="Black" Width="12" Height="12"/>
    114.           <Ellipse Stroke="White" Width="10" Height="10"/>
    115.         </Grid>
    116.       </Canvas>
    117.  
    118.     </Grid>
    119.  
    120.     <!-- Spectrum -->
    121.     <Grid Grid.Row="1" Grid.Column="1">
    122.       <Slider x:Name="Slider" Orientation="Vertical" IsMoveToPointEnabled="True" Minimum="0" Maximum="360"
    123.         Value="0" Template="{StaticResource SpectrumSliderTemplate}" Margin="5,0"/>
    124.     </Grid>
    125.  
    126.   </Grid>
    127.  
    128. </UserControl>
    129.  
    Code (csharp):
    1.  
    2. using Noesis;
    3. using System;
    4.  
    5. namespace Sample
    6. {
    7.  
    8. [Noesis.Extended]
    9. [Noesis.UserControlSource("Assets/Test/ColorPicker.xaml")]
    10. public class ColorPicker : Noesis.UserControl
    11. {
    12.     public static DependencyProperty ColorProperty = DependencyProperty.Register("Color",
    13.         typeof(SolidColorBrush), typeof(ColorPicker), new PropertyMetadata(null));
    14.  
    15.     public SolidColorBrush Color
    16.     {
    17.         get { return GetValue<SolidColorBrush>(ColorProperty); }
    18.         set { SetValue<SolidColorBrush>(ColorProperty, value); }
    19.     }
    20.  
    21.     public void OnPostInit()
    22.     {
    23.         _spectrum = FindName<Slider>("Slider");
    24.         _hs = FindName<FrameworkElement>("HS");
    25.         _pickerTransform = FindName<TranslateTransform>("PickerTransform");
    26.         _text = FindName<TextBlock>("Text");
    27.         _color = FindName<SolidColorBrush>("Color");
    28.         _stop = FindName<GradientStop>("Stop");
    29.  
    30.         _spectrum.ValueChanged += this.OnSpectrumChange;
    31.         _hs.MouseLeftButtonDown += this.OnMouseLeftButtonDown;
    32.         _hs.MouseLeftButtonUp += this.OnMouseLeftButtonUp;
    33.         _hs.MouseMove += this.OnMouseMove;
    34.         _hs.SizeChanged += this.OnSizeChanged;
    35.  
    36.         _hue = 0.0f;
    37.         _saturation = 0.5f;
    38.         _value = 0.5f;
    39.  
    40.         Update();
    41.     }
    42.  
    43.     private void OnSpectrumChange(float oldValue, float newValue)
    44.     {
    45.         _hue = newValue;
    46.         _stop.SetColor(HSVToColor(_hue, 1, 1));
    47.         Update();
    48.     }
    49.  
    50.     private void OnMouseLeftButtonDown(BaseComponent c, MouseButtonEventArgs args)
    51.     {
    52.         Focus();
    53.         _hs.CaptureMouse();
    54.         Noesis.Point p = _hs.PointFromScreen(args.position);
    55.         UpdatePickerPosition(p);
    56.     }
    57.  
    58.     private void OnMouseLeftButtonUp(BaseComponent c, MouseButtonEventArgs args)
    59.     {
    60.         _hs.ReleaseMouseCapture();
    61.     }
    62.  
    63.     private void OnMouseMove(BaseComponent c, MouseEventArgs args)
    64.     {
    65.         if (_hs.GetIsMouseCaptured())
    66.         {
    67.             Noesis.Point p = _hs.PointFromScreen(args.position);
    68.             UpdatePickerPosition(p);
    69.         }
    70.     }
    71.  
    72.     private void OnSizeChanged(BaseComponent c, SizeChangedEventArgs args)
    73.     {
    74.         Noesis.Size size = args.sizeChangedInfo.newSize;
    75.         _pickerTransform.SetX(_value * size.width - 0.5f * size.width);
    76.         _pickerTransform.SetY(size.height - _saturation * size.height - 0.5f * size.height);
    77.     }
    78.  
    79.     private void UpdatePickerPosition(Noesis.Point pos)
    80.     {
    81.         Noesis.Size size = _hs.GetRenderSize();
    82.  
    83.         pos.x = Math.Max(0.0f, Math.Min(size.width, pos.x));
    84.         pos.y = Math.Max(0.0f, Math.Min(size.height, pos.y));
    85.  
    86.         _pickerTransform.SetX(pos.x - 0.5f * size.width);
    87.         _pickerTransform.SetY(pos.y - 0.5f * size.height);
    88.  
    89.         _value = pos.x / size.width;
    90.         _saturation = (size.height - pos.y) / size.height;
    91.  
    92.         Update();
    93.     }
    94.  
    95.     private void Update()
    96.     {
    97.         Noesis.Color color = HSVToColor(_hue, _saturation, _value);
    98.         int red = color.GetRedI();
    99.         int green = color.GetGreenI();
    100.         int blue = color.GetBlueI();
    101.         _text.SetText(String.Format("#{0:X2}{1:X2}{2:X2}", red, green, blue));
    102.         _color.SetColor(color);
    103.         Color = new SolidColorBrush(color);
    104.     }
    105.  
    106.     private Noesis.Color HSVToColor(float hue, float saturation, float value)
    107.     {
    108.         float chroma = value * saturation;
    109.         float hueTag = (hue % 360) / 60;
    110.         float x = chroma * (1 - Math.Abs(hueTag % 2.0f - 1));
    111.         float m = value - chroma;
    112.  
    113.         switch ((int)hueTag)
    114.         {
    115.             case 0:
    116.             {
    117.                 return new Noesis.Color(chroma + m, x + m, m);
    118.             }
    119.             case 1:
    120.             {
    121.                 return new Noesis.Color(x + m, chroma + m, m);
    122.             }
    123.             case 2:
    124.             {
    125.                 return new Noesis.Color(m, chroma + m, x + m);
    126.             }
    127.             case 3:
    128.             {
    129.                 return new Noesis.Color(m, x + m, chroma + m);
    130.             }
    131.             case 4:
    132.             {
    133.                 return new Noesis.Color(x + m, m, chroma + m);
    134.             }
    135.             default:
    136.             {
    137.                 return new Noesis.Color(chroma + m, m, x + m);
    138.             }
    139.         }
    140.     }
    141.  
    142.     private Slider _spectrum;
    143.     private FrameworkElement _hs;
    144.     private TranslateTransform _pickerTransform;
    145.     private TextBlock _text;
    146.     private SolidColorBrush _color;
    147.     private GradientStop _stop;
    148.  
    149.     private float _hue;
    150.     private float _saturation;
    151.     private float _value;
    152. }
    153.  
    154. }
    155.  
    $ColorPicker.png
     
    Last edited: Oct 11, 2013
  24. sfernandez

    sfernandez

    Joined:
    Feb 14, 2012
    Posts:
    104
    NoesisGUI v1.1.0 has been submitted to the Asset Store. Apart from many improvements to the product since the original version, this release represents an important breakthrough: the end of the $150 price set up for early adopters. The new price of NoesisGUI will be $250. This doesn't affect customer who already purchased the product. Being the price changed the next week, you still have the chance to buy it at the current price and benefit from all future updates.

    If you have in mind using NoesisGUI in the future, now it is a good opportunity to get a license at an extraordinary price. Only few days left for this offer.

    >> Buy from Asset Store
     
    Last edited: Oct 11, 2013
  25. jdesantos

    jdesantos

    Joined:
    May 24, 2013
    Posts:
    312
    Yes, we know this is always a complicated decision. But we think that even $250 is a bargain. For that price, you get a plugin that you can use forever in unlimited projects and you get updates forever. NoesisGUI is becoming a better product in each release. And we are releasing each two weeks more or less. How many man/hours could you have with $250 to develop a GUI similar to this?

    And yet better, you can still get this plugin for $150 now! This is our way to compensate early adopters and initial betatesters.
     
  26. jdesantos

    jdesantos

    Joined:
    May 24, 2013
    Posts:
    312
    By the way, we added these flags to the component in NoesisGUI v1.1
     
  27. tiggus

    tiggus

    Joined:
    Sep 2, 2010
    Posts:
    1,240
    Can you recommend any XAML books that stand out above the rest that take you from beginner to advanced? Just bit the XAML bullet and looking forward to building some unique interfaces.
     
  28. jdesantos

    jdesantos

    Joined:
    May 24, 2013
    Posts:
    312
    Sure. This one, Windows Presentation Foundation Unleashed (http://www.amazon.es/Windows-Presentation-Foundation-Unleashed-Wpf/dp/0672328917) is the one you are looking for. We followed it when implementing NoesisGUI and everybody here has read it. Nathan's book is a lot superior to everything I have read about XAML.

    I know there are newer versions of the book but I didn't have the opportunity to read them.
     
  29. ronan-thibaudau

    ronan-thibaudau

    Joined:
    Jun 29, 2012
    Posts:
    1,722
    The new versions of the book are just as good with more / new content, i recommand picking up the latest one (4.5) instead :)
     
  30. tiggus

    tiggus

    Joined:
    Sep 2, 2010
    Posts:
    1,240
    Thanks guys, added to my bookshelf on safari online :)

    Just got NoessisGUI today for the reduced price, look forward to learning it.
     
  31. jdesantos

    jdesantos

    Joined:
    May 24, 2013
    Posts:
    312
    Thanks for buying. Remember to register and visit our forum to get support.
     
  32. sfernandez

    sfernandez

    Joined:
    Feb 14, 2012
    Posts:
    104
    NoesisGUI v1.1.0 has been submitted to the Asset Store. Apart from many improvements to the product since the original version, this release represents an important breakthrough: the end of the $150 price set up for early adopters. The new price of NoesisGUI will be $250. This doesn't affect customer who already purchased the product. Being the price changed along this week, you still have the chance to buy it at the current price and benefit from all future updates.

    If you have in mind using NoesisGUI in the future, now it is a good opportunity to get a license at an extraordinary price.

    >> Buy from Asset Store

    Only a few days left to buy at early-adopter price!
     
  33. sfernandez

    sfernandez

    Joined:
    Feb 14, 2012
    Posts:
    104
    NoesisGUI v1.1.0

    >> Buy from Asset Store

    • [Unity] Improved C# API. Please read tutorials because old code needs to be updated.
      • No more need of a swigCPtr member, custom constructors, Dispose or static Register function on extended classes.
      • Dependency properties are now registered in the static class constructor.
      • Classes are now extended by specifying the [Noesis.Extended] class attribute.
      • UserControl associated xaml is now specified by the [Noesis.UserControlSource(string)] class attribute.
      • Notifications of property changes are now done using NotifyPropertyChanged(string).
      • SuppressUnmanagedCodeSecurity attribute added to PInvoke functions.
      • Improvements to the following documentation:
        • Unity3D Tutorial.
        • Extending NoesisGUI Tutorial.
        • Commands Tutorial.
        • UserControl Tutorial. Includes new ColorPicker sample.
    • [Unity] Added support for changing Image.Source at runtime by creating a TextureSource from a UnityEngine.Texture2D.
    • Two new sections added to Images Tutorial: 9-Slice Scaling and Generating Images at Runtime.
    • Added FrameworkElement.GetTemplateChild() and FrameworkTemplate.FindName() was modified to accept a templated parent element like in WPF.
    • [Unity] Added Enable Keyboard/Mouse toggle to NoesisGUIPanel component in Unity.
    • [Unity] Missing functions and types exposed to Unity API:
      • ListBox.SelectedItems.
      • ListView and ListViewItem.
      • Nullable types for Color, Point, Rect, Size and Thickness.
    • Improved Binding.StringFormat implementation. Updated Binding tutorial.
    • Markup parser in XamlImporter improved.
    • Fixed: Storyboard is constructed now with the children collection always created.
    • Fixed: Crash when using a StoryBoard that can't resolve target names.
    • Fixed: Bug when an exception was thrown while creating a Renderer.
    • Fixed: Commas are now optional specifying a MatrixTransform.Transform in xaml.
    • Fixed: Text blurriness in positions above 1024px.
    • Fixed: Slider.IsMoveToPointEnabled was not working properly for vertical sliders.
    • Fixed: [Unity] Problems with Alt+Tab when in fullscreen.
    • Fixed: [Unity] Error messages with internal path "Unity/Unity/" cleaned.
    • Fixed: [Unity] Fixed rendering glitches in standalone.
     
  34. charmandermon

    charmandermon

    Joined:
    Dec 4, 2011
    Posts:
    352
    No offense, but $250 is not a bargain. That is how you kill your product, by only supporting a few elite customers. Eventually you run out of those customers, and decide you want to charge for feature updates and add-ons to pay the bills but even that doesn't cut it so you start to charge for support. If you want to stay in business longer than 6 months I suggest you retarget your price to something the masses can afford.
     
  35. Ghoxt

    Ghoxt

    Joined:
    Mar 25, 2008
    Posts:
    104
    Hmm, Even at $250 compared to the competition, it's still way ahead of everything else value wise for what you get. You can always wait for the Unity new GUI or use NGUI etc...which is fair as you have plenty of options.

    Sfernandez, had a question regarding Z distance and overlapping GUI elements. Are their any limitations or gotchas for clipping etc, as far as putting GUI elements at varying distances into the viewing frame? My project to "Change the World" may need something of this sort. Thanks ahead of time for your reply.
     
  36. jashan

    jashan

    Joined:
    Mar 9, 2007
    Posts:
    3,307
    I think $250 is a perfectly reasonable price considering what you get. Also keep in mind that you need Unity Pro - so that will be the bigger hurdle. And not being able to use it for Web player builds also is a much bigger issue. Pricing is always a challenge, and there will always be people who feel the price is too high or too low (yes, that also happens ;-) ). But it's also easy to measure the results of a price change. And quite frequently, after an initial drop, the overall income quite often goes up ;-)
     
  37. sfernandez

    sfernandez

    Joined:
    Feb 14, 2012
    Posts:
    104
    NoesisGUI uses a "painter's algorithm" painting model. This means that instead of clipping each component, each component is asked to render from the back to the front of the display. This allows each component to paint over the previous component's display. The advantage of this model is that you can have complex, partially transparent shapes. With today’s modern graphics hardware, this model is relatively fast.

    Inside Panel containers, elements are painted by default in the order they are defined, but you can override this behaviour using the Panel.ZIndex property:

    Code (csharp):
    1. <Canvas Background="Ivory"
    2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
    3.  
    4.   <Canvas>
    5.     <Rectangle Height="60" Width="60" Fill="Gold"/>
    6.     <Rectangle Height="50" Width="70" Fill="Coral"/>
    7.     <Rectangle Height="40" Width="80" Fill="Teal"/>
    8.     <Rectangle Height="30" Width="90" Fill="Black"/>
    9.   </Canvas>
    10.  
    11.   <Canvas Canvas.Left="120">
    12.     <Rectangle Canvas.ZIndex="99" Height="60" Width="60" Fill="Gold"/>
    13.     <Rectangle Canvas.ZIndex="98" Height="50" Width="70" Fill="Coral"/>
    14.     <Rectangle Canvas.ZIndex="97" Height="40" Width="80" Fill="Teal"/>
    15.     <Rectangle Canvas.ZIndex="96" Height="30" Width="90" Fill="Black"/>
    16.   </Canvas>
    17.  
    18. </Canvas>
    $ZIndex03.png
     
  38. Cygon4

    Cygon4

    Joined:
    Sep 17, 2012
    Posts:
    382
    This is incredible!

    I fell in love with WPF soon after I noticed its data binding capabilities. And the declarative styling and layouting ensured that to this date I haven't written resizing code for even a single control in WPF :)

    I've seen on page 8 that you support data binding, too, so it seems I could once again write a clean view model and assign it as DataContext. I assume INotifyPropertyChanged support is a given?

    $250 is pretty steep for a poor lone wolf developer, though. For now I can only add it to my wish list...
     
  39. jdesantos

    jdesantos

    Joined:
    May 24, 2013
    Posts:
    312
    Yes, PropertyChanged is supported. Although, it is a little bit different. You don't have to implement the interface INotifyPropertyChanged.

    Code (csharp):
    1.  
    2. [Noesis.Extended]
    3. public class Player : Noesis.BaseComponent
    4. {
    5.     public Player(string name, Noesis.SolidColorBrush color, float scale, string pos)
    6.     {
    7.         _name = name;
    8.         _color = color;
    9.         _scale = scale;
    10.         _pos = pos;
    11.     }
    12.  
    13.     private string _name = string.Empty;
    14.     public string Name
    15.     {
    16.         get { return _name; }
    17.         set
    18.         {
    19.             if (_name != value)
    20.             {
    21.                 _name = value;
    22.                 NotifyPropertyChanged("Name");
    23.             }
    24.         }
    25.     }
    26.  
    27.     private Noesis.SolidColorBrush _color = null;
    28.     public Noesis.SolidColorBrush Color
    29.     {
    30.         get { return _color; }
    31.         set
    32.         {
    33.             if (_color != value)
    34.             {
    35.                 _color = value;
    36.                 NotifyPropertyChanged("Color");
    37.             }
    38.         }
    39.     }
    40.  
    41.     private float _scale = 1.0f;
    42.     public float Scale
    43.     {
    44.         get { return _scale; }
    45.         set
    46.         {
    47.             if (_scale != value)
    48.             {
    49.                 _scale = value;
    50.                 NotifyPropertyChanged("Scale");
    51.             }
    52.         }
    53.     }
    54.  
    55.     private string _pos = string.Empty;
    56.     public string Pos
    57.     {
    58.         get { return _pos; }
    59.         set
    60.         {
    61.             if (_pos != value)
    62.             {
    63.                 _pos = value;
    64.                 NotifyPropertyChanged("Pos");
    65.             }
    66.         }
    67.     }
    68. }
    69.  

    You can buy it at a cheaper price in our web page (although, those prices are going to change this week too).

    Thanks for the good comments!
     
  40. jdesantos

    jdesantos

    Joined:
    May 24, 2013
    Posts:
    312
    We implemented Touch events in v1.1.1 (being uploaded to our server now and published tomorrow). Although the work is still not finished (pending documentation, samples and implement touch awareness to our controls, all this will be in v1.1.2) the power is already there to be used.

    Code (csharp):
    1.  
    2. <Grid
    3.   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    4.   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    5.  
    6.     <Canvas>
    7.         <Rectangle Fill="Red" Width="200" Height="200" RenderTransform="1 0 0 1 50 50" IsManipulationEnabled="True"/>
    8.         <Rectangle Fill="Blue" Width="200" Height="200" RenderTransform="1 0 0 1 200 300" IsManipulationEnabled="True"/>
    9.     </Canvas>
    10.  
    11. </Grid>
    12.  
    Code (csharp):
    1.  
    2. using UnityEngine;
    3. using Noesis;
    4.  
    5.  
    6. public class Touch : MonoBehaviour
    7. {
    8.     Grid root_;
    9.  
    10.     void Start()
    11.     {
    12.         root_ = GetComponent<NoesisGUIPanel>().GetRoot<Grid>();
    13.         root_.ManipulationStarting += this.ManipulationStarting;
    14.         root_.ManipulationDelta += this.ManipulationDelta;
    15.     }
    16.  
    17.     void ManipulationStarting(BaseComponent sender, ManipulationStartingEventArgs args)
    18.     {
    19.         args.mode = (int)ManipulationModes.All;
    20.         args.manipulationContainer = root_;
    21.     }
    22.  
    23.     void ManipulationDelta(BaseComponent sender, ManipulationDeltaEventArgs args)
    24.     {
    25.         Rectangle rectangle = args.source.As<Rectangle>();
    26.         MatrixTransform transform = rectangle.GetRenderTransform().As<MatrixTransform>();
    27.         Transform2f matrix = new Transform2f(transform.GetMatrix());
    28.  
    29.         float rotation = args.deltaManipulation.rotation * Mathf.Deg2Rad;
    30.         float originX = args.manipulationOrigin.x;
    31.         float originY = args.manipulationOrigin.y;
    32.         float scale = args.deltaManipulation.scale;
    33.         float translationX = args.deltaManipulation.translation.x;
    34.         float translationY = args.deltaManipulation.translation.y;
    35.  
    36.         matrix.RotateAt(rotation, originX, originY);
    37.         matrix.ScaleAt(scale, scale, originX, originY);
    38.         matrix.Translate(translationX, translationY);
    39.  
    40.         transform.SetMatrix(matrix);
    41.     }
    42. }
    43.  
     
  41. sfernandez

    sfernandez

    Joined:
    Feb 14, 2012
    Posts:
    104
    NoesisGUI v1.1.1

    >> Buy from Asset Store

    • Implemented the following multi touch events (working in Unity, iOS, Android and Windows8). Documentation and samples will be added in the next version.
      • TouchDown, TouchMove, TouchUp, TouchEnter, TouchLeave
      • GotTouchCapture, LostTouchCapture
      • ManipulationStarting, ManipulationStarted, ManipulationDelta, ManipulationCompleted
    • Added support for UnityEngine.RenderTexture to create a TextureSource within Unity. Now, Unity scene renders can be integrated inside NoesisGUI panels.
    • Support for DependencyProperties of type Color, Point, Rect, Size and Thickness.
    • New converters for MatrixTransform and Transform (eg: <Rectangle RenderTransform="1 0 0 1 50 50"/>).
    • Improvements in error reporting for 64 bits platforms.
    • Fixed: An element that needed to be clipped because of max size constraints was not always being clipped.
    • Fixed: ComboBox item selection crash when holding mouse button.
    • Fixed: Crash when using an empty ListView in xaml.
    • Fixed: Strange random crash in UIElement during render commands generation.
    • Fixed: Unity crashing when building xamls using incorrect DependencyProperties. Now an error is displayed.
    • Fixed: Dependency properties in Unity extended classes were being serialized twice.
    • Fixed: RoutedEventArgs.source was missing.
     
  42. sfernandez

    sfernandez

    Joined:
    Feb 14, 2012
    Posts:
    104
    Yes, we used one big texture with all the gauges, then we mapped each gauge of that texture into the corresponding part of the cockpit mesh.

    The xaml alone looks like this:

    $GaugesFinal.png
     
  43. ai_enabled

    ai_enabled

    Joined:
    Sep 16, 2013
    Posts:
    15
    yay!
    $RenderTexture.png

    screenshot from the VoidExpanse game by AtomicTorch Studio. The ship is rendered to RenderTexture, so you can see tooltip over it. Kudos to the NoesisGUI team for this great feature!
     
    Last edited: Nov 4, 2013
  44. pushingpandas

    pushingpandas

    Joined:
    Jan 12, 2013
    Posts:
    1,419
    Does it support OS X ?
     
  45. sfernandez

    sfernandez

    Joined:
    Feb 14, 2012
    Posts:
    104
    Yes, OS X 32 and 64 bits are supported.

    The first post of this thread contains more info about NoesisGUI plugin. If you are interested you can find there a Trial version to have a look before buy :wink:
     
  46. sfernandez

    sfernandez

    Joined:
    Feb 14, 2012
    Posts:
    104
    NoesisGUI v1.1.2

    >> Buy from Asset Store

    • ScrollViewer: Implemented PanningMode, PanningDeceleration and PanningRatio.
    • Implemented inertia in touch manipulations.
    • Implemented PasswordBox control.
    • New tutorial: Touch and Manipulation
    • New Touch sample.
    • Mouse events are ignored in mobile platforms. We only consider Touches.
    • Improved Image tutorial with a note about premultiplied alpha.
    • Improved Unity tutorial with information about stencil buffer.
    • Optimized the size of commands sent to the GPU.
    • RenderTexture implementation simplified. OS X crashes fixed.
    • Improved error checking when working with user controls and dependency properties.
    • Added support for creating PropertyMetadata using an extended Unity Type as default value.
    • Added support for dependency properties of enum type.
    • Added constructors for PropertyPath and Binding accepting a DependencyProperty as path.
    • Support for Unity standalone in batchmode.
    • All scene samples moved to the same folder. Added a default 3D scene.
    • Added an icon for NoesisGUI component.
    • Errors and warnings displayed in the component.
    • Added menus for Release Notes and Bug Reporting.
    • Fixed: Offscreen images in render to texture and deferred rendering.
    • Fixed: Hit testing when 2+ render to texture being used.
    • Fixed: Recursion problems during layout process that occurred sometimes with ScrollViewers.
    • Fixed: Enabled MipMapping in GUI images.
    • Fixed: Images changing size when being updated.
    • Fixed: Loading errors in SamplesGallery demo.
    • Fixed: Memory problem with Dependency Objects.
    • Fixed: Right aligned text manages now correctly trailing spaces on ending lines.
    • Fixed: Added error messages when non valid items are inserted into a collection.
    • Fixed: Proxies not raising Destroyed event and bindings crashed on shutdown.
    • Fixed: TextBox losing focus when virtual keyboard was shown.
    • Fixed: Memory overflow when handling errors (this is the main reason v1.1.1 was so unstable).
    • Fixed: Parser now ignores Setter/Trigger/Condition values when property is not found.
    • Fixed: Managed exceptions crashing Unity in OS X.
    • Fixed: Unity scene disappearing in iOS and Android.
    • Fixed: Headers for missing functions in proxies.
    • Fixed: PPA gets disabled on resize.
     
  47. jdesantos

    jdesantos

    Joined:
    May 24, 2013
    Posts:
    312
  48. sloopidoopi

    sloopidoopi

    Joined:
    Jan 2, 2010
    Posts:
    244
    Hi, I'm interested in the multitouch features, but with the trial version I can't publish to my ipad to test. Is there a way to test the touch features ? Any videos that shows some action on a device?
     
  49. jdesantos

    jdesantos

    Joined:
    May 24, 2013
    Posts:
    312
    I have sent you a PM
     
  50. BuildABurgerBurg

    BuildABurgerBurg

    Joined:
    Nov 5, 2012
    Posts:
    566
    "WThe first step is launching XamlPlayer, whose executable is located in the /Bin folder."

    I can't find the folder, so where is it?

    I don't mind spending many hours learning, but I hate spending hours searching for things.

    This is the reason why I think video tutorials are much better than docs.