Exemplo n.º 1
0
        /// <summary>
        ///
        /// </summary>
        public void GetAbyssHighlights(out Drawer.HighlightType left, out Drawer.HighlightType right)
        {
            left  = Drawer.HighlightType.Sentinel;
            right = Drawer.HighlightType.Sentinel;

            foreach (Highlight h in containers)
            {
                if (left == Drawer.HighlightType.Sentinel && h.Contains(start - 1))
                {
                    left = h.Type;
                }

                if (right == Drawer.HighlightType.Sentinel && h.Contains(end + 1))
                {
                    right = h.Type;
                }
            }

            if (left == Drawer.HighlightType.Sentinel)
            {
                left = Drawer.HighlightType.Normal;
            }

            if (right == Drawer.HighlightType.Sentinel)
            {
                right = Drawer.HighlightType.Normal;
            }
        }
Exemplo n.º 2
0
 void RenderRangeHelper(Drawer.HighlightType ht, int rstart, int bstart, int len)
 {
     if (ht != Drawer.HighlightType.Normal)
     {
         RenderRowHighlight(rstart, bstart, len, false, ht);
     }
     else
     {
         RenderRowNormal(rstart, bstart, len, false);
     }
 }
Exemplo n.º 3
0
        protected override void RenderRowHighlight(int i, int p, int n, bool blank, Drawer.HighlightType ht)
        {
            int  rx      = 0 + x;
            int  ry      = i * drawer.Height + y;
            long roffset = areaGroup.Offset + i * bpr + p;
            bool odd;

            Gdk.GC backEvenGC = drawer.GetBackgroundGC(Drawer.RowType.Even, Drawer.HighlightType.Normal);
            Gdk.GC backOddGC  = drawer.GetBackgroundGC(Drawer.RowType.Odd, Drawer.HighlightType.Normal);

            // odd row?
            odd = (((roffset / bpr) % 2) == 1);

            if (blank == true)
            {
                if (odd)
                {
                    backPixmap.DrawRectangle(backOddGC, true, rx, ry, width, drawer.Height);
                }
                else
                {
                    backPixmap.DrawRectangle(backEvenGC, true, rx, ry, width, drawer.Height);
                }
            }

            Drawer.RowType rowType;

            if (odd)
            {
                rowType = Drawer.RowType.Odd;
            }
            else
            {
                rowType = Drawer.RowType.Even;
            }

            int pos = 0;

            while (true)
            {
                if (pos >= p)           //don't draw until we reach p
                {
                    drawer.DrawHighlight(backEvenGC, backPixmap, rx, ry, areaGroup.GetCachedByte(roffset++), rowType, ht);
                    if (--n <= 0)
                    {
                        break;
                    }
                }

                rx = rx + drawer.Width;

                pos++;
            }
        }
Exemplo n.º 4
0
	protected override void RenderRowHighlight(int i, int p, int n, bool blank, Drawer.HighlightType ht)
	{
		int rx = 0 + x;
		int ry = i * drawer.Height + y;
		long roffset = areaGroup.Offset + i * bpr + p;
		bool odd;
		Gdk.GC backEvenGC = drawer.GetBackgroundGC(Drawer.RowType.Even, Drawer.HighlightType.Normal);
		Gdk.GC backOddGC = drawer.GetBackgroundGC(Drawer.RowType.Odd, Drawer.HighlightType.Normal);

		// odd row?
		odd = (((roffset / bpr) % 2) == 1);

		if (blank == true) {
			if (odd)
				backPixmap.DrawRectangle(backOddGC, true, rx, ry, width, drawer.Height);
			else
				backPixmap.DrawRectangle(backEvenGC, true, rx, ry, width, drawer.Height);
		}

		Drawer.RowType rowType;

		if (odd)
			rowType = Drawer.RowType.Odd;
		else
			rowType = Drawer.RowType.Even;

		int pos = 0;
		// draw bytes
		while (true) {

			if (pos >= p) { //don't draw until we reach p
				drawer.DrawHighlight(backEvenGC, backPixmap, rx, ry, areaGroup.GetCachedByte(roffset++), rowType, ht);
				if (--n <= 0)
					break;
			}

			// space if necessary
			if (pos % grouping == grouping - 1)
				rx = rx + (dpb + 1) * drawer.Width;
			else
				rx = rx + dpb * drawer.Width;

			pos++;
		}
	}
Exemplo n.º 5
0
 /// <summary>
 /// Adds a highlight on a range of data.
 /// </summary>
 public void AddHighlight(long start, long end, Drawer.HighlightType ht)
 {
     highlights.Insert(new Highlight(start, end, ht));
     changes |= Changes.Highlights;
 }
Exemplo n.º 6
0
 /// <summary>
 /// Render (a part of) a row with highlighting.
 /// </summary>
 /// <param name="i">
 /// The row to render.
 /// </param>
 /// <param name="p">
 /// The offset of the byte in the row to start rendering.
 /// </param>
 /// <param name="n">
 /// The number of bytes to render.
 /// </param>
 /// <param name="blank">
 /// Whether to blank the background before rendering.
 /// </param>
 abstract protected void RenderRowHighlight(int i, int p, int n, bool blank, Drawer.HighlightType ht);
Exemplo n.º 7
0
        /// <summary>
        /// Render the bytes in the highlight range.
        /// </summary>
        /// <param name="h">
        /// A <see cref="Highlight"/>
        /// </param>
        /// <param name="merge">
        /// Whether to visually merge the highlight with adjacent ones left and/or right.
        /// </param>
        /// <remarks>
        /// This method doesn't check whether the merge flags are correct (eg there is indeed
        /// a similar adjacent highlight). It just draws the highlight in such a way as
        /// to appear merged to any similar highlights if they exist.
        ///</remarks>
        internal protected virtual void RenderHighlight(Highlight h, Drawer.HighlightType left, Drawer.HighlightType right)
        {
            if (isAreaRealized == false)
            {
                return;
            }

            int  rstart, bstart, xstart, ystart;
            int  rend, bend, xend, yend;
            bool odd;

            Gdk.GC gc;
            Gdk.GC oddGC;
            Gdk.GC evenGC;
            Gdk.GC leftGC;
            Gdk.GC rightGC;

            oddGC  = drawer.GetBackgroundGC(Drawer.RowType.Odd, h.Type);
            evenGC = drawer.GetBackgroundGC(Drawer.RowType.Even, h.Type);


            GetDisplayInfoByOffset(h.Start, out rstart, out bstart, out xstart, out ystart);
            GetDisplayInfoByOffset(h.End, out rend, out bend, out xend, out yend);

            //System.Console.WriteLine("Start {0:x} {1} {2} x:{3} y:{4}", h.Start, rstart, bstart, xstart, ystart);
            //System.Console.WriteLine("End {0:x} {1} {2} x:{3} y:{4}", h.End, rend, bend, xend, yend);
            bool drawLeft = false;
            int  dxstart  = xstart;

            if (bstart > 0)
            {
                int            digit;
                GetOffsetFlags gof;
                GetOffsetByDisplayInfo(xstart - 1, ystart, out digit, out gof);
                if ((gof & GetOffsetFlags.Abyss) != 0)
                {
                    dxstart -= drawer.Width;
                    drawLeft = true;
                }
            }

            bool drawRight = false;
            int  dxend     = xend;

            if (bend < bpr - 1)
            {
                int            digit;
                GetOffsetFlags gof;
                GetOffsetByDisplayInfo(xend + dpb * drawer.Width, yend, out digit, out gof);
                if ((gof & GetOffsetFlags.Abyss) != 0)
                {
                    dxend    += drawer.Width;
                    drawRight = true;
                }
            }

            // if the whole range is on one row
            if (rstart == rend)
            {
                if (areaGroup.ManualDoubleBuffer)
                {
                    BeginPaint(x + dxstart, y + ystart, dxend - dxstart + dpb * drawer.Width, drawer.Height);
                }
                // odd row?
                odd = (((h.Start / bpr) % 2) == 1);
                if (odd)
                {
                    gc      = oddGC;
                    leftGC  = drawer.GetBackgroundGC(Drawer.RowType.Odd, left);
                    rightGC = drawer.GetBackgroundGC(Drawer.RowType.Odd, right);
                }
                else
                {
                    gc      = evenGC;
                    leftGC  = drawer.GetBackgroundGC(Drawer.RowType.Even, left);
                    rightGC = drawer.GetBackgroundGC(Drawer.RowType.Even, right);
                }

                //render
                if (drawLeft)
                {
                    backPixmap.DrawRectangle(leftGC, true, x + dxstart, y + ystart, drawer.Width, drawer.Height);
                }
                if (drawRight)
                {
                    backPixmap.DrawRectangle(rightGC, true, x + xend + dpb * drawer.Width, y + yend, drawer.Width, drawer.Height);
                }

                backPixmap.DrawRectangle(gc, true, x + xstart, y + ystart, xend - xstart + dpb * drawer.Width, drawer.Height);

                RenderRangeHelper(h.Type, rstart, bstart, bend - bstart + 1);
            }
            else       // multi-row range

            {
                if (areaGroup.ManualDoubleBuffer)
                {
                    // handle double-buffering
                    Gdk.Region paintRegion = new Gdk.Region();

                    Gdk.Rectangle rectStart = new Gdk.Rectangle(x + dxstart, y + ystart, width - dxstart, drawer.Height);

                    Gdk.Rectangle rectMiddle;
                    if (rend > rstart + 1)
                    {
                        rectMiddle = new Gdk.Rectangle(x, y + ystart + drawer.Height, width, yend - ystart - drawer.Height);
                    }
                    else
                    {
                        rectMiddle = Gdk.Rectangle.Zero;
                    }

                    Gdk.Rectangle rectEnd = new Gdk.Rectangle(x, y + yend, dxend + dpb * drawer.Width, drawer.Height);

                    paintRegion.UnionWithRect(rectStart);
                    paintRegion.UnionWithRect(rectMiddle);
                    paintRegion.UnionWithRect(rectEnd);

                    BeginPaintRegion(paintRegion);
                }

                // render first row
                odd = (((h.Start / bpr) % 2) == 1);
                if (odd)
                {
                    gc      = oddGC;
                    leftGC  = drawer.GetBackgroundGC(Drawer.RowType.Odd, left);
                    rightGC = drawer.GetBackgroundGC(Drawer.RowType.Odd, right);
                }
                else
                {
                    gc      = evenGC;
                    leftGC  = drawer.GetBackgroundGC(Drawer.RowType.Even, left);
                    rightGC = drawer.GetBackgroundGC(Drawer.RowType.Even, right);
                }

                if (drawLeft)
                {
                    backPixmap.DrawRectangle(leftGC, true, x + dxstart, y + ystart, drawer.Width, drawer.Height);
                }
                backPixmap.DrawRectangle(gc, true, x + xstart, y + ystart, width - xstart, drawer.Height);

                RenderRangeHelper(h.Type, rstart, bstart, bpr - bstart);

                long curOffset = h.Start + bpr - bstart;

                // render middle rows
                for (int i = rstart + 1; i < rend; i++)
                {
                    odd = (((curOffset / bpr) % 2) == 1);
                    if (odd)
                    {
                        gc = oddGC;
                    }
                    else
                    {
                        gc = evenGC;
                    }
                    backPixmap.DrawRectangle(gc, true, x, y + i * drawer.Height, width, drawer.Height);
                    RenderRangeHelper(h.Type, i, 0, bpr);
                    curOffset += bpr;
                }

                // render last row
                odd = (((h.End / bpr) % 2) == 1);
                if (odd)
                {
                    gc      = oddGC;
                    leftGC  = drawer.GetBackgroundGC(Drawer.RowType.Odd, left);
                    rightGC = drawer.GetBackgroundGC(Drawer.RowType.Odd, right);
                }
                else
                {
                    gc      = evenGC;
                    leftGC  = drawer.GetBackgroundGC(Drawer.RowType.Even, left);
                    rightGC = drawer.GetBackgroundGC(Drawer.RowType.Even, right);
                }

                if (drawRight)
                {
                    backPixmap.DrawRectangle(rightGC, true, x + xend + dpb * drawer.Width, y + yend, drawer.Width, drawer.Height);
                }
                backPixmap.DrawRectangle(gc, true, x, y + yend, xend + dpb * drawer.Width, drawer.Height);
                RenderRangeHelper(h.Type, rend, 0, bend + 1);
            }

            if (areaGroup.ManualDoubleBuffer)
            {
                EndPaint();
            }
        }
Exemplo n.º 8
0
	protected override void RenderHighlight(Highlight h, Drawer.HighlightType left, Drawer.HighlightType right)
	{
	}
Exemplo n.º 9
0
	protected override void RenderRowHighlight(int i, int p, int n, bool blank, Drawer.HighlightType ht)
	{
		RenderRowNormal(i, p, n, blank);
	}
Exemplo n.º 10
0
	protected override void RenderRowHighlight(int i, int p, int n, bool blank, Drawer.HighlightType ht)
	{
	}
Exemplo n.º 11
0
	public Highlight(long start, long end, Drawer.HighlightType ht) : base(start, end)
	{
		type = ht;
	}
Exemplo n.º 12
0
	public Highlight(IRange r, Drawer.HighlightType ht) : base(r)
	{
		type = ht;	
	}
Exemplo n.º 13
0
	public Highlight(Drawer.HighlightType ht) : base()
	{
		type = ht;	
	}
Exemplo n.º 14
0
	public Highlight() : base()
	{
		type = Drawer.HighlightType.Normal;
	}