banshee r3365 - in trunk/banshee: . src/Core/Banshee.ThickClient src/Core/Banshee.ThickClient/Banshee.Collection.Gui src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView src/Libraries/Hyena.Gui/Hyena.Gui.Theatrics src/Libraries/Hyena.Gui/Hyena.Gui.Theming
- From: abock svn gnome org
- To: svn-commits-list gnome org
- Subject: banshee r3365 - in trunk/banshee: . src/Core/Banshee.ThickClient src/Core/Banshee.ThickClient/Banshee.Collection.Gui src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView src/Libraries/Hyena.Gui/Hyena.Gui.Theatrics src/Libraries/Hyena.Gui/Hyena.Gui.Theming
- Date: Sun, 2 Mar 2008 02:09:06 +0000 (GMT)
Author: abock
Date: Sun Mar 2 02:09:05 2008
New Revision: 3365
URL: http://svn.gnome.org/viewvc/banshee?rev=3365&view=rev
Log:
2008-03-01 Aaron Bockover <abock gnome org>
* src/Core/Banshee.ThickClient/Banshee.Collection.Gui/BetaReleaseViewOverlay.cs:
A sweet overlay thingy that draws some big warning/welcome for users
about the state of trunk/preview release
* src/Core/Banshee.ThickClient/Banshee.Collection.Gui/TrackListView.cs:
Render the hot overlay
* src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Windowing.cs:
Expose some properties as protected
* src/Libraries/Hyena.Gui/Hyena.Gui.Theatrics/Stage.cs:
Fix a bug when iterating actors in the stage by creating a copy to
iterate; this allows actor step handlers to modify the stage actors
* src/Libraries/Hyena.Gui/Hyena.Gui.Theming/GtkTheme.cs:
* src/Libraries/Hyena.Gui/Hyena.Gui.Theming/Theme.cs: Added DrawPie
* src/Libraries/Hyena.Gui/Hyena.Gui.Theming/ThemeContext.cs: Add some
more state properties
Added:
trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/BetaReleaseViewOverlay.cs
Modified:
trunk/banshee/ChangeLog
trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/TrackListView.cs
trunk/banshee/src/Core/Banshee.ThickClient/Banshee.ThickClient.mdp
trunk/banshee/src/Core/Banshee.ThickClient/Makefile.am
trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Windowing.cs
trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Gui.Theatrics/Stage.cs
trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Gui.Theming/GtkTheme.cs
trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Gui.Theming/Theme.cs
trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Gui.Theming/ThemeContext.cs
Added: trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/BetaReleaseViewOverlay.cs
==============================================================================
--- (empty file)
+++ trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/BetaReleaseViewOverlay.cs Sun Mar 2 02:09:05 2008
@@ -0,0 +1,228 @@
+//
+// BetaReleaseViewOverlay.cs
+//
+// Author:
+// Aaron Bockover <abockover novell com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using Mono.Unix;
+using Cairo;
+using Gtk;
+
+using Hyena.Gui;
+using Hyena.Gui.Theming;
+using Hyena.Gui.Theatrics;
+
+using Banshee.Gui;
+using Banshee.Sources;
+using Banshee.ServiceStack;
+
+namespace Banshee.Collection.Gui
+{
+ public class BetaReleaseViewOverlay
+ {
+ private string welcome_string;
+ private SingleActorStage stage = new SingleActorStage ();
+ private Gdk.Pixbuf logo_scale;
+ private Gdk.Pixbuf arrow;
+ private Widget widget;
+ private Source source;
+ private bool dismissed;
+
+ public event EventHandler Finished;
+
+ public BetaReleaseViewOverlay (Widget widget)
+ {
+ if (dismissed) {
+ return;
+ }
+
+ this.widget = widget;
+
+ System.Text.StringBuilder builder = new System.Text.StringBuilder ();
+ builder.AppendFormat ("<big><big><big><b>{0}</b></big></big></big>\n\n", GLib.Markup.EscapeText (
+ Catalog.GetString ("Welcome to the Banshee 1.0 Alpha 1 release!")));
+ builder.Append (Catalog.GetString (
+ "It is <i>very</i> important to note that this is a <i>preview release</i> and does " +
+ "<i>not yet</i> contain all of the features you may be used to in previous Banshee releases."));
+ builder.Append ("\n\n");
+ builder.Append (Catalog.GetString (
+ "Most notably, hardware features are not yet available (Audio CDs, Digital Audio Players), " +
+ "and the Podcasting, Internet Radio, Recommendations, Mini Mode, and DAAP (iTunes Music Sharing) " +
+ "plugins are not available."));
+ builder.Append ("\n\n");
+ builder.Append (Catalog.GetString (
+ "All of the features you have come to love in Banshee will be added back before the final 1.0 release."));
+ builder.Append ("\n\n");
+ builder.AppendFormat ("<big><b><i>{0}</i></b></big>", Catalog.GetString ("Enjoy the preview!"));
+ welcome_string = builder.ToString ();
+
+ source = ServiceManager.SourceManager.DefaultSource;
+ ServiceManager.SourceManager.ActiveSourceChanged += OnActiveSourceChanged;
+ }
+
+ private void OnActiveSourceChanged (SourceEventArgs args)
+ {
+ if (source != null && source != args.Source) {
+ if (source.Properties.GetString ("Message.Id") == "beta-release") {
+ source.Properties.RemoveStartingWith ("Message.");
+ }
+ }
+
+ source = args.Source;
+
+ if (!source.Properties.Contains ("Message.Text") && ! source.Properties.Contains ("Message.Id")) {
+ source.Properties.SetString ("Message.Id", "beta-release");
+ source.Properties.SetString ("Message.Text", Catalog.GetString (
+ "Please confirm your understanding of the message above."
+ ));
+ source.Properties.SetString ("Message.Icon.Name", Stock.Info);
+ source.Properties.SetBoolean ("Message.CanClose", false);
+ source.Properties.SetString ("Message.Action.Label", Catalog.GetString ("I understand this is a preview release"));
+ source.Properties.Set<EventHandler> ("Message.Action.NotifyHandler", delegate {
+ stage.Iteration += OnStageIteration;
+ stage.Reset ();
+ dismissed = true;
+ });
+ }
+ }
+
+ protected virtual void OnFinished ()
+ {
+ EventHandler handler = Finished;
+ if (handler != null) {
+ handler (this, EventArgs.Empty);
+ }
+ }
+
+ private void OnStageIteration (object o, EventArgs args)
+ {
+ if (stage.ActorCount == 0) {
+ stage.Iteration -= OnStageIteration;
+ stage = null;
+
+ if (logo_scale != null) {
+ logo_scale.Dispose ();
+ logo_scale = null;
+ }
+
+ ServiceManager.SourceManager.ActiveSourceChanged -= OnActiveSourceChanged;
+
+ if (source != null) {
+ source.Properties.RemoveStartingWith ("Message.");
+ source = null;
+ }
+
+ OnFinished ();
+ }
+
+ widget.QueueDraw ();
+ }
+
+ public void Render (Theme theme, Cairo.Context cr, Gdk.Rectangle clip)
+ {
+ if (widget == null) {
+ return;
+ }
+
+ if (logo_scale == null) {
+ logo_scale = Gdk.Pixbuf.LoadFromResource ("banshee-logo.png");
+ logo_scale = logo_scale.ScaleSimple (64, 64, Gdk.InterpType.Bilinear);
+ }
+
+ theme.PushContext ();
+ theme.Context.Cairo = cr;
+ theme.Context.Radius = 12;
+
+ Gdk.Rectangle rect = new Gdk.Rectangle ();
+ rect.Width = (int)Math.Round (widget.Allocation.Width * 0.65);
+
+ int padding = (int)theme.Context.Radius * 2;
+ int spacing = padding / 2;
+ int layout_width = rect.Width - logo_scale.Width - 2 * padding - spacing;
+ int layout_height;
+
+ Pango.Layout layout = new Pango.Layout (widget.PangoContext);
+ layout.FontDescription = widget.PangoContext.FontDescription.Copy ();
+ layout.Width = (int)(layout_width * Pango.Scale.PangoScale);
+ layout.Wrap = Pango.WrapMode.Word;
+ layout.SetMarkup (welcome_string);
+
+ layout.GetPixelSize (out layout_width, out layout_height);
+
+ rect.Height = layout_height + 2 * padding;
+ rect.X = (widget.Allocation.Width - rect.Width) / 2;
+ rect.Y = (widget.Allocation.Height - rect.Height) / 2;
+ int layout_x = rect.X + padding + spacing + logo_scale.Width;
+ int layout_y = rect.Y + padding;
+ double alpha = stage.ActorCount > 0 ? 1.0 - stage.Actor.Percent : 1.0;
+
+ Cairo.Color color = theme.Colors.GetWidgetColor (GtkColorClass.Background, StateType.Normal);
+ color.A = Theme.Clamp (0.0, 0.85, alpha);
+ cr.Color = color;
+ cr.Rectangle (0, 0, widget.Allocation.Width, widget.Allocation.Height);
+ cr.Fill ();
+
+ if (stage.Playing && alpha < 1.0) {
+ CairoExtensions.PushGroup (cr);
+ }
+
+ theme.Context.FillAlpha = 0.65;
+ theme.DrawFrame (cr, rect, true);
+ cr.MoveTo (layout_x, layout_y);
+ cr.Color = theme.Colors.GetWidgetColor (GtkColorClass.Text, StateType.Normal);
+ Pango.CairoHelper.ShowLayout (cr, layout);
+
+ int x = rect.X + padding;
+ int y = rect.Y + padding;
+ cr.Rectangle (x, y, logo_scale.Width, logo_scale.Height);
+ cr.Save ();
+ cr.Translate (0.5, 0.5);
+ Gdk.CairoHelper.SetSourcePixbuf (cr, logo_scale, x, y);
+ cr.Fill ();
+ cr.Restore ();
+
+ if (arrow == null) {
+ arrow = IconThemeUtils.LoadIcon (22, Stock.GoDown);
+ }
+
+ x = rect.X + rect.Width - spacing - arrow.Width;
+ y = rect.Y + rect.Height - spacing - arrow.Height;
+ cr.Rectangle (x, y, arrow.Width, arrow.Height);
+ cr.Save ();
+ cr.Translate (0.5, 0.5);
+ Gdk.CairoHelper.SetSourcePixbuf (cr, arrow, x, y);
+ cr.Fill ();
+ cr.Restore ();
+
+ if (stage.Playing && alpha < 1.0) {
+ CairoExtensions.PopGroupToSource (cr);
+ cr.PaintWithAlpha (alpha);
+ }
+
+ theme.PopContext ();
+ }
+ }
+}
Modified: trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/TrackListView.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/TrackListView.cs (original)
+++ trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/TrackListView.cs Sun Mar 2 02:09:05 2008
@@ -32,6 +32,8 @@
using Gtk;
using Hyena.Gui;
+using Hyena.Gui.Theming;
+using Hyena.Gui.Theatrics;
using Hyena.Data.Gui;
using Banshee.Gui;
@@ -45,7 +47,8 @@
public class TrackListView : ListView<TrackInfo>
{
private PersistentColumnController column_controller;
-
+ private BetaReleaseViewOverlay overlay;
+
public TrackListView () : base ()
{
column_controller = new PersistentColumnController ("track_view_columns");
@@ -76,8 +79,8 @@
ServiceManager.PlayerEngine.StateChanged += OnPlayerEngineStateChanged;
- if (ServiceManager.Contains ("GtkElementsService")) {
- ServiceManager.Get<Banshee.Gui.GtkElementsService> ().ThemeChanged += delegate {
+ if (ServiceManager.Contains<GtkElementsService> ()) {
+ ServiceManager.Get<GtkElementsService> ().ThemeChanged += delegate {
foreach (Column column in column_controller) {
if (column.HeaderCell != null) {
column.HeaderCell.NotifyThemeChange ();
@@ -91,6 +94,16 @@
QueueDraw ();
};
}
+
+ overlay = new BetaReleaseViewOverlay (this);
+ overlay.Finished += OnOverlayFinished;
+ }
+
+ private void OnOverlayFinished (object o, EventArgs args)
+ {
+ overlay.Finished -= OnOverlayFinished;
+ overlay = null;
+ QueueDraw ();
}
protected override bool OnPopupMenu ()
@@ -106,19 +119,9 @@
protected override void ChildClassPostRender (Gdk.EventExpose evnt, Cairo.Context cr, Gdk.Rectangle clip)
{
- /*Gdk.Rectangle rect = new Gdk.Rectangle ();
- rect.Width = (int)Math.Round (Allocation.Width * 0.65);
- rect.Height = (int)Math.Round (Allocation.Height * 0.50);
- rect.X = (Allocation.Width - rect.Width) / 2;
- rect.Y = ((Allocation.Height - rect.Height) / 2) - (int)(rect.Height * .15);
-
- CairoExtensions.PushGroup (cr);
- Theme.PushContext ();
- Theme.Context.Radius = 12;
- Theme.DrawFrame (cr, rect, true);
- Theme.PopContext ();
- CairoExtensions.PopGroupToSource (cr);
- cr.PaintWithAlpha (0.8);*/
+ if (evnt.Window == ListWindow && overlay != null) {
+ overlay.Render (Theme, cr, clip);
+ }
}
#region Drag and Drop
Modified: trunk/banshee/src/Core/Banshee.ThickClient/Banshee.ThickClient.mdp
==============================================================================
--- trunk/banshee/src/Core/Banshee.ThickClient/Banshee.ThickClient.mdp (original)
+++ trunk/banshee/src/Core/Banshee.ThickClient/Banshee.ThickClient.mdp Sun Mar 2 02:09:05 2008
@@ -100,6 +100,7 @@
<File name="Banshee.Gui.Widgets/RepeatActionButton.cs" subtype="Code" buildaction="Compile" />
<File name="Banshee.Gui/PlaybackRepeatActions.cs" subtype="Code" buildaction="Compile" />
<File name="Banshee.Gui/BansheeDbFormatMigratorMonitor.cs" subtype="Code" buildaction="Compile" />
+ <File name="Banshee.Collection.Gui/BetaReleaseViewOverlay.cs" subtype="Code" buildaction="Compile" />
</Contents>
<References>
<ProjectReference type="Project" localcopy="False" refto="Hyena.Gui" />
@@ -115,7 +116,6 @@
<ProjectReference type="Gac" localcopy="True" refto="glib-sharp, Version=2.10.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
<ProjectReference type="Gac" localcopy="True" refto="pango-sharp, Version=2.10.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
</References>
- <Deployment.LinuxDeployData generateScript="False" />
<MonoDevelop.Autotools.MakefileInfo IntegrationEnabled="True" RelativeMakefileName="Makefile.am">
<BuildFilesVar Sync="True" Name="SOURCES" />
<DeployFilesVar />
@@ -125,4 +125,5 @@
<AsmRefVar />
<ProjectRefVar />
</MonoDevelop.Autotools.MakefileInfo>
+ <Deployment.LinuxDeployData generateScript="False" />
</Project>
\ No newline at end of file
Modified: trunk/banshee/src/Core/Banshee.ThickClient/Makefile.am
==============================================================================
--- trunk/banshee/src/Core/Banshee.ThickClient/Makefile.am (original)
+++ trunk/banshee/src/Core/Banshee.ThickClient/Makefile.am Sun Mar 2 02:09:05 2008
@@ -13,6 +13,7 @@
Banshee.Collection.Gui/ArtistListView.cs \
Banshee.Collection.Gui/ArtworkManager.cs \
Banshee.Collection.Gui/ArtworkRenderer.cs \
+ Banshee.Collection.Gui/BetaReleaseViewOverlay.cs \
Banshee.Collection.Gui/ColumnCellAlbum.cs \
Banshee.Collection.Gui/ColumnCellDateTime.cs \
Banshee.Collection.Gui/ColumnCellDuration.cs \
Modified: trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Windowing.cs
==============================================================================
--- trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Windowing.cs (original)
+++ trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Windowing.cs Sun Mar 2 02:09:05 2008
@@ -40,6 +40,14 @@
private Gdk.Window footer_window;
private Gdk.Window left_border_window;
private Gdk.Window right_border_window;
+
+ protected Gdk.Window ListWindow {
+ get { return list_window; }
+ }
+
+ protected Gdk.Window HeaderWindow {
+ get { return header_window; }
+ }
private Gdk.Rectangle list_alloc;
private Gdk.Rectangle header_alloc;
Modified: trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Gui.Theatrics/Stage.cs
==============================================================================
--- trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Gui.Theatrics/Stage.cs (original)
+++ trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Gui.Theatrics/Stage.cs Sun Mar 2 02:09:05 2008
@@ -145,8 +145,9 @@
}
Queue<Actor<T>> expired_actors = new Queue<Actor<T>> ();
+ Dictionary<T, Actor<T>> actors_copy = new Dictionary<T, Actor<T>> (actors);
- foreach (KeyValuePair<T, Actor<T>> entry in actors) {
+ foreach (KeyValuePair<T, Actor<T>> entry in actors_copy) {
entry.Value.Step ();
if (!OnActorStep (entry.Value) || entry.Value.Expired) {
Modified: trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Gui.Theming/GtkTheme.cs
==============================================================================
--- trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Gui.Theming/GtkTheme.cs (original)
+++ trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Gui.Theming/GtkTheme.cs Sun Mar 2 02:09:05 2008
@@ -49,6 +49,39 @@
border_color = Colors.GetWidgetColor (GtkColorClass.Dark, StateType.Active);
}
+ public override void DrawPie (double fraction)
+ {
+ // Calculate the pie path
+ fraction = Theme.Clamp (0.0, 1.0, fraction);
+ double a1 = 3.0 * Math.PI / 2.0;
+ double a2 = a1 + 2.0 * Math.PI * fraction;
+
+ if (fraction == 0.0) {
+ return;
+ }
+
+ Context.Cairo.MoveTo (Context.X, Context.Y);
+ Context.Cairo.Arc (Context.X, Context.Y, Context.Radius, a1, a2);
+ Context.Cairo.LineTo (Context.X, Context.Y);
+
+ // Fill the pie
+ Color color_a = Colors.GetWidgetColor (GtkColorClass.Background, StateType.Selected);
+ Color color_b = CairoExtensions.ColorShade (color_a, 1.4);
+
+ RadialGradient fill = new RadialGradient (Context.X, Context.Y, 0,
+ Context.X, Context.Y, 2.0 * Context.Radius);
+ fill.AddColorStop (0, color_a);
+ fill.AddColorStop (1, color_b);
+ Context.Cairo.Pattern = fill;
+
+ Context.Cairo.FillPreserve ();
+
+ // Stroke the pie
+ Context.Cairo.Color = CairoExtensions.ColorShade (color_a, 0.8);
+ Context.Cairo.LineWidth = Context.LineWidth;
+ Context.Cairo.Stroke ();
+ }
+
public override void DrawHeaderSeparator(Cairo.Context cr, Gdk.Rectangle alloc, int x, int bottom_offset)
{
Cairo.Color gtk_background_color = Colors.GetWidgetColor(GtkColorClass.Background, StateType.Normal);
@@ -124,6 +157,7 @@
{
CairoCorners corners = CairoCorners.All;
+ color.A = Context.FillAlpha;
cr.Color = color;
CairoExtensions.RoundedRectangle (cr, alloc.X, alloc.Y, alloc.Width, alloc.Height, Context.Radius, corners);
cr.Fill ();
Modified: trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Gui.Theming/Theme.cs
==============================================================================
--- trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Gui.Theming/Theme.cs (original)
+++ trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Gui.Theming/Theme.cs Sun Mar 2 02:09:05 2008
@@ -75,7 +75,9 @@
}
#region Drawing
-
+
+ public abstract void DrawPie (double fraction);
+
public abstract void DrawHeaderSeparator(Cairo.Context cr, Gdk.Rectangle alloc, int x, int bottom_offset);
public abstract void DrawHeaderBackground (Cairo.Context cr, Gdk.Rectangle alloc, int bottom_offset, bool fill);
@@ -177,5 +179,14 @@
#endregion
+#region Static Utilities
+
+ public static double Clamp (double min, double max, double value)
+ {
+ return Math.Max (min, Math.Min (max, value));
+ }
+
+#endregion
+
}
}
Modified: trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Gui.Theming/ThemeContext.cs
==============================================================================
--- trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Gui.Theming/ThemeContext.cs (original)
+++ trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Gui.Theming/ThemeContext.cs Sun Mar 2 02:09:05 2008
@@ -27,15 +27,46 @@
//
using System;
+using Cairo;
namespace Hyena.Gui.Theming
{
public class ThemeContext
{
- private int radius = 3;
- public int Radius {
+ private double radius = 3.0;
+ public double Radius {
get { return radius; }
set { radius = value; }
}
+
+ private double fill_alpha = 1.0;
+ public double FillAlpha {
+ get { return fill_alpha; }
+ set { fill_alpha = Theme.Clamp (0.0, 1.0, value); }
+ }
+
+ private double line_width = 1.0;
+ public double LineWidth {
+ get { return line_width; }
+ set { line_width = value; }
+ }
+
+ private double x;
+ public double X {
+ get { return x; }
+ set { x = value; }
+ }
+
+ private double y;
+ public double Y {
+ get { return y; }
+ set { y = value; }
+ }
+
+ private Cairo.Context cairo;
+ public Cairo.Context Cairo {
+ get { return cairo; }
+ set { cairo = value; }
+ }
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]