public void Reset(int hPageNum, int vPageNum, int newWidth, int newHeight)
        {
            this.pageNumFlags = (hPageNum << 8) | vPageNum;
            this.ReleaseUnManagedResource();
            this.ClearPreviousStoredValues();

            var orgHdc = MyWin32.CreateCompatibleDC(IntPtr.Zero);

            System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(newWidth, newHeight, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
            hbmp = bmp.GetHbitmap();
            MyWin32.SelectObject(orgHdc, hbmp);
            MyWin32.PatBlt(orgHdc, 0, 0, newWidth, newHeight, MyWin32.WHITENESS);
            MyWin32.SetBkMode(orgHdc, MyWin32._SetBkMode_TRANSPARENT);


            hFont = defaultHFont;

            MyWin32.SelectObject(orgHdc, hFont);
            currentClipRect = new System.Drawing.Rectangle(0, 0, newWidth, newHeight);
            MyWin32.SelectObject(orgHdc, hRgn);
            gx = System.Drawing.Graphics.FromHdc(orgHdc);
            this.originalHdc = orgHdc;

            gx.Clear(System.Drawing.Color.White);
            MyWin32.SetRectRgn(hRgn, 0, 0, newWidth, newHeight);


            left   = hPageNum * newWidth;
            top    = vPageNum * newHeight;
            right  = left + newWidth;
            bottom = top + newHeight;
#if DEBUG
            debug_resetCount++;
#endif
        }
Beispiel #2
0
        public override void DrawText(char[] buffer, Rectangle logicalTextBox, int textAlignment)
        {
            ReleaseHdc();
            IntPtr gxdc     = gx.GetHdc();
            var    clipRect = System.Drawing.Rectangle.Intersect(logicalTextBox.ToRect(), currentClipRect);

            clipRect.Offset(canvasOriginX, canvasOriginY);
            MyWin32.SetRectRgn(hRgn,
                               clipRect.Left,
                               clipRect.Top,
                               clipRect.Right,
                               clipRect.Bottom);
            MyWin32.SelectClipRgn(gxdc, hRgn);

            NativeTextWin32.TextOut(gxdc, CanvasOrgX + logicalTextBox.X, CanvasOrgY + logicalTextBox.Y, buffer, buffer.Length);

            MyWin32.SelectClipRgn(gxdc, IntPtr.Zero);
            gx.ReleaseHdc();

            //ReleaseHdc();
            //IntPtr gxdc = gx.GetHdc();
            //MyWin32.SetViewportOrgEx(gxdc, CanvasOrgX, CanvasOrgY, IntPtr.Zero);
            //System.Drawing.Rectangle clipRect =
            //    System.Drawing.Rectangle.Intersect(logicalTextBox.ToRect(), currentClipRect);
            //clipRect.Offset(CanvasOrgX, CanvasOrgY);
            //MyWin32.SetRectRgn(hRgn, clipRect.X, clipRect.Y, clipRect.Right, clipRect.Bottom);
            //MyWin32.SelectClipRgn(gxdc, hRgn);
            //NativeTextWin32.TextOut(gxdc, logicalTextBox.X, logicalTextBox.Y, buffer, buffer.Length);
            //MyWin32.SelectClipRgn(gxdc, IntPtr.Zero);
            //MyWin32.SetViewportOrgEx(gxdc, -CanvasOrgX, -CanvasOrgY, IntPtr.Zero);
            //gx.ReleaseHdc();
        }
        public void Reuse(int hPageNum, int vPageNum)
        {
            this.pageNumFlags = (hPageNum << 8) | vPageNum;
            int w = this.Width;
            int h = this.Height;

            this.ClearPreviousStoredValues();
            currentClipRect = new System.Drawing.Rectangle(0, 0, w, h);
            gx.Clear(System.Drawing.Color.White);
            MyWin32.SetRectRgn(hRgn, 0, 0, w, h);
            left   = hPageNum * w;
            top    = vPageNum * h;
            right  = left + w;
            bottom = top + h;
        }
Beispiel #4
0
        //==============================================



        public override void DrawText(char[] buffer, int x, int y)
        {
            ReleaseHdc();
            IntPtr gxdc     = gx.GetHdc();
            var    clipRect = currentClipRect;

            clipRect.Offset(canvasOriginX, canvasOriginY);
            MyWin32.SetRectRgn(hRgn,
                               clipRect.Left,
                               clipRect.Top,
                               clipRect.Right,
                               clipRect.Bottom);
            MyWin32.SelectClipRgn(gxdc, hRgn);
            NativeTextWin32.TextOut(gxdc, CanvasOrgX + x, CanvasOrgY + y, buffer, buffer.Length);
            MyWin32.SelectClipRgn(gxdc, IntPtr.Zero);
            gx.ReleaseHdc();
        }
Beispiel #5
0
        public override void DrawText(char[] str, int startAt, int len, Rectangle logicalTextBox, int textAlignment)
        {
#if DEBUG
            dbugCounter.dbugDrawStringCount++;
#endif
            var color = this.CurrentTextColor;
            if (color.A == 255)
            {
                var clipRect = Rectangle.Intersect(logicalTextBox,
                                                   new Rectangle(currentClipRect.Left,
                                                                 currentClipRect.Top,
                                                                 currentClipRect.Width,
                                                                 currentClipRect.Height));
                clipRect.Offset(canvasOriginX, canvasOriginY);
                MyWin32.SetRectRgn(hRgn,
                                   clipRect.Left,
                                   clipRect.Top,
                                   clipRect.Right,
                                   clipRect.Bottom);
                MyWin32.SelectClipRgn(tempDc, hRgn);

                unsafe
                {
                    fixed(char *startAddr = &str[0])
                    {
                        NativeTextWin32.TextOutUnsafe(tempDc,
                                                      (int)logicalTextBox.X + canvasOriginX,
                                                      (int)logicalTextBox.Y + canvasOriginY,
                                                      (startAddr + startAt), len);
                    }
                }
                MyWin32.SelectClipRgn(tempDc, IntPtr.Zero);

#if DEBUG
                //NativeTextWin32.dbugDrawTextOrigin(tempDc,
                //        logicalTextBox.X + canvasOriginX,
                //        logicalTextBox.Y + canvasOriginY);
#endif
            }
            else
            {
                //translucent / transparent text
                InitHdc();

                var intersectRect = Rectangle.Intersect(logicalTextBox,
                                                        new Rectangle(currentClipRect.Left,
                                                                      currentClipRect.Top,
                                                                      currentClipRect.Width,
                                                                      currentClipRect.Height));
                intersectRect.Offset(canvasOriginX, canvasOriginY);
                MyWin32.SetRectRgn(hRgn,
                                   intersectRect.Left,
                                   intersectRect.Top,
                                   intersectRect.Right,
                                   intersectRect.Bottom);
                MyWin32.SelectClipRgn(tempDc, hRgn);


                unsafe
                {
                    fixed(char *startAddr = &str[0])
                    {
                        NativeTextWin32.TextOutUnsafe(tempDc,
                                                      logicalTextBox.X + canvasOriginX,
                                                      logicalTextBox.Y + canvasOriginY,
                                                      (startAddr + startAt), len);
                    }
                }
#if DEBUG
                //NativeTextWin32.dbugDrawTextOrigin(tempDc,
                //    logicalTextBox.X + canvasOriginX,
                //    logicalTextBox.Y + canvasOriginY);
#endif
            }
        }