public AnimatedDouble(double value) { var a = NumericEmitter.OfDouble( (x, y) => { this.Value = x; if (this.ValueChanged != null) { this.ValueChanged(x); } } ); SetTarget = x => a(x, 0); SetTarget(value); }
public GameMenu(int Width, int Height, int ShadowHeight) { this.ContentHeight = Height * 3 / 4; this.Container = new Canvas { Width = Width, Height = ContentHeight + ShadowHeight, Name = "GameMenu_Container", }; var ShadowContainer = new Canvas { Width = Width, Height = ContentHeight + ShadowHeight, Opacity = 0.5, Name = "GameMenu_ShadowContainer", }.AttachTo(this.Container); new Rectangle { Fill = Brushes.Black, Width = Width, Height = ContentHeight, }.MoveTo(0, 0).AttachTo(ShadowContainer); Colors.Black.ToTransparentGradient(ShadowHeight).Select( (c, i) => { return(new Rectangle { Fill = new SolidColorBrush(c), Width = Width, Height = 1, Opacity = c.A / 255.0 }.MoveTo(0, ContentHeight + i).AttachTo(ShadowContainer)); } ).ToArray(); this.Carousel = new SimpleCarouselControl(Width, ContentHeight).MoveContainerTo(0, 0); Carousel.Caption.FontSize = 36; Carousel.Caption.Height = 60; Carousel.Caption.Text = IdleText; Action <int, int> AnimatedShadowOpacity = NumericEmitter.Of( (x, y) => ShadowContainer.Opacity = x * 0.01 ); var ShadowOpacity = 50; AnimatedShadowOpacity(ShadowOpacity, 0); Carousel.Hover += delegate { ShadowOpacity = 70; AnimatedShadowOpacity(ShadowOpacity, 0); }; Carousel.Idle += delegate { Carousel.Caption.Text = IdleText; ShadowOpacity = 50; AnimatedShadowOpacity(ShadowOpacity, 0); }; this.Options.ForEachNewItem( e => { double p = 0; this.Where(k => k != e).LastOrDefault().Apply(k => p = k.CarouselEntry.Position + k.MarginAfter); e.CarouselEntry = new SimpleCarouselControl.EntryInfo { Source = e.Source, Text = e.Text, Position = p + e.MarginBefore, Click = delegate { if (e.Click != null) { e.Click(); } if (e.Hyperlink != null) { e.Hyperlink.NavigateTo(); } } }; Carousel.AddEntry(e.CarouselEntry); } ); Carousel.AttachContainerTo(this); Carousel.Overlay.AttachTo(this); Action <int, int> AnimatedTop = NumericEmitter.Of( (x, y) => { this.Container.MoveTo(0, y); if (AfterMove != null) { AfterMove(x, y); } } ); this.MoveContainerTo(0, -ContentHeight); AnimatedTop(0, -ContentHeight); this.Show = delegate { this.Carousel.Timer.Start(); this.Carousel.Show(); AnimatedTop(0, 0); AnimatedShadowOpacity(ShadowOpacity, 0); }; this.Hide = delegate { this.Carousel.Hide(); this.Carousel.Timer.Stop(); AnimatedTop(0, -ContentHeight); AnimatedShadowOpacity(50, 0); }; var Delayed = this.Container.ToDelayedMouseEvents(); Delayed.ValidateMouseEnter = () => ValidateShow(); Delayed.ValidateMouseLeave = () => ValidateHide(); Delayed.MouseEnter += Show; Delayed.MouseLeave += Hide; ShadowContainer.Opacity = 0; }
/// <summary> /// This is a javascript application. /// </summary> /// <param name="page">HTML document rendered by the web server which can now be enhanced.</param> public Application(IDefault page = null) { // 1b90:01:01 0046:0009 My.Solutions.Pages.Templates.Application create interface WebGLDopamineMolecule.AssetsLibrary::WebGLDopamineMolecule.HTML.Pages.IDefault //{ Location = // assembly: X:\jsc.svn\examples\javascript\My.Solutions.Pages.Templates\My.Solutions.Pages.Templates\bin\Debug\WebGLDopamineMolecule.exe // type: WebGLDopamineMolecule.Application, WebGLDopamineMolecule, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null // offset: 0x0587 // method:Void .ctor(WebGLDopamineMolecule.HTML.Pages.IDefault) } //1b90:01:01 RewriteToAssembly error: System.MissingMethodException: Method not found: 'Void ScriptCoreLib.JavaScript.DOM.IWindow.add_onframe(System.Action)'. glMatrix ref1; THREE.Color ref0; var h = Native.document.location.hash; // are we running as a clone? // if so our location hash should be stored as html. Native.document.getElementsByTagName("link").Select(k => (IHTMLLink)k).Where(k => k.rel == "location").ToList().ForEach( location => { // href = file:///X:/temp/Spiral.htm#WebGLSpiral location.href.SkipUntilLastOrEmpty("#").With( href => { if (h == "") { h = "#" + href; } } ); } ); DiagnosticsConsole.ApplicationContent.BindKeyboardToDiagnosticsConsole(); Console.WriteLine("Templates loaded... " + new { Native.document.location, h }); //{ // var html = new global::wolfenstein4kTemplate.HTML.Pages.DefaultPage(); // html.Container.AttachToDocument(); // new global::wolfenstein4kTemplate.Application(html); //} Action LoadEmAll = delegate { }; var cc = new IHTMLCenter().AttachToDocument(); cc.style.lineHeight = "0px"; var cutoff = 480; #region iframe Action <int, int, double, IHTMLImage, string> iframe = (iwidth, iheight, maxextra, preview, alias) => { // media selector? if (alias == "") { } var c = new IHTMLDiv().AttachTo(cc); //c.style.backgroundColor = JSColor.Black; c.style.display = IStyle.DisplayEnum.inline_block; c.style.position = IStyle.PositionEnum.relative; c.style.SetSize(iwidth, iheight); IHTMLElement content = preview; preview.style.SetLocation(0, 0); preview.AttachTo(c); preview.style.cursor = IStyle.CursorEnum.pointer; preview.title = "Click to activate, doubleclick to enlarge"; var HasFocus = false; var HasMouse = false; Action content_SetExtraSize = delegate { }; #region SetExtraSize var SetExtraSize = NumericEmitter.OfDouble( (extrasizef, yy) => { var extrasize = System.Convert.ToInt32(iwidth * extrasizef * 0.5); content_SetExtraSize = delegate { content.style.zIndex = extrasize; if (HasFocus) { content.style.boxShadow = "0px 0px " + (extrasize) + "px 0px rgba(255, 255, 0, 1)"; } else { content.style.boxShadow = "0px 0px " + (extrasize) + "px 0px rgba(0, 0, 255, 1)"; } //box-shadow: 0px 0px 70px 0px rgba(0, 0, 0, 1); content.style.SetLocation( System.Convert.ToInt32(iwidth * extrasizef * -0.5), System.Convert.ToInt32(iheight * extrasizef * -0.5), System.Convert.ToInt32(iwidth * (1 + extrasizef)), System.Convert.ToInt32(iheight * (1 + extrasizef)) ); }; content_SetExtraSize(); } ); #endregion #region HasMouse c.onmouseover += delegate { HasMouse = true; if (HasFocus) { return; } SetExtraSize(maxextra, 0); }; c.onmouseout += delegate { HasMouse = false; if (HasFocus) { return; } SetExtraSize(0, 0); }; #endregion #region Activate Action Activate = delegate { // can we also do groups? //preview.Orphanize(); var a = new IHTMLIFrame { width = iwidth, height = iheight, frameBorder = "0", scrolling = "no", allowFullScreen = true }.AttachTo(c); preview.style.Opacity = 0.7; a.style.SetLocation(0, 0); #region HasFocus a.onload += delegate { //Native.Window.alert( // new { // a.contentWindow.performance.timing.connectStart, // a.contentWindow.performance.timing.loadEventStart, // } //); a.contentWindow.onblur += delegate { HasFocus = false; if (HasMouse) { SetExtraSize(maxextra * 1, 0); } else { SetExtraSize(0, 0); } }; a.contentWindow.onfocus += delegate { HasFocus = true; SetExtraSize(maxextra * 1.1, 0); }; if (HasMouse) { a.contentWindow.focus(); } new Timer( delegate { preview.FadeOut(); new Timer( delegate { content = a; content_SetExtraSize(); } ).StartTimeout(300); } ).StartTimeout(1000); }; #endregion a.contentWindow.document.location.replace(alias); //a.tabIndex = 1; }; LoadEmAll += delegate { if (Activate == null) { return; } Activate(); Activate = null; }; c.onclick += delegate { if (Activate == null) { return; } Activate(); Activate = null; // unsubscribe event; }; #endregion SetExtraSize(0, 0); }; #endregion #region y Action <string, Action, IHTMLImage> y = (alias, yield, preview) => { if (h == "") { if (Native.window.Width > cutoff) { iframe(96, 96, 3, preview, alias); } else { iframe(32, 32, 3, preview, alias); } } else if (h == alias) { if (yield != null) { yield(); } } }; #endregion // jsc cannot handle multiple delegates on the same statement yet. y("#WebGLDopamineMolecule", () => new WebGLDopamineMolecule.Application(), new WebGLDopamineMolecule.HTML.Images.FromAssets.Preview()); y("#WebGLEthanolMolecule", () => new WebGLEthanolMolecule.Application(), new WebGLEthanolMolecule.HTML.Images.FromAssets.Preview()); y("#WebGLYomotsuTPS", () => new WebGLYomotsuTPS.Application(), new WebGLYomotsuTPS.HTML.Images.FromAssets.Preview()); y("#WebGLYomotsuMD2Model", () => new WebGLYomotsuMD2Model.Application(), new WebGLYomotsuMD2Model.HTML.Images.FromAssets.Preview()); y("#WebGLSphereRayTrace", () => new WebGLSphereRayTrace.Application(), new WebGLSphereRayTrace.HTML.Images.FromAssets.Preview()); //y("#WebGLFireballExplosion", () => new WebGLFireballExplosion.Application(), new WebGLFireballExplosion.HTML.Images.FromAssets.Preview()); y("#WebGLChocolux", () => new WebGLChocolux.Application(), new WebGLChocolux.HTML.Images.FromAssets.Preview()); //y("#WebGLPuls", () => new WebGLPuls.Application(), new WebGLPuls.HTML.Images.FromAssets.Preview()); y("#WebGLCelShader", () => new WebGLCelShader.Application(), new WebGLCelShader.HTML.Images.FromAssets.Preview()); y("#WebGLClouds", () => new WebGLClouds.Application(), new WebGLClouds.HTML.Images.FromAssets.Preview()); y("#WebGLCone", () => new WebGLCone.Application(), new WebGLCone.HTML.Images.FromAssets.Preview()); y("#WebGLShaderDisturb", () => new WebGLShaderDisturb.Application(), new WebGLShaderDisturb.HTML.Images.FromAssets.Preview()); y("#WebGLDynamicTerrainTemplate", () => new WebGLDynamicTerrainTemplate.Application(), new WebGLDynamicTerrainTemplate.HTML.Images.FromAssets.Preview()); y("#WebGLEscherDrosteEffect", () => new WebGLEscherDrosteEffect.Application(), new WebGLEscherDrosteEffect.HTML.Images.FromAssets.Preview()); y("#WebGLInvade", () => new WebGLInvade.Application(), new WebGLInvade.HTML.Images.FromAssets.Preview()); y("#WebGLLesson01", () => new WebGLLesson01.Application(), new WebGLLesson01.HTML.Images.FromAssets.Preview()); y("#WebGLLesson02", () => new WebGLLesson02.Application(), new WebGLLesson02.HTML.Images.FromAssets.Preview()); y("#WebGLLesson03", () => new WebGLLesson03.Application(), new WebGLLesson03.HTML.Images.FromAssets.Preview()); y("#WebGLLesson04", () => new WebGLLesson04.Application(), new WebGLLesson04.HTML.Images.FromAssets.Preview()); y("#WebGLLesson05", () => new WebGLLesson05.Application(), new WebGLLesson05.HTML.Images.FromAssets.Preview()); y("#WebGLLesson06", () => new WebGLLesson06.Application(), new WebGLLesson06.HTML.Images.FromAssets.Preview()); y("#WebGLLesson07", () => new WebGLLesson07.Application(), new WebGLLesson07.HTML.Images.FromAssets.Preview()); y("#WebGLLesson08", () => new WebGLLesson08.Application(), new WebGLLesson08.HTML.Images.FromAssets.Preview()); y("#WebGLLesson09", () => new WebGLLesson09.Application(), new WebGLLesson09.HTML.Images.FromAssets.Preview()); y("#WebGLLesson10", () => new WebGLLesson10.Application(), new WebGLLesson10.HTML.Images.FromAssets.Preview()); y("#WebGLLesson11", () => new WebGLLesson11.Application(), new WebGLLesson11.HTML.Images.FromAssets.Preview()); y("#WebGLLesson12", () => new WebGLLesson12.Application(), new WebGLLesson12.HTML.Images.FromAssets.Preview()); y("#WebGLLesson13", () => new WebGLLesson13.Application(), new WebGLLesson13.HTML.Images.FromAssets.Preview()); y("#WebGLLesson14", () => new WebGLLesson14.Application(), new WebGLLesson14.HTML.Images.FromAssets.Preview()); y("#WebGLLesson15", () => new WebGLLesson15.Application(), new WebGLLesson15.HTML.Images.FromAssets.Preview()); y("#WebGLLesson16", () => new WebGLLesson16.Application(), new WebGLLesson16.HTML.Images.FromAssets.Preview()); y("#WebGLNyanCat", () => new WebGLNyanCat.Application(), new WebGLNyanCat.HTML.Images.FromAssets.Preview()); y("#WebGLPlanetGenerator", () => new WebGLPlanetGenerator.Application(), new WebGLPlanetGenerator.HTML.Images.FromAssets.Preview()); y("#WebGLSimpleCubic", () => new WebGLSimpleCubic.Application(), new WebGLSimpleCubic.HTML.Images.FromAssets.Preview()); y("#SpiderModel", () => new SpiderModel.Application(), new SpiderModel.HTML.Images.FromAssets.Preview()); y("#WebGLWindWheel", () => new WebGLWindWheel.Application(), new WebGLWindWheel.HTML.Images.FromAssets.Preview()); y("#WebGLTunnel", () => new WebGLTunnel.Application(), new WebGLTunnel.HTML.Images.FromAssets.Preview()); y("#WebGLSpiral", () => new WebGLSpiral.Application(), new WebGLSpiral.HTML.Images.FromAssets.Preview()); y("#WebGLCannonPhysicsEngine", () => new WebGLCannonPhysicsEngine.Application(), new WebGLCannonPhysicsEngine.HTML.Images.FromAssets.Preview()); y("#WebGLBossHarvesterByOutsideOfSociety", () => new WebGLBossHarvesterByOutsideOfSociety.Application(), new WebGLBossHarvesterByOutsideOfSociety.HTML.Images.FromAssets.Preview()); y("#WoodsXmasByRobert", () => new WoodsXmasByRobert.Application(), new WoodsXmasByRobert.HTML.Images.FromAssets.Preview()); //y("#WebGLBeachballsByDoob", () => new WebGLBeachballsByDoob.Application(), new WebGLBeachballsByDoob.HTML.Images.FromAssets.Preview()); y("#WebGLCity", () => new WebGLCity.Application(), new WebGLCity.HTML.Images.FromAssets.Preview()); // glMatrix y("#WebGLHand", () => new WebGLHand.Application(), new WebGLHand.HTML.Images.FromAssets.Preview()); y("#WebGLSpadeWarrior", () => new WebGLSpadeWarrior.Application(), new WebGLSpadeWarrior.HTML.Images.FromAssets.Preview()); if (h == "") { var maxextra = 3; var iwidth = 96; var iheight = 96; if (Native.window.Width > cutoff) { iframe(iwidth, iheight, maxextra, new HTML.Images.FromAssets.Preview(), ""); //iframe(iwidth, iheight, maxextra, new HTML.Images.FromAssets.Preview(), ""); new IHTMLButton { innerText = "Fullscreen" }.With( btn => { btn.style.position = IStyle.PositionEnum.absolute; btn.style.left = "1em"; btn.style.bottom = "1em"; btn.onclick += delegate { Native.Document.body.requestFullscreen(); }; } ).AttachToDocument(); new IHTMLButton { innerText = "Load Em All" }.With( btn => { btn.style.position = IStyle.PositionEnum.absolute; btn.style.right = "1em"; btn.style.bottom = "1em"; btn.onclick += delegate { btn.Orphanize(); LoadEmAll(); }; } ).AttachToDocument(); } else { iwidth = 32; iheight = 32; } #region ApplyMargins Action ApplyMargins = delegate { if (Native.window.Width < cutoff) { cc.style.margin = "0px"; } else { cc.style.margin = "3%"; cc.style.marginTop = "10%"; } }; ApplyMargins(); Native.window.onresize += delegate { ApplyMargins(); }; #endregion #region requestFullscreen Native.Document.body.ondblclick += delegate { //if (IsDisposed) // return; // http://tutorialzine.com/2012/02/enhance-your-website-fullscreen-api/ Native.Document.body.requestFullscreen(); //AtResize(); }; #endregion } }
public NumericTransmitterCanvas() { Width = DefaultWidth; Height = DefaultHeight; Colors.Blue.ToGradient(Colors.Red, DefaultHeight / 4).Select( (c, i) => new Rectangle { Fill = new SolidColorBrush(c), Width = DefaultWidth, Height = 4, }.MoveTo(0, i * 4).AttachTo(this) ).ToArray(); var c1 = new ArrowCursorControl { }; c1.Red.Opacity = 0.8; c1.Container.AttachTo(this); var c2 = new ArrowCursorControl { }; c2.Yellow.Opacity = 0.8; c2.Container.AttachTo(this); var c3 = new ArrowCursorControl { }; c3.Green.Opacity = 0.8; c3.Container.AttachTo(this); var Overlay = new Rectangle { Fill = Brushes.White, Width = DefaultWidth, Height = DefaultHeight, Opacity = 0, Cursor = Cursors.None }.AttachTo(this); Action <int, int> Emitter = NumericEmitter.Of( (x, y) => c3.Container.MoveTo(x, y) ); Action <int, int> Omitter = NumericOmitter.Of( (x, y) => { c2.Container.MoveTo(x, y); Emitter(x, y); } ); Overlay.MouseMove += (sender, e) => { var p = e.GetPosition(this); c1.Container.MoveTo(p.X, p.Y); //1000.AtDelay( // delegate // { // c2.Container.MoveTo(p.X, p.Y); // } //); 300.AtDelay( () => Omitter(Convert.ToInt32(p.X), Convert.ToInt32(p.Y)) ); }; }