예제 #1
0
        Rectangle GetPreviewWindowRect()
        {
            var parentWindow = VisualTreeHelperEx.FindAncestorByType <Window>(this);

            var relativePt = PreviewTarget.TranslatePoint(new System.Windows.Point(0, 0), parentWindow);

            var rect = new RectangleF((float)relativePt.X, (float)relativePt.Y, (float)PreviewTarget.ActualWidth, (float)PreviewTarget.ActualHeight);

            // Maintain Aspect Ratio
            if (_webcamModel.WebcamCapture != null)
            {
                float w       = _webcamModel.WebcamCapture.Width;
                float h       = _webcamModel.WebcamCapture.Height;
                var   imgWbyH = w / h;

                var frameWbyH = rect.Width / rect.Height;

                if (imgWbyH > frameWbyH)
                {
                    var newH = rect.Width / imgWbyH;

                    rect.Y     += (rect.Height - newH) / 2;
                    rect.Height = newH;
                }
                else
                {
                    var newW = rect.Height * imgWbyH;

                    rect.X    += (rect.Width - newW) / 2;
                    rect.Width = newW;
                }
            }

            return(rect.ApplyDpi());
        }
예제 #2
0
        void UpdatePreviewWarningLabel()
        {
            m_PreviewWarning.style.display = DisplayStyle.None;
            // Delay checking if we are now in play mode to show warning about preview target
            EditorApplication.delayCall += () =>
            {
                if (EditorApplication.isPlaying)
                {
                    IMotionSynthesizerProvider synthesizerProvider = null;
                    if (PreviewTarget != null)
                    {
                        synthesizerProvider = PreviewTarget.GetComponent <IMotionSynthesizerProvider>();

                        if (synthesizerProvider == null)
                        {
                            synthesizerProvider = PreviewTarget.GetComponentInChildren <IMotionSynthesizerProvider>();
                        }
                    }

                    if (synthesizerProvider == null)
                    {
                        m_PreviewWarning.style.display = DisplayStyle.Flex;
                    }
                }
            };
        }
예제 #3
0
        Rectangle GetPreviewWindowRect()
        {
            var parentWindow = VisualTreeHelperEx.FindAncestorByType <Window>(this);

            var relativePt = PreviewTarget.TranslatePoint(new System.Windows.Point(0, 0), parentWindow);

            var rect = new RectangleF((float)relativePt.X, (float)relativePt.Y, (float)PreviewTarget.ActualWidth, (float)PreviewTarget.ActualHeight);

            return(rect.ApplyDpi());
        }
예제 #4
0
        static BuildTarget GetBuildTarget(PreviewTarget target)
        {
            switch (target)
            {
            case PreviewTarget.Android: return(BuildTarget.Android);

            case PreviewTarget.iOS: return(BuildTarget.iOS);
            }

            throw new ArgumentException();
        }
예제 #5
0
        /// <exception cref="Exception"></exception>
        /// <exception cref="FailedToCreateOutputDir"></exception>
        public SimulatorUnoProject CreateSimulatorProject(BuildProject args, PreviewTarget target, bool directToDevice, bool quitAfterApkLaunch)
        {
            var project      = AbsoluteFilePath.Parse(args.ProjectPath);
            var buildProject = Project.Load(project.NativePath);
            var projectDir   = project.ContainingDirectory;

            var basePath = AbsoluteDirectoryPath.Parse(buildProject.BuildDirectory) / target.ToString();

            var outputDir = FindOutputDir(args, basePath);

            var preambleDir = outputDir / "preamble";
            var cacheDir    = outputDir / "cache";

            _cacheCleaner.CleanIfNecessary(cacheDir);
            SetCacheDir(buildProject, projectDir, cacheDir);

            var applicationClassName = TypeName.Parse("Outracks.Simulator.GeneratedApplication");
            var applicationClass     = ApplicationClassGenerator.CreateApplicationClass(args, buildProject.Name, applicationClassName);
            var dependencies         = ApplicationClassGenerator.Dependencies;

            AddPreamble(buildProject, preambleDir, projectDir, applicationClass, dependencies);
            AddIcons(buildProject, preambleDir, projectDir);
            ChangePackageName(buildProject);
            ChangeTitle(buildProject, oldTitle => oldTitle + " (preview)");

            var buildOptions = new BuildOptions
            {
                OutputDirectory = outputDir.NativePath,
                Configuration   = BuildConfiguration.Preview,
                MainClass       = applicationClassName.FullName,
                Strip           = target != PreviewTarget.Local,
            };

            foreach (var define in args.Defines.UnionOne("Designer"))
            {
                buildOptions.Defines.Add(define);
            }

            if (target == PreviewTarget.iOS && !directToDevice)
            {
                // 17.12.15 - Prevent double building when exporting to iOS. (Uno bug)
                buildOptions.RunArguments = "debug";
                buildOptions.Native       = false;
            }

            if (quitAfterApkLaunch)
            {
                buildOptions.RunArguments += " -L";
            }

            return(new SimulatorUnoProject(buildProject, buildOptions, "", args.Verbose, args.BuildLibraries));
        }
예제 #6
0
 private void ColorPreviewTarget()
 {
     if (BoolValue)
     {
         Renderer renderer = PreviewTarget.GetComponent <Renderer>();
         if (renderer && renderer.sharedMaterial)
         {
             Material material = Main.Clone(renderer.sharedMaterial);
             material.hideFlags      = HideFlags.HideAndDontSave;
             material.color          = ColorValue;
             renderer.sharedMaterial = material;
         }
     }
     if (BoolValue2)
     {
         Graphic graphic = PreviewTarget.GetComponent <Graphic>();
         if (graphic)
         {
             graphic.color = ColorValue;
         }
     }
 }
