Exemplo n.º 1
0
        private bool ReadRecord(Stream stream, EmfContext context, XmlWriter output)
        {
            byte[] header   = ByteUtility.Read(stream, 6);
            int    size     = ReadInt32(header, 0);
            short  function = ReadInt16(header, 4);

            if (function == 0)
            {
                return(false);
            }

            byte[] parameters = ByteUtility.Read(stream, (int)((size - 3) * 2));

            if (function == META_SETBKCOLOR)
            {
                context.BackgroundColor = ReadColor(parameters, 0);
            }
            else if (function == META_SETBKMODE)
            {
                context.BackgroundMode = ReadInt16(parameters, 0);
            }
            else if (function == META_SETMAPMODE)
            {
                context.MappingMode = ReadInt16(parameters, 0);
            }
            else if (function == META_SETROP2)
            {
                HandleNotImplemented("META_SETROP2", parameters);
            }
            else if (function == META_SETPOLYFILLMODE)
            {
                context.PolyFillMode = ReadInt16(parameters, 0);
            }
            else if (function == META_SETSTRETCHBLTMODE)
            {
                HandleNotImplemented("META_SETSTRETCHBLTMODE", parameters);
            }
            else if (function == META_SETTEXTCOLOR)
            {
                context.TextColor = ReadColor(parameters, 0);
            }
            else if (function == META_SETTEXTCHAREXTRA)
            {
                HandleNotImplemented("META_SETTEXTCHAREXTRA", parameters);
            }
            else if (function == META_SETWINDOWORG)
            {
                context.WindowOrg = ReadPoint(parameters, 0, false, null);
            }
            else if (function == META_SETWINDOWEXT)
            {
                context.WindowExt = ReadPoint(parameters, 0, false, null);
            }
            else if (function == META_SETVIEWPORTORG)
            {
                context.ViewPortOrg = ReadPoint(parameters, 0, false, null);
            }
            else if (function == META_SETVIEWPORTEXT)
            {
                context.ViewPortExt = ReadPoint(parameters, 0, false, null);
            }
            else if (function == META_OFFSETWINDOWORG)
            {
                context.OffsetWindowOrg = ReadPoint(parameters, 0, false, null);
            }
            else if (function == META_SCALEWINDOWEXT)
            {
                //context.ScaleWindowExt = new Scale(parameters);
                HandleNotImplemented("META_EXCLUDECLIPRECT", parameters);
            }
            else if (function == META_OFFSETVIEWPORTORG)
            {
                context.OffsetViewPortOrg = ReadPoint(parameters, 0, false, null);
            }
            else if (function == META_SCALEVIEWPORTEXT)
            {
                //context.ScaleViewPortExt = new Scale(parameters);
                HandleNotImplemented("META_EXCLUDECLIPRECT", parameters);
            }
            else if (function == META_LINETO)
            {
                WriteLine(parameters, context, output);
            }
            else if (function == META_MOVETO)
            {
                context.CurrentPosition = ReadPoint(parameters, 0, false, context);
            }
            else if (function == META_EXCLUDECLIPRECT)
            {
                HandleNotImplemented("META_EXCLUDECLIPRECT", parameters);
            }
            else if (function == META_INTERSECTCLIPRECT)
            {
                HandleNotImplemented("META_INTERSECTCLIPRECT", parameters);
            }
            else if (function == META_ARC)
            {
                WriteArc(parameters, context, output);
            }
            else if (function == META_ELLIPSE)
            {
                WriteEllipse(parameters, context, output);
            }
            else if (function == META_FLOODFILL)
            {
                HandleNotImplemented("META_FLOODFILL", parameters);
            }
            else if (function == META_PIE)
            {
                HandleNotImplemented("META_PIE", parameters);
            }
            else if (function == META_RECTANGLE)
            {
                WriteRectangle(parameters, context, output);
            }
            else if (function == META_ROUNDRECT)
            {
                HandleNotImplemented("META_ROUNDRECT", parameters);
            }
            else if (function == META_PATBLT)
            {
                HandleNotImplemented("META_PATBLT", parameters);
            }
            else if (function == META_SAVEDC)
            {
                HandleNotImplemented("META_SAVEDC", parameters);
            }
            else if (function == META_SETPIXEL)
            {
                HandleNotImplemented("META_SETPIXEL", parameters);
            }
            else if (function == META_OFFSETCLIPRGN)
            {
                HandleNotImplemented("META_OFFSETCLIPRGN", parameters);
            }
            else if (function == META_POLYGON)
            {
                WritePolygon(parameters, context, output);
            }
            else if (function == META_POLYLINE)
            {
                WritePolyline(parameters, context, output);
            }
            else if (function == META_ESCAPE)
            {
                HandleNotImplemented("META_ESCAPE", parameters);
            }
            else if (function == META_RESTOREDC)
            {
                HandleNotImplemented("META_RESTOREDC", parameters);
            }
            else if (function == META_FILLREGION)
            {
                HandleNotImplemented("META_FILLREGION", parameters);
            }
            else if (function == META_FRAMEREGION)
            {
                HandleNotImplemented("META_FRAMEREGION", parameters);
            }
            else if (function == META_INVERTREGION)
            {
                HandleNotImplemented("META_INVERTREGION", parameters);
            }
            else if (function == META_PAINTREGION)
            {
                HandleNotImplemented("META_PAINTREGION", parameters);
            }
            else if (function == META_SELECTCLIPREGION)
            {
                short index = ReadInt16(parameters, 0);
                context.SelectObject(index);
            }
            else if (function == META_SELECTOBJECT)
            {
                short index = ReadInt16(parameters, 0);
                context.SelectObject(index);
            }
            else if (function == META_SETTEXTALIGN)
            {
                HandleNotImplemented("META_SETTEXTALIGN", parameters);
            }
            else if (function == META_CHORD)
            {
                HandleNotImplemented("META_CHORD", parameters);
            }
            else if (function == META_SETMAPPERFLAGS)
            {
                HandleNotImplemented("META_SETMAPPERFLAGS", parameters);
            }
            else if (function == META_TEXTOUT)
            {
                HandleNotImplemented("META_TEXTOUT", parameters);
            }
            else if (function == META_EXTTEXTOUT)
            {
                HandleNotImplemented("META_EXTTEXTOUT", parameters);
            }
            else if (function == META_SETDIBTODEV)
            {
                HandleNotImplemented("META_SETDIBTODEV", parameters);
            }
            else if (function == META_POLYPOLYGON)
            {
                WritePolyPolygon(parameters, context, output);
            }
            else if (function == META_DIBBITBLT)
            {
                HandleNotImplemented("META_DIBBITBLT", parameters);
            }
            else if (function == META_DIBSTRETCHBLT)
            {
                HandleNotImplemented("META_DIBSTRETCHBLT", parameters);
            }
            else if (function == META_EXTFLOODFILL)
            {
                HandleNotImplemented("META_EXTFLOODFILL", parameters);
            }
            else if (function == META_DELETEOBJECT)
            {
                short index = ReadInt16(parameters, 0);
                context.RemoveObject(index);
            }
            else if (function == META_CREATEPENINDIRECT)
            {
                context.AddObject(new Pen(parameters));
            }
            else if (function == META_CREATEFONTINDIRECT)
            {
                context.AddObject(new object());

                HandleNotImplemented("META_CREATEFONTINDIRECT", parameters);
            }
            else if (function == META_CREATEBRUSHINDIRECT)
            {
                context.AddObject(new Brush(parameters));
            }
            else if (function == META_CREATEREGION)
            {
                context.AddObject(new object());

                HandleNotImplemented("META_CREATEREGION", parameters);
            }
            else if (function == META_STRETCHDIB)
            {
                HandleNotImplemented("META_STRETCHDIB", parameters);
            }
            else if (function == META_SETTEXTJUSTIFICATION)
            {
                HandleNotImplemented("META_SETTEXTJUSTIFICATION", parameters);
            }
            else if (function == META_BITBLT)
            {
                HandleNotImplemented("META_BITBLT", parameters);
            }
            else if (function == META_STRETCHBLT)
            {
                HandleNotImplemented("META_STRETCHBLT", parameters);
            }
            else if (function == META_CREATEPATTERNBRUSH)
            {
                context.AddObject(new object());

                HandleNotImplemented("META_CREATEPATTERNBRUSH", parameters);
            }
            else if (function == META_SELECTPALETTE)
            {
                short index = ReadInt16(parameters, 0);
                context.SelectObject(index);
            }
            else if (function == META_REALIZEPALETTE)
            {
                HandleNotImplemented("META_REALIZEPALETTE", parameters);
            }
            else if (function == META_ANIMATEPALETTE)
            {
                HandleNotImplemented("META_ANIMATEPALETTE", parameters);
            }
            else if (function == META_SETPALENTRIES)
            {
                HandleNotImplemented("META_SETPALENTRIES", parameters);
            }
            else if (function == META_RESIZEPALETTE)
            {
                HandleNotImplemented("META_RESIZEPALETTE", parameters);
            }
            else if (function == META_CREATEPALETTE)
            {
                context.AddObject(new object());

                HandleNotImplemented("META_CREATEPALETTE", parameters);
            }
            else if (function == META_SETRELABS)
            {
                HandleNotImplemented("META_SETRELABS", parameters);
            }
            else
            {
                OnWarning(Resources.MessageEmfFunctionUnknown, function);
            }

            return(true);
        }