[gbrainy] Mouse support for three more puzzles



commit 04148f47a33f7a01de9561b7c2791970b9f7971b
Author: Jordi Mas <jmas softcatala org>
Date:   Mon Feb 15 23:21:37 2010 +0100

    Mouse support for three more puzzles

 src/Games/Logic/PuzzleMissingPiece.cs |   39 +++++++++++++------
 src/Games/Logic/PuzzleMissingSlice.cs |   55 +++++++++++++++++++--------
 src/Games/Logic/PuzzleNextFigure.cs   |   66 ++++++++++++++++++++------------
 3 files changed, 106 insertions(+), 54 deletions(-)
---
diff --git a/src/Games/Logic/PuzzleMissingPiece.cs b/src/Games/Logic/PuzzleMissingPiece.cs
index b42ffd9..a7d2f20 100644
--- a/src/Games/Logic/PuzzleMissingPiece.cs
+++ b/src/Games/Logic/PuzzleMissingPiece.cs
@@ -23,6 +23,7 @@ using Mono.Unix;
 
 using gbrainy.Core.Main;
 using gbrainy.Core.Libraries;
+using gbrainy.Core.Toolkit;
 
 namespace gbrainy.Games.Logic
 {
@@ -64,6 +65,29 @@ namespace gbrainy.Games.Logic
 					break;
 				}
 			}
+
+			HorizontalContainer container = new HorizontalContainer (DrawAreaX, 0.7, 0.8, 0.3);
+			DrawableArea drawable_area;
+			AddWidget (container);
+
+			for (int i = 0; i < random_indices.Count; i++)
+			{
+				drawable_area = new DrawableArea (0.8 / 3, 0.3);
+						
+				drawable_area.SelectedArea = new Rectangle (0, 0, sub_figure, sub_figure);
+				drawable_area.Data = i;
+				drawable_area.DataEx = GetPossibleAnswer (i);
+				container.AddChild (drawable_area);
+
+				drawable_area.DrawEventHandler += delegate (object sender, DrawEventArgs e)
+				{
+					int n = (int) e.Data;
+
+					DrawAnswerFigures (e.Context, 0, 0, random_indices [n]);
+					e.Context.MoveTo (0, 0.2);
+					e.Context.ShowPangoText (GetPossibleFigureAnswer (n));
+				};
+			}
 		}
 
 		private void DrawFigureSequence (CairoContextEx gr, double x, double y, int sequence, bool last_block)
@@ -138,26 +162,17 @@ namespace gbrainy.Games.Logic
 
 		public override void Draw (CairoContextEx gr, int area_width, int area_height, bool rtl)
 		{
-			double x = DrawAreaX + 0.15, y = DrawAreaY;
-			int figure;
+			double x = DrawAreaX + 0.15;
 
 			base.Draw (gr, area_width, area_height, rtl);
 		
 			for (int i = 0; i < 2; i++)
-				DrawFigureSequence (gr, x, y + sub_figure * i , i, true);
+				DrawFigureSequence (gr, x, DrawAreaY + sub_figure * i , i, true);
 
-			DrawFigureSequence (gr, x, y + sub_figure * 2 , 2, false);
+			DrawFigureSequence (gr, x, DrawAreaY + sub_figure * 2 , 2, false);
 
 			gr.MoveTo (0.1, 0.62);
 			gr.ShowPangoText (Catalog.GetString ("Possible answers are:"));
-
-			x = DrawAreaX + 0.1;
-			for (int i = 0; i < random_indices.Count; i++) {
-				figure = random_indices [i];
-				DrawAnswerFigures (gr, x + (0.08 + sub_figure) * i, 0.70, figure);
-				gr.MoveTo (x + (0.08 + sub_figure) * i, 0.9);
-				gr.ShowPangoText (GetPossibleFigureAnswer (i));
-			}
 		}
 	}
 }
