public void _onTapDown(TapDownDetails details) { setState(() => { _childHidden = true; }); Rect childRect = CupertinoContextMenuUtils._getRect(_childGlobalKey); _decoyChildEndRect = CupertinoContextMenuUtils.fromCenter( center: childRect.center, width: childRect.width * CupertinoContextMenuUtils._kOpenScale, height: childRect.height * CupertinoContextMenuUtils._kOpenScale ); _lastOverlayEntry = new OverlayEntry( opaque: false, builder: (BuildContext context) => { return(new _DecoyChild( beginRect: childRect, child: widget.child, controller: _openController, endRect: _decoyChildEndRect )); } ); Overlay.of(context).insert(_lastOverlayEntry); _openController.forward(); }
public static void createView(CustomToastItem toastItem) { _overlayState = Overlay.of(context: toastItem.context); _overlayEntry = new OverlayEntry( _context => new CustomToastWidget( gravity: toastItem.gravity, new Container( width: MediaQuery.of(context: _context).size.width, alignment: Alignment.center, child: new Container( decoration: new BoxDecoration( color: toastItem.backgroundColor, borderRadius: BorderRadius.circular(radius: toastItem.radius) ), margin: EdgeInsets.symmetric(horizontal: 20), padding: EdgeInsets.fromLTRB(16, 10, 16, 10), child: new Text( data: toastItem.message, style: CTextStyle.PLargeTitle.copyWith(color: toastItem.textColor) ) ) ) ) ); _isVisible = true; _overlayState.insert(entry: _overlayEntry); _timer = Window.instance.run((TimeSpan)toastItem.duration, callback: dismiss); }
public void _onDecoyAnimationStatusChange(AnimationStatus animationStatus) { switch (animationStatus) { case AnimationStatus.dismissed: if (_route == null) { setState(() => { _childHidden = false; }); } _lastOverlayEntry?.remove(); _lastOverlayEntry = null; break; case AnimationStatus.completed: setState(() => { _childHidden = true; }); _openContextMenu(); SchedulerBinding.instance.addPostFrameCallback((TimeSpan timestamp) => { _lastOverlayEntry?.remove(); _lastOverlayEntry = null; _openController.reset(); }); break; default: return; } }
void _createNewEntry() { RenderBox box = context.findRenderObject() as RenderBox; Offset target = box.localToGlobal(box.size.center(Offset.zero)); Widget overlay = new Directionality( textDirection: Directionality.of(context), child: new _TooltipOverlay( message: widget.message, height: height, padding: padding, margin: margin, decoration: decoration, textStyle: textStyle, animation: new CurvedAnimation( parent: _controller, curve: Curves.fastOutSlowIn ), target: target, verticalOffset: verticalOffset, preferBelow: preferBelow ) ); _entry = new OverlayEntry(builder: (BuildContext context) => overlay); Overlay.of(context, debugRequiredFor: widget).insert(_entry); }
bool ensureTooltopVisible() { if (this._entry != null) { this._timer?.cancel(); this._timer = null; this._controller.forward(); return(false); } RenderBox box = (RenderBox)this.context.findRenderObject(); Offset target = box.localToGlobal(box.size.center(Offset.zero)); Widget overlay = new _TooltipOverlay( message: this.widget.message, height: this.widget.height, padding: this.widget.padding, animation: new CurvedAnimation( parent: this._controller, curve: Curves.fastOutSlowIn), target: target, verticalOffset: this.widget.verticalOffset, preferBelow: this.widget.preferBelow ); this._entry = new OverlayEntry(builder: (BuildContext context) => overlay); Overlay.of(this.context, debugRequiredFor: this.widget).insert(this._entry); GestureBinding.instance.pointerRouter.addGlobalRoute(this._handlePointerEvent); this._controller.forward(); return(true); }
void _createTipMenu(BuildContext context, ArrowDirection arrowDirection, Offset position, Size size) { dismiss(); float triangleY = arrowDirection == ArrowDirection.up ? position.dy : position.dy - CustomTextSelectionControlsUtils._kToolbarTriangleSize.height - this._getTipMenuHeight(context: context); _overlayState = Overlay.of(context: context); _overlayEntry = new OverlayEntry( _context => Positioned.fill( new GestureDetector( onTap: dismiss, child: new Container( color: CColors.Transparent, child: new Stack( children: new List <Widget> { new Positioned( top: triangleY, left: size.width / 2.0f + position.dx - 25 * this.tipMenuItems.Count, child: new _TipMenuContent( tipMenuItems: this.tipMenuItems, arrowDirection: arrowDirection ) ) } ) ) ) ) ); _isVisible = true; _overlayState.insert(entry: _overlayEntry); }
protected override void install(OverlayEntry insertionPoint) { this._controller = this.createAnimationController(); D.assert(this._controller != null, () => $"{this.GetType()}.createAnimationController() returned null."); this._animation = this.createAnimation(); D.assert(this._animation != null, () => $"{this.GetType()}.createAnimation() returned null."); base.install(insertionPoint); }
void _removeEntry() { _hideTimer?.cancel(); _hideTimer = null; _showTimer?.cancel(); _showTimer = null; _entry?.remove(); _entry = null; }
protected static void MapBasePropertiesToDomainModel(OverlayEntry domain, BaseOverlayEntryJsModel zoneOverlayEntryJsModel) { if (zoneOverlayEntryJsModel.Id != null) { domain.Id = zoneOverlayEntryJsModel.Id; } domain.Name = zoneOverlayEntryJsModel.Name; domain.Color = zoneOverlayEntryJsModel.Color; }
void _removeEntry() { D.assert(this._entry != null); this._timer?.cancel(); this._timer = null; this._entry.remove(); this._entry = null; GestureBinding.instance.pointerRouter.removeGlobalRoute(this._handlePointerEvent); }
private void RightClickFocusListener() { if (_rightClickFocus.hasFocus) { } else { _rightClickEntry?.remove(); _rightClickEntry = null; } setState(); }
public override void initState() { base.initState(); this._listOverlayEntry = new OverlayEntry( opaque: true, builder: (BuildContext context) => { return(new _ReorderableListContent( header: this.widget.header, children: this.widget.children, scrollDirection: this.widget.scrollDirection, onReorder: this.widget.onReorder, padding: this.widget.padding )); } ); }
public override void initState() { base.initState(); _dropDownOverlayBuilder = ctx => { var overlayRenderBox = ctx.findRenderObject() as RenderBox; var renderBox = context.findRenderObject() as RenderBox; switch (widget._direction) { case DropDownDirection.bottom: { var offset = renderBox.localToGlobal( renderBox.size.bottomLeft(Offset.zero), overlayRenderBox); return(new DropDownOverlay( top: offset.dy, left: offset.dx, color: widget._overlayColor, border: widget._overlayBorder, children: widget._items.Select(item => widget._itemBuilder.Invoke(this, item)).ToList() )); } case DropDownDirection.top: { var offset = renderBox.localToGlobal(Offset.zero, overlayRenderBox); return(new DropDownOverlay( left: offset.dx, bottom: overlayRenderBox.size.height - offset.dy, color: widget._overlayColor, border: widget._overlayBorder, children: widget._items.Select(item => widget._itemBuilder.Invoke(this, item)).ToList() )); } default: throw new ArgumentOutOfRangeException(); } }; _overlayEntry = new OverlayEntry(_dropDownOverlayBuilder); _expanded = false; }
public override void initState() { base.initState(); SelectedChannelId = string.Empty; IsShowChannelInfo = false; IsShowDiscovery = false; SchedulerBinding.instance.addPostFrameCallback(value => { var overlayEntry = new OverlayEntry( ctx => new MentionPopup( widget.users, widget.members, widget.hasMoreMembers, () => SelectedChannelId ) ); Overlay.of(context).insert(overlayEntry); }); }
protected static void MapBasePropertiesFromDomainModel(OverlayEntry domain, BaseOverlayEntryJsModel model) { model.Color = domain.Color; model.Id = domain.Id; model.Name = domain.Name; }
public override void initState() { base.initState(); var channel = widget.channels[widget.selectedChannelId]; m_MuteController = new SwitchController(channel.isMute); m_PinController = new SwitchController(!string.IsNullOrEmpty(channel.stickTime)); m_Quiting = false; m_AmIOwner = widget.members.ContainsKey(channel.id) && widget.members[channel.id].Any(member => member.user.id == Window.currentUserId && member.role == "owner"); m_MuteController.addListener(MuteControllerListener); m_PinController.addListener(PinControllerListener); m_AnimationController = new AnimationController( vsync: this, duration: new TimeSpan(0, 0, 0, 0, milliseconds: 240) ); m_AnimationController.addListener(() => setState()); m_AnimationController.addStatusListener(AnimationStatusListener); _showCopiedTip = false; SchedulerBinding.instance.addPostFrameCallback(value => { if (MediaQuery.of(context).size.width < 750) { m_AnimationController.forward(); } _copiedTipEntry = new OverlayEntry(buildContext => { var left = 0.0f; if (MediaQuery.of(buildContext).size.width >= 750) { left = 375; } return(new Positioned( top: 64 + 40, left: left, right: 0, child: new IgnorePointer( child: new Container( height: 40, alignment: Alignment.center, child: new Row( mainAxisSize: MainAxisSize.min, children: new List <Widget> { new AnimatedOpacity( opacity: _showCopiedTip ? 1 : 0, duration: new TimeSpan(0, 0, 0, 0, 240), curve: Curves.fastOutSlowIn, child: new Container( decoration: new BoxDecoration( borderRadius: BorderRadius.circular(20), color: new Color(0x99000000) ), padding: EdgeInsets.symmetric(horizontal: 24), alignment: Alignment.center, child: new Text( "已复制群聊链接,请前往粘贴分享", style: new TextStyle( fontSize: 16, color: new Color(0xffffffff), fontFamily: "PingFang" ) ) ) ), } ) ) ) )); }); Overlay.of(context).insert(_copiedTipEntry); }); }
public Z64Rom(Rom rom) { _rom = rom; var identity = (UInt64)_rom.Header.Crc[0] << 32 | _rom.Header.Crc[1]; var useOffsets = true; if (!_tableOffsets.ContainsKey(identity)) { useOffsets = false; } TableOffsets offsets; if (useOffsets) { offsets = _tableOffsets[identity]; } else { offsets = new TableOffsets { FileTable = FindFileTable(rom.Data) }; if (offsets.FileTable == 0) { throw new ArgumentException("File table not found. Is this a valid Zelda 64 ROM?"); } } var fileTablePointers = _rom.GetSegment(offsets.FileTable) .ToWordGroups(4) .TakeWhile(g => !g.All(w => w == 0)) .ToList(); var nameTable = useOffsets ? _rom.GetSegment(offsets.NameTable) .ExtractStrings(fileTablePointers.Count) .ToList() : new List <string>(); Files = fileTablePointers .Where(f => f[3] != 0xFFFFFFFF && f[2] != 0xFFFFFFFF) .Select((f, i) => new File( f[0], f[1], f[2], f[3], nameTable.Count > i ? nameTable[i] : null, string.Format("{0:0000}-{1:X8}", i + 1, f[0]), null, _rom )) .ToList(); CodeFile = Files.Cast <File>().FirstOrDefault(f => f.ContainsString("Yoshitaka Yasumoto")); IEnumerable <uint[]> overlaySource; if (useOffsets) { overlaySource = offsets.OverlayTables .SelectMany(o => _rom.GetSegment(o.StartAddress, o.RecordCount * o.RecordSize) .ToWordGroups(o.RecordSize / sizeof(UInt32)) ); } else { var ovls = Files.Where(f => f.Type == FileType.Overlay) .Select(o => (UInt64)o.VirtualStart << 32 | o.VirtualEnd) .ToList(); overlaySource = CodeFile.FindTuples(ovls) .SelectMany(t => Utilities.ReadU32(CodeFile.Contents, t.Value + 12) >= 0x80800000 ? CodeFile.Contents.GetSegment(t.Value, 32) .ToWordGroups(7) : // Some overlays in Majora's Mask have the vma start and end addreses // before the virtual file address pair. Here, we compensate for this // by checking if the vma end is < 0x80800000 (overlay address space). // If it is, we prepend the preceding 8 bytes with the rest of the record. CodeFile.Contents.GetSegment(t.Value - 8, 8) .Concat(CodeFile.Contents.GetSegment(t.Value, 24)) .ToWordGroups(7)); } Overlays = overlaySource //_rom.GetSegment(offsets.EffectOverlayTable, (int)offsets.EffectOverlayCount * (int)OverlayEntry.EffectRecordSize) .Select(r => OverlayEntry.FromWords(r, Files.FirstOrDefault(f => f.VirtualStart == r[0]))) .Where(r => r.VmaStart >= 0x80800000 && r.VmaEnd != 0) .OrderBy(o => o.VmaStart) .ToList(); }
private void OnTapUp(TapUpDetails details) { if (_rightClickFocus.hasFocus) { _rightClickEntry?.remove(); _rightClickEntry = null; } FocusScope.of(context).requestFocus(new FocusNode()); if (details.device == InputUtils.MouseLeftKeyDevice && details.kind == PointerDeviceKind.mouse && widget.Msg.attachments.Count > 0 && !widget.Msg.attachments.first().local&& !_fetchingUrl) { _fetchingUrl = true; setState(); var attachment = widget.Msg.attachments.first(); Get <Attachment>( url: $"/api/cdn-signed/message-attachments/{widget.Msg.id}/{attachment.id}" ).Then(atch => { _fetchingUrl = false; setState(); Launch(atch.signedUrl); }); } else if (details.device == InputUtils.MouseRightKeyDevice && details.kind == PointerDeviceKind.mouse) { var children = new List <Widget>(); if (widget.Msg.content.isNotEmpty() && widget.Msg.id.isNotEmpty()) { children.Add( new GestureDetector( onTap: () => { Clipboard.setData( new ClipboardData(text: ParseMessageToString(widget.Msg.content, widget.Users))); FocusScope.of(context).requestFocus(new FocusNode()); }, child: new Container( height: 40, color: new Color(0x00000000), alignment: Alignment.center, child: new Text( "复制", style: new TextStyle( fontSize: 16, color: new Color(0xff000000), fontFamily: "PingFang" ) ) ) ) ); children.Add( new Container( height: 1, color: new Color(0xffd8d8d8) ) ); children.Add( new GestureDetector( onTap: () => { Sender.currentState.AppendString( $"「{widget.Msg.author.fullName}: {ParseMessageToString(widget.Msg.content, widget.Users)}」\n- - - - - - - - - - - - - - -\n" ); SchedulerBinding.instance.addPostFrameCallback(value => FocusScope.of(context).requestFocus(Sender.currentState.widget.focusNode)); }, child: new Container( height: 40, color: new Color(0x00000000), alignment: Alignment.center, child: new Text( "引用", style: new TextStyle( fontSize: 16, color: new Color(0xff000000), fontFamily: "PingFang" ) ) ) ) ); } if (widget.Msg.author.id == Window.currentUserId && widget.Msg.id.isNotEmpty() && (widget.Msg.attachments.isEmpty() || !widget.Msg.attachments.first().local)) { if (children.isNotEmpty()) { children.Add( new Container( height: 1, color: new Color(0xffd8d8d8) ) ); } children.Add( new GestureDetector( onTap: () => { FocusScope.of(context).requestFocus(new FocusNode()); Confirm( context, "删除消息", "确认删除此条消息?", () => { Post <Models.Message>( $"/api/connectapp/v1/messages/{widget.Msg.id}/delete", null ).Then(m => { }); }, () => { } ); }, child: new Container( height: 40, color: new Color(0x00000000), alignment: Alignment.center, child: new Text( "删除", style: new TextStyle( fontSize: 16, color: new Color(0xff000000), fontFamily: "PingFang" ) ) ) ) ); } if (children.Count == 0) { return; } var focusScopeNode = FocusScope.of(context); _rightClickEntry = new OverlayEntry(buildContext => { return(new GestureDetector( onTap: () => { focusScopeNode.requestFocus(new FocusNode()); }, child: new Container( color: new Color(0x00000000), child: new Stack( children: new List <Widget> { new Positioned( left: details.globalPosition.dx, top: details.globalPosition.dy, child: new Container( width: 80, decoration: new BoxDecoration( borderRadius: BorderRadius.all(6), boxShadow: new List <BoxShadow> { new BoxShadow( blurRadius: 16, color: new Color(0x33000000) ) }, color: new Color(0xffffffff) ), child: new Column( children: children ) ) ) } ) ) )); }); FocusScope.of(context).requestFocus(_rightClickFocus); Overlay.of(context).insert(_rightClickEntry); } }
void _createTipMenu(BuildContext context, ArrowDirection arrowDirection, Offset position, Size size) { dismiss(); var width = MediaQuery.of(context: context).size.width - 32 * this.tipMenuItems.Count; float tipMenuHeight = this._getTipMenuHeight(context: context); float triangleY = arrowDirection == ArrowDirection.up ? position.dy : position.dy - CustomTextSelectionControlsUtils._kToolbarTriangleSize.height - tipMenuHeight; float left; float childCenterX = size.width / 2.0f + position.dx; if (childCenterX >= width) { left = width - 32 * this.tipMenuItems.Count - 16; } else { left = childCenterX - 32 * this.tipMenuItems.Count; } List <Widget> children; if (arrowDirection == ArrowDirection.down) { children = new List <Widget> { new Positioned( top: triangleY, left: left, child: new _TipMenuContent( tipMenuItems: this.tipMenuItems ) ), new Positioned( top: triangleY + tipMenuHeight, left: childCenterX, child: new _TipMenuTriangle( arrowDirection: arrowDirection ) ) }; } else { children = new List <Widget> { new Positioned( top: triangleY, left: childCenterX, child: new _TipMenuTriangle( arrowDirection: arrowDirection ) ), new Positioned( top: triangleY + CustomTextSelectionControlsUtils._kToolbarTriangleSize.height, left: left, child: new _TipMenuContent( tipMenuItems: this.tipMenuItems ) ) }; } _overlayState = Overlay.of(context: context); _overlayEntry = new OverlayEntry( _context => Positioned.fill( new GestureDetector( onTap: dismiss, child: new Container( color: CColors.Transparent, child: new Stack( children: children ) ) ) ) ); _isVisible = true; _overlayState.insert(entry: _overlayEntry); }
public override Widget build(BuildContext context) { var entries = new List <OverlayEntry>(); var entry_bg = new OverlayEntry( inner_context => new Container( color: CLColors.white )); var entry = new OverlayEntry( inner_context => new Positioned( left: 0.0f, bottom: 0.0f, child: new GestureDetector( onTap: () => { }, child: new Draggable <int>( 5, child: new Container( color: CLColors.blue, width: 30.0f, height: 30.0f, constraints: BoxConstraints.tight(new Size(30, 30)), child: new Center(child: new Text("5")) ), feedback: new Container( color: CLColors.green, width: 30.0f, height: 30.0f), //maxSimultaneousDrags: 1, childWhenDragging: new Container( color: CLColors.black, width: 30.0f, height: 30.0f, constraints: BoxConstraints.tight(new Size(30, 30)) ) ) ) ) ); var entry3 = new OverlayEntry( inner_context => new Positioned( left: 0.0f, bottom: 40.0f, child: new GestureDetector( onTap: () => { }, child: new Draggable <int>( 8, child: new Container( color: CLColors.background4, width: 30.0f, height: 30.0f, constraints: BoxConstraints.tight(new Size(30, 30)), child: new Center(child: new Text("8"))) , feedback: new Container( color: CLColors.green, width: 30.0f, height: 30.0f), maxSimultaneousDrags: 1, childWhenDragging: new Container( color: CLColors.black, width: 30.0f, height: 30.0f, constraints: BoxConstraints.tight(new Size(30, 30)) ) ) ) ) ); var entry2 = new OverlayEntry( inner_context => new DragTargetWidget() ); entries.Add(entry_bg); entries.Add(entry); entries.Add(entry2); entries.Add(entry3); return(new Container( color: CLColors.white, child: new Overlay( initialEntries: entries ) )); }
public NitroROM(string path) { m_Path = path; m_CanRW = false; BeginRW(); m_FileStream.Position = 0x00; char[] gametitle = m_BinReader.ReadChars(12); if (new string(gametitle) != "S.MARIO64DS\0") { EndRW(); throw new Exception("This file isn't a Super Mario 64 DS ROM."); } m_FileStream.Position = 0x0C; uint gamecode = m_BinReader.ReadUInt32(); m_FileStream.Position = 0x1E; byte romversion = m_BinReader.ReadByte(); switch (gamecode) { case 0x454D5341: // ASME / USA if (romversion == 0x01) { m_Version = Version.USA_v2; m_LevelOvlIDTableOffset = 0x742B4; m_FileTableOffset = 0x11244; m_FileTableLength = 1824; } else { m_Version = Version.USA_v1; m_LevelOvlIDTableOffset = 0x73594; m_FileTableOffset = 0x1123C; m_FileTableLength = 1824; } break; case 0x4A4D5341: // ASMJ / JAP m_Version = Version.JAP; m_LevelOvlIDTableOffset = 0x73B38; m_FileTableOffset = 0x1123C; m_FileTableLength = 1824; break; case 0x504D5341: // ASMP / EUR m_Version = Version.EUR; m_LevelOvlIDTableOffset = 0x758C8; m_FileTableOffset = 0x13098; m_FileTableLength = 2058; break; default: m_Version = Version.UNK; EndRW(); throw new Exception("Unknown ROM version. Tell Mega-Mario about it."); } m_FileStream.Position = 0x28; ARM9RAMAddress = m_BinReader.ReadUInt32(); m_FileStream.Position = 0x30; ARM7Offset = m_BinReader.ReadUInt32(); m_FileStream.Position += 0x04; ARM7RAMAddress = m_BinReader.ReadUInt32(); ARM7Size = m_BinReader.ReadUInt32(); m_FileStream.Position = 0x40; FNTOffset = m_BinReader.ReadUInt32(); FNTSize = m_BinReader.ReadUInt32(); FATOffset = m_BinReader.ReadUInt32(); FATSize = m_BinReader.ReadUInt32(); OVTOffset = m_BinReader.ReadUInt32(); OVTSize = m_BinReader.ReadUInt32(); // no need to bother about ARM7 overlays... there's none in SM64DS m_FileStream.Position = 0x80; m_UsedSize = m_BinReader.ReadUInt32(); //m_UsedSize += ROM_END_MARGIN; m_FileStream.Position = FNTOffset + 6; ushort numdirs = m_BinReader.ReadUInt16(); ushort numfiles = (ushort)(FATSize / 8); m_DirEntries = new DirEntry[numdirs]; m_FileEntries = new FileEntry[numfiles]; m_FileStream.Position = FATOffset; for (ushort f = 0; f < numfiles; f++) { uint start = m_BinReader.ReadUInt32(); uint end = m_BinReader.ReadUInt32(); FileEntry fe; fe.ID = f; fe.InternalID = 0xFFFF; fe.ParentID = 0; fe.Offset = start; fe.Size = end - start; fe.Name = fe.FullName = ""; fe.Data = null; m_FileEntries[f] = fe; } DirEntry root; root.ID = 0xF000; root.ParentID = 0; root.Name = root.FullName = ""; m_DirEntries[0] = root; uint tableoffset = FNTOffset; for (ushort d = 0; d < numdirs; d++) { m_FileStream.Position = tableoffset; uint subtableoffset = FNTOffset + m_BinReader.ReadUInt32(); ushort first_fileid = m_BinReader.ReadUInt16(); ushort cur_fileid = first_fileid; m_FileStream.Position = subtableoffset; for (;;) { byte type_len = m_BinReader.ReadByte(); if (type_len == 0x00) { break; } else if (type_len > 0x80) { DirEntry dir; dir.Name = new string(m_BinReader.ReadChars(type_len & 0x7F)); dir.ID = m_BinReader.ReadUInt16(); dir.ParentID = (ushort)(d + 0xF000); dir.FullName = ""; m_DirEntries[dir.ID - 0xF000] = dir; } else if (type_len < 0x80) { char[] _name = m_BinReader.ReadChars(type_len & 0x7F); m_FileEntries[cur_fileid].ParentID = (ushort)(d + 0xF000); m_FileEntries[cur_fileid].Name = new string(_name); cur_fileid++; } } tableoffset += 8; } for (int i = 0; i < m_DirEntries.Length; i++) { if (m_DirEntries[i].ParentID > 0xF000) { m_DirEntries[i].FullName = m_DirEntries[m_DirEntries[i].ParentID - 0xF000].FullName + "/" + m_DirEntries[i].Name; } else { m_DirEntries[i].FullName = m_DirEntries[i].Name; } } for (int i = 0; i < m_FileEntries.Length; i++) { if (m_FileEntries[i].ParentID > 0xF000) { m_FileEntries[i].FullName = m_DirEntries[m_FileEntries[i].ParentID - 0xF000].FullName + "/" + m_FileEntries[i].Name; } else { m_FileEntries[i].FullName = m_FileEntries[i].Name; } } uint numoverlays = OVTSize / 0x20; m_OverlayEntries = new OverlayEntry[numoverlays]; for (uint i = 0; i < numoverlays; i++) { m_FileStream.Position = OVTOffset + (i * 0x20); OverlayEntry oe; oe.EntryOffset = (uint)m_FileStream.Position; oe.ID = m_BinReader.ReadUInt32(); oe.RAMAddress = m_BinReader.ReadUInt32(); oe.RAMSize = m_BinReader.ReadUInt32(); oe.BSSSize = m_BinReader.ReadUInt32(); oe.StaticInitStart = this.m_BinReader.ReadUInt32(); oe.StaticInitEnd = this.m_BinReader.ReadUInt32(); oe.FileID = (ushort)this.m_BinReader.ReadUInt32(); oe.Flags = this.m_BinReader.ReadUInt32(); m_OverlayEntries[(int)oe.ID] = oe; } if (m_Version == Version.EUR) { //screw the l that looks like a 1 // \/ NitroOverlay ov0 = new NitroOverlay(this, 0); //And of course, fix those hardcoded values //Who expected a new object to be inserted, anyway? m_FileTableOffset = ov0.ReadPointer(0xA4); m_FileTableLength = ov0.Read32(0x9C); } EndRW(); UpdateStrings(); }
public static void Confirm( BuildContext buildContext, string title, string msg, System.Action onConfirmed, System.Action onCanceled ) { var focusNode = new FocusNode(); FocusScope.of(buildContext).requestFocus(focusNode); OverlayEntry entry = null; entry = new OverlayEntry( context => { return(new Positioned( left: 0, right: 0, top: 0, bottom: 0, child: new GestureDetector( onTap: () => { entry.remove(); onCanceled(); }, child: new Container( color: new Color(0x00000000), alignment: Alignment.center, child: new GestureDetector( onTap: () => { }, child: new Container( width: 327, height: 201, decoration: new BoxDecoration( borderRadius: BorderRadius.all(6), color: new Color(0xffffffff), boxShadow: new List <BoxShadow> { new BoxShadow( blurRadius: 16, color: new Color(0x33000000) ) } ), child: new Column( children: new List <Widget> { new Container( height: 56, padding: EdgeInsets.symmetric(horizontal: 24), child: new Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: new List <Widget> { new Text( title, style: new TextStyle( fontSize: 16, color: new Color(0xff212121), fontFamily: "PingFang" ) ), new GestureDetector( onTap: () => { entry.remove(); onCanceled(); }, child: new Icon( IconFont.IconFontClose, size: 24, color: new Color(0xff979a9e) ) ) } ) ), new Container( height: 1, color: new Color(0xfff0f0f0) ), new Expanded( child: new Container( padding: EdgeInsets.only( top: 24, left: 24, right: 24, bottom: 16), child: new Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: new List <Widget> { new Row( children: new List <Widget> { new Container( width: 32, height: 32, margin: EdgeInsets.only(right: 8), decoration: new BoxDecoration( borderRadius: BorderRadius.all(16), color: new Color(0x992196f3) ), child: new Icon( IconFont.IconFontDelete, size: 32, color: new Color(0x992196f3) ) ), new Text( msg, style: new TextStyle( fontSize: 14, color: new Color(0xff797979), fontFamily: "PingFang" ) ) } ), new Row( mainAxisAlignment: MainAxisAlignment.end, children: new List <Widget> { new GestureDetector( onTap: () => { entry.remove(); onCanceled(); }, child: new Container( width: 72, height: 40, decoration: new BoxDecoration( borderRadius: BorderRadius.all(3), border: Border.all( color: new Color(0xffd8d8d8) ), color: new Color(0xffffffff) ), alignment: Alignment.center, child: new Text( "取消" ), margin: EdgeInsets.only(right: 16) ) ), new GestureDetector( onTap: () => { entry.remove(); onConfirmed(); }, child: new Container( width: 72, height: 40, decoration: new BoxDecoration( borderRadius: BorderRadius.all(3), color: new Color(0xff2196f3) ), alignment: Alignment.center, child: new Text( "确认", style: new TextStyle( fontSize: 14, color: new Color(0xffffffff), fontFamily: "PingFang" ) ) ) ) } ) } ) ) ) } ) ) ) ) ) )); } ); Overlay.of(buildContext).insert(entry); }