예제 #7
0
 public PreviewArguments(AbsoluteFilePath project, Optional <PreviewTarget> target = default(Optional <PreviewTarget>),
                         IImmutableSet <IPEndPoint> endpoints = null,
                         Optional <string> buildTag           = default(Optional <string>),
                         bool compileOnly                = false,
                         bool directToDevice             = false,
                         IImmutableList <string> defines = null,
                         bool isVerboseBuild             = false,
                         bool buildLibraries             = false,
                         bool quitAfterApkLaunch         = false,
                         bool printUnoConfig             = false)
 {
     Project            = project;
     Target             = target.Or(PreviewTarget.Local);
     BuildTag           = buildTag;
     CompileOnly        = compileOnly;
     DirectToDevice     = directToDevice;
     Endpoints          = endpoints ?? ImmutableHashSet <IPEndPoint> .Empty;
     Defines            = defines ?? System.Collections.Immutable.ImmutableList <string> .Empty;
     IsVerboseBuild     = isVerboseBuild;
     BuildLibraries     = buildLibraries;
     QuitAfterApkLaunch = quitAfterApkLaunch;
     PrintUnoConfig     = printUnoConfig;
 }
예제 #8
0
        /// <exception cref="BuildFailed"></exception>
        /// <exception cref="FailedToCreateOutputDir"></exception>
        public System.Threading.Tasks.Task <BuildResult> BuildUno(Guid id, BuildProject args, PreviewTarget previewTarget, bool driectToDevice, CancellationToken cancellationToken, bool quitAfterApkLaunch)
        {
            args.Id = id;

            var loggedEvents = new AccumulatingProgress <IBinaryMessage>(_buildEvents);
            var errorList    = new ErrorListAdapter(id, loggedEvents);
            var textWriter   = new TextWriterAdapter(id, loggedEvents);

            var tcs = new TaskCompletionSource <BuildResult>();

            var project = _simulatorBuilder.CreateSimulatorProject(args, previewTarget, driectToDevice, quitAfterApkLaunch);

            var thread = new Thread(
                () =>
            {
                var logger = new Log(errorList, textWriter);
                if (project.IsVerboseBuild)
                {
                    logger.Level = Uno.Logging.LogLevel.Verbose;
                }

                if (project.BuildLibraries)
                {
                    new LibraryBuilder(new Disk(logger), BuildTargets.Package)
                    {
                        Express = true
                    }
                }
                .Build();

                var buildTarget = GetBuildTarget(previewTarget);

                //BuildTarget target;
                //Enum.TryParse(buildTarget.Identifier, true, out target);

                _buildEvents.Report(
                    new Started
                {
                    Command = args
                });

                var faulty = false;
                try
                {
                    var buildResult =
                        new ProjectBuilder(
                            logger,
                            buildTarget,
                            project.Options)
                        .Build(project.Project);

                    if (buildResult.ErrorCount != 0)
                    {
                        _errorHelpers.OnBuildFailed(buildResult);

                        tcs.SetException(new UserCodeContainsErrors());
                    }
                    else
                    {
                        tcs.SetResult(buildResult);
                    }
                }
                catch (Exception e)
                {
                    if (e is ThreadAbortException)
                    {
                        return;
                    }

                    tcs.TrySetException(new InternalBuildError(e));
                    faulty = true;
                }
                finally
                {
                    _buildEvents.Report(
                        new Ended
                    {
                        Command        = args,
                        Success        = !faulty,
                        BuildDirectory = AbsoluteDirectoryPath.Parse(project.Project.OutputDirectory)
                    });
                }
            })
예제 #9
0
        private void ColorGUI()
        {
            GUILayout.BeginHorizontal();
            GUILayout.Label("Color to:", GUILayout.Width(60));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            if (PreviewTarget)
            {
                if (BoolValue)
                {
                    Renderer renderer = PreviewTarget.GetComponent <Renderer>();
                    if (renderer)
                    {
                        ColorValue = renderer.sharedMaterial.color;
                    }
                }
                if (BoolValue2)
                {
                    Graphic graphic = PreviewTarget.GetComponent <Graphic>();
                    if (graphic)
                    {
                        ColorValue = graphic.color;
                    }
                }
            }
            ColorValue = EditorGUILayout.ColorField(ColorValue, GUILayout.Width(180));
            if (PreviewTarget)
            {
                if (BoolValue)
                {
                    Renderer renderer = PreviewTarget.GetComponent <Renderer>();
                    if (renderer)
                    {
                        renderer.sharedMaterial.color = ColorValue;
                    }
                }
                if (BoolValue2)
                {
                    Graphic graphic = PreviewTarget.GetComponent <Graphic>();
                    if (graphic)
                    {
                        graphic.color = ColorValue;
                    }
                }
            }
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Ease:", GUILayout.Width(60));
            AnimationEase = (Ease)EditorGUILayout.EnumPopup("", AnimationEase, GUILayout.Width(120));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            BoolValue = GUILayout.Toggle(BoolValue, "Act Renderer");
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            BoolValue2 = GUILayout.Toggle(BoolValue2, "Act Graphic");
            GUILayout.EndHorizontal();
        }