diff --git a/src/Games/Logic/PuzzleMissingSlice.cs b/src/Games/Logic/PuzzleMissingSlice.cs
index e8620f9..16a728f 100644
--- a/src/Games/Logic/PuzzleMissingSlice.cs
+++ b/src/Games/Logic/PuzzleMissingSlice.cs
@@ -23,6 +23,7 @@ using Mono.Unix;
 
 using gbrainy.Core.Main;
 using gbrainy.Core.Libraries;
+using gbrainy.Core.Toolkit;
 
 namespace gbrainy.Games.Logic
 {
@@ -92,6 +93,42 @@ namespace gbrainy.Games.Logic
 			for (int i = 0; i < bad_answers.Length; i++) {
 				bad_answers[i] = 1 + random.Next (9);
 			}
+
+			HorizontalContainer container = new HorizontalContainer (DrawAreaX, 0.68, 0.8, 0.3);
+			DrawableArea drawable_area;
+			AddWidget (container);
+
+			for (int i = 0; i < possible_answers; i++)
+			{
+				drawable_area = new DrawableArea (0.8 / 3, 0.3);
+				drawable_area.SelectedArea = new Rectangle (0, 0, radius, 0.2);
+				drawable_area.Data = i;
+				drawable_area.DataEx = GetPossibleAnswer (i);
+				container.AddChild (drawable_area);
+
+				drawable_area.DrawEventHandler += delegate (object sender, DrawEventArgs e)
+				{
+					int n = (int) e.Data;
+
+					DrawSlice (e.Context, 0, 0);
+					if (n == ans_pos) {
+						int pos = random_indices [0];
+						DrawSliceText (e.Context, 0, 0, 0, (sum_offset +
+						slices [pos * items_per_slice]).ToString (),
+						(sum_offset + slices [1 + (pos * items_per_slice)]).ToString (), 
+						(sum_offset + slices [2 + (pos * items_per_slice)]).ToString ());
+					} else {
+						DrawSliceText (e.Context, 0, 0, 0, 
+							bad_answers [n * items_per_slice].ToString (),
+							bad_answers [1 + (n * items_per_slice)].ToString (), 
+							bad_answers [2 + (n * items_per_slice)].ToString ());
+					}
+			
+					e.Context.MoveTo (0.0, 0.25);
+					e.Context.ShowPangoText (GetPossibleFigureAnswer (n));
+					e.Context.Stroke ();
+				};
+			}
 		}
 
 		private static void DrawSlice (CairoContextEx gr, double x, double y)
@@ -180,23 +217,7 @@ namespace gbrainy.Games.Logic
 
 			gr.MoveTo (0.1, 0.61);
 			gr.ShowPangoText (Catalog.GetString ("Possible answers are:"));
-
-			y = 0.68;
-	 		for (int i = 0; i < possible_answers; i++) 
-			{
-				DrawSlice (gr, 0.10 + i * 0.28, y);
-				if (i == ans_pos) {
-					pos = random_indices [0];
-					DrawSliceText (gr, 0.10 + i * 0.28, y, 0, (sum_offset + slices [pos * items_per_slice]).ToString (),
-						 (sum_offset + slices [1 + (pos * items_per_slice)]).ToString (), (sum_offset + slices [2 + (pos * items_per_slice)]).ToString ());
-				} else {
-					DrawSliceText (gr, 0.10 + i * 0.28, y, 0, bad_answers [i * items_per_slice].ToString (),
-						 bad_answers [1 + (i * items_per_slice)].ToString (), bad_answers [2 + (i * items_per_slice)].ToString ());
-				}
-			
-				gr.MoveTo (0.10  + i * 0.28, y + 0.25);
-				gr.ShowPangoText (GetPossibleFigureAnswer (i));
-			}
+			gr.Stroke ();
 		}
 	}
 }
