Beispiel #1
0
        protected override bool OnExposeEvent(Gdk.EventExpose evnt)
        {
            Gdk.Window window = evnt.Window;

            Gdk.GC gc = new Gdk.GC(window);

            // render header
            Gdk.Pixbuf pb = KinskyDesktopGtk.Properties.ResourceManager.ImageTopLeftEdge;
            pb.RenderToDrawable(window, gc, 0, 0, 0, 0, pb.Width, pb.Height, Gdk.RgbDither.Normal, 0, 0);

            int x          = pb.Width;
            int endHeaderY = pb.Height;

            pb = KinskyDesktopGtk.Properties.ResourceManager.ImageTopRightEdge;
            pb.RenderToDrawable(window, gc, 0, 0, evnt.Area.Width - pb.Width, 0, pb.Width, pb.Height, Gdk.RgbDither.Normal, 0, 0);

            int width = evnt.Area.Width - pb.Width - x;

            pb = KinskyDesktopGtk.Properties.ResourceManager.ImageTopFiller;
            pb = pb.ScaleSimple(width, pb.Height, Gdk.InterpType.Bilinear);
            pb.RenderToDrawable(window, gc, 0, 0, x, 0, pb.Width, pb.Height, Gdk.RgbDither.Normal, 0, 0);

            // render footer
            pb = KinskyDesktopGtk.Properties.ResourceManager.ImageBottomLeftEdge;
            int y = evnt.Area.Bottom - pb.Height;

            pb.RenderToDrawable(window, gc, 0, 0, 0, y, pb.Width, pb.Height, Gdk.RgbDither.Normal, 0, 0);

            x = pb.Width;

            pb = KinskyDesktopGtk.Properties.ResourceManager.ImageBottomRightEdge;
            pb.RenderToDrawable(window, gc, 0, 0, evnt.Area.Width - pb.Width, y, pb.Width, pb.Height, Gdk.RgbDither.Normal, 0, 0);

            width = evnt.Area.Width - pb.Width - x;
            pb    = KinskyDesktopGtk.Properties.ResourceManager.ImageBottomFiller;
            pb    = pb.ScaleSimple(width, pb.Height, Gdk.InterpType.Bilinear);
            pb.RenderToDrawable(window, gc, 0, 0, x, y, pb.Width, pb.Height, Gdk.RgbDither.Normal, 0, 0);

            //render sides
            pb = KinskyDesktopGtk.Properties.ResourceManager.ImageLeftFiller;
            int height = y - endHeaderY;

            pb = pb.ScaleSimple(pb.Width, height, Gdk.InterpType.Bilinear);
            pb.RenderToDrawable(window, gc, 0, 0, 0, endHeaderY, pb.Width, pb.Height, Gdk.RgbDither.Normal, 0, 0);

            pb = KinskyDesktopGtk.Properties.ResourceManager.ImageRightFiller;
            pb = pb.ScaleSimple(pb.Width, height, Gdk.InterpType.Bilinear);
            pb.RenderToDrawable(window, gc, 0, 0, evnt.Area.Width - pb.Width, endHeaderY, pb.Width, pb.Height, Gdk.RgbDither.Normal, 0, 0);

            return(true);
        }
Beispiel #2
0
        public void DrawLayout(Gdk.Drawable drawable, Gdk.GC gc, FontService fontService)
        {
            Gdk.Pixbuf pixbuf = BuildImage(fontService);

            int w = -1, h = -1;

            drawable.GetSize(out w, out h);

            pixbuf.RenderToDrawable(drawable, gc, 0, 0, 0, 0, w, h, Gdk.RgbDither.Normal, 0, 0);

            // manual dispose
            (pixbuf as IDisposable).Dispose();
        }
Beispiel #3
0
        protected override bool OnExposeEvent(Gdk.EventExpose ev)
        {
            if (null != tablePreviewBuf)
            {
                tablePreviewBuf.RenderToDrawable(
                    base.GdkWindow,
                    base.Style.BackgroundGC(Gtk.StateType.Normal),
                    0, 0, 0, 0, -1, -1,
                    Gdk.RgbDither.Normal, 0, 0);

                return(true);
            }
            else
            {
                return(base.OnExposeEvent(ev));
            }
        }
        protected override bool OnExposeEvent(Gdk.EventExpose evt)
        {
            var build   = "";
            var version = "v" + BuildVariables.PackageVersionLabel;

            var index = version.IndexOf(' ');

            if (index != -1)
            {
                build   = version.Substring(index + 1);
                version = version.Substring(0, index);
            }

            if (bitmap != null)
            {
                using (var context = Gdk.CairoHelper.Create(GdkWindow))
                {
                    context.Antialias = Cairo.Antialias.Subpixel;

                    // Render the image first.
                    bitmap.RenderToDrawable(GdkWindow, new Gdk.GC(GdkWindow), 0, 0, 0, 0, bitmap.Width, bitmap.Height, Gdk.RgbDither.None, 0, 0);

                    if (showVersionInfo)
                    {
                        var bottomRight = new Cairo.PointD(bitmap.Width - 12, bitmap.Height - 25);
                        // Render the alpha/beta text if we're an alpha or beta. If this
                        // is rendered, the bottomRight point will be shifted upwards to
                        // allow the MonoDevelop version to be rendered above the alpha marker
                        if (!string.IsNullOrEmpty(build))
                        {
                            DrawAlphaBetaMarker(context, ref bottomRight, build);
                        }
                        // Render the MonoDevelop version
                        DrawVersionNumber(context, ref bottomRight, version);
                    }
                }
            }

            return(true);
        }
        /// <summary>
        /// Event Handler for banner Exposed
        /// </summary>
        private void OnBannerExposed(object o, ExposeEventArgs args)
        {
            if (args.Event.Count > 0)
            {
                return;
            }

            Gdk.Pixbuf spb =
                ScaledPixbuf.ScaleSimple(iFolderScaledBanner.Allocation.Width,
                                         iFolderScaledBanner.Allocation.Height,
                                         Gdk.InterpType.Nearest);

            Gdk.GC gc = new Gdk.GC(iFolderScaledBanner.GdkWindow);

            spb.RenderToDrawable(iFolderScaledBanner.GdkWindow,
                                 gc,
                                 0, 0,
                                 args.Event.Area.X,
                                 args.Event.Area.Y,
                                 args.Event.Area.Width,
                                 args.Event.Area.Height,
                                 Gdk.RgbDither.Normal,
                                 0, 0);
        }
        protected void OnDrawingareaExposeEvent(object o, Gtk.ExposeEventArgs args)
        {
            Gdk.EventExpose expose = args.Args[0] as Gdk.EventExpose;
            Gdk.Window      win = expose.Window;
            int             width, height;

            win.GetSize(out width, out height);
            Gdk.Rectangle exposeRect = expose.Area;
            bool          fulldraw   = width == exposeRect.Width && height == exposeRect.Height;

            win.DrawRectangle(Style.LightGC(StateType.Normal), true, exposeRect);
            if (GetContentDelegate == null)
            {
                return; // todo: an error message could be displayed
            }
            int offset = (int)vscrollbar1.Value;

            if (fulldraw)
            {
                TopVisibleRow    = offset;
                BottomVisibleRow = offset;
            }
            int hscrollRange = 0;
            int dy           = exposeRect.Top;

            offset += dy / ConstantHeight;
            dy     -= dy % ConstantHeight;

            Gdk.GC backgound = new Gdk.GC((Gdk.Drawable)base.GdkWindow);
            Gdk.GC text      = new Gdk.GC((Gdk.Drawable)base.GdkWindow);

            ColumnControl.Column[] columns = mColumnControl.GetVisibleColumnsInDrawOrder();

            for (int row = offset; row < RowCount; row++)
            {
                int           dx   = -(int)hscrollbar1.Value;
                Gdk.Rectangle rect = new Gdk.Rectangle(dx, dy, 0, ConstantHeight);

                System.Drawing.Color backColor = System.Drawing.Color.WhiteSmoke;
                System.Drawing.Color textColor = System.Drawing.Color.Black;

                if (isRowSelected(row))
                {
                    if (HasFocus)
                    {
                        backColor = System.Drawing.Color.DarkGray;
                    }
                    else
                    {
                        backColor = System.Drawing.Color.LightGray;
                    }
                }
                else
                {
                    if (GetColorDelegate != null)
                    {
                        GetColorDelegate(row, ref backColor, ref textColor);
                    }
                }

                backgound.RgbFgColor = new Gdk.Color(backColor.R, backColor.G, backColor.B);
                text.RgbFgColor      = new Gdk.Color(textColor.R, textColor.G, textColor.B);

                for (int c = 0; c < columns.Length; c++)
                {
                    ColumnControl.Column column = columns[c];
                    int columnIndex             = column.SortOrder;
                    int xwidth = column.Width;
                    if (dx > exposeRect.Right)
                    {
                        break;
                    }
                    rect = new Gdk.Rectangle(rect.Left, rect.Top, xwidth + mColumnControl.GripperWidth, ConstantHeight);
                    if (c == columns.Length - 1)
                    {
                        rect.Width = Math.Max(rect.Width, exposeRect.Right - rect.Left + 1);
                    }
                    object content = GetContentDelegate(row, columnIndex);
                    if (content is Gdk.Pixbuf)
                    {
                        Gdk.Pixbuf image = (Gdk.Pixbuf)content;
                        win.DrawRectangle(backgound, true, rect);
                        dx += 2;
                        image.RenderToDrawable(win, text, 0, 0, dx, dy, image.Width, image.Height, Gdk.RgbDither.Normal, 0, 0);
                        dx += xwidth + mColumnControl.GripperWidth - 2;
                        rect.Offset(xwidth + mColumnControl.GripperWidth, 0);
                    }
                    else
                    {
                        LineLayout.SetText(content.ToString());
                        win.DrawRectangle(backgound, true, rect);
                        dx += 2;
                        win.DrawLayout(text, dx, dy, LineLayout);
                        dx += xwidth + mColumnControl.GripperWidth - 2;
                        rect.Offset(xwidth + mColumnControl.GripperWidth, 0);
                    }
                }
                hscrollRange = Math.Max(hscrollRange, dx + rect.Width);
                dy          += ConstantHeight;
                if (dy > exposeRect.Bottom)
                {
                    break;
                }
                if (fulldraw && exposeRect.Height - dy >= ConstantHeight)
                {
                    BottomVisibleRow++;
                }
            }

            if (fulldraw)
            {
                int pageSize = BottomVisibleRow - TopVisibleRow;
                if (vscrollbar1.Adjustment.PageSize != pageSize)
                {
                    vscrollbar1.Adjustment.PageSize      = pageSize;
                    vscrollbar1.Adjustment.PageIncrement = pageSize;
                }
                hscrollRange += (int)hscrollbar1.Value;
                if (hscrollRange > 0)
                {
                    hscrollbar1.SetRange(0, hscrollRange);
                }

                // position current row inside visible area
                // TODO: please think about, because of double redraw a more sophisticated solution could be possible
                if (CurrentRow >= 0 && CurrentRow < RowCount)
                {
                    if (CurrentRow < TopVisibleRow)
                    {
                        OffsetCursor(TopVisibleRow - CurrentRow);
                    }
                    else if (CurrentRow > BottomVisibleRow)
                    {
                        OffsetCursor(BottomVisibleRow - CurrentRow);
                    }
                }
            }

#if DEBUG2
            if (ComponentManager != null)
            {
                String t1 = String.Format("Expose.Area={0}, size={1}.{2}",
                                          expose.Area.ToString(), width, height);
                String t2 = String.Format("{0} T={1} B={2}", fulldraw ? "FULL" : "PART", TopVisibleRow, BottomVisibleRow);
                ComponentManager.MessageWriteLineInvoke(String.Format("{0} {1}", t1, t2));
            }
#endif
        }