GraphPortChunkDecoder.ReceiveData C# (CSharp) Method

ReceiveData() public method

public ReceiveData ( BufferChunk aRecord ) : void
aRecord NewTOAPIA.BufferChunk
return void
    public virtual void ReceiveData(BufferChunk aRecord)
    {
        // First read out the record type
        int recordType = aRecord.NextInt32();

        // Then deserialize the rest from there
        switch (recordType)
        {
            case GDI32.EMR_HEADER:
                break;

            // Transform related
            case GDI32.EMR_SCALEVIEWPORTEXTEX:
            case GDI32.EMR_SCALEWINDOWEXTEX:
                break;

            case GDI32.EMR_SETWINDOWEXTEX:
                {
                    int width = aRecord.NextInt32();
                    int height = aRecord.NextInt32();

                    SetWindowExtent(width, height);
                }
                break;

            case GDI32.EMR_SETWINDOWORGEX:
                {
                    int x = aRecord.NextInt32();
                    int y = aRecord.NextInt32();

                    SetWindowOrigin(x, y);
                }
                break;

            case GDI32.EMR_SETVIEWPORTEXTEX:
                {
                    int width = aRecord.NextInt32();
                    int height = aRecord.NextInt32();

                    SetViewportExtent(width, height);
                }
                break;

            case GDI32.EMR_SETVIEWPORTORGEX:
                {
                    int x = aRecord.NextInt32();
                    int y = aRecord.NextInt32();
                    
                    SetViewportOrigin(x, y);
                }
                break;

            case GDI32.EMR_SETWORLDTRANSFORM:
            case GDI32.EMR_MODIFYWORLDTRANSFORM:
                break;

            case GDI32.EMR_SETBRUSHORGEX:
                break;

            case GDI32.EMR_EOF:
                Flush();
                break;

            case GDI32.EMR_SETPIXELV:
                {
                    int x = aRecord.NextInt32();
                    int y = aRecord.NextInt32();
                    UInt32 colorref = aRecord.NextUInt32();

                    SetPixel(x, y, colorref);
                }
                break;

            case GDI32.EMR_SETMAPPERFLAGS:
                break;

            case GDI32.EMR_SETPOLYFILLMODE:
                SetPolyFillMode(aRecord.NextInt32());
                break;

            case GDI32.EMR_SETSTRETCHBLTMODE:
                break;

            case GDI32.EMR_SETMAPMODE:
                MappingModes aMode = (MappingModes)aRecord.NextInt32();
                SetMappingMode(aMode);
                break;


            case GDI32.EMR_SETTEXTCOLOR:
                SetTextColor(aRecord.NextUInt32());
                break;

            case GDI32.EMR_SETBKCOLOR:
                SetBkColor(aRecord.NextUInt32());
                break;

            case GDI32.EMR_SETDCBRUSHCOLOR:
                SetDefaultBrushColor(aRecord.NextUInt32());
                break;

            case GDI32.EMR_SETDCPENCOLOR:
                SetDefaultPenColor(aRecord.NextUInt32());
                break;

            case GDI32.EMR_SETBKMODE:
                SetBkMode(aRecord.NextInt32());
                break;

            case GDI32.EMR_SETROP2:
                SetROP2((BinaryRasterOps)aRecord.NextInt32());
                break;

            case GDI32.EMR_SETTEXTALIGN:
            case GDI32.EMR_SETCOLORADJUSTMENT:
                break;

            case GDI32.EMR_MOVETOEX:
                MoveTo(aRecord.NextInt32(), aRecord.NextInt32());
                break;

            case GDI32.EMR_OFFSETCLIPRGN:
            case GDI32.EMR_SETMETARGN:
            case GDI32.EMR_EXCLUDECLIPRECT:
            case GDI32.EMR_INTERSECTCLIPRECT:
                break;

            case GDI32.EMR_SAVEDC:
                SaveState();
                break;

            case GDI32.EMR_RESTOREDC:
                RestoreState(aRecord.NextInt32());
                break;

            case GDI32.EMR_CREATEPEN:
                {
                    int aStyle = aRecord.NextInt32();
                    int width = aRecord.NextInt32();
                    uint colorref = aRecord.NextUInt32();
                    Guid uniqueID = this.UnpackGuid(aRecord);
                    CreateCosmeticPen((PenStyle)aStyle, colorref, uniqueID);
                }
                break;

            case GDI32.EMR_CREATEBRUSHINDIRECT:
                {
                    int aStyle = aRecord.NextInt32();   // chunk += aStyle;
                    int hatch = aRecord.NextInt32(); // chunk += hatch;
                    uint color = aRecord.NextUInt32(); // chunk += color;

                    Guid uniqueID = this.UnpackGuid(aRecord);
                    CreateBrush(aStyle, hatch, color, uniqueID);
                }
                break;

            case GDI32.EMR_SELECTOBJECT:
                break;

            case GDI32.EMR_DELETEOBJECT:
                break;

            case GDI32.EMR_SELECTSTOCKOBJECT:
                SelectStockObject(aRecord.NextInt32());
                break;

            case GDI32.EMR_SELECTUNIQUEOBJECT:
                {
                    Guid uniqueID = this.UnpackGuid(aRecord);
                    SelectUniqueObject(uniqueID);
                }
                break;

            case GDI32.EMR_ELLIPSE:
                {
                    int left = aRecord.NextInt32();
                    int top = aRecord.NextInt32();
                    int right = aRecord.NextInt32();
                    int bottom = aRecord.NextInt32();

                    Ellipse(left, top, right, bottom);
                }
                break;

            case GDI32.EMR_ROUNDRECT:
                {
                    int left = aRecord.NextInt32();
                    int top = aRecord.NextInt32();
                    int right = aRecord.NextInt32();
                    int bottom = aRecord.NextInt32();
                    int width = aRecord.NextInt32();
                    int height = aRecord.NextInt32();

                    RoundRect(left, top, right, bottom, width, height);
                }
                break;

            case GDI32.EMR_RECTANGLE:
                {
                    int left = aRecord.NextInt32();
                    int top = aRecord.NextInt32();
                    int right = aRecord.NextInt32();
                    int bottom = aRecord.NextInt32();

                    Rectangle(left, top, right, bottom);
                }
                break;

            case GDI32.EMR_GRADIENTFILL:    // Only rectangles at the moment
                {
                    // Unpack the vertices
                    TRIVERTEX[] pVertex = this.UnpackTRIVERTEX(aRecord);

                    // unpack the gradient mesh
                    GRADIENT_RECT[] pMesh = UnpackGRADIENT_RECT(aRecord);

                    // pack the mode
                    uint dwMode = aRecord.NextUInt32();

                    this.GradientRectangle(pVertex, pMesh, dwMode);
                }
                break;

            case GDI32.EMR_ARC:
            case GDI32.EMR_ARCTO:
            case GDI32.EMR_ANGLEARC:
            case GDI32.EMR_CHORD:
            case GDI32.EMR_PIE:
                break;

            case GDI32.EMR_SELECTPALETTE:
            case GDI32.EMR_CREATEPALETTE:
            case GDI32.EMR_SETPALETTEENTRIES:
            case GDI32.EMR_RESIZEPALETTE:
            case GDI32.EMR_REALIZEPALETTE:
                break;

            case GDI32.EMR_LINETO:
                LineTo(aRecord.NextInt32(), aRecord.NextInt32());
                break;

            case GDI32.EMR_EXTFLOODFILL:
                break;

            case GDI32.EMR_POLYDRAW:
                //EMRPOLYDRAW polydraw = (EMRPOLYDRAW)aRecord;
                //fRenderer.PolyDraw(polydraw.aptl, polydraw.abTypes);
                break;

            case GDI32.EMR_SETARCDIRECTION:
            case GDI32.EMR_SETMITERLIMIT:
                break;

            case GDI32.EMR_BEGINPATH:
                BeginPath();
                break;

            case GDI32.EMR_ENDPATH:
                EndPath();
                break;

            case GDI32.EMR_FILLPATH:
                FillPath();
                break;

            case GDI32.EMR_STROKEANDFILLPATH:
                DrawPath();
                break;

            case GDI32.EMR_STROKEPATH:
                FramePath();
                break;

            case GDI32.EMR_ABORTPATH:
            case GDI32.EMR_FLATTENPATH:
            case GDI32.EMR_WIDENPATH:
                break;

            case GDI32.EMR_CLOSEFIGURE:

            case GDI32.EMR_SELECTCLIPPATH:
                break;

            case GDI32.EMR_BITBLT:
                {
                    // Get the X, Y
                    int x = aRecord.NextInt32();
                    int y = aRecord.NextInt32();
                    int width = aRecord.NextInt32();
                    int height = aRecord.NextInt32();

                    // Now create a pixbuff on the specified size
                    PixelBuffer pixBuff = new PixelBuffer(width, height);
                    int dataSize = aRecord.NextInt32();

                    // Copy the received data into it right pixel data pointer
                    aRecord.CopyTo(pixBuff.Pixels.Data, dataSize);

                    // And finally, call the BitBlt function
                    BitBlt(x,y,pixBuff);
                }
                break;


            case GDI32.EMR_POLYBEZIERTO:
                break;


            case GDI32.EMR_POLYBEZIER:
                {
                    Point[] points = UnpackPoints(aRecord);

                    // Now we have everything, so call the call
                    PolyBezier(points);
                }
                break;

            case GDI32.EMR_POLYGON:
                {
                    Point[] points = UnpackPoints(aRecord);

                    // Now we have everything, so call the call
                    Polygon(points);
                }
                break;

            case GDI32.EMR_POLYPOLYGON:
                break;


            case GDI32.EMR_POLYLINE:
                {
                    Point[] points = UnpackPoints(aRecord);

                    // Now we have everything, so call the call
                    PolyLine(points);
                }
                break;

            case GDI32.EMR_POLYLINETO:
                {
                    Point[] points = UnpackPoints(aRecord);

                    //PolyLineTo(points);
                }
                break;

            case GDI32.EMR_POLYPOLYLINE:
                break;

            case GDI32.EMR_POLYTEXTOUTA:
            case GDI32.EMR_POLYTEXTOUTW:
                break;


            case GDI32.EMR_EXTTEXTOUTA:
            case GDI32.EMR_EXTTEXTOUTW:
                {
                    int x = aRecord.NextInt32();
                    int y = aRecord.NextInt32();
                    int strLength = aRecord.NextInt32();
                    string text = (string)aRecord;
                    DrawString(x, y, text);
                }
                break;

            case GDI32.EMR_EXTCREATEFONTINDIRECTW:
                {
                    LOGFONT newFont = new LOGFONT();

                    int faceNameLength = aRecord.NextInt32();
                    newFont.lfFaceName = aRecord.NextUtf8String(faceNameLength);
                    newFont.lfHeight = aRecord.NextInt32();
                    newFont.lfCharSet = aRecord.NextByte();
                    newFont.lfClipPrecision = aRecord.NextByte();
                    newFont.lfEscapement = aRecord.NextInt32();
                    newFont.lfItalic = aRecord.NextByte();
                    newFont.lfOrientation = aRecord.NextInt32();
                    newFont.lfOutPrecision = aRecord.NextByte();
                    newFont.lfPitchAndFamily = aRecord.NextByte();
                    newFont.lfQuality = aRecord.NextByte();
                    newFont.lfStrikeOut = aRecord.NextByte();
                    newFont.lfUnderline = aRecord.NextByte();
                    newFont.lfWeight = aRecord.NextInt32();
                    newFont.lfWidth = aRecord.NextInt32();

                    Guid uniqueID = this.UnpackGuid(aRecord);

                    CreateFont(newFont.lfFaceName, newFont.lfHeight, uniqueID);
                }
                break;


            case GDI32.EMR_CREATEMONOBRUSH:
            case GDI32.EMR_EXTCREATEPEN:
            case GDI32.EMR_CREATEDIBPATTERNBRUSHPT:
                break;

            case GDI32.EMR_FILLRGN:
            case GDI32.EMR_FRAMERGN:
            case GDI32.EMR_INVERTRGN:
            case GDI32.EMR_PAINTRGN:
            case GDI32.EMR_EXTSELECTCLIPRGN:
                break;

            case GDI32.EMR_ALPHABLEND:
                {
                    // Get the X, Y
                    int x = aRecord.NextInt32();
                    int y = aRecord.NextInt32();
                    int width = aRecord.NextInt32();
                    int height = aRecord.NextInt32();

                    int srcX = aRecord.NextInt32();
                    int srcY = aRecord.NextInt32();
                    int srcWidth = aRecord.NextInt32();
                    int srcHeight = aRecord.NextInt32();

                    byte alpha = aRecord.NextByte();

                    // Now create a pixbuff on the specified size
                    int buffWidth = aRecord.NextInt32();
                    int buffHeight = aRecord.NextInt32();
                    PixelBuffer pixBuff = new PixelBuffer(buffWidth, buffHeight);
                    int dataSize = aRecord.NextInt32();

                    // Copy the received data into it right pixel data pointer
                    aRecord.CopyTo(pixBuff.Pixels.Data, dataSize);

                    // And finally, call the BitBlt function
                    AlphaBlend(x,y,width,height, pixBuff,srcX,srcY, srcWidth,srcHeight,alpha);
                }
                break;

            case GDI32.EMR_STRETCHBLT:
            case GDI32.EMR_MASKBLT:
            case GDI32.EMR_PLGBLT:
            case GDI32.EMR_SETDIBITSTODEVICE:
            case GDI32.EMR_STRETCHDIBITS:
            case GDI32.EMR_TRANSPARENTBLT:
                break;


            case GDI32.EMR_GDICOMMENT:
            case GDI32.EMR_GLSRECORD:
            case GDI32.EMR_GLSBOUNDEDRECORD:
                break;

            case GDI32.EMR_SETLAYOUT:
                break;

            case GDI32.EMR_PIXELFORMAT:
                break;

            case GDI32.EMR_CREATECOLORSPACE:
            case GDI32.EMR_SETCOLORSPACE:
            case GDI32.EMR_DELETECOLORSPACE:
            case GDI32.EMR_COLORCORRECTPALETTE:
            case GDI32.EMR_SETICMMODE:
            case GDI32.EMR_SETICMPROFILEA:
            case GDI32.EMR_SETICMPROFILEW:
            case GDI32.EMR_COLORMATCHTOTARGETW:
            case GDI32.EMR_CREATECOLORSPACEW:
                break;

            case GDI32.EMR_RESERVED_105:            // These will likely never show up
            case GDI32.EMR_RESERVED_106:
            case GDI32.EMR_RESERVED_107:
            case GDI32.EMR_RESERVED_108:
            case GDI32.EMR_RESERVED_109:
            case GDI32.EMR_RESERVED_110:
            case GDI32.EMR_RESERVED_117:
            case GDI32.EMR_RESERVED_119:
            case GDI32.EMR_RESERVED_120:
            case GDI32.EMR_POLYBEZIER16:    // Probably no real need to implement these
            case GDI32.EMR_POLYBEZIERTO16:
            case GDI32.EMR_POLYGON16:
            case GDI32.EMR_POLYPOLYGON16:
            case GDI32.EMR_POLYLINE16:
            case GDI32.EMR_POLYLINETO16:
            case GDI32.EMR_POLYPOLYLINE16:
            case GDI32.EMR_POLYDRAW16:
            default:
                //if (CommandReceived != null)
                //    CommandReceived(aRecord);
                break;
        }
    }
}