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); }
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(); }
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 }