diff --git a/src/Games/Logic/PuzzleNextFigure.cs b/src/Games/Logic/PuzzleNextFigure.cs
index 3754567..64b3714 100644
--- a/src/Games/Logic/PuzzleNextFigure.cs
+++ b/src/Games/Logic/PuzzleNextFigure.cs
@@ -23,13 +23,15 @@ using System;
 
 using gbrainy.Core.Main;
 using gbrainy.Core.Libraries;
+using gbrainy.Core.Toolkit;
 
 namespace gbrainy.Games.Logic
 {
 	public class PuzzleNextFigure : Game
 	{
-		private const double figure_size = 0.2;
-		private ArrayListIndicesRandom random_indices;
+		const double figure_size = 0.2;
+		const double space_figures = figure_size + 0.066;
+		ArrayListIndicesRandom random_indices;
 
 		public enum CerclePosition 
 		{
@@ -80,6 +82,43 @@ namespace gbrainy.Games.Logic
 					break;
 				}
 			}
+
+			HorizontalContainer container = new HorizontalContainer (DrawAreaX, DrawAreaY + figure_size + 0.16, 					0.8, 0.3);
+
+			DrawableArea drawable_area;
+			AddWidget (container);
+
+			for (int i = 0; i < (int) Figures.Last; i++)
+			{
+				drawable_area = new DrawableArea (space_figures, 0.2);						
+				drawable_area.SelectedArea = new Rectangle (0, 0, figure_size, figure_size);
+				drawable_area.Data = i;
+				drawable_area.DataEx = GetPossibleAnswer (i);
+				container.AddChild (drawable_area);
+
+				drawable_area.DrawEventHandler += delegate (object sender, DrawEventArgs e)
+				{
+					int n = (int) e.Data;
+
+				 	switch ((Figures) random_indices[n]) {
+					case Figures.First:
+						DrawDiamon (e.Context, 0, 0, CerclePosition.Right | CerclePosition.Left);
+						break;
+					case Figures.Second:
+						DrawDiamon (e.Context, 0, 0, CerclePosition.Top | CerclePosition.Right);
+						break;
+					case Figures.Third:
+						DrawDiamon (e.Context, 0, 0, CerclePosition.Bottom | CerclePosition.Top);
+						break;
+					default:
+						throw new InvalidOperationException ();
+					}
+
+					e.Context.MoveTo (0.02, 0.25);
+					e.Context.ShowPangoText (GetPossibleFigureAnswer (n));
+					e.Context.Stroke ();
+				};
+			}
 		}
 
 		static private void DrawDiamon (CairoContextEx gr, double x, double y, CerclePosition cercles)
@@ -118,7 +157,6 @@ namespace gbrainy.Games.Logic
 		{
 			double x = DrawAreaX;
 			double y = DrawAreaY;
-			double space_figures = figure_size + 0.1;
 		
 			base.Draw (gr, area_width, area_height, rtl);
 
@@ -130,28 +168,6 @@ namespace gbrainy.Games.Logic
 			gr.MoveTo (x, y);
 			gr.ShowPangoText (Catalog.GetString ("Possible answers are:"));
 			gr.Stroke ();
-			y += 0.10;
-
-			for (int i = 0; i < (int) Figures.Last; i++)
-			{
-			 	switch ((Figures) random_indices[i]) {
-				case Figures.First:
-					DrawDiamon (gr, x, y, CerclePosition.Right | CerclePosition.Left);
-					break;
-				case Figures.Second:
-					DrawDiamon (gr, x, y, CerclePosition.Top | CerclePosition.Right);
-					break;
-				case Figures.Third:
-					DrawDiamon (gr, x, y, CerclePosition.Bottom | CerclePosition.Top);
-					break;
-				}
-			
-				gr.MoveTo (x + 0.02, y + 0.25);
-				gr.ShowPangoText (GetPossibleFigureAnswer (i));
-				x += space_figures;			
-			}
-
-			gr.Stroke ();
 		}
 	}
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]