Пример #1
0
	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);
	}
Пример #2
0
	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 ();
	}
Пример #3
0
        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);
				}
			}
		}
Пример #5
0
		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);
     }
Пример #7
0
		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);
			}
		}
Пример #8
0
		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);

		}
Пример #9
0
		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;
 }
Пример #11
0
		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);
		}
Пример #15
0
		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);
		}
Пример #18
0
        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);
            }
        }
Пример #19
0
        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 ();
        }
Пример #20
0
		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);
			}

		}
Пример #21
0
        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);
            }
        }
Пример #22
0
    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);

        }
    }
Пример #23
0
			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 ();
					}
				}
			}
Пример #24
0
		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;
			}
		}
Пример #25
0
        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);
            }
        }
Пример #26
0
        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);
                }
            }
        }
Пример #27
0
			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);
			}
Пример #28
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);
			}
Пример #29
0
		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);
				}
			}
		}
Пример #30
0
		StateType GetState (CellRendererState flags)
		{
			if ((flags & CellRendererState.Selected) != 0)
				return StateType.Selected;
			else
				return StateType.Normal;
		}
Пример #31
0
		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);
			}
		}
Пример #32
0
            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;
                        }
                    }
                }
            }
Пример #33
0
        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);
        }
Пример #34
0
 protected abstract void Render(Cairo.Context context, double width, double height, CellRendererState state);
Пример #35
0
            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);
                    }
                }
            }
Пример #36
0
        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);
                }
            }
        }
Пример #37
0
        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);
     }
 }