private void Inject(WpdArchiveListing listing, WpdEntry[] fontEntries, WflContent[] fontContent)
        {
            UiInjectionManager manager = new UiInjectionManager();

            using (MemoryInjectionSource source = new MemoryInjectionSource())
            {
                String injectionRoot = Path.Combine(source.ProvideRootDirectory(), listing.ExtractionSubpath);
                for (int i = 0; i < fontEntries.Length; i++)
                {
                    WpdEntry   entry         = fontEntries[i];
                    WflContent content       = fontContent[i];
                    String     injectionPath = Path.Combine(injectionRoot, entry.Name);

                    MemoryStream stream = new MemoryStream(1024);
                    source.RegisterStream(injectionPath, stream);

                    WflFileWriter writer = new WflFileWriter(stream);
                    writer.Write(content);
                    stream.SetPosition(0);
                }

                UiWpdInjector injector = new UiWpdInjector(listing, fontEntries, false, source);
                injector.Inject(manager);
            }
            manager.WriteListings();
        }
Beispiel #2
0
 public UiEncodingWindowSource(string displayName, DxTexture texture, WflContent info, char[] chars, ConcurrentDictionary <char, short> codes)
 {
     DisplayName = displayName;
     Texture     = texture;
     Info        = info;
     Chars       = chars;
     Codes       = codes;
 }
Beispiel #3
0
        private void OnDxControlElementMouseDown(object sender, MouseEventArgs e)
        {
            if (_currentSource == null)
            {
                return;
            }

            int viewportX = _editViewport.X;
            int viewportY = _editViewport.Y;

            List <int> mainIndices       = new List <int>(2);
            List <int> additionalIndices = new List <int>(2);

            WflContent info   = _currentSource.Info;
            int        height = info.Header.LineHeight;

            for (int i = 0; i < 256 * 2; i++)
            {
                if (i % 256 < 0x20)
                {
                    continue;
                }

                int offsets = info.Offsets[i];
                int sizes   = info.Sizes[i];
                int y       = (offsets >> 16) & 0xFFFF;
                int oy      = viewportY + e.Y - y;
                if (oy >= 0 && oy <= height)
                {
                    int x     = offsets & 0xFFFF;
                    int width = (sizes & 0x0000FF00) >> 8;
                    int ox    = viewportX + e.X - x;
                    if (ox >= 0 && ox <= width)
                    {
                        mainIndices.Add(i);
                        _newMovable = 1;
                    }
                }
            }

            int   squareSize = info.Header.LineSpacing + info.Header.SquareDiff;
            short value      = (short)(((viewportY + e.Y) / squareSize) << 8 | ((viewportX + e.X) / squareSize));
            int   index      = Array.IndexOf(info.AdditionalTable, value);

            if (index >= 0)
            {
                additionalIndices.Add(index);
            }

            _charactersControl.SetCurrent(_currentSource, mainIndices, additionalIndices);
            if (mainIndices.Count > 0 || additionalIndices.Count > 0)
            {
                _editViewport.Refresh();
            }
        }
 private static WflContent[] ReadFontContent(Stream xgr, WpdEntry[] fontEntries)
 {
     WflContent[] result = new WflContent[fontEntries.Length];
     for (int i = 0; i < result.Length; i++)
     {
         WpdEntry entry = fontEntries[i];
         using (StreamSegment wflInput = new StreamSegment(xgr, entry.Offset, entry.Length, FileAccess.Read))
         {
             WflFileReader reader = new WflFileReader(wflInput);
             result[i] = reader.Read();
         }
     }
     return(result);
 }
Beispiel #5
0
        private void OnEditViewportDrawPrimitives(Device device, RenderTarget target2D, Rectangle cliprectangle)
        {
            UiEncodingWindowSource source = _currentSource;

            WflContent info = source?.Info;

            if (info?.Header.TableType != WflHeader.LargeTable)
            {
                return;
            }

            int viewportX = _editViewport.X;
            int viewportY = _editViewport.Y;

            RectangleF rectangle = new RectangleF {
                Height = info.Header.LineHeight
            };

            target2D.BeginDraw();

            for (int i = 0; i < 256 * 2; i++)
            {
                if (i % 256 < 0x20)
                {
                    continue;
                }

                int x, y;
                info.GetOffsets(i, out x, out y);
                x -= viewportX;
                y -= viewportY;

                byte before, width, after;
                info.GetSizes(i, out before, out width, out after);

                rectangle.X     = x;
                rectangle.Y     = y;
                rectangle.Width = width & 0x7F;

                if (_charactersControl.CurrentMainIndices.Contains(i))
                {
                    target2D.FillRectangle(rectangle, _selectedColorBrush);

                    if (before > 0x7F)
                    {
                        rectangle.Width = (0xFF - before) + 1;
                        rectangle.X     = x;
                    }
                    else
                    {
                        rectangle.Width = before;
                        rectangle.X     = x - before;
                    }
                    target2D.FillRectangle(rectangle, _spacingColorBrush);

                    if (after > 0x7F)
                    {
                        rectangle.Width = (0xFF - after) + 1;
                        rectangle.X     = x + (width & 0x7F) - rectangle.Width;
                    }
                    else
                    {
                        rectangle.Width = after;
                        rectangle.X     = x + width & 0x7F;
                    }

                    target2D.FillRectangle(rectangle, _spacingColorBrush);
                }
                else if (source.Chars[i % 256] == 0x00)
                {
                    target2D.FillRectangle(rectangle, _notMappedColorBrush);
                }
                else
                {
                    target2D.DrawRectangle(rectangle, _gridColorBrush, 1.0f);
                }
            }

            int squareSize = info.Header.LineSpacing + info.Header.SquareDiff;

            rectangle.Height = squareSize;
            rectangle.Width  = squareSize;
            for (int i = 0; i < info.AdditionalTable.Length; i++)
            {
                int value = info.AdditionalTable[i];
                if (value == 0)
                {
                    continue;
                }

                rectangle.Y = (value >> 8) * squareSize - viewportY;
                rectangle.X = (value & 0xFF) * squareSize - viewportX;

                if (_charactersControl.CurrentAdditionalIndices.Contains(i))
                {
                    target2D.FillRectangle(rectangle, _selectedColorBrush);
                }
                else if (source.Chars[i + 256] == 0x00)
                {
                    target2D.FillRectangle(rectangle, _notMappedColorBrush);
                }
                else
                {
                    target2D.DrawRectangle(rectangle, _gridColorBrush, 1.0f);
                }
            }

            target2D.EndDraw();
        }