protected override void Render (Drawable window, Widget widget, Rectangle background_area, Rectangle cell_area, Rectangle expose_area, CellRendererState flags) { int width = 0, height = 0, x_offset = 0, y_offset = 0; StateType state; GetSize (widget, ref cell_area, out x_offset, out y_offset, out width, out height); if (widget.HasFocus) state = StateType.Active; else state = StateType.Normal; width -= (int) this.Xpad * 2; height -= (int) this.Ypad * 2; //FIXME: Style.PaintBox needs some customization so that if you pass it //a Gdk.Rectangle.Zero it gives a clipping area big enough to draw //everything Gdk.Rectangle clipping_area = new Gdk.Rectangle ((int) (cell_area.X + x_offset + this.Xpad), (int) (cell_area.Y + y_offset + this.Ypad), width - 1, height - 1); Style.PaintBox (widget.Style, (Gdk.Window) window, StateType.Normal, ShadowType.In, clipping_area, widget, "trough", (int) (cell_area.X + x_offset + this.Xpad), (int) (cell_area.Y + y_offset + this.Ypad), width - 1, height - 1); Gdk.Rectangle clipping_area2 = new Gdk.Rectangle ((int) (cell_area.X + x_offset + this.Xpad), (int) (cell_area.Y + y_offset + this.Ypad), (int) (width * Percentage), height - 1); Style.PaintBox (widget.Style, (Gdk.Window) window, state, ShadowType.Out, clipping_area2, widget, "bar", (int) (cell_area.X + x_offset + this.Xpad), (int) (cell_area.Y + y_offset + this.Ypad), (int) (width * Percentage), height - 1); }
protected override void OnRender (Cairo.Context cr, Widget widget, Rectangle background_area, Rectangle cell_area, CellRendererState flags) { int x = (int) (cell_area.X + this.Xpad); int y = (int) (cell_area.Y + this.Ypad); int width = (int) (cell_area.Width - this.Xpad * 2); int height = (int) (cell_area.Height - this.Ypad * 2); widget.StyleContext.Save (); widget.StyleContext.AddClass ("trough"); widget.StyleContext.RenderBackground (cr, x, y, width, height); widget.StyleContext.RenderFrame (cr, x, y, width, height); Border padding = widget.StyleContext.GetPadding (StateFlags.Normal); x += padding.Left; y += padding.Top; width -= padding.Left + padding.Right; height -= padding.Top + padding.Bottom; widget.StyleContext.Restore (); widget.StyleContext.Save (); widget.StyleContext.AddClass ("progressbar"); widget.StyleContext.RenderActivity (cr, x, y, (int) (width * Percentage), height); widget.StyleContext.Restore (); }
protected override void Render (Gdk.Drawable window, Widget widget, Gdk.Rectangle background_area, Gdk.Rectangle cell_area, Gdk.Rectangle expose_area, CellRendererState state) { if (Theme == null) { Theme = Hyena.Gui.Theming.ThemeEngine.CreateTheme (widget); Theme.Context.Radius = 3; } Context cr = Gdk.CairoHelper.Create (window); // Setup the drawing boundaries/positioning cr.Rectangle (cell_area.X, cell_area.Y, cell_area.Width, cell_area.Height); cr.Clip (); cr.Translate (cell_area.X, cell_area.Y); // Clear any existing drawing cr.Rectangle (0, 0, cell_area.Width, cell_area.Height); cr.Color = Theme.ViewFill; cr.Fill (); if (state == CellRendererState.Selected) { Theme.DrawRowSelection (cr, 0, 0, cell_area.Width, cell_area.Height, true); } else if (state == CellRendererState.Focused) { Theme.DrawRowSelection (cr, 0, 0, cell_area.Width, cell_area.Height, false); } var border = Theme.TotalBorderWidth; cr.Translate (border, border); var width = cell_area.Width - 2 * border; var height = cell_area.Height - 2 * border; Render (cr, width, height, state); Hyena.Gui.CairoExtensions.DisposeContext (cr); }
protected override void Render (Gdk.Drawable window, Widget widget, Gdk.Rectangle background_area, Gdk.Rectangle cell_area, Gdk.Rectangle expose_area, CellRendererState flags) { base.Render (window, widget, background_area, cell_area, expose_area, flags); if (PackageSourceViewModel == null) return; using (var layout = new Pango.Layout (widget.PangoContext)) { layout.Alignment = Pango.Alignment.Left; layout.SetMarkup (GetPackageSourceNameMarkup ()); int packageSourceNameWidth = GetLayoutWidth (layout); StateType state = GetState (widget, flags); layout.SetMarkup (GetPackageSourceDescriptionMarkup ()); window.DrawLayout (widget.Style.TextGC (state), cell_area.X + textSpacing, cell_area.Y + textTopSpacing, layout); if (!PackageSourceViewModel.IsValid) { using (var ctx = Gdk.CairoHelper.Create (window)) { ctx.DrawImage (widget, warningImage, cell_area.X + textSpacing + packageSourceNameWidth + imageSpacing, cell_area.Y + textTopSpacing); } layout.SetMarkup (GetPackageSourceErrorMarkup ()); int packageSourceErrorTextX = cell_area.X + textSpacing + packageSourceNameWidth + (int)warningImage.Width + (2 * imageSpacing); window.DrawLayout (widget.Style.TextGC (state), packageSourceErrorTextX, cell_area.Y + textTopSpacing, layout); } } }
protected override void Render (Gdk.Drawable window, Widget widget, Gdk.Rectangle background_area, Gdk.Rectangle cell_area, Gdk.Rectangle expose_area, CellRendererState flags) { using (Cairo.Context gr = Gdk.CairoHelper.Create (window)) { gr.Rectangle (cell_area.X, cell_area.Y, cell_area.Width, cell_area.Height); gr.Color = (HslColor)widget.Style.Base ((flags & CellRendererState.Selected) == CellRendererState.Selected ? StateType.Selected : StateType.Normal); gr.Fill (); var size = Math.Max (0, cell_area.Width - cell_area.Width * Time / 100.0); var linearGradient = new LinearGradient (cell_area.X, cell_area.Y, cell_area.Right, cell_area.Bottom); linearGradient.AddColorStop (0, new Cairo.Color (1, 0, 0)); linearGradient.AddColorStop (1, new Cairo.Color (1, 1, 1)); gr.Pattern = linearGradient; gr.Rectangle (cell_area.X + size, cell_area.Y + 2, cell_area.Width - size, cell_area.Height - 4); gr.Fill (); var layout = gr.CreateLayout (); layout.FontDescription = widget.PangoContext.FontDescription; layout.SetText (string.Format ("{0:0.0}", Time)); int w, h; layout.GetPixelSize (out w, out h); gr.MoveTo (cell_area.X + cell_area.Width - 2 - w, cell_area.Y + (cell_area.Height - h) / 2); gr.Color = new Cairo.Color (0, 0, 0); gr.ShowLayout (layout); layout.Dispose (); } }
public override CellEditable StartEditing (Gdk.Event ev, Widget widget, string path, Gdk.Rectangle background_area, Gdk.Rectangle cell_area, CellRendererState flags) { this.path = path; //combo.Combobox.Entry.Text = Text; return new TreeViewCellContainer (combo); }
protected override void Render (Gdk.Drawable window, Gtk.Widget widget, Gdk.Rectangle background_area, Gdk.Rectangle cell_area, Gdk.Rectangle expose_area, CellRendererState flags) { using (var cr = Gdk.CairoHelper.Create (window)) { cr.Rectangle (background_area.X, background_area.Y, background_area.Width, background_area.Height); cr.Clip (); OnRender (cr, widget, background_area, cell_area, flags); } }
protected override void OnRender (Cairo.Context cr, Gtk.Widget widget, Gdk.Rectangle background_area, Gdk.Rectangle cell_area, CellRendererState flags) { if (image.IsNull) return; var pix = ((GtkImage)image.Backend); pix.Draw (Context, cr, Util.GetScaleFactor (widget), cell_area.X, cell_area.Y, image); }
public ICellEditable StartEditing (Widget widget, Gdk.Event evnt, string path, Gdk.Rectangle background_area, Gdk.Rectangle cell_area, CellRendererState flags) { IntPtr native = GLib.Marshaller.StringToPtrGStrdup (path); IntPtr raw_ret = gtk_cell_renderer_start_editing (Handle, evnt != null ? evnt.Handle : IntPtr.Zero, widget.Handle, native, ref background_area, ref cell_area, (int) flags); GLib.Marshaller.Free (native); var ret = (ICellEditable) GLib.Object.GetObject (raw_ret); return ret; }
public DrawItemEventArgs( int ItemIndex, Gdk.Drawable window, Widget widget, Gdk.Rectangle background_area, Gdk.Rectangle cell_area, Gdk.Rectangle expose_area, CellRendererState flags ) { this.itemIndex = ItemIndex; this.drawable = window; this.widget = widget; this.backgroundArea = background_area; this.cellArea = cell_area; this.exposeArea = expose_area; this.cellFlags = flags; }
protected override void OnRender (Cairo.Context cr, Gtk.Widget widget, Gdk.Rectangle background_area, Gdk.Rectangle cell_area, CellRendererState flags) { if (image.IsNull) return; var pix = ((GtkImage)image.Backend); int x_offset, y_offset, width, height; OnGetSize (widget, ref cell_area, out x_offset, out y_offset, out width, out height); pix.Draw (Context, cr, Util.GetScaleFactor (widget), cell_area.X + x_offset, cell_area.Y + y_offset, image); }
StateType GetState (Widget widget, CellRendererState flags) { if (flags.HasFlag (CellRendererState.Selected)) { if (widget.IsFocus) { return StateType.Selected; } return StateType.Active; } return StateType.Normal; }
public override CellEditable StartEditing(Gdk.Event evnt, Widget widget, string path, Gdk.Rectangle background_area, Gdk.Rectangle cell_area, CellRendererState flags) { try { if (evnt.Type == Gdk.EventType.ButtonPress) OnClicked (EventArgs.Empty); } catch (Exception ex) { GLib.ExceptionManager.RaiseUnhandledException (ex, false); } return base.StartEditing (evnt, widget, path, background_area, cell_area, flags); }
public override CellEditable StartEditing (Gdk.Event ev, Widget widget, string path, Gdk.Rectangle background_area, Gdk.Rectangle cell_area, CellRendererState flags) { this.path = path; Gtk.ComboBox combo = Gtk.ComboBox.NewText (); foreach (string s in values) combo.AppendText (s); combo.Active = Array.IndexOf (values, Text); combo.Changed += new EventHandler (SelectionChanged); return new TreeViewCellContainer (combo); }
protected override void Render (Gdk.Drawable window, Widget widget, Gdk.Rectangle backgroundArea, Gdk.Rectangle cellArea, Gdk.Rectangle exposeArea, CellRendererState flags) { int x, y, width, height; GetSize (widget, ref cellArea, out x, out y, out width, out height); using (var g = Gdk.CairoHelper.Create (window)) { g.Save (); g.Translate (x, y); RenderCell (g, width, height); g.Restore (); } }
static StateType GetState (Widget widget, CellRendererState flags) { StateType stateType = StateType.Normal; if ((flags & CellRendererState.Prelit) != 0) stateType = StateType.Prelight; if ((flags & CellRendererState.Focused) != 0) stateType = StateType.Normal; if ((flags & CellRendererState.Insensitive) != 0) stateType = StateType.Insensitive; if ((flags & CellRendererState.Selected) != 0) stateType = widget.HasFocus ? StateType.Selected : StateType.Active; return stateType; }
protected override void Render (Drawable window, Widget widget, Rectangle background_area, Rectangle cell_area, Rectangle expose_area, CellRendererState flags) { int iconTextPadding = iconTextXPadding; int textYOffset = 0; Rectangle iconRect = GetIconRect (cell_area); if (CategoryIcon != null) { iconRect = DrawIcon (window, widget, cell_area, flags); iconTextPadding = topLevelIconTextXPadding; textYOffset = topLevelTemplateHeadingYOffset; } DrawTemplateCategoryText (window, widget, cell_area, iconRect, iconTextPadding, textYOffset, flags); }
protected override void Render(Drawable window, Widget widget, Rectangle backgroundArea, Rectangle cellArea, Rectangle exposeArea, CellRendererState flags) { CellState state = (CellState)flags; using (IContext context = new CairoContext (window)) { Area bkg = new Area (new Point (backgroundArea.X, backgroundArea.Y), backgroundArea.Width, backgroundArea.Height); Area cell = new Area (new Point (cellArea.X, cellArea.Y), cellArea.Width, cellArea.Height); PlayslistCellRenderer.Render (Item, Project, Count, IsExpanded, App.Current.DrawingToolkit, context, bkg, cell, state); } }
protected override void Render(Gdk.Drawable window, Widget widget, Gdk.Rectangle background, Gdk.Rectangle cell, Gdk.Rectangle expose, CellRendererState flags) { Cairo.Context cr = Gdk.CairoHelper.Create (window); TreeView parent = (TreeView) widget; surface = (DataImageSurface) parent.Model.GetValue (iter, SlideShowImageView.COL_CAIROIMAGE); if (surface == null) request_thumbnail (this, new RequestThumbnailEventArgs (iter)); cr.Rectangle (cell.X, cell.Y, cell.Width, cell.Height); cr.SetSourceSurface (surface != null ? surface : default_surface, cell.X, cell.Y); cr.Paint (); (cr as System.IDisposable).Dispose (); }
protected override void Render (Drawable window, Widget widget, Gdk.Rectangle background_area, Gdk.Rectangle cell_area, Gdk.Rectangle expose_area, CellRendererState flags) { try{ Gdk.Rectangle text_area1 = new Gdk.Rectangle(); Gdk.Rectangle text_area2 = new Gdk.Rectangle(); Gdk.Rectangle text_area3 = new Gdk.Rectangle(); text_area1.Y= cell_area.Y; text_area2.Y= cell_area.Y+33; text_area3.X = cell_area.Width-20; text_area3.Y= cell_area.Y+33; text_area3.Width = 75; Pango.Layout text_l1 = new Pango.Layout(widget.PangoContext); text_l1.FontDescription = Pango.FontDescription.FromString ("Meiryo,Arial 10.5"); text_l1.SetText(text1); Pango.Layout text_l2 = new Pango.Layout(widget.PangoContext); text_l2.FontDescription = Pango.FontDescription.FromString ("Meiryo,MS Gothic,Arial 8"); text_l2.SetText(text2); text_l2.Alignment = Pango.Alignment.Right; Pango.Layout text_l3 = new Pango.Layout(widget.PangoContext); text_l3.Width = Pango.Units.FromPixels(text_area3.Width); text_l3.FontDescription = Pango.FontDescription.FromString ("Meiryo,MS Gothic,Arial 8"); text_l3.Alignment = Pango.Alignment.Right; text_l3.SetText(text3); text_l2.Width = Pango.Units.FromPixels(cell_area.Width-text_l3.Text.Length*8-13); StateType state = flags.HasFlag(CellRendererState.Selected) ? widget.IsFocus ? StateType.Selected : StateType.Active : StateType.Normal; text_l3.SetMarkup("<span color=" + (char)34 + "grey" + (char)34 + ">" + text_l3.Text + "</span>");; window.DrawLayout(widget.Style.TextGC(state), 55, text_area1.Y, text_l1); window.DrawLayout(widget.Style.TextGC(state), 55, text_area2.Y, text_l2); window.DrawLayout(widget.Style.TextGC(state), text_area3.X, text_area3.Y, text_l3); text_l1.Dispose (); text_l2.Dispose (); text_l3.Dispose (); }catch(Exception e){ Console.WriteLine (e); } }
protected override void Render(Gdk.Drawable window, Widget widget, Gdk.Rectangle background_area, Gdk.Rectangle cell_area, Gdk.Rectangle expose_area, CellRendererState flags) { base.Render (window, widget, background_area, cell_area, expose_area, flags); int xPos = cell_area.X; if(this.Pixbuf != null){ window.DrawPixbuf(widget.Style.MidGC( StateType.Normal), this.Pixbuf, 0, 0, xPos + 1, cell_area.Y + 1, 16, 16, Gdk.RgbDither.Normal, 0, 0); xPos += 20; } using (var layout = new Pango.Layout(widget.PangoContext)) { layout.Alignment = Pango.Alignment.Left; layout.SetText(this.Text ?? ""); StateType state = flags.HasFlag(CellRendererState.Selected) ? widget.IsFocus ? StateType.Selected : StateType.Active : StateType.Normal; window.DrawLayout(widget.Style.TextGC(state), xPos, cell_area.Y + 2, layout); } }
protected override void Render(Gdk.Drawable window, Widget widget, Gdk.Rectangle background_area, Gdk.Rectangle cell_area, Gdk.Rectangle expose_area, CellRendererState flags) { int width = 0, height = 0, x_offset = 0, y_offset = 0; GetSize (widget, ref cell_area, out x_offset, out y_offset, out width, out height); width -= (int) this.Xpad * 2; height -= (int) this.Ypad * 2; Gdk.Rectangle clipping_area = new Gdk.Rectangle ((int) (cell_area.X + x_offset + this.Xpad), (int) (cell_area.Y + y_offset + this.Ypad), width - 1, height - 1); using (Gdk.GC gc = new Gdk.GC (window)) { gc.RgbFgColor = ColorFromBrush (List.TypeBrushes [Idx]); window.DrawRectangle (gc, true, clipping_area); } }
protected override void Render (Gdk.Drawable window, Widget widget, Gdk.Rectangle background_area, Gdk.Rectangle cell_area, Gdk.Rectangle expose_area, CellRendererState flags) { using (Cairo.Context cr = Gdk.CairoHelper.Create (window)) { cr.Arc (cell_area.X + cell_area.Width / 2, cell_area.Y + cell_area.Height / 2, 5, 0, 2 * Math.PI); cr.Color = new Cairo.Color (0, 0, 0); cr.Stroke (); double h = (cell_area.Height - 10) / 2; if (!FirstNode) { cr.MoveTo (cell_area.X + cell_area.Width / 2, cell_area.Y - 1); cr.LineTo (cell_area.X + cell_area.Width / 2, cell_area.Y + h); cr.Stroke (); } if (!LastNode) { cr.MoveTo (cell_area.X + cell_area.Width / 2, cell_area.Y + cell_area.Height + 1); cr.LineTo (cell_area.X + cell_area.Width / 2, cell_area.Y + cell_area.Height - h); cr.Stroke (); } } }
public override CellEditable StartEditing (Gdk.Event ev, Widget widget, string path, Gdk.Rectangle background_area, Gdk.Rectangle cell_area, CellRendererState flags) { TreeView tree = (TreeView) widget; TreeIter iter; tree.Model.GetIterFromString (out iter, path); ExtensionNodeDescription node = tree.Model.GetValue (iter, 2) as ExtensionNodeDescription; if (node != null) { editor = new ExtensionEditor (node); tree.Model.EmitRowChanged (new TreePath (path), iter); TreeViewCellContainer tc = new TreeViewCellContainer (editor); tc.EditingDone += delegate { editor = null; tree.Model.EmitRowChanged (new TreePath (path), iter); }; return tc; } else { this.StopEditing (false); return null; } }
protected override void Render(Gdk.Drawable window, Widget widget, Gdk.Rectangle background_area, Gdk.Rectangle cell_area, Gdk.Rectangle expose_area, CellRendererState flags) { Gdk.GC gc = new Gdk.GC(window); int width = cell_area.Width / blockEvent.BlockCount; for (int i = 0; i < blockEvent.BlockCount; i++) { if(blockEvent.AllBlocksReceived) gc.RgbFgColor = new Gdk.Color(179, 139, 83); // Brown else if (blockEvent[i].Written) gc.RgbFgColor = new Gdk.Color(145, 246, 145); // Green else if (blockEvent[i].Received) gc.RgbFgColor = new Gdk.Color(232, 176, 6); // Gold else if (blockEvent[i].Requested) gc.RgbFgColor = new Gdk.Color(112, 180, 224); // Blue else gc.RgbFgColor = new Gdk.Color(248, 227, 212); // Pink Gdk.Rectangle rect = new Gdk.Rectangle(background_area.X + (width * i), background_area.Y + 1, width, background_area.Height - 2 * 1); window.DrawRectangle(gc,true,rect); } }
protected override void Render(Gdk.Drawable window, Widget widget, Gdk.Rectangle background_area, Gdk.Rectangle cell_area, Gdk.Rectangle expose_area, CellRendererState flags) { using (var cr = Gdk.CairoHelper.Create(window)) { using (var layout = new Pango.Layout(Context)) { Pango.Rectangle ink, logical; layout.Width = (int)(MaxMarkupWidth * Pango.Scale.PangoScale); layout.SetMarkup(Markup); layout.GetPixelExtents(out ink, out logical); RenderLineNumberIcon(widget, cr, cell_area, logical.Height, ink.Y); cr.Rectangle(expose_area.X, expose_area.Y, expose_area.Width, expose_area.Height); cr.Clip(); cr.Translate(cell_area.X + Padding + RoundedRectangleWidth + Padding + Padding, cell_area.Y + Padding); cr.ShowLayout(layout); } } }
protected override void Render (Gdk.Drawable window, Widget widget, Gdk.Rectangle background_area, Gdk.Rectangle cell_area, Gdk.Rectangle expose_area, CellRendererState flags) { if (!Visible) return; int x = cell_area.X + 1; int y = cell_area.Y + 1; window.DrawPixbuf (widget.Style.BaseGC (StateType.Normal), pixbuf, 0, 0, x, y, pixbuf.Width, pixbuf.Height, Gdk.RgbDither.None, 0, 0); }
public override CellEditable StartEditing (Gdk.Event evnt, Widget widget, string path, Gdk.Rectangle background_area, Gdk.Rectangle cell_area, CellRendererState flags) { if (evnt.Type == Gdk.EventType.ButtonPress) OnClicked (EventArgs.Empty); return base.StartEditing (evnt, widget, path, background_area, cell_area, flags); }
protected override void Render (Gdk.Drawable window, Widget widget, Gdk.Rectangle background_area, Gdk.Rectangle cell_area, Gdk.Rectangle expose_area, CellRendererState flags) { using (var cr = Gdk.CairoHelper.Create (window)) { cr.Translate ((cell_area.X + (cell_area.Width - RoundedRectangleWidth) / 2.0), (cell_area.Y + (cell_area.Height - RoundedRectangleHeight) / 2.0)); cr.Antialias = Cairo.Antialias.Subpixel; cr.RoundedRectangle (0.0, 0.0, RoundedRectangleWidth, RoundedRectangleHeight, RoundedRectangleRadius); cr.Clip (); if (IsUserCode) cr.SetSourceRGBA (0.90, 0.60, 0.87, 1.0); // 230, 152, 223 else cr.SetSourceRGBA (0.77, 0.77, 0.77, 1.0); // 197, 197, 197 cr.RoundedRectangle (0.0, 0.0, RoundedRectangleWidth, RoundedRectangleHeight, RoundedRectangleRadius); cr.Fill (); cr.SetSourceRGBA (0.0, 0.0, 0.0, 0.11); cr.RoundedRectangle (0.0, 0.0, RoundedRectangleWidth, RoundedRectangleHeight, RoundedRectangleRadius); cr.LineWidth = 2; cr.Stroke (); using (var layout = PangoUtil.CreateLayout (widget, LineNumber != -1 ? LineNumber.ToString () : "???")) { layout.Alignment = Pango.Alignment.Left; layout.FontDescription = DefaultFont; int width, height; layout.GetPixelSize (out width, out height); double y_offset = (RoundedRectangleHeight - height) / 2.0; double x_offset = (RoundedRectangleWidth - width) / 2.0; // render the text shadow cr.Save (); cr.SetSourceRGBA (0.0, 0.0, 0.0, 0.34); cr.Translate (x_offset, y_offset + 1); cr.ShowLayout (layout); cr.Restore (); cr.SetSourceRGBA (1.0, 1.0, 1.0, 1.0); cr.Translate (x_offset, y_offset); cr.ShowLayout (layout); } } }
StateType GetState (CellRendererState flags) { if ((flags & CellRendererState.Selected) != 0) return StateType.Selected; else return StateType.Normal; }
protected override void Render (Drawable window, Widget widget, Gdk.Rectangle background_area, Gdk.Rectangle cell_area, Gdk.Rectangle expose_area, CellRendererState flags) { if (isDisposed) return; if (diffMode) { if (path.Equals (selctedPath)) { selectedLine = -1; selctedPath = null; } int w, maxy; window.GetSize (out w, out maxy); if (DrawLeft) { cell_area.Width += cell_area.X - leftSpace; cell_area.X = leftSpace; } var treeview = widget as FileTreeView; var p = treeview != null? treeview.CursorLocation : null; cell_area.Width -= RightPadding; window.DrawRectangle (widget.Style.BaseGC (Gtk.StateType.Normal), true, cell_area.X, cell_area.Y, cell_area.Width - 1, cell_area.Height); Gdk.GC normalGC = widget.Style.TextGC (StateType.Normal); Gdk.GC removedGC = new Gdk.GC (window); removedGC.Copy (normalGC); removedGC.RgbFgColor = baseRemoveColor.AddLight (-0.3); Gdk.GC addedGC = new Gdk.GC (window); addedGC.Copy (normalGC); addedGC.RgbFgColor = baseAddColor.AddLight (-0.3); Gdk.GC infoGC = new Gdk.GC (window); infoGC.Copy (normalGC); infoGC.RgbFgColor = widget.Style.Text (StateType.Normal).AddLight (0.2); Cairo.Context ctx = CairoHelper.Create (window); Gdk.Color bgColor = new Gdk.Color (0,0,0); // Rendering is done in two steps: // 1) Get a list of blocks to render // 2) render the blocks int y = cell_area.Y + 2; // cline keeps track of the current source code line (the one to jump to when double clicking) int cline = 1; bool inHeader = true; BlockInfo currentBlock = null; List<BlockInfo> blocks = new List<BlockInfo> (); for (int n=0; n<lines.Length; n++, y += lineHeight) { string line = lines [n]; if (line.Length == 0) { currentBlock = null; y -= lineHeight; continue; } char tag = line [0]; if (line.StartsWith ("---") || line.StartsWith ("+++")) { // Ignore this part of the header. currentBlock = null; y -= lineHeight; continue; } if (tag == '@') { int l = ParseCurrentLine (line); if (l != -1) cline = l - 1; inHeader = false; } else if (tag != '-' && !inHeader) cline++; BlockType type; bool hasBg = false; switch (tag) { case '-': type = BlockType.Removed; break; case '+': type = BlockType.Added; break; case '@': type = BlockType.Info; break; default: type = BlockType.Unchanged; break; } if (currentBlock == null || type != currentBlock.Type) { if (y > maxy) break; // Starting a new block. Mark section ends between a change block and a normal code block if (currentBlock != null && IsChangeBlock (currentBlock.Type) && !IsChangeBlock (type)) currentBlock.SectionEnd = true; currentBlock = new BlockInfo () { YStart = y, FirstLine = n, Type = type, SourceLineStart = cline, SectionStart = (blocks.Count == 0 || !IsChangeBlock (blocks[blocks.Count - 1].Type)) && IsChangeBlock (type) }; blocks.Add (currentBlock); } // Include the line in the current block currentBlock.YEnd = y + lineHeight; currentBlock.LastLine = n; } // Now render the blocks // The y position of the highlighted line int selectedLineRowTop = -1; BlockInfo lastCodeSegmentStart = null; BlockInfo lastCodeSegmentEnd = null; foreach (BlockInfo block in blocks) { if (block.Type == BlockType.Info) { // Finished drawing the content of a code segment. Now draw the segment border and label. if (lastCodeSegmentStart != null) DrawCodeSegmentBorder (infoGC, ctx, cell_area.X, cell_area.Width, lastCodeSegmentStart, lastCodeSegmentEnd, lines, widget, window); lastCodeSegmentStart = block; } lastCodeSegmentEnd = block; if (block.YEnd < 0) continue; // Draw the block background DrawBlockBg (ctx, cell_area.X + 1, cell_area.Width - 2, block); // Get all text for the current block StringBuilder sb = new StringBuilder (); for (int n=block.FirstLine; n <= block.LastLine; n++) { string s = ProcessLine (lines [n]); if (sb.Length > 0) sb.Append ('\n'); if (block.Type != BlockType.Info && s.Length > 0) sb.Append (s, 1, s.Length - 1); else sb.Append (s); } // Draw a special background for the selected line if (block.Type != BlockType.Info && p.HasValue && p.Value.X >= cell_area.X && p.Value.X <= cell_area.Right && p.Value.Y >= block.YStart && p.Value.Y <= block.YEnd) { int row = (p.Value.Y - block.YStart) / lineHeight; double yrow = block.YStart + lineHeight * row + 0.5; double xrow = cell_area.X + LeftPaddingBlock + 0.5; int wrow = cell_area.Width - 1 - LeftPaddingBlock; if (block.Type == BlockType.Added) ctx.Color = baseAddColor.AddLight (0.1).ToCairoColor (); else if (block.Type == BlockType.Removed) ctx.Color = baseRemoveColor.AddLight (0.1).ToCairoColor (); else { ctx.Color = widget.Style.Base (Gtk.StateType.Prelight).AddLight (0.1).ToCairoColor (); xrow -= LeftPaddingBlock; wrow += LeftPaddingBlock; } ctx.Rectangle (xrow, yrow, wrow, lineHeight); ctx.Fill (); selectedLine = block.SourceLineStart + row; selctedPath = path; selectedLineRowTop = (int)yrow; } // Draw the line text. Ignore header blocks, since they are drawn as labels in DrawCodeSegmentBorder if (block.Type != BlockType.Info) { layout.SetMarkup (""); layout.SetText (sb.ToString ()); Gdk.GC gc; switch (block.Type) { case BlockType.Removed: gc = removedGC; break; case BlockType.Added: gc = addedGC; break; case BlockType.Info: gc = infoGC; break; default: gc = normalGC; break; } window.DrawLayout (gc, cell_area.X + 2 + LeftPaddingBlock, block.YStart, layout); } // Finally draw the change symbol at the left margin DrawChangeSymbol (ctx, cell_area.X + 1, cell_area.Width - 2, block); } // Finish the drawing of the code segment if (lastCodeSegmentStart != null) DrawCodeSegmentBorder (infoGC, ctx, cell_area.X, cell_area.Width, lastCodeSegmentStart, lastCodeSegmentEnd, lines, widget, window); // Draw the source line number at the current selected line. It must be done at the end because it must // be drawn over the source code text and segment borders. if (selectedLineRowTop != -1) DrawLineBox (normalGC, ctx, ((Gtk.TreeView)widget).VisibleRect.Right - 4, selectedLineRowTop, selectedLine, widget, window); ((IDisposable)ctx).Dispose (); removedGC.Dispose (); addedGC.Dispose (); infoGC.Dispose (); } else { // Rendering a normal text row int y = cell_area.Y + (cell_area.Height - height)/2; window.DrawLayout (widget.Style.TextGC (GetState(flags)), cell_area.X, y, layout); } }
protected override void Render(Gdk.Drawable window, Widget widget, Gdk.Rectangle background_area, Gdk.Rectangle cell_area, Gdk.Rectangle expose_area, CellRendererState flags) { if (string.IsNullOrEmpty(Text)) { return; } using (var cr = Gdk.CairoHelper.Create(window)) { using (var layout = new Pango.Layout(widget.PangoContext)) { var xpad = (int)Xpad; int w, h; Cairo.Color bgColor, fgColor; foreach (var key in Text.Split(new char [] { ' ' }, StringSplitOptions.RemoveEmptyEntries)) { HashSet <Command> bindingConflicts; if (keyBindingsPanel.conflicts.TryGetValue(key, out bindingConflicts) && bindingConflicts.Contains(Command)) { bgColor = Styles.KeyBindingsPanel.KeyConflictBackgroundColor.ToCairoColor(); fgColor = Styles.KeyBindingsPanel.KeyConflictForegroundColor.ToCairoColor(); } else if (keyBindingsPanel.duplicates.ContainsKey(key)) { bgColor = Styles.KeyBindingsPanel.KeyDuplicateBackgroundColor.ToCairoColor(); fgColor = Styles.KeyBindingsPanel.KeyDuplicateForegroundColor.ToCairoColor(); } else { bgColor = Styles.KeyBindingsPanel.KeyBackgroundColor.ToCairoColor(); fgColor = Styles.KeyBindingsPanel.KeyForegroundColor.ToCairoColor(); } layout.SetText(KeyBindingManager.BindingToDisplayLabel(key, false)); layout.FontDescription = KeySymbolFont; layout.GetPixelSize(out w, out h); int buttonWidth = w + (2 * KeyHPadding); int buttonHeight = h + (2 * KeyVPadding); int x = cell_area.X + xpad; double y = cell_area.Y + ((cell_area.Height / 2) - (buttonHeight / 2)); cr.RoundedRectangle(x, y, buttonWidth, buttonHeight, KeyBgRadius); cr.LineWidth = 1; cr.SetSourceColor(bgColor); cr.FillPreserve(); cr.SetSourceColor(bgColor); cr.Stroke(); cr.SetSourceColor(fgColor); cr.MoveTo(x + KeyHPadding, y + KeyVPadding); cr.ShowLayout(layout); xpad += buttonWidth + Spacing; } } } }
protected override void Render(Gdk.Drawable window, Widget widget, Gdk.Rectangle background_area, Gdk.Rectangle cell_area, Gdk.Rectangle expose_area, CellRendererState state) { if (Theme == null) { Theme = Hyena.Gui.Theming.ThemeEngine.CreateTheme(widget); Theme.Context.Radius = 3; } Context cr = Gdk.CairoHelper.Create(window); // Setup the drawing boundaries/positioning cr.Rectangle(cell_area.X, cell_area.Y, cell_area.Width, cell_area.Height); cr.Clip(); cr.Translate(cell_area.X, cell_area.Y); // Clear any existing drawing cr.Rectangle(0, 0, cell_area.Width, cell_area.Height); cr.Color = Theme.ViewFill; cr.Fill(); if (state == CellRendererState.Selected) { Theme.DrawRowSelection(cr, 0, 0, cell_area.Width, cell_area.Height, true); } else if (state == CellRendererState.Focused) { Theme.DrawRowSelection(cr, 0, 0, cell_area.Width, cell_area.Height, false); } var border = Theme.TotalBorderWidth; cr.Translate(border, border); var width = cell_area.Width - 2 * border; var height = cell_area.Height - 2 * border; Render(cr, width, height, state); Hyena.Gui.CairoExtensions.DisposeContext(cr); }
protected abstract void Render(Cairo.Context context, double width, double height, CellRendererState state);
protected override void Render(Gdk.Drawable window, Widget widget, Gdk.Rectangle background_area, Gdk.Rectangle cell_area, Gdk.Rectangle expose_area, CellRendererState flags) { using (var cr = Gdk.CairoHelper.Create(window)) { cr.Rectangle(background_area.X, background_area.Y, background_area.Width, background_area.Height); using (var layout = new Pango.Layout(widget.PangoContext)) { layout.FontDescription = font; if ((flags & CellRendererState.Selected) != 0) { cr.SetSourceRGB(Styles.ExceptionCaughtDialog.TreeSelectedBackgroundColor.Red, Styles.ExceptionCaughtDialog.TreeSelectedBackgroundColor.Green, Styles.ExceptionCaughtDialog.TreeSelectedBackgroundColor.Blue); // selected cr.Fill(); cr.SetSourceRGB(Styles.ExceptionCaughtDialog.TreeSelectedTextColor.Red, Styles.ExceptionCaughtDialog.TreeSelectedTextColor.Green, Styles.ExceptionCaughtDialog.TreeSelectedTextColor.Blue); } else { cr.SetSourceRGB(Styles.ExceptionCaughtDialog.TreeBackgroundColor.Red, Styles.ExceptionCaughtDialog.TreeBackgroundColor.Green, Styles.ExceptionCaughtDialog.TreeBackgroundColor.Blue); // background cr.Fill(); cr.SetSourceRGB(Styles.ExceptionCaughtDialog.TreeTextColor.Red, Styles.ExceptionCaughtDialog.TreeTextColor.Green, Styles.ExceptionCaughtDialog.TreeTextColor.Blue); } layout.SetMarkup(Text); cr.Translate(cell_area.X + 10, cell_area.Y + 1); cr.ShowLayout(layout); } } }
protected override void Render(Gdk.Drawable window, Widget widget, Gdk.Rectangle background_area, Gdk.Rectangle cell_area, Gdk.Rectangle expose_area, CellRendererState flags) { using (var cr = Gdk.CairoHelper.Create(window)) { Pango.Rectangle ink, logical; using (var layout = new Pango.Layout(Context)) { layout.FontDescription = font; layout.SetMarkup(GetFileMarkup((flags & CellRendererState.Selected) != 0)); layout.GetPixelExtents(out ink, out logical); var width = widget.Allocation.Width; cr.Translate(width - logical.Width - 10, cell_area.Y); cr.ShowLayout(layout); cr.IdentityMatrix(); layout.SetMarkup(GetMethodMarkup((flags & CellRendererState.Selected) != 0)); layout.Width = (int)((width - logical.Width - 35) * Pango.Scale.PangoScale); layout.Ellipsize = Pango.EllipsizeMode.Middle; cr.Translate(cell_area.X + 10, cell_area.Y); cr.ShowLayout(layout); } } }
public override CellEditable StartEditing(Gdk.Event ev, Widget widget, string path, Gdk.Rectangle background_area, Gdk.Rectangle cell_area, CellRendererState flags) { this.path = path; Gtk.ComboBox combo = Gtk.ComboBox.NewText(); foreach (string s in values) { combo.AppendText(s); } combo.Active = Array.IndexOf(values, Text); combo.Changed += new EventHandler(SelectionChanged); return(new TreeViewCellContainer(combo)); }
/// <summary> /// Render the cell in the window /// </summary> /// <param name="window">The owning window</param> /// <param name="widget">The widget</param> /// <param name="background_area">Background area</param> /// <param name="cell_area">The cell area</param> /// <param name="expose_area">Expose the area</param> /// <param name="flags">Render flags</param> protected override void Render(Gdk.Drawable window, Widget widget, Gdk.Rectangle background_area, Gdk.Rectangle cell_area, Gdk.Rectangle expose_area, CellRendererState flags) { LastRect = new Gdk.Rectangle(cell_area.X, cell_area.Y, cell_area.Width, cell_area.Height); Gdk.GC gc = new Gdk.GC(window); window.DrawPixbuf(gc, Pixbuf, 0, 0, cell_area.X, cell_area.Y, Pixbuf.Width, Pixbuf.Height, Gdk.RgbDither.Normal, 0, 0); }
/// <summary> /// Override the OnRender function to add a button to the cell. /// </summary> /// <param name="cr"></param> /// <param name="widget"></param> /// <param name="background_area"></param> /// <param name="cell_area"></param> /// <param name="flags"></param> protected override void OnRender(Cairo.Context cr, Widget widget, Gdk.Rectangle background_area, Gdk.Rectangle cell_area, CellRendererState flags) { //base.OnRender(cr, widget, background_area, cell_area, flags); LastRect = new Gdk.Rectangle(cell_area.X, cell_area.Y, cell_area.Width, cell_area.Height); // This probably doesn't work cr.SetSource(new Cairo.SurfacePattern(new Cairo.ImageSurface(Pixbuf.SaveToBuffer("png"), Cairo.Format.ARGB32, cell_area.Width, cell_area.Height, 1))); }
protected override void Render(Drawable window, Widget widget, Gdk.Rectangle background_area, Gdk.Rectangle cell_area, Gdk.Rectangle expose_area, CellRendererState flags) { Xwt.Drawing.Image image = this.GetImage(); if (image == null) { return; } using (Cairo.Context s = CairoHelper.Create(window)) { int num1 = cell_area.X + cell_area.Width / 2 - (int)(image.Width / 2.0); int num2 = cell_area.Y + cell_area.Height / 2 - (int)(image.Height / 2.0); s.DrawImage(widget, image, (double)num1, (double)num2); } }