Index: /trunk/MacFaceFloat/Configuration.cs
===================================================================
--- /trunk/MacFaceFloat/Configuration.cs	(revision 20)
+++ /trunk/MacFaceFloat/Configuration.cs	(revision 30)
@@ -36,4 +36,8 @@
 		[Category("çtH["), Description("§¾x0-100ÌÅwèµÜ·B")]
 		public Int32 Opacity = 100;
+
+		[AutoConfigure("form.faceform.patternsize")]
+		[Category("çtH["), Description("p^[Ìå«³10-100ÌÅwèµÜ·B")]
+		public Int32 PatternSize = 100;
 
 		[AutoConfigure("form.faceform.point")]
Index: /trunk/MacFaceFloat/ConfigurationForm.cs
===================================================================
--- /trunk/MacFaceFloat/ConfigurationForm.cs	(revision 20)
+++ /trunk/MacFaceFloat/ConfigurationForm.cs	(revision 30)
@@ -36,4 +36,8 @@
 		private System.Windows.Forms.Label label4;
 		private System.Windows.Forms.CheckBox checkMouseMessage;
+		private System.Windows.Forms.ImageList imageListConfigTreeIcon;
+		private System.Windows.Forms.Label label5;
+		private TrackBar trackBarPatternSize;
+		private Label label6;
 		private System.ComponentModel.IContainer components;
 
@@ -73,5 +77,9 @@
 		{
 			this.components = new System.ComponentModel.Container();
+			System.Windows.Forms.TreeNode treeNode3 = new System.Windows.Forms.TreeNode("SÊ", 1, 1);
+			System.Windows.Forms.TreeNode treeNode4 = new System.Windows.Forms.TreeNode("çp^[");
+			System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ConfigurationForm));
 			this.treeCategory = new System.Windows.Forms.TreeView();
+			this.imageListConfigTreeIcon = new System.Windows.Forms.ImageList(this.components);
 			this.buttonCancel = new System.Windows.Forms.Button();
 			this.buttonApply = new System.Windows.Forms.Button();
@@ -79,4 +87,11 @@
 			this.labelTitle = new System.Windows.Forms.Label();
 			this.panelContainer = new System.Windows.Forms.Panel();
+			this.panelAppearance = new System.Windows.Forms.Panel();
+			this.label5 = new System.Windows.Forms.Label();
+			this.checkMouseMessage = new System.Windows.Forms.CheckBox();
+			this.label3 = new System.Windows.Forms.Label();
+			this.label2 = new System.Windows.Forms.Label();
+			this.label1 = new System.Windows.Forms.Label();
+			this.trackBarOpacity = new System.Windows.Forms.TrackBar();
 			this.panelFacePatternList = new System.Windows.Forms.Panel();
 			this.label4 = new System.Windows.Forms.Label();
@@ -85,57 +100,74 @@
 			this.listViewFaces = new System.Windows.Forms.ListView();
 			this.imageListFacePreviews = new System.Windows.Forms.ImageList(this.components);
-			this.panelAppearance = new System.Windows.Forms.Panel();
-			this.checkMouseMessage = new System.Windows.Forms.CheckBox();
-			this.label3 = new System.Windows.Forms.Label();
-			this.label2 = new System.Windows.Forms.Label();
-			this.label1 = new System.Windows.Forms.Label();
-			this.trackBarOpacity = new System.Windows.Forms.TrackBar();
 			this.toolTipPreviewDetail = new System.Windows.Forms.ToolTip(this.components);
+			this.trackBarPatternSize = new System.Windows.Forms.TrackBar();
+			this.label6 = new System.Windows.Forms.Label();
 			this.panelContainer.SuspendLayout();
-			this.panelFacePatternList.SuspendLayout();
 			this.panelAppearance.SuspendLayout();
 			((System.ComponentModel.ISupportInitialize)(this.trackBarOpacity)).BeginInit();
+			this.panelFacePatternList.SuspendLayout();
+			((System.ComponentModel.ISupportInitialize)(this.trackBarPatternSize)).BeginInit();
 			this.SuspendLayout();
-			// 
-			// treeCategory
-			// 
-			this.treeCategory.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-				| System.Windows.Forms.AnchorStyles.Left)));
-			this.treeCategory.ImageIndex = -1;
+// 
+// treeCategory
+// 
+			this.treeCategory.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+						| System.Windows.Forms.AnchorStyles.Left)));
+			this.treeCategory.FullRowSelect = true;
+			this.treeCategory.HideSelection = false;
+			this.treeCategory.HotTracking = true;
+			this.treeCategory.ImageList = this.imageListConfigTreeIcon;
 			this.treeCategory.Location = new System.Drawing.Point(0, 0);
 			this.treeCategory.Name = "treeCategory";
+			treeNode3.ImageIndex = 1;
+			treeNode3.Name = "";
+			treeNode3.SelectedImageIndex = 1;
+			treeNode3.Text = "SÊ";
+			treeNode4.Name = "";
+			treeNode4.Text = "çp^[";
 			this.treeCategory.Nodes.AddRange(new System.Windows.Forms.TreeNode[] {
-																					 new System.Windows.Forms.TreeNode("SÊ"),
-																					 new System.Windows.Forms.TreeNode("çp^[")});
-			this.treeCategory.SelectedImageIndex = -1;
-			this.treeCategory.Size = new System.Drawing.Size(193, 449);
+            treeNode3,
+            treeNode4});
+			this.treeCategory.ShowLines = false;
+			this.treeCategory.ShowPlusMinus = false;
+			this.treeCategory.ShowRootLines = false;
+			this.treeCategory.Size = new System.Drawing.Size(101, 296);
 			this.treeCategory.TabIndex = 0;
 			this.treeCategory.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeCategory_AfterSelect);
-			// 
-			// buttonCancel
-			// 
+// 
+// imageListConfigTreeIcon
+// 
+			this.imageListConfigTreeIcon.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;
+			this.imageListConfigTreeIcon.ImageSize = new System.Drawing.Size(32, 32);
+			this.imageListConfigTreeIcon.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageListConfigTreeIcon.ImageStream")));
+			this.imageListConfigTreeIcon.TransparentColor = System.Drawing.Color.Transparent;
+			this.imageListConfigTreeIcon.Images.SetKeyName(0, "");
+			this.imageListConfigTreeIcon.Images.SetKeyName(1, "");
+// 
+// buttonCancel
+// 
 			this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
 			this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
-			this.buttonCancel.Location = new System.Drawing.Point(427, 420);
+			this.buttonCancel.Location = new System.Drawing.Point(303, 267);
 			this.buttonCancel.Name = "buttonCancel";
 			this.buttonCancel.Size = new System.Drawing.Size(87, 21);
 			this.buttonCancel.TabIndex = 1;
 			this.buttonCancel.Text = "LZ";
-			// 
-			// buttonApply
-			// 
+// 
+// buttonApply
+// 
 			this.buttonApply.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
 			this.buttonApply.Enabled = false;
-			this.buttonApply.Location = new System.Drawing.Point(521, 420);
+			this.buttonApply.Location = new System.Drawing.Point(397, 267);
 			this.buttonApply.Name = "buttonApply";
 			this.buttonApply.Size = new System.Drawing.Size(87, 21);
 			this.buttonApply.TabIndex = 2;
 			this.buttonApply.Text = "Kp(&A)";
-			// 
-			// buttonOK
-			// 
+// 
+// buttonOK
+// 
 			this.buttonOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
 			this.buttonOK.DialogResult = System.Windows.Forms.DialogResult.OK;
-			this.buttonOK.Location = new System.Drawing.Point(332, 420);
+			this.buttonOK.Location = new System.Drawing.Point(208, 267);
 			this.buttonOK.Name = "buttonOK";
 			this.buttonOK.Size = new System.Drawing.Size(87, 21);
@@ -143,94 +175,36 @@
 			this.buttonOK.Text = "OK";
 			this.buttonOK.Click += new System.EventHandler(this.buttonOK_Click);
-			// 
-			// labelTitle
-			// 
-			this.labelTitle.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-				| System.Windows.Forms.AnchorStyles.Right)));
+// 
+// labelTitle
+// 
+			this.labelTitle.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+						| System.Windows.Forms.AnchorStyles.Right)));
 			this.labelTitle.BackColor = System.Drawing.SystemColors.ActiveCaption;
-			this.labelTitle.Font = new System.Drawing.Font("MS UI Gothic", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(128)));
+			this.labelTitle.Font = new System.Drawing.Font("MS UI Gothic", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(128)));
 			this.labelTitle.ForeColor = System.Drawing.SystemColors.ActiveCaptionText;
-			this.labelTitle.Location = new System.Drawing.Point(199, 5);
+			this.labelTitle.Location = new System.Drawing.Point(107, 5);
 			this.labelTitle.Name = "labelTitle";
-			this.labelTitle.Size = new System.Drawing.Size(412, 27);
+			this.labelTitle.Size = new System.Drawing.Size(380, 27);
 			this.labelTitle.TabIndex = 4;
 			this.labelTitle.Text = "SÊ";
 			this.labelTitle.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-			// 
-			// panelContainer
-			// 
-			this.panelContainer.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-				| System.Windows.Forms.AnchorStyles.Left) 
-				| System.Windows.Forms.AnchorStyles.Right)));
+// 
+// panelContainer
+// 
+			this.panelContainer.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+						| System.Windows.Forms.AnchorStyles.Left)
+						| System.Windows.Forms.AnchorStyles.Right)));
+			this.panelContainer.Controls.Add(this.panelAppearance);
 			this.panelContainer.Controls.Add(this.panelFacePatternList);
-			this.panelContainer.Controls.Add(this.panelAppearance);
-			this.panelContainer.Location = new System.Drawing.Point(198, 38);
+			this.panelContainer.Location = new System.Drawing.Point(106, 38);
 			this.panelContainer.Name = "panelContainer";
-			this.panelContainer.Size = new System.Drawing.Size(411, 371);
+			this.panelContainer.Size = new System.Drawing.Size(380, 218);
 			this.panelContainer.TabIndex = 5;
-			// 
-			// panelFacePatternList
-			// 
-			this.panelFacePatternList.Controls.Add(this.label4);
-			this.panelFacePatternList.Controls.Add(this.linkWebSite);
-			this.panelFacePatternList.Controls.Add(this.buttonBrowse);
-			this.panelFacePatternList.Controls.Add(this.listViewFaces);
-			this.panelFacePatternList.Dock = System.Windows.Forms.DockStyle.Fill;
-			this.panelFacePatternList.Location = new System.Drawing.Point(0, 0);
-			this.panelFacePatternList.Name = "panelFacePatternList";
-			this.panelFacePatternList.Size = new System.Drawing.Size(411, 371);
-			this.panelFacePatternList.TabIndex = 7;
-			// 
-			// label4
-			// 
-			this.label4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-			this.label4.Location = new System.Drawing.Point(4, 350);
-			this.label4.Name = "label4";
-			this.label4.Size = new System.Drawing.Size(63, 17);
-			this.label4.TabIndex = 3;
-			this.label4.Text = "EFuTCg:";
-			// 
-			// linkWebSite
-			// 
-			this.linkWebSite.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) 
-				| System.Windows.Forms.AnchorStyles.Right)));
-			this.linkWebSite.Location = new System.Drawing.Point(67, 350);
-			this.linkWebSite.Name = "linkWebSite";
-			this.linkWebSite.Size = new System.Drawing.Size(338, 16);
-			this.linkWebSite.TabIndex = 2;
-			this.linkWebSite.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkWebSite_LinkClicked);
-			// 
-			// buttonBrowse
-			// 
-			this.buttonBrowse.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
-			this.buttonBrowse.Location = new System.Drawing.Point(322, 323);
-			this.buttonBrowse.Name = "buttonBrowse";
-			this.buttonBrowse.Size = new System.Drawing.Size(87, 21);
-			this.buttonBrowse.TabIndex = 1;
-			this.buttonBrowse.Text = "QÆ(&B)...";
-			this.buttonBrowse.Click += new System.EventHandler(this.buttonBrowse_Click);
-			// 
-			// listViewFaces
-			// 
-			this.listViewFaces.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-				| System.Windows.Forms.AnchorStyles.Left) 
-				| System.Windows.Forms.AnchorStyles.Right)));
-			this.listViewFaces.LargeImageList = this.imageListFacePreviews;
-			this.listViewFaces.Location = new System.Drawing.Point(0, 0);
-			this.listViewFaces.Name = "listViewFaces";
-			this.listViewFaces.Size = new System.Drawing.Size(410, 318);
-			this.listViewFaces.TabIndex = 0;
-			this.listViewFaces.DoubleClick += new System.EventHandler(this.listViewFaces_DoubleClick);
-			this.listViewFaces.MouseMove += new System.Windows.Forms.MouseEventHandler(this.listViewFaces_MouseMove);
-			this.listViewFaces.SelectedIndexChanged += new System.EventHandler(this.listViewFaces_SelectedIndexChanged);
-			// 
-			// imageListFacePreviews
-			// 
-			this.imageListFacePreviews.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;
-			this.imageListFacePreviews.ImageSize = new System.Drawing.Size(128, 128);
-			this.imageListFacePreviews.TransparentColor = System.Drawing.Color.Transparent;
-			// 
-			// panelAppearance
-			// 
+// 
+// panelAppearance
+// 
+			this.panelAppearance.Controls.Add(this.label6);
+			this.panelAppearance.Controls.Add(this.trackBarPatternSize);
+			this.panelAppearance.Controls.Add(this.label5);
 			this.panelAppearance.Controls.Add(this.checkMouseMessage);
 			this.panelAppearance.Controls.Add(this.label3);
@@ -238,60 +212,159 @@
 			this.panelAppearance.Controls.Add(this.label1);
 			this.panelAppearance.Controls.Add(this.trackBarOpacity);
-			this.panelAppearance.Dock = System.Windows.Forms.DockStyle.Fill;
-			this.panelAppearance.Location = new System.Drawing.Point(0, 0);
+			this.panelAppearance.Location = new System.Drawing.Point(4, 3);
 			this.panelAppearance.Name = "panelAppearance";
-			this.panelAppearance.Size = new System.Drawing.Size(411, 371);
+			this.panelAppearance.Size = new System.Drawing.Size(366, 208);
 			this.panelAppearance.TabIndex = 0;
-			// 
-			// checkMouseMessage
-			// 
-			this.checkMouseMessage.Enabled = false;
-			this.checkMouseMessage.Location = new System.Drawing.Point(5, 115);
+// 
+// label5
+// 
+			this.label5.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+						| System.Windows.Forms.AnchorStyles.Right)));
+			this.label5.Location = new System.Drawing.Point(311, 55);
+			this.label5.Margin = new System.Windows.Forms.Padding(3, 0, 3, 3);
+			this.label5.Name = "label5";
+			this.label5.Size = new System.Drawing.Size(42, 11);
+			this.label5.TabIndex = 5;
+			this.label5.Text = "s§¾";
+// 
+// checkMouseMessage
+// 
+			this.checkMouseMessage.Location = new System.Drawing.Point(5, 188);
 			this.checkMouseMessage.Name = "checkMouseMessage";
-			this.checkMouseMessage.Size = new System.Drawing.Size(400, 16);
+			this.checkMouseMessage.Size = new System.Drawing.Size(355, 11);
 			this.checkMouseMessage.TabIndex = 4;
 			this.checkMouseMessage.Text = "}EXÌ®ìðwÊÌEBhEÖ`¦é(&T)";
-			// 
-			// label3
-			// 
+// 
+// label3
+// 
 			this.label3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
-			this.label3.Location = new System.Drawing.Point(364, 73);
+			this.label3.Location = new System.Drawing.Point(524, 73);
 			this.label3.Name = "label3";
 			this.label3.Size = new System.Drawing.Size(45, 11);
 			this.label3.TabIndex = 3;
 			this.label3.Text = "s§¾";
-			// 
-			// label2
-			// 
-			this.label2.Location = new System.Drawing.Point(4, 73);
+// 
+// label2
+// 
+			this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+						| System.Windows.Forms.AnchorStyles.Right)));
+			this.label2.Location = new System.Drawing.Point(15, 55);
+			this.label2.Margin = new System.Windows.Forms.Padding(3, 0, 3, 3);
 			this.label2.Name = "label2";
 			this.label2.Size = new System.Drawing.Size(31, 11);
 			this.label2.TabIndex = 2;
 			this.label2.Text = "§¾";
-			// 
-			// label1
-			// 
+// 
+// label1
+// 
 			this.label1.Location = new System.Drawing.Point(2, 5);
+			this.label1.Margin = new System.Windows.Forms.Padding(3, 3, 3, 0);
 			this.label1.Name = "label1";
 			this.label1.Size = new System.Drawing.Size(196, 18);
 			this.label1.TabIndex = 1;
 			this.label1.Text = "§¾x:";
-			// 
-			// trackBarOpacity
-			// 
-			this.trackBarOpacity.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-				| System.Windows.Forms.AnchorStyles.Right)));
+// 
+// trackBarOpacity
+// 
+			this.trackBarOpacity.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+						| System.Windows.Forms.AnchorStyles.Right)));
 			this.trackBarOpacity.LargeChange = 10;
-			this.trackBarOpacity.Location = new System.Drawing.Point(8, 26);
+			this.trackBarOpacity.Location = new System.Drawing.Point(15, 24);
+			this.trackBarOpacity.Margin = new System.Windows.Forms.Padding(3, 1, 3, 1);
 			this.trackBarOpacity.Maximum = 100;
 			this.trackBarOpacity.Name = "trackBarOpacity";
-			this.trackBarOpacity.Size = new System.Drawing.Size(400, 42);
+			this.trackBarOpacity.Size = new System.Drawing.Size(338, 42);
 			this.trackBarOpacity.TabIndex = 0;
 			this.trackBarOpacity.TickFrequency = 10;
-			// 
-			// ConfigurationForm
-			// 
+// 
+// panelFacePatternList
+// 
+			this.panelFacePatternList.Controls.Add(this.label4);
+			this.panelFacePatternList.Controls.Add(this.linkWebSite);
+			this.panelFacePatternList.Controls.Add(this.buttonBrowse);
+			this.panelFacePatternList.Controls.Add(this.listViewFaces);
+			this.panelFacePatternList.Location = new System.Drawing.Point(2, 1);
+			this.panelFacePatternList.Name = "panelFacePatternList";
+			this.panelFacePatternList.Size = new System.Drawing.Size(367, 213);
+			this.panelFacePatternList.TabIndex = 7;
+// 
+// label4
+// 
+			this.label4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+			this.label4.Location = new System.Drawing.Point(4, 165);
+			this.label4.Name = "label4";
+			this.label4.Size = new System.Drawing.Size(63, 17);
+			this.label4.TabIndex = 3;
+			this.label4.Text = "EFuTCg:";
+// 
+// linkWebSite
+// 
+			this.linkWebSite.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+						| System.Windows.Forms.AnchorStyles.Right)));
+			this.linkWebSite.Links.Add(new System.Windows.Forms.LinkLabel.Link(0, 0));
+			this.linkWebSite.Location = new System.Drawing.Point(67, 165);
+			this.linkWebSite.Name = "linkWebSite";
+			this.linkWebSite.Size = new System.Drawing.Size(388, 16);
+			this.linkWebSite.TabIndex = 2;
+			this.linkWebSite.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkWebSite_LinkClicked);
+// 
+// buttonBrowse
+// 
+			this.buttonBrowse.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+			this.buttonBrowse.Location = new System.Drawing.Point(267, 187);
+			this.buttonBrowse.Name = "buttonBrowse";
+			this.buttonBrowse.Size = new System.Drawing.Size(95, 24);
+			this.buttonBrowse.TabIndex = 1;
+			this.buttonBrowse.Text = "QÆ(&B)...";
+			this.buttonBrowse.Click += new System.EventHandler(this.buttonBrowse_Click);
+// 
+// listViewFaces
+// 
+			this.listViewFaces.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+						| System.Windows.Forms.AnchorStyles.Left)
+						| System.Windows.Forms.AnchorStyles.Right)));
+			this.listViewFaces.LargeImageList = this.imageListFacePreviews;
+			this.listViewFaces.Location = new System.Drawing.Point(0, 0);
+			this.listViewFaces.Name = "listViewFaces";
+			this.listViewFaces.Size = new System.Drawing.Size(367, 161);
+			this.listViewFaces.TabIndex = 0;
+			this.listViewFaces.SelectedIndexChanged += new System.EventHandler(this.listViewFaces_SelectedIndexChanged);
+			this.listViewFaces.DoubleClick += new System.EventHandler(this.listViewFaces_DoubleClick);
+			this.listViewFaces.MouseMove += new System.Windows.Forms.MouseEventHandler(this.listViewFaces_MouseMove);
+// 
+// imageListFacePreviews
+// 
+			this.imageListFacePreviews.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;
+			this.imageListFacePreviews.ImageSize = new System.Drawing.Size(128, 128);
+			this.imageListFacePreviews.TransparentColor = System.Drawing.Color.Transparent;
+// 
+// trackBarPatternSize
+// 
+			this.trackBarPatternSize.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+						| System.Windows.Forms.AnchorStyles.Right)));
+			this.trackBarPatternSize.LargeChange = 10;
+			this.trackBarPatternSize.Location = new System.Drawing.Point(15, 114);
+			this.trackBarPatternSize.Margin = new System.Windows.Forms.Padding(3, 2, 3, 3);
+			this.trackBarPatternSize.Maximum = 100;
+			this.trackBarPatternSize.Minimum = 10;
+			this.trackBarPatternSize.Name = "trackBarPatternSize";
+			this.trackBarPatternSize.Size = new System.Drawing.Size(338, 42);
+			this.trackBarPatternSize.TabIndex = 6;
+			this.trackBarPatternSize.TickFrequency = 10;
+			this.trackBarPatternSize.Value = 100;
+// 
+// label6
+// 
+			this.label6.Location = new System.Drawing.Point(5, 93);
+			this.label6.Margin = new System.Windows.Forms.Padding(3, 3, 3, 0);
+			this.label6.Name = "label6";
+			this.label6.Size = new System.Drawing.Size(196, 18);
+			this.label6.TabIndex = 7;
+			this.label6.Text = "å«³:";
+// 
+// ConfigurationForm
+// 
 			this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);
-			this.ClientSize = new System.Drawing.Size(616, 450);
+			this.ClientSize = new System.Drawing.Size(492, 297);
 			this.Controls.Add(this.panelContainer);
 			this.Controls.Add(this.labelTitle);
@@ -305,7 +378,9 @@
 			this.Load += new System.EventHandler(this.ConfigurationForm_Load);
 			this.panelContainer.ResumeLayout(false);
+			this.panelAppearance.ResumeLayout(false);
+			this.panelAppearance.PerformLayout();
+			((System.ComponentModel.ISupportInitialize)(this.trackBarOpacity)).EndInit();
 			this.panelFacePatternList.ResumeLayout(false);
-			this.panelAppearance.ResumeLayout(false);
-			((System.ComponentModel.ISupportInitialize)(this.trackBarOpacity)).EndInit();
+			((System.ComponentModel.ISupportInitialize)(this.trackBarPatternSize)).EndInit();
 			this.ResumeLayout(false);
 
@@ -316,6 +391,9 @@
 		{
 			// SÊð\¦B
-			foreach (Panel pane in panelContainer.Controls)
+			foreach (Panel pane in panelContainer.Controls) 
+			{
 				pane.Visible = false;
+				pane.Dock = DockStyle.Fill;
+			}
 
 			panelAppearance.Show();
@@ -323,4 +401,5 @@
 			// úlðZbgB
 			trackBarOpacity.Value = (int) (_mainForm.Opacity * 100);
+			trackBarPatternSize.Value = (int)(_mainForm.PatternSize * 100);
 			checkMouseMessage.Checked = Configuration.GetInstance().TransparentMouseMessage;
 		}
@@ -330,4 +409,5 @@
 			Configuration config = Configuration.GetInstance();
 			config.Opacity = trackBarOpacity.Value;
+			config.PatternSize = trackBarPatternSize.Value;
 			config.TransparentMouseMessage = checkMouseMessage.Checked;
 
@@ -337,6 +417,4 @@
 		private void treeCategory_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
 		{
-			Panel container;
-
 			// Ä«Æ¤
 			if (e.Node.Text == labelTitle.Text) return;
@@ -351,5 +429,5 @@
 					listViewFaces.Items.Clear();
 					imageListFacePreviews.Images.Clear();
-					int i = 0;
+					panelFacePatternList.Show();
 
 					using (Bitmap tmpImage = new Bitmap(128, 128)) 
@@ -372,6 +450,4 @@
 						}
 					}
-
-					panelFacePatternList.Show();
 					break;
 			}
@@ -386,5 +462,19 @@
 			{
 				FaceDef faceDef = new FaceDef(path);
-				imageListFacePreviews.Images.Add(faceDef.TitleImage());
+				// \¦/Iðµ½ÛÉ­ÈçÈ¢æ¤É ç©¶ßhèµÄ`æµ½æðpÓ·éB
+				using (Image titleImage = faceDef.TitleImage) 
+				{
+					using (Bitmap titlePreviewImage = new Bitmap(titleImage.Width, titleImage.Height)) 
+					{
+						using (Graphics g = Graphics.FromImage(titlePreviewImage))
+						{
+							g.Clear(Color.White);
+							g.DrawRectangle(new Pen(Color.LightGray), 0, 0, 127, 127);
+							g.DrawImage(titleImage, 0, 0);
+						}
+						imageListFacePreviews.Images.Add(titlePreviewImage);
+					}
+				}
+
 
 				ListViewItem item = listViewFaces.Items.Add(faceDef.Title, imageListFacePreviews.Images.Count-1);
@@ -466,4 +556,9 @@
 			catch (Win32Exception) {}
 		}
+
+		private void label6_Click(object sender, EventArgs e)
+		{
+		
+		}
 	}
 }
Index: /trunk/MacFaceFloat/ConfigurationForm.resx
===================================================================
--- /trunk/MacFaceFloat/ConfigurationForm.resx	(revision 20)
+++ /trunk/MacFaceFloat/ConfigurationForm.resx	(revision 30)
@@ -4,5 +4,5 @@
     Microsoft ResX Schema 
     
-    Version 1.3
+    Version 2.0
     
     The primary goals of this format is to allow a simple XML format 
@@ -15,14 +15,15 @@
     ... ado.net/XML headers & schema ...
     <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">1.3</resheader>
+    <resheader name="version">2.0</resheader>
     <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
     <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1">this is my long string</data>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
     <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
     <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        [base64 mime encoded serialized .NET Framework object]
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
     </data>
     <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        [base64 mime encoded string representing a byte array form of the .NET Framework object]
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
     </data>
                 
@@ -36,5 +37,5 @@
     mimetype set.
     
-    The mimetype is used forserialized objects, and tells the 
+    The mimetype is used for serialized objects, and tells the 
     ResXResourceReader how to depersist the object. This is currently not 
     extensible. For a given mimetype the value must be set accordingly:
@@ -63,4 +64,20 @@
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
           <xsd:element name="data">
             <xsd:complexType>
@@ -90,239 +107,145 @@
   </resheader>
   <resheader name="version">
-    <value>1.3</value>
+    <value>2.0</value>
   </resheader>
   <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
   <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <data name="treeCategory.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="treeCategory.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="treeCategory.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>False</value>
-  </data>
-  <data name="buttonCancel.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>False</value>
-  </data>
-  <data name="buttonCancel.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="buttonCancel.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="buttonApply.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>False</value>
-  </data>
-  <data name="buttonApply.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="buttonApply.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="buttonOK.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>False</value>
-  </data>
-  <data name="buttonOK.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="buttonOK.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="labelTitle.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>False</value>
-  </data>
-  <data name="labelTitle.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="labelTitle.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="panelContainer.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>False</value>
-  </data>
-  <data name="panelContainer.SnapToGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>False</value>
-  </data>
-  <data name="panelContainer.DrawGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>True</value>
-  </data>
-  <data name="panelContainer.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="panelContainer.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="panelContainer.GridSize" type="System.Drawing.Size, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>8, 8</value>
-  </data>
-  <data name="panelFacePatternList.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>False</value>
-  </data>
-  <data name="panelFacePatternList.SnapToGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>False</value>
-  </data>
-  <data name="panelFacePatternList.DrawGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>True</value>
-  </data>
-  <data name="panelFacePatternList.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="panelFacePatternList.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="panelFacePatternList.GridSize" type="System.Drawing.Size, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>8, 8</value>
-  </data>
-  <data name="label4.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>False</value>
-  </data>
-  <data name="label4.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="label4.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="linkWebSite.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="linkWebSite.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="linkWebSite.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>False</value>
-  </data>
-  <data name="buttonBrowse.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>False</value>
-  </data>
-  <data name="buttonBrowse.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="buttonBrowse.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="listViewFaces.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>False</value>
-  </data>
-  <data name="listViewFaces.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="listViewFaces.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="imageListFacePreviews.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="imageListFacePreviews.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="imageListFacePreviews.Location" type="System.Drawing.Point, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>17, 17</value>
-  </data>
-  <data name="panelAppearance.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>False</value>
-  </data>
-  <data name="panelAppearance.SnapToGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>False</value>
-  </data>
-  <data name="panelAppearance.DrawGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>True</value>
-  </data>
-  <data name="panelAppearance.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="panelAppearance.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="panelAppearance.GridSize" type="System.Drawing.Size, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>8, 8</value>
-  </data>
-  <data name="checkMouseMessage.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>False</value>
-  </data>
-  <data name="checkMouseMessage.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="checkMouseMessage.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="label3.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>False</value>
-  </data>
-  <data name="label3.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="label3.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="label2.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>False</value>
-  </data>
-  <data name="label2.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="label2.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="label1.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>False</value>
-  </data>
-  <data name="label1.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="label1.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="trackBarOpacity.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>False</value>
-  </data>
-  <data name="trackBarOpacity.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="trackBarOpacity.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="toolTipPreviewDetail.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="toolTipPreviewDetail.Location" type="System.Drawing.Point, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>183, 17</value>
-  </data>
-  <data name="toolTipPreviewDetail.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="$this.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>False</value>
-  </data>
-  <data name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>(Default)</value>
-  </data>
-  <data name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>False</value>
-  </data>
-  <data name="$this.Localizable" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>False</value>
-  </data>
-  <data name="$this.GridSize" type="System.Drawing.Size, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>8, 8</value>
-  </data>
-  <data name="$this.DrawGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>True</value>
-  </data>
-  <data name="$this.TrayHeight" type="System.Int32, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>80</value>
-  </data>
-  <data name="$this.SnapToGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>False</value>
-  </data>
-  <data name="$this.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>Private</value>
-  </data>
-  <data name="$this.Name">
-    <value>ConfigurationForm</value>
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="imageListConfigTreeIcon.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFpTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMzYw
+        MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZT
+        eXN0ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMA
+        AACoHQAAAk1TRnQBSQFMAgEBAgEAAQUBAAEEAQABIAEAASABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgD
+        AAGAAwABIAMAAQEBAAEgBgABQBIAMP8B9ALzAf8B3QHbAdoB/wG1ArQB/wOwAf8DsAH/AbUCtAH/AdgB
+        1gHVAf8B8gHxAfCx//8AAQAk/wHtAusB/wOwAf8BgQGDAYQB/wFmAW0BcgH/AWgBdQF9Af8BfgGRAZsB
+        /wF6AYwBmAH/AW0BfQGHAf8BcgGCAYsB/wFxAYABhwH/AWYBbQFyAf8CfgF9Af8BrAGrAaoB/wHoAecB
+        5qX//wABABz/AeIB4QHfAf8ChgGHAf8BWwFmAWsB/wF+AZEBmwH/AaEBuwHJAf8BxQHhAfIB/wHZAfgC
+        /wGOAaEBrQH/AWMBcAF3Af8BcQGAAYUB/wFlAXIBewH/AZIBpwGxAf8BzAHpAfcB/wGkAb0BzAH/AX4B
+        kQGbAf8BWwFmAWsB/wGBAYMBhAH/Ad0B2wHanf//AAEAFf8B/gH9Af8DmwH/AVgBYQFlAf8BkgGnAbEB
+        /wHMAekB9wH/AdkB+AL/AdQB8gL/AdkB+AL/AY4BoQGtAf8BaAF1AX0B/wHKAeYB8gH/AdkB9QL/AccB
+        4gHwAf8BYwFwAXcB/wGZAa0BuwH/AdwB+gL/AdkB+AL/Ac4B6wH6Af8BkQGoAbMB/wFbAWYBawH/AZQB
+        kgGRAf8B/AH6AfmV//8AAQAQ/wH3AfYB9QH/AWYBbQFyAf8BZAF1AY4B/wHMAekB9wH/AdwB+gL/Ac0B
+        6gL/AcoB6AL/AdAB7QL/AcsB5gH5Af8BYwFwAXcB/wHMAegB+wH/Ad4B/QL/AdkB+AL/Ad4B/QL/AcEB
+        3QHwAf8BZQFyAXsB/wHRAe4B/QH/Ac4B6wL/AcoB6AL/AdwB+gL/Ac4B6wH6Af8BdwGKAZwB/wFYAV8B
+        aAH/AegB5wHmGf8BhAGGAYQB/wGEAYYBhAH/AYQBhgGEAf8BhAGGAYQB/wGEAYYBhAH/AYQBhgGEAf8B
+        hAGGAYQB/wGEAYYBhAH/AYQBhgGEAf8BhAGGAYQB/wGEAYYBhAH/AYQBhgGEAf8BhAGGAYQB/wGEAYYB
+        hAH/AYQBhgGEAf8BhAGGAYQB/wGEAYYBhAH/AYQBhgGEAf8BhAGGAYQB/wGEAYYBhAH/AYQBhgGEAf8B
+        hAGGAYQB/wGEAYYBhAH/AYQBhgGEAf8BhAGGAYQB/wGEAYYBhAH/AYQBhgGEAf8BhAGGAYQB/wGEAYYB
+        hAX//wABAAz/Ae0C6wH/AXcCeAH/AWwBgwGjAf8BfAGeAv8BmQG6Av8BfAGeAv8BcgGTAfwB/wG5AdcC
+        /wHUAfIC/wG+AdgB6wH/AUABSQFOAf8BcgGCAYsB/wFyAYIBiwH/AXIBggGLAf8BcgGCAYsB/wFtAX0B
+        hwH/AVgBYQFlAf8BywHmAfkB/wHSAe4C/wF2AZgB/QH/AYIBowH+Af8BggGjAf4B/wGZAboC/wFcAXcB
+        vgH/AWYBaQFnAf8B2QHYAdcR/wGEAgAB/wGEAgAB/wGEAgAB/wGEAgAB/wGEAgAB/wGEAgAB/wGEAgAB
+        /wGEAgAB/wGEAgAB/wGEAgAB/wGEAgAB/wGEAgAB/wGEAgAB/wGEAgAB/wGEAgAB/wGEAgAB/wGEAgAB
+        /wGEAgAB/wGEAgAB/wGEAgAB/wGEAgAB/wGEAgAB/wGEAgAB/wGEAgAB/wGEAgAB/wGEAgAB/wGEAgAB
+        /wGEAgAB/wGEAgAB/wGEAYYBhAX//wABAAX/Af4B/QH/A5sB/wE9AUQBRwH/AVYBYwFrAf8B3gH9Av8B
+        dgGYAf0B/wFEAWQB5wH/AVoBfQH+Af8BfAGeAv8B0gHuAv8BzwHsAv8BzQHqAv8BtQHOAd4B/wGqAcEB
+        zwH/AaoBwQHPAf8BqgHBAc8B/wGqAcEBzwH/AaoBwQHPAf8BuwHVAeUB/wHPAewC/wHUAfIC/wGZAboC
+        /wFaAX0B/gH/AVoBfQH+Af8BUAFwAekB/wHPAfAC/wF+AZEBmwH/ATUBOgE+Af8BdwJ4Af8B4gHhAd8J
+        /wGEAgBt/wGEAgAB/wGEAYYBhAX//wABAAT/A5sB/wF3AYkBlAH/AXoBjAGYAf8BiAGdAaoB/wHcAfoC
+        /wHKAegC/wFkAXUBjgH/AVYBYwFrAf8BpwG+AckB/wHZAfgC/wHWAfQC/wHPAewC/wHSAfAC/wHSAfAC
+        /wHSAfAC/wHSAfAC/wHSAfAC/wHSAfAC/wHSAfAC/wHQAe0C/wHWAfQC/wHZAfUC/wGeAbQBvQH/AUQB
+        TgFXAf8BdwGKAZwB/wHcAfoC/wGqAcYB2AH/AWUBcgF7Af8BogG8AcoB/wFbAWYBawH/AfIB8QHwBf8B
+        hAIAbf8BhAIAAf8BhAGGAYQF//8AAQAB8gHxAfAB/wFdAWkBcAH/AdQB8gL/AW0BfQGHAf8BnQG0AcIB
+        /wHUAfIC/wHSAfAC/wHeAf0C/wGnAb4ByQH/AV0BaQFwAf8BYwFwAXcB/wGlAboBxgH/AdQB8gL/AdIB
+        7gL/Ac4B6wL/Ac4B6wL/Ac4B6wL/Ac4B6wL/Ac4B6wL/AdIB7gL/AdIB7gL/AacBvgHJAf8BYwFwAXcB
+        /wFjAXABdwH/AbABxwHSAf8B3AH6Av8B0gHwAv8BvgHYAesB/wFdAWkBcAH/AdkB+AL/AX4BkQGbAf8B
+        rAGrAaoF/wGEAgBt/wGEAgAB/wGEAYYBhAX//wABAAHVAdEBzgH/AXEBgAGHAf8B3AH6Av8BXQFpAXAB
+        /wG2Ac8B4QH/AdQB8gL/AcgB4wH2Af8BhQGWAaIB/wF9AY0BlwH/AW0BfAGDAf8BQAFJAU4B/wILAQwB
+        /wFEAU4BVwH/AccB4gHwAf8B0gHwAv8BzgHrAv8BzgHrAv8BzgHrAv8B0gHwAv8BuwHVAeUB/wE9AUQB
+        RwH/AgsBDAH/AT0BRAFHAf8BbQF8AYMB/wF9AY0BlwH/AYUBlgGiAf8BzAHoAfsB/wHFAeEB8gH/AVsB
+        ZgFrAf8BywHmAfkB/wGiAbwBzgH/AoYBhwX/AYQCAG3/AYQCAAH/AYQBhgGEBf//AAEAAcoByAHGAf8B
+        dwGJAZQB/wHUAfIC/wFWAWMBawH/AcEB3QHwAf8B0gHwAv8BygHkAfYB/wGOAaEBrQH/AY4BoQGtAf8B
+        kwGoAa8B/wFSAVwBYQH/AgsBDAH/AYgBnQGqAf8BzgHrAfoB/wHPAewC/wHOAesC/wHOAesC/wHOAesC
+        /wHQAe0C/wHMAekB9wH/AX0BjQGXAf8CCwEMAf8BVgFjAWsB/wGTAagBrwH/AY4BoQGtAf8BjgGhAa0B
+        /wHMAegB+wH/AcwB6AH7Af8BWwFmAWsB/wHBAd0B8AH/AaoBxgHYAf8BgQGDAYQF/wGEAgBt/wGEAgAB
+        /wGEAYYBhAX//wABAAHlAeQB4wH/AV0BaQFwAf8BwQHdAfAB/wFdAWkBcAH/AcgB4wH2Af8B0AHtAv8B
+        zgHrAv8B3gH9Av8BxwHiAfAB/wFoAXUBfQH/AUoBVQFcAf8BpwG+AckB/wHZAfgC/wHOAesC/wHOAesC
+        /wHOAesC/wHOAesC/wHOAesC/wHOAesC/wHPAewC/wHZAfgC/wGwAcgB1gH/AVIBXAFhAf8BcQGAAYcB
+        /wHOAesB+gH/AdwB+gL/AdAB7QL/Ac4B6wL/AVsBZgFrAf8BygHkAfYB/wGIAZoBpQH/A5sF/wGEAgBt
+        /wGEAgAB/wGEAYYBhAX//wABAAT/AawBqwGqAf8BQAFJAU4B/wFNAWEBbgH/Ac8B7AH+Af8B0AHtAv8B
+        1AHyAv8BpQG6AcYB/wFEAU4BVwH/AYgBmgGlAf8B1gH0Av8B2QH1Av8BzgHrAv8BzgHrAv8BzgHrAv8B
+        zgHrAv8BzgHrAv8BzgHrAv8BzgHrAv8BzgHrAv8BzgHrAv8B1gH0Av8B0QHuAf0B/wF9AY0BlwH/AUoB
+        VQFcAf8BsAHIAdYB/wHUAfIC/wHUAfIC/wFdAWkBcAH/AVEBaAF8Af8BTQFhAW4B/wH3AfQB8gX/AYQC
+        AG3/AYQCAAH/AYQBhgGEBf//AAEAAfQC8wH/AacBpAGhAf8BAgFFAXoB/wEbAYoB2wH/AcMB5gH+Af8B
+        0gHtAv8B0gHwAv8BtgHPAeEB/wG7AdUB5QH/AdkB+AL/Ac8B7AL/Ac4B6wL/Ac4B6wL/Ac4B6wL/Ac4B
+        6wL/Ac4B6wL/Ac4B6wL/Ac4B6wL/Ac4B6wL/Ac4B6wL/Ac4B6wL/Ac4B6wL/AdAB7QL/AdkB+AL/AbUB
+        zgHeAf8BugHWAeoB/wHSAfAC/wHVAesB+wH/AVkBmgHIAf8BAAFtAckB/wEIAVQBiwH/AZQBkgGRBf8B
+        hAIAbf8BhAIAAf8BhAGGAYQF//8AAQABuQGyAa4B/wEAASYBRQH/AQABlgL/AQIBiwHsAf8BnQHWAf0B
+        /wHZAfIC/wHOAesC/wHZAfUC/wHUAfIC/wHOAesC/wHOAesC/wHPAewC/wHQAe0C/wHOAesC/wHOAesC
+        /wHOAesC/wHOAesC/wHOAesC/wHOAesC/wHOAesC/wHQAe0C/wHPAewC/wHOAesC/wHOAesC/wHWAfQC
+        /wHZAfUC/wHPAewC/wHSAe0C/wE/AaEB5wH/AQIBiwHsAf8BAAGRAfkB/wEIAScBPgX/AYQCAG3/AYQC
+        AAH/AYQBhgGEBf//AAEAAfoB9wH2Af8BVgFjAWsB/wEAAWoBuQH/AQABkQH5Af8BXwGxAekB/wHcAfEB
+        /gH/AcUB4wH4Af8BgQGsAcsB/wHMAegB+AH/AdkB8gL/AdkB8gL/AdUB7gH+Af8BwwHhAfYB/wHOAesC
+        /wHOAesC/wHOAesC/wHOAesC/wHOAesC/wHOAesC/wHKAegC/wHBAd0B8AH/AdwB8QH+Af8B2QHyAv8B
+        2QHyAv8BxQHhAfIB/wGKAbUB1QH/AdMB7AH9Af8BqgHeAf4B/wEQAYsB4gH/AQABlQH9Af8BAwFZAZoB
+        /wGBAYMBhAX/AYQCAG3/AYQCAAH/AYQBhgGEBf//AAEABP8B9QHtAegB/wEyAUsBXAH/AQABkQH5Af8B
+        CAFUAYsB/wF/AZ8BtAH/AdkB8gL/ATwBhQG5Af8BNAGMAc4B/wGLAbwB2wH/AYsBvAHbAf8BRQGSAcoB
+        /wFZAZoByAH/AdYB7wL/Ac4B6wL/Ac4B6wL/Ac4B6wL/Ac4B6wL/AdAB7QL/AcoB5AH2Af8BPAGFAbkB
+        /wFIAZsB2AH/AYsBvAHbAf8BgQG4AdsB/wEjAYUBzAH/AVkBmgHIAf8B3wH1Av8BWQGaAcgB/wEBAYYB
+        6gH/AQEBhgHqAf8BcgGCAYsB/wH+AfwB+wX/AYQCAG3/AYQCAAH/AYQBhgGEBf//AAEAAd0B2wHaAf8B
+        WwFmAWsB/wEDAVkBmgH/AQABmwH+Af8BAAFqAbkB/wEMAUMBagH/AaoB3gH+Af8BxwHiAfAB/wEjAYUB
+        zAH/AQABhAHiAf8BAAGEAeIB/wEjAYUBzAH/AbEB0QHmAf8B1QHwAv8BzgHrAv8BzgHrAv8BzgHrAv8B
+        zgHrAv8BzgHrAv8B1QHwAv8BngHJAeQB/wEYAXoBxAH/AQABhAHiAf8BAAF/AeAB/wFFAZIBygH/AdoB
+        7gH3Af8BsAHVAe8B/wEPATsBXAH/AQABkQH5Af8BAgF7AdEB/wF8AYIBhgH/AfgB9QHzBf8BhAIAbf8B
+        hAIAAf8BhAGGAYQF//8AAQABxgHAAbwB/wEAASYBRQH/AQABkQH5Af8BAQGdAv8BAAGRAfkB/wEDAVkB
+        mgH/ASkBnwHwAf8BUgGLAbMB/wFKAXsBnQH/AaAByQHhAf8BgQGsAcsB/wGxAdEB5gH/AdkB9QL/Ac8B
+        7AL/AdkB9QL/Ac8B7AL/Ac0B6gL/AdIB7gL/AdkB9QL/Ac4B6wL/AdUB8AL/AdIB7QL/AaAByQHhAf8B
+        ngHFAd0B/wGxAdEB5gH/AYIBwgHrAf8BLQF/AboB/wECAUUBegH/AQEBnQL/AQABkQH5Af8BAgFLAYUB
+        /wGBAYMBhAX/AYQCAG3/AYQCAAH/AYQBhgGEBf//AAEABP8BpwGkAaEB/wEWAUUBaQH/AQEBgQHbAf8B
+        BgGbAv8BNAGvAv8BAAGYAv8BAgFzAcoB/wEEATUBXAH/AXsBzAH8Af8BLQF/AboB/wElAU8BbAH/AcUB
+        6wH+Af8ByAHjAfYB/wGAAakBxQH/AcoB6AL/AdYB8gL/AboB1gHqAf8BhwGnAb0B/wHWAfIC/wHSAfAC
+        /wGHAacBvQH/Aa4B0QHqAf8B4gH6Av8BRAFhAXcB/wEAAW0ByQH/ATIBmAHdAf8BjQG5AdQB/wEsAbMC
+        /wEAAZgC/wEAAU0BkQH/AawBqwGqBf8BhAIAbf8BhAIAAf8BhAGGAYQF//8AAQAI/wHPAcYBvwH/AQ8B
+        OwFcAf8BAwGXAfoB/wGqAd4B/gH/AXsBzAH8Af8BVwG8Av8BUgGLAbMB/wEBAYYB6gH/AQABlQH9Af8B
+        BAE1AVwB/wFIAZsB2AH/AVcBqgHlAf8BAAEuAVcB/wFoAbMB5wH/Ad8B9QL/AVYBpAHbAf8BAAEuAVcB
+        /wGSAcoB8QH/AYIBwgHrAf8BAwEeATQB/wEjAYUBzAH/AVcBqgHlAf8BBAE1AVwB/wFZAbUB9QH/AaoB
+        3gH+Af8BpwHkAv8BFAF1AbgB/wEPATsBXAH/AW8BcAFyAf8B/gH8AfsF/wGEAgBt/wGEAgAB/wGEAYYB
+        hAX//wABAAT/Af4B/AH7Af8ChgGHAf8BEgFlAaAB/wFRAcAC/wGdAdYB/QH/AaIB2gL/AaoB3gH+Af8B
+        kwHaAv8BAwGZAv8BAQGdAv8BAwFZAZoB/wEAAWoBuQH/AQABmwH+Af8BAwE7AWYB/wECAXMBygH/AVYB
+        sgH0Af8BDgGUAfIB/wEDATsBZgH/AQIBewHRAf8BAgGLAewB/wEAASYBRQH/AQABhAHiAf8BAQGGAeoB
+        /wETAWwBqAH/AYMBygH7Af8BawHFAv8BigHUAv8BDAFDAWoB/wGjAZYBiw3/AYQCAG3/AYQCAAH/AYQB
+        hgGEBf//AAEABP8B+AH1AfMB/wEqATwBSQH/ARQBdQG4Af8BewHMAfwB/wGTAdoC/wFYAbwC/wEVAZ0C
+        /wEjAaUC/wEAAZYC/wEAAZYC/wEAAZUB/QH/AQABkwH9Af8BAAGaAv8BAgF7AdEB/wEBAYEB2wH/AQAB
+        kwH9Af8BAAGYAv8BAgF7AdEB/wECAYsB7AH/AQABlgL/AQIBewHRAf8BAAGRAfkB/wEAAZgC/wEAAZoC
+        /wEAAZYC/wFLAbsC/wGnAeQC/wEbAYoB2wH/ATMBQwFQAf8B+gH3AfYJ/wGEAgBt/wGEAgAB/wGEAYYB
+        hAX//wABAAj/AdUB0QHOAf8BSgFVAVwB/wECAUUBegH/AQIBewHRAf8BCAGdAv8BAAGTAf0B/wEAAZUB
+        /QH/AQABlgL/AQABlgL/AQABmAL/AQABmAL/AQABlgL/AQABmgL/AQABmAL/AQABlgL/AQABlgL/AQAB
+        mgL/AQABmAL/AQABlgL/AQABmgL/AQABmAL/AQABlgL/AQABmAL/AQEBgQHbAf8BIwGFAcwB/wETAWwB
+        qAH/AQIBRQF6Af8BiQGNAZAB/wH+AfwB+wn/AYQCAG3/AYQCAAH/AYQBhgGEBf//AAEADP8B/gH8AfsB
+        /wGzAa0BqQH/AYkBjQGQAf8BEgFlAaAB/wEAAZgC/wEAAZgC/wEAAZgC/wEAAZgC/wEAAZsB/gH/AQAB
+        mAL/AQABlgL/AQABlgL/AQABlgL/AQABlgL/AQABlgL/AQABlgL/AQABlgL/AQABlgL/AQABlgL/AQAB
+        lgL/AQABmAL/AQABmAL/AQEBXQGgAf8BAwEeATQB/wJ+AX0B/wHPAcYBvxH/AYQCAAH/AcYBxwHGAf8B
+        xgHHAcYB/wHGAccBxgH/AcYBxwHGAf8BxgHHAcYB/wHGAccBxgH/AcYBxwHGAf8BxgHHAcYB/wHGAccB
+        xgH/AcYBxwHGAf8BxgHHAcYB/wHGAccBxgH/AcYBxwHGAf8BxgHHAcYB/wHGAccBxgH/AcYBxwHGAf8B
+        xgHHAcYB/wHGAccBxgH/AcYBxwHGAf8BxgHHAcYB/wHGAccBxgH/AcYBxwHGAf8BxgHHAcYB/wHGAccB
+        xgH/AcYBxwHGAf8BxgHHAcYB/wHGAccBxgH/AYQCAAH/AYQBhgGEBf//AAEAFP8BdwJ4Af8BAgFLAYUB
+        /wEAAZEB8gH/AQABmAL/AQABlgL/AQABjQHxAf8BAgFzAcoB/wEAAYQB4gH/AQABmAL/AQABlgL/AQAB
+        lgL/AQABmAL/AQABmAL/AQABlgL/AQABlgL/AQABlgL/AQABmAL/AQABmwH+Af8BAAGVAf0B/wEAAZoC
+        /wEAAaIC/wEBAWIBqgH/AZQBkgGRFf8BhAIAAf8BhAIAAf8BhAIAAf8BhAIAAf8BhAIAAf8BhAIAAf8B
+        hAIAAf8BhAIAAf8BhAIAAf8BhAIAAf8BhAIAAf8BhAIAAf8BhAIAAf8BhAIAAf8BhAIAAf8BhAIAAf8B
+        hAIAAf8BhAIAAf8BhAIAAf8BhAIAAf8BhAIAAf8BhAIAAf8BhAIAAf8BhAIAAf8BhAIAAf8BhAIAAf8B
+        hAIAAf8BhAIAAf8BhAIAAf8BhAGGAYQF//8AAQAR/wH+Af0B/wObAf8BTQFhAW4B/wElAU8BbAH/ARAB
+        SwF2Af8BEAFLAXYB/wEyAUsBXAH/AT0BRAFHAf8BAQFdAaAB/wEAAaIC/wEAAZsB/gH/AQABmwH+Af8B
+        AgGLAewB/wECAYsB7AH/AQABmAL/AQABmAL/AQEBnQL/AQABlgL/AQABTQGRAf8BDwE7AVwB/wEIAVQB
+        iwH/AQEBYgGqAf8BAAFNAZEB/wFEAU4BVwH/AfoB9wH2Ef8BhAIAAf8BhAIAAv8CAAH/AYQCAAL/AgAB
+        /wGEAgAC/wIAAf8BhAIAAv8CAAH/AYQCAAL/AgAB/wGEAgAC/wIAAf8BhAIAAv8CAAH/AYQCAAL/AgAB
+        /wGEAgAC/wIAAf8BhAIAA/8BAAL/AgAD/wEAAv8CAAP/AQAB/wGEAgAB/wIAAv8BhAGGAYQB/wGEAgAB
+        /wGEAYYBhAX//wABABn/Af4B/QH/AfUB7QHoAf8B5wHeAdkB/wHnAd4B2QH/AfcB9AHyAf8BZgFpAWcB
+        /wEAAU0BkQH/AQABagG5Af8BAQFdAaAB/wECAUsBhQH/ASoBPAFJAf8BAgFLAYUB/wEAAaIC/wEAAZgC
+        /wEAAWoBuQH/ARYBRQFpAf8BUQFMAUcB/wGUAZIBkQH/AcoByAHGAf8BlAGSAZEB/wGnAaQBoQH/AegB
+        5wHmFf8BhAIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8C
+        AAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAf8B
+        hAIACf//AAEALP8DsAH/AXwBggGGAf8BgQGDAYQB/wGUAZIBkQH/AcYBwAG8Af8BrwGnAaAB/wECAUsB
+        hQH/AQABagG5Af8BDAFDAWoB/wFvAXABcgH/AdUB0QHOAf8BtQK0Af8BtQK0Kf8BhAIAAf8BhAIAAf8B
+        hAIAAf8BhAIAAf8BhAIAAf8BhAIAAf8BhAIAAf8BhAIAAf8BhAIAAf8BhAIAAf8BhAIAAf8BhAIAAf8B
+        hAIAAf8BhAIAAf8BhAIAAf8BhAIAAf8BhAIAAf8BhAIAAf8BhAIAAf8BhAIAAf8BhAIAAf8BhAIAAf8B
+        hAIAAf8BhAIAAf8BhAIAAf8BhAIAAf8BhAIADf//AAEAQP8BvQK/Af8BSgFVAVwB/wGBAYMBhAH/AdMB
+        ywHHCf8BbwFwAXIB/wHdAdsB2qH//wABAFT/AfcB9gH1Af8BygHIAcal//8AAQD//wH//wABAAFCAU0B
+        PgcAAT4DAAEoAwABgAMAASADAAEBAQABAQYAAQIWAAP//wD/AAMACw==
+</value>
   </data>
 </root>
Index: /trunk/MacFaceFloat/MainForm.cs
===================================================================
--- /trunk/MacFaceFloat/MainForm.cs	(revision 20)
+++ /trunk/MacFaceFloat/MainForm.cs	(revision 30)
@@ -21,4 +21,5 @@
 	public class MainForm : Misuzilla.Windows.Forms.AlphaForm
 	{
+		private System.Windows.Forms.NotifyIcon notifyIcon;
 		private System.Windows.Forms.ContextMenu contextMenu;
 		private System.Windows.Forms.MenuItem menuItemPatternSelect;
@@ -30,9 +31,12 @@
 		private FaceDef _currentFaceDef;
 		private Configuration _config;
-		
-		Int32 prevUsage;
-		PerformanceCounter cpuCount;
-		PerformanceCounter pageoutCount;
-		PerformanceCounter pageinCount;
+		private float _patternSize;
+
+		private int prevPattern;
+		private FaceDef.PatternSuite prevSuite;
+		private int prevMarkers;
+
+		private CPUUsageCounter cpuCounter;
+		private MemoryUsageCounter memoryCounter;
 
 		// RXgN^
@@ -43,18 +47,10 @@
 			this.MoveAtFormDrag = true;
 
-			prevUsage = -10;
-
-			cpuCount = new PerformanceCounter();
-			cpuCount.CategoryName = "Processor";
-			cpuCount.CounterName  = "% Processor Time";
-			cpuCount.InstanceName = "_Total";
-
-			pageoutCount = new PerformanceCounter();
-			pageoutCount.CategoryName = "Memory";
-			pageoutCount.CounterName  = "Pages Output/sec";
-
-			pageinCount = new PerformanceCounter();
-			pageinCount.CategoryName = "Memory";
-			pageinCount.CounterName  = "Pages Input/sec";
+			prevPattern = -1;
+			prevSuite   = FaceDef.PatternSuite.Normal;
+			prevMarkers = -1;
+
+			cpuCounter = new CPUUsageCounter();
+			memoryCounter = new MemoryUsageCounter();
 
 			_updateTimer = new System.Windows.Forms.Timer();
@@ -65,8 +61,18 @@
 
 		void InitializeComponent() {
+			this.notifyIcon = new System.Windows.Forms.NotifyIcon();
 			this.menuItemPatternSelect = new System.Windows.Forms.MenuItem();
 			this.menuItemConfigure = new System.Windows.Forms.MenuItem();
 			this.menuItemExit = new System.Windows.Forms.MenuItem();
 			this.contextMenu = new System.Windows.Forms.ContextMenu();
+
+			//
+			// notifyIcon
+			//
+			this.notifyIcon.Text = "MacFace";
+			this.notifyIcon.Icon = this.Icon;
+			this.notifyIcon.Visible = true;
+			this.notifyIcon.ContextMenu = this.contextMenu;
+
 			// 
 			// menuItemPatternSelect
@@ -189,5 +195,7 @@
 			_currentFaceDef = newFaceDef;
 			_facePath = _currentFaceDef.Path;
-			prevUsage = -10;
+			notifyIcon.Text = "MacFace - " + _currentFaceDef.Title;
+			prevPattern = -1;
+			prevMarkers = -1;
 
 			// XVÄJ
@@ -199,30 +207,41 @@
 		public void CountProcessorUsage(object sender, EventArgs e)
 		{
-			int usage = (int)cpuCount.NextValue();
-			int pagein = (int)pageinCount.NextValue();
-			int pageout = (int)pageoutCount.NextValue();
-
-			usage /= 10;
-			if (usage > 10) {
-				usage = 10;
-			} else if (usage < 0) {
-				usage = 0;
+			CPUUsage cpuUsage = cpuCounter.CurrentUsage();
+			MemoryUsage memUsage = memoryCounter.CurrentUsage();
+
+			int pattern = cpuUsage.Active / 10;
+
+			FaceDef.PatternSuite suite = FaceDef.PatternSuite.Normal;
+			if (memUsage.Available < (10 * 1024 *1024)) 
+			{
+				suite = FaceDef.PatternSuite.MemoryInsufficient;
+			} 
+			else if (memUsage.Available < (30 * 1024 *1024)) 
+			{
+				suite = FaceDef.PatternSuite.MemoryDecline;
 			}
 
 			int markers = FaceDef.MarkerNone;
-			if (pagein > 0) markers += FaceDef.MarkerPageIn;
-			if (pageout > 0) markers += FaceDef.MarkerPageOut;
-
-			if (prevUsage != usage) 
+			if (memUsage.Pagein > 0) markers += FaceDef.MarkerPageIn;
+			if (memUsage.Pageout > 0) markers += FaceDef.MarkerPageOut;
+
+			if (prevPattern != pattern || prevSuite != suite || prevMarkers != markers) 
 			{
 				Graphics g = this.Graphics;
 				g.Clear(Color.FromArgb(0, 0, 0, 0));
-				_currentFaceDef.DrawPatternImage(g, FaceDef.PatternSuite.Normal, usage, markers);
+				_currentFaceDef.DrawPatternImage(g, suite, pattern, markers, _patternSize);
 				this.Update();
 			}
 				
-			prevUsage = usage;			
-		}
-		
+			prevPattern = pattern;
+			prevSuite   = suite;
+			prevMarkers = markers;
+		}
+
+		public float PatternSize
+		{
+			get { return _patternSize; }
+			set { _patternSize = value; }
+		}
 
 		//
@@ -260,4 +279,6 @@
 		private void MainForm_Closing(object sender, CancelEventArgs e)
 		{
+			notifyIcon.Visible = false;
+
 			// Û¶
 			_config.Opacity = (int) (this.Opacity * 100);
@@ -297,4 +318,5 @@
 		{
 			this.Opacity = (float)_config.Opacity / 100;
+			this.PatternSize = (float)_config.PatternSize / 100;
 			this.Location = _config.Location;
 			this.TransparentMouseMessage = _config.TransparentMouseMessage;
Index: /trunk/MacFaceForWin.sln
===================================================================
--- /trunk/MacFaceForWin.sln	(revision 20)
+++ /trunk/MacFaceForWin.sln	(revision 30)
@@ -1,6 +1,5 @@
-Microsoft Visual Studio Solution File, Format Version 8.00
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C# Express 2005
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MacFaceLibrary", "MacFaceLibrary\MacFaceLibrary.csproj", "{23267F41-38FE-41F6-BF08-2D8940A1E024}"
-	ProjectSection(ProjectDependencies) = postProject
-	EndProjectSection
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MacFaceFloat", "MacFaceFloat\MacFaceFloat.csproj", "{60DE0E19-7B98-41E8-8001-A8C7A75AF08E}"
@@ -10,29 +9,26 @@
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MacFaceTest", "MacFaceTest\MacFaceTest.csproj", "{40CD5CB5-835A-4DDD-928D-AEFE64EFAA8E}"
-	ProjectSection(ProjectDependencies) = postProject
-	EndProjectSection
 EndProject
 Global
-	GlobalSection(SolutionConfiguration) = preSolution
-		Debug = Debug
-		Release = Release
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
 	EndGlobalSection
-	GlobalSection(ProjectConfiguration) = postSolution
-		{23267F41-38FE-41F6-BF08-2D8940A1E024}.Debug.ActiveCfg = Debug|.NET
-		{23267F41-38FE-41F6-BF08-2D8940A1E024}.Debug.Build.0 = Debug|.NET
-		{23267F41-38FE-41F6-BF08-2D8940A1E024}.Release.ActiveCfg = Release|.NET
-		{23267F41-38FE-41F6-BF08-2D8940A1E024}.Release.Build.0 = Release|.NET
-		{60DE0E19-7B98-41E8-8001-A8C7A75AF08E}.Debug.ActiveCfg = Debug|.NET
-		{60DE0E19-7B98-41E8-8001-A8C7A75AF08E}.Debug.Build.0 = Debug|.NET
-		{60DE0E19-7B98-41E8-8001-A8C7A75AF08E}.Release.ActiveCfg = Release|.NET
-		{60DE0E19-7B98-41E8-8001-A8C7A75AF08E}.Release.Build.0 = Release|.NET
-		{40CD5CB5-835A-4DDD-928D-AEFE64EFAA8E}.Debug.ActiveCfg = Debug|.NET
-		{40CD5CB5-835A-4DDD-928D-AEFE64EFAA8E}.Debug.Build.0 = Debug|.NET
-		{40CD5CB5-835A-4DDD-928D-AEFE64EFAA8E}.Release.ActiveCfg = Release|.NET
-		{40CD5CB5-835A-4DDD-928D-AEFE64EFAA8E}.Release.Build.0 = Release|.NET
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{23267F41-38FE-41F6-BF08-2D8940A1E024}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{23267F41-38FE-41F6-BF08-2D8940A1E024}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{23267F41-38FE-41F6-BF08-2D8940A1E024}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{23267F41-38FE-41F6-BF08-2D8940A1E024}.Release|Any CPU.Build.0 = Release|Any CPU
+		{60DE0E19-7B98-41E8-8001-A8C7A75AF08E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{60DE0E19-7B98-41E8-8001-A8C7A75AF08E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{60DE0E19-7B98-41E8-8001-A8C7A75AF08E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{60DE0E19-7B98-41E8-8001-A8C7A75AF08E}.Release|Any CPU.Build.0 = Release|Any CPU
+		{40CD5CB5-835A-4DDD-928D-AEFE64EFAA8E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{40CD5CB5-835A-4DDD-928D-AEFE64EFAA8E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{40CD5CB5-835A-4DDD-928D-AEFE64EFAA8E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{40CD5CB5-835A-4DDD-928D-AEFE64EFAA8E}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
-	GlobalSection(ExtensibilityGlobals) = postSolution
-	EndGlobalSection
-	GlobalSection(ExtensibilityAddIns) = postSolution
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
 	EndGlobalSection
 EndGlobal
Index: /trunk/MacFaceLibrary/CPUUsage.cs
===================================================================
--- /trunk/MacFaceLibrary/CPUUsage.cs	(revision 30)
+++ /trunk/MacFaceLibrary/CPUUsage.cs	(revision 30)
@@ -0,0 +1,44 @@
+/*
+ * $Id$
+ */
+using System;
+
+namespace MacFace
+{
+	/// <summary>
+	/// CPUUsage ÌTvÌà¾Å·B
+	/// </summary>
+	public class CPUUsage
+	{
+		private int user;
+		private int system;
+		private int idle;
+
+		public CPUUsage(int user, int system, int idle)
+		{
+			this.user = user;
+			this.system = system;
+			this.idle = idle;
+		}
+
+		public int User
+		{
+			get { return user; }
+		}
+
+		public int System
+		{
+			get { return user; }
+		}
+
+		public int Active
+		{
+			get { return user + system; }
+		}
+
+		public int Idle
+		{
+			get { return idle; }
+		}
+	}
+}
Index: /trunk/MacFaceLibrary/CPUUsageCounter.cs
===================================================================
--- /trunk/MacFaceLibrary/CPUUsageCounter.cs	(revision 30)
+++ /trunk/MacFaceLibrary/CPUUsageCounter.cs	(revision 30)
@@ -0,0 +1,46 @@
+/*
+ * $Id$
+ */
+using System;
+using System.Diagnostics;
+
+namespace MacFace
+{
+	/// <summary>
+	/// HostStatistics ÌTvÌà¾Å·B
+	/// </summary>
+	public class CPUUsageCounter
+	{
+		private PerformanceCounter userCounter;
+		private PerformanceCounter systemCounter;
+		private PerformanceCounter idleCounter;
+
+		public CPUUsageCounter()
+		{
+			userCounter = new PerformanceCounter();
+			userCounter.CategoryName = "Processor";
+			userCounter.CounterName = "% User Time";
+			userCounter.InstanceName = "_Total";
+
+			systemCounter = new PerformanceCounter();
+			systemCounter.CategoryName = "Processor";
+			systemCounter.CounterName = "% Privileged Time";
+			systemCounter.InstanceName = "_Total";
+
+			idleCounter = new PerformanceCounter();
+			idleCounter.CategoryName = "Processor";
+			idleCounter.CounterName = "% Idle Time";
+			idleCounter.InstanceName = "_Total";
+		}
+
+		public CPUUsage CurrentUsage()
+		{
+			int user   = (int)userCounter.NextValue();
+			int system = (int)systemCounter.NextValue();
+			int idle   = (int)idleCounter.NextValue();
+
+			return new CPUUsage(user, system, idle);
+		}
+
+	}
+}
Index: /trunk/MacFaceLibrary/FaceDef.cs
===================================================================
--- /trunk/MacFaceLibrary/FaceDef.cs	(revision 20)
+++ /trunk/MacFaceLibrary/FaceDef.cs	(revision 30)
@@ -18,4 +18,5 @@
 	public class FaceDef
 	{
+		// p^[XC[gID
 		public enum PatternSuite
 		{
@@ -25,14 +26,32 @@
 		}
 
+		public const int PatternCount = 11;
+		public const int ImageWidth   = 128;
+		public const int ImageHeight  = 128;
+
+		// }[J[
 		public const int MarkerNone    = 0x00;
 		public const int MarkerPageIn  = 0x01;
 		public const int MarkerPageOut = 0x02;
 
+		// çp^[è`vpeBXgt@C¼
 		private const string FaceDefName = "faceDef.plist";
-		private const int PatternCols = 11;
-		private const int PatternRows = 3;
-		private const int ImageWidth = 128;
-		private const int ImageHeight = 128;
-
+
+		// çp^[è`ÌL[¼Ì
+		private const string KeyInfoTitle       = "title";
+		private const string KeyInfoAuthor      = "author";
+		private const string KeyInfoVersion     = "version";
+		private const string KeyInfoSiteURL     = "web site";
+		
+		private const string KeyDefParts        = "parts";
+		private const string KeyDefPatterns     = "pattern";
+		private const string KeyDefMarkers      = "markers";
+		private const string KeyDefTitlePattern = "title pattern";
+
+		private const string KeyPartImage       = "filename";
+		private const string KeyPartPosX        = "pos x";
+		private const string KeyPartPosY        = "pos y";
+
+		//
 		private string _path;
 		private string _title;
@@ -58,13 +77,13 @@
 			// îñ
 			_path = path;
-			_title = (def.ContainsKey("title") ? def["title"] as string : String.Empty);
-			_author = (def.ContainsKey("author") ? def["author"] as string : String.Empty);
-			_version = (def.ContainsKey("version") ? def["version"] as string : String.Empty);
-
-			if (def.ContainsKey("web site"))
+			_title = ReadInfoString(def, KeyInfoTitle);
+			_author = ReadInfoString(def, KeyInfoAuthor);
+			_version = ReadInfoString(def, KeyInfoVersion);
+
+			if (def.ContainsKey(KeyInfoSiteURL))
 			{
 				try 
 				{
-					_webSite = new Uri(def["web site"] as string);
+					_webSite = new Uri(def[KeyInfoSiteURL] as string);
 				} 
 				catch (UriFormatException) {}
@@ -73,5 +92,5 @@
 
 			// p[cÌÇÝÝ
-			ArrayList partDefList = (ArrayList)def["parts"];
+			ArrayList partDefList = (ArrayList)def[KeyDefParts];
 			if (partDefList == null) 
 			{
@@ -82,33 +101,19 @@
 			for (int i = 0; i < partDefList.Count; i++)
 			{
-				Hashtable partDef = (Hashtable)partDefList[i];
-				string filename = (String)partDef["filename"];
-				int x = (int)partDef["pos x"];
-				int y = (int)partDef["pos y"];
-				_parts[i] = new Part(System.IO.Path.Combine(path, filename), x, y);
-			}
+				_parts[i] = ReadPart(path, (Hashtable)partDefList[i]);
+            }
 
 			// p^[ÌÇÝÝ
-			ArrayList suiteDefList = (ArrayList)def["pattern"];
-			_patternSuites = new Part[PatternRows][][];
-			for (int i = 0; i < PatternRows; i++) 
-			{
-				ArrayList suiteDef = (ArrayList)suiteDefList[i];
-				Part[][] suite = new Part[PatternCols][];
-				for (int j = 0; j < PatternCols; j++) 
-				{
-					ArrayList patternDef = (ArrayList)suiteDef[j];
-					Part[] pattern = new Part[patternDef.Count];
-					for (int k = 0; k < patternDef.Count; k++) 
-					{
-						pattern[k] = _parts[(int)patternDef[k]];
-					}
-					suite[j] = pattern;
-				}
-				_patternSuites[i] = suite;
+            int suiteCount = PatternSuite.GetNames(typeof(PatternSuite)).Length;
+            ;
+            ArrayList suiteDefList = (ArrayList)def[KeyDefPatterns];
+            _patternSuites = new Part[suiteCount][][];
+            for (int i = 0; i < suiteCount; i++)
+            {
+				_patternSuites[i] = ReadPatternSuite(_parts, (ArrayList)suiteDefList[i]);
 			}
 
 			// }[J[ÌÇÝÝ
-			ArrayList markerDefList = (ArrayList)def["markers"];
+			ArrayList markerDefList = (ArrayList)def[KeyDefMarkers];
 			_markers = new Part[markerDefList.Count];
 			for (int i = 0; i < markerDefList.Count; i++)
@@ -118,51 +123,113 @@
 
 			// ^Cgp^[ÌÇÝÝ
-			ArrayList titlePatternDef = (ArrayList)def["title pattern"];
-			_titlePattern = new Part[titlePatternDef.Count];
-			for (int i = 0; i < titlePatternDef.Count; i++) 
-			{
-				_titlePattern[i] = _parts[(int)titlePatternDef[i]];
-			}
-		}
-
-		public Uri WebSite
-		{
+			_titlePattern = ReadPattern(_parts, (ArrayList)def[KeyDefTitlePattern]);
+		}
+
+		private string ReadInfoString(Hashtable def, string key)
+		{
+			string str = def[key] as string;
+			return str != null ? str : "";
+		}
+
+		private Part ReadPart(string path, Hashtable partDef)
+		{
+			string filename = (String)partDef[KeyPartImage];
+			string imgPath = System.IO.Path.Combine(path, filename);
+			Image img = Image.FromFile(imgPath);
+
+			int x = (int)partDef[KeyPartPosX];
+			int y = ImageHeight - (int)partDef[KeyPartPosY] - img.Height;
+
+			return new Part(imgPath, img, x, y);
+		}
+
+		private Part[] ReadPattern(Part[] parts, ArrayList patternDef)
+		{
+			Part[] pattern = new Part[patternDef.Count];
+			for (int i = 0; i < patternDef.Count; i++) 
+			{
+				pattern[i] = _parts[(int)patternDef[i]];
+			}
+			return pattern;
+		}
+
+		private Part[][] ReadPatternSuite(Part[] parts, ArrayList suiteDef)
+		{
+			Part[][] suite = new Part[PatternCount][];
+			for (int i = 0; i < PatternCount; i++) 
+			{
+				suite[i] = ReadPattern(_parts, (ArrayList)suiteDef[i]);
+			}
+			return suite;
+		}
+
+
+        public string Path
+        {
+            get { return _path; }
+        }
+
+        public string Title
+        {
+            get { return _title; }
+        }
+
+        public string Author
+        {
+            get { return _author; }
+        }
+
+        public string Version
+        {
+            get { return _version; }
+        }
+
+        public Uri WebSite
+        {
 			get { return _webSite; }
 		}
 
-		public string /*Version*/ Version
-		{
-			get { return _version; }
-		}
-
-		public string Author
-		{
-			get { return _author; }
-		}
-
-		public string Title
-		{
-			get { return _title; }
-		}
-
-		public string Path
-		{
-			get { return _path; }
-		}
-
-		public Image TitleImage()
-		{
-			Bitmap image = new Bitmap(ImageWidth, ImageHeight);
-			Graphics g = Graphics.FromImage(image);
-
-			foreach (Part part in _titlePattern)
+		public Image TitleImage
+		{
+			get 
+			{
+				Bitmap image = new Bitmap(ImageWidth, ImageHeight);
+				Graphics g = Graphics.FromImage(image);
+
+				foreach (Part part in _titlePattern)
+				{
+					g.DrawImage(part.Image,
+						part.Point.X, part.Point.Y,
+						part.Image.Size.Width, part.Image.Size.Height);
+				}
+
+				g.Dispose();
+				return image;
+			}
+		}
+
+		public void DrawPatternImage(Graphics g, PatternSuite suite, int no, int markers, float rate)
+		{
+			Part[] pattern = _patternSuites[(int)suite][no];
+			foreach (Part part in pattern)
 			{
 				g.DrawImage(part.Image,
-					part.Point.X, part.Point.Y,
-					part.Image.Size.Width, part.Image.Size.Height);
-			}
-
-			g.Dispose();
-			return image;
+					part.Point.X * rate, part.Point.Y * rate,
+					part.Image.Size.Width * rate, part.Image.Size.Height * rate);
+			}
+
+			if (markers != 0)
+			{
+				for (int i = 0; i < 8; i++)
+				{
+					if ((markers & (1 << i)) != 0)
+					{
+						Part part = _markers[i];
+						g.DrawImage(part.Image,
+							part.Point.X * rate, part.Point.Y * rate,
+							part.Image.Size.Width * rate, part.Image.Size.Height * rate);
+					}
+				}
+			}
 		}
 
@@ -206,417 +273,2 @@
 	}
 }
-
-
-/*
-#import <Cocoa/Cocoa.h>
-
-//
-#define FACE_ROWMAX	3
-#define FACE_COLMAX	11
-#define FACE_PATMAX	8
-#define FACE_IMGW	128
-#define FACE_IMGH	128
-#define FACE_IMGSIZE	(NSMakeSize(128,128))
-
-// }[J[rbg}XN
-#define FDMARKER_PAGEIN		0x0001
-#define FDMARKER_PAGEOUT	0x0002
-
-//
-#define FACE_INFO_TITLE		@"title"
-#define FACE_INFO_AUTHOR	@"author"
-#define FACE_INFO_VERSION	@"version"
-#define FACE_INFO_SITE_URL	@"web site"
-
-#define FACE_INFO_PARTS		@"parts"
-#define FACE_INFO_PATTERN	@"pattern"
-#define FACE_INFO_MARKER	@"markers"
-#define FACE_INFO_TITLE_PATTERN	@"title pattern"
-#define FACE_INFO_MARK_PGOUT	@"pagein pattern"
-#define FACE_INFO_MARK_PGIN	@"pageout pattern"
-
-#define FACE_PART_IMAGE		@"filename"
-#define FACE_PART_POSX		@"pos x"
-#define FACE_PART_POSY		@"pos y"
-
-typedef struct {
-    NSString *filename;
-    NSImage *image;
-    NSPoint pos;
-} PartDef;
-
-typedef struct {
-    unsigned count;
-    int parts[FACE_PATMAX];
-} PatternDef;
-
-
-@interface FaceDef : NSObject
-{
-    NSString *packagePath;
-    NSDictionary *definition;
-    int partCount;
-    PartDef *parts;
-    PatternDef patterns[FACE_ROWMAX][FACE_COLMAX];
-    int markers[8];
-    PatternDef titlePattern;
-}
-
-+ (NSDictionary*)infoAtPath:(NSString*)path;
-
-+ (id)faceDefWithContentOfFile:(NSString*)path;
-
-- (id)initWithContentOfFile:(NSString*)path;
-
-- (NSString*)path;
-
-- (NSString*)title;
-- (NSString*)author;
-- (NSString*)version;
-- (NSString*)siteURL;
-
-- (NSImage*)titleImage;
-
-- (int)partCount;
-- (const PartDef*)partOfIndex:(int)index;
-- (const PatternDef*)patternOfRow:(int)row col:(int)col;
-- (int)patternCountOfRow:(int)row col:(int)col;
-- (int)patternNoOfRow:(int)row col:(int)col index:(int)index;
-
-- (NSImage*)imageOfRow:(int)row col:(int)col marker:(int)marker;
-
-- (void)drawImageOfRow:(int)row col:(int)col marker:(int)marker atPoint:(NSPoint)pt;
-- (void)drawPart:(PartDef*)part atPoint:(NSPoint)point;
-
-- (void)dumpPattern:(NSString*)path;
-
-@end
-
-@implementation FaceDef
-
-+ (NSDictionary*)infoAtPath:(NSString*)path
-{
-    NSDictionary *info;
-
-    info = [NSDictionary dictionaryWithContentsOfFile:
-        [path stringByAppendingPathComponent:@"faceDef.plist"]];
-
-    return info;
-}
-
-+ (id)faceDefWithContentOfFile:(NSString*)path
-{
-    return [[[self alloc] initWithContentOfFile:path] autorelease];
-}
-
-- (id)initWithContentOfFile:(NSString*)path
-{
-    NSDictionary *partDefDict;
-    NSArray *partArray,*patternArray,*colArray,*elemArray;
-    NSEnumerator *enumerator;
-    NSString *imagePath;
-    NSNumber *value;
-    int i,count;
-    int row,col,no;
-    int maxPartNo;
-
-    [super init];
-
-    NS_DURING
-        definition = [FaceDef infoAtPath:path];
-
-        if (definition == nil) {
-            [NSException raise:@"FaceDefInfoLoadException" format:@"failuer loading faceDef.plist"];
-        }
-
-        [definition retain];
-
-        packagePath = [path retain];
-
-        // p[cè`ÌÇÝÝ
-        partArray = [definition objectForKey:FACE_INFO_PARTS];
-
-        if ([partArray isMemberOfClass:[NSArray class]]) {
-            [NSException raise:@"FaceDefPartListLoadException" format:@"failed in reading part list."];
-        }
-
-        parts = calloc([partArray count],sizeof(PartDef));
-        count = [partArray count];
-
-        for (partCount = 0; partCount < count; partCount++){
-            partDefDict = [partArray objectAtIndex:partCount];
-            parts[partCount].filename = [[partDefDict objectForKey:FACE_PART_IMAGE] retain];
-            parts[partCount].pos.x = [(NSNumber*)[partDefDict objectForKey:FACE_PART_POSX] floatValue];
-            parts[partCount].pos.y = [(NSNumber*)[partDefDict objectForKey:FACE_PART_POSY] floatValue];
-            imagePath = [path stringByAppendingPathComponent:parts[partCount].filename];
-            parts[partCount].image = [[NSImage alloc]initWithContentsOfFile:imagePath];
-
-            if (parts[partCount].image == nil){ // æªÇÝßÈ©Á½
-                [NSException raise:@"FaceDefPartLoadException"
-                    format:@"failed in loading of image '%@'",parts[partCount].filename];
-            }
-        }
-
-        maxPartNo = count - 1;
-
-        // p^[è`ÌÇÝÝ
-        patternArray = [definition objectForKey:FACE_INFO_PATTERN];
-
-        for (row = 0; row < FACE_ROWMAX; row++){
-            colArray = [patternArray objectAtIndex:row];
-
-            if ([colArray count] != FACE_COLMAX) {
-                [NSException raise:@"FaceDefPatternLoadException"
-                    format:@"number of pattern columns is not 10 at row %d",row];
-            }
-
-            for (col = 0; col < FACE_COLMAX; col++){
-                elemArray = [colArray objectAtIndex:col];
-                enumerator = [[colArray objectAtIndex:col] objectEnumerator];
-                for (i = 0; i <= FACE_PATMAX && (value = [enumerator nextObject]) != nil; i++){
-                    no = [value intValue];
-                    patterns[row][col].parts[i] = no;
-                    if (0 > no || no > maxPartNo) { // p[cÔ`FbN
-                        [NSException raise:@"FaceDefPatternLoadException"
-                            format:@"illigal part no %d in patterns[%d,%d,%d]",no,row,col,i];
-                    }
-                }
-                patterns[row][col].count = i;
-            }
-        }
-
-        // }[J[XgÌÇÝÝ
-        enumerator = [[definition objectForKey:FACE_INFO_MARKER] objectEnumerator];
-        for (i = 0; i < 8 && (value = [enumerator nextObject]) != nil; i++){
-            markers[i] = [value intValue];
-        }
-
-        // ã\æp^[ÌÇÝÝ
-        enumerator = [[definition objectForKey:FACE_INFO_TITLE_PATTERN] objectEnumerator];
-        for (i = 0; i <= FACE_PATMAX && (value = [enumerator nextObject]) != nil; i++){
-            no = [value intValue];
-            titlePattern.parts[i] = no;
-            if (0 > no || no > maxPartNo) { // p[cÔ`FbN
-                [NSException raise:@"FaceDefPatternLoadException"
-                    format:@"illigal part no %d in title pattern",no];
-            }
-        }
-        titlePattern.count = i;
-    NS_HANDLER
-        NSLog(@"FaceDef load error: %@",localException);
-        [self dealloc];
-        self = nil;
-    NS_ENDHANDLER
-
-    return self;
-}
-
-- (void)dealloc
-{
-    int i;
-
-    [packagePath release];
-    [definition release];
-
-    if (parts != nil) {
-        for (i = 0; i < partCount; i++){
-            [parts[i].filename release];
-            [parts[i].image release];
-        }
-        free(parts);
-    }
-}
-
--(NSString*)path
-{
-    return packagePath;
-}
-
--(NSString*)title
-{
-    NSString *str;
-    str = [definition objectForKey:@"title"];
-    return  (str != nil) ? str : @"";
-}
-
--(NSString*)author
-{
-    NSString *str;
-    str = [definition objectForKey:@"author"];
-    return  (str != nil) ? str : @"";
-}
-
--(NSString*)version
-{
-    NSString *str;
-    str = [definition objectForKey:@"version"];
-    return  (str != nil) ? str : @"";
-}
-
-- (NSString*)siteURL
-{
-    NSString *str;
-    str = [definition objectForKey:@"web site"];
-    return  (str != nil) ? str : @"";
-}
-
-- (NSImage*)titleImage
-{
-    NSImage *image;
-    int i;
-
-    image = [[NSImage alloc] initWithSize:FACE_IMGSIZE];
-    [image lockFocus];
-
-    if (titlePattern.count > 0) {
-        for (i=0; i<titlePattern.count; i++) {
-            [self drawPart:&parts[titlePattern.parts[i]] atPoint:NSMakePoint(0,0)];
-        }
-    } else {
-        [self drawImageOfRow:0 col:FACE_COLMAX marker:0 atPoint:NSMakePoint(0,0)];
-    }
-
-    [image unlockFocus];
-    return [image autorelease];
-}
-
-- (int)partCount
-{
-    return partCount;
-}
-
-- (const PartDef*)partOfIndex:(int)index
-{
-    if (0 <= index && index < partCount) return &parts[index];
-    else return nil;
-}
-
-- (const PatternDef*)patternOfRow:(int)row col:(int)col
-{
-    if (0 <= row && row < FACE_ROWMAX
-     && 0 <= col && col < FACE_COLMAX) return &patterns[row][col];
-    else return nil;
-}
-
-- (int)patternCountOfRow:(int)row col:(int)col
-{
-    if (0 <= row && row < FACE_ROWMAX
-     && 0 <= col && col < FACE_COLMAX) return patterns[row][col].count;
-    else return -1;
-}
-
-- (int)patternNoOfRow:(int)row col:(int)col index:(int)index
-{
-    if (0 <= row && row < FACE_ROWMAX
-     && 0 <= col && col < FACE_COLMAX
-     && 0 <= index && index < patterns[row][col].count) return patterns[row][col].parts[index];
-    else return -1;
-}
-
-- (NSImage*)imageOfRow:(int)row col:(int)col marker:(int)marker
-{
-    NSImage *image;
-    image = [[NSImage alloc] initWithSize:FACE_IMGSIZE];
-    [image lockFocus];
-    [self drawImageOfRow:row col:col marker:marker atPoint:NSMakePoint(0,0)];
-    [image unlockFocus];
-    return [image autorelease];
-}
-
-- (void)drawImageOfRow:(int)row col:(int)col marker:(int)marker atPoint:(NSPoint)point
-{
-    int count;
-    int i;
-
-    count = patterns[row][col].count;
-    for (i=0; i<count; i++){
-        [self drawPart:&parts[patterns[row][col].parts[i]] atPoint:point];
-    };
-
-    if (marker != 0) {
-        for (i=0; i<8; i++) {
-            if (marker & (1<<i)) {
-                [self drawPart:&parts[markers[i]] atPoint:point];
-            }
-        }
-    }
-}
-
-- (void)drawPart:(PartDef*)part atPoint:(NSPoint)point
-{
-    point.x += part->pos.x;
-    point.y += part->pos.y;
-    [part->image compositeToPoint:point operation:NSCompositeSourceOver];
-}
-
--(void)dumpPattern:(NSString*)path;
-{
-    NSImage *img;
-    NSSize imgSize;
-    NSPoint pos;
-    float offset;
-    int i,j,rows;
-    NSMutableDictionary	*attr;
-    NSString *str;
-
-    rows = partCount / FACE_COLMAX + 1;
-    offset = rows * FACE_IMGW + 10;
-    imgSize.width = FACE_IMGW * FACE_COLMAX;
-    imgSize.height = FACE_IMGH * FACE_ROWMAX + offset + 14;
-
-    img = [[NSImage alloc] initWithSize:imgSize];
-    if (img == nil) {
-        NSLog(@"failure dump pattern!");
-        return;
-    }
-
-    [img lockFocus];
-    [[NSColor whiteColor] set];
-    NSRectFill(NSMakeRect(0,0,imgSize.width,imgSize.height));
-
-    [[NSColor blackColor] set];
-    NSRectFill(NSMakeRect(0,offset-6,imgSize.width,2));
-
-    attr = [[NSMutableDictionary alloc] initWithObjectsAndKeys:
-                [NSFont systemFontOfSize:14.0], NSFontAttributeName,
-                [NSColor blackColor], NSForegroundColorAttributeName,
-                nil];
-
-    for (i = 0; i <= partCount; i++) {
-        pos.x = (i % FACE_COLMAX) * FACE_IMGW;
-        pos.y = (rows-1 - i / FACE_COLMAX) * FACE_IMGH;
-        [self drawPart:&parts[i] atPoint:pos];
-
-        str = [NSString stringWithFormat:@"%d",i];
-        pos.x = (i % FACE_COLMAX) * FACE_IMGW;
-        pos.y = (rows-1 - i / FACE_COLMAX) * FACE_IMGH + FACE_IMGH - 12;
-        [str drawAtPoint:pos withAttributes:attr];
-    }
-
-    for (i = 0; i < FACE_ROWMAX; i++) {
-        pos.y = (FACE_ROWMAX-1 - i) * FACE_IMGH + offset;
-        for (j=0; j<FACE_COLMAX; j++) {
-            pos.x = j * FACE_IMGW;
-            [self drawImageOfRow:i col:j marker:0 atPoint:pos];
-        }
-    }
-
-    pos.y = imgSize.height - 14;
-    for (i = 0; i < FACE_COLMAX-1; i++) {
-        str = [NSString stringWithFormat:@"%d-%d%%",i*10,(i+1)*10-1];
-        pos.x = i * FACE_IMGW;
-        [str drawAtPoint:pos withAttributes:attr];
-    }
-    str = [NSString stringWithFormat:@"%d%%",100];
-    pos.x = (FACE_COLMAX-1) * FACE_IMGW;
-    [str drawAtPoint:pos withAttributes:attr];
-
-    [img unlockFocus];
-
-    [[img TIFFRepresentation] writeToFile:path atomically:NO];
-    [img release];
-}
-
-@end
-
-*/
Index: unk/MacFaceLibrary/HostStatistics.cs
===================================================================
--- /trunk/MacFaceLibrary/HostStatistics.cs	(revision 20)
+++ 	(revision )
@@ -1,252 +1,0 @@
-using System;
-
-namespace MacFace
-{
-	/// <summary>
-	/// HostStatistics ÌTvÌà¾Å·B
-	/// </summary>
-	public class HostStatistics
-	{
-		public HostStatistics()
-		{
-			// 
-			// TODO: RXgN^ WbNð±±ÉÇÁµÄ­¾³¢B
-			//
-		}
-	}
-}
-
-/*
-
-typedef struct {
-    int freePages;
-    int activePages;
-    int inactivePages;
-    int wirePages;
-    int faults;
-    int pageins;
-    int pageouts;
-    unsigned long userTicks;
-    unsigned long systemTicks;
-    unsigned long idleTicks;
-    unsigned long niceTicks;
-} HostStatData;
-
-typedef struct {
-    int incount;
-    int outcount;
-} Pageio;
-
-typedef struct {
-    float user;
-    float system;
-    float idle;
-    float nice;
-} CPUUsage;
-
-typedef struct {
-    HostStatData stat;
-    Pageio pageio;
-    CPUUsage usage;
-} StatisticsRecord;
-
-@interface HostStatistics : NSObject
-{
-    StatisticsRecord *ringBuffer;
-    int bufMaxLen;
-    int bufHead;
-    int bufTail;
-    int bufLen;
-    int totalPages;
-    int minUsedPages;
-    int maxUsedPages;
-}
-
-+ (unsigned int)vmPageSize;
-+ (NSString*)kernelVersion;
-+ (void)getStatistics:(HostStatData*)data;
-
-- (id)initWithCapacity:(unsigned)capacity;
-- (void)update;
-- (int)totalPages;
-- (int)minUsedPages;
-- (int)maxUsedPages;
-- (int)length;
-- (const StatisticsRecord*)indexAt:(unsigned)index;
-- (const StatisticsRecord*)head;
-- (const StatisticsRecord*)tail;
-@end
-
-#import <mach/mach.h>
-#import <mach/mach_types.h>
-#import "HostStatistics.h"
-
-//
-//
-static void hostStatistics(HostStatData *data)
-{
-    vm_statistics_data_t vm_stat;
-    mach_msg_type_number_t vm_count = HOST_VM_INFO_COUNT;
-    host_cpu_load_info_data_t load_info;
-    mach_msg_type_number_t load_info_count = HOST_CPU_LOAD_INFO_COUNT;
-    host_t host = mach_host_self();
-
-    host_statistics(host,HOST_VM_INFO,(host_info_t)&vm_stat, &vm_count);
-    host_statistics(host,HOST_CPU_LOAD_INFO,(host_info_t)&load_info, &load_info_count);
-
-    data->freePages = vm_stat.free_count;
-    data->activePages = vm_stat.active_count;
-    data->inactivePages = vm_stat.inactive_count;
-    data->wirePages = vm_stat.wire_count;
-    data->faults = vm_stat.faults;
-    data->pageins = vm_stat.pageins;
-    data->pageouts = vm_stat.pageouts;
-
-    data->userTicks = load_info.cpu_ticks[CPU_STATE_USER];
-    data->systemTicks = load_info.cpu_ticks[CPU_STATE_SYSTEM];
-    data->idleTicks = load_info.cpu_ticks[CPU_STATE_IDLE];
-    data->niceTicks = load_info.cpu_ticks[CPU_STATE_NICE];
-}
-
-@implementation HostStatistics
-
-//
-// ¼zL¯Ìy[WTCYðÔ·
-//
-+ (unsigned int)vmPageSize
-{
-    vm_size_t page_size;
-    host_page_size(mach_host_self(),&page_size);
-    return page_size;
-}
-
-//
-// J[lÌo[W¶ñðÔ·
-//
-+ (NSString*)kernelVersion
-{
-    kernel_version_t kver;
-    host_kernel_version(mach_host_self(),kver);
-    return [NSString stringWithUTF8String:kver];
-}
-
-//
-// »ÝÌvîñðÝè·é
-//
-+ (void)getStatistics:(HostStatData*)data
-{
-    hostStatistics(data);
-}
-
-//
-// ú»
-//   capacity: Oobt@ÌeÊ
-//
-- (id)initWithCapacity:(unsigned)capacity
-{
-    StatisticsRecord *rec;
-
-    ringBuffer = calloc(sizeof(StatisticsRecord),capacity);
-    rec = &ringBuffer[0];
-    hostStatistics(&rec->stat);
-    rec->usage.user = 0;
-    rec->usage.system = 0;
-    rec->usage.idle = 100.0;
-    rec->usage.nice = 0;
-
-    bufMaxLen = capacity;
-    bufHead = 0;
-    bufTail = 0;
-    bufLen = 1;
-
-    totalPages = rec->stat.wirePages + rec->stat.activePages + rec->stat.inactivePages + rec->stat.freePages;
-    minUsedPages = rec->stat.wirePages + rec->stat.activePages;
-    maxUsedPages = minUsedPages;
-
-    return self;
-}
-
-//
-// ãn
-//
-- (void)dealloc
-{
-    free(ringBuffer);
-    [super dealloc];
-}
-
-//
-// ðÌXV
-//
-- (void)update
-{
-    StatisticsRecord *rec, *lastRec;
-    int user,sys,idle,nice,total;
-    int usedPages;
-
-    lastRec = &ringBuffer[bufHead];
-    if (bufLen < bufMaxLen) bufLen++;
-    if (++bufHead >= bufLen) bufHead = 0;
-    if (bufHead == bufTail)
-        if (++bufTail >= bufLen) bufTail = 0;
-    rec = &ringBuffer[bufHead];
-    hostStatistics(&rec->stat);
-
-    rec->pageio.incount = rec->stat.pageins - lastRec->stat.pageins;
-    rec->pageio.outcount = rec->stat.pageouts - lastRec->stat.pageouts;
-
-    user = rec->stat.userTicks - lastRec->stat.userTicks;
-    sys = rec->stat.systemTicks - lastRec->stat.systemTicks;
-    idle = rec->stat.idleTicks - lastRec->stat.idleTicks;
-    nice = rec->stat.niceTicks - lastRec->stat.niceTicks;
-    total = user + sys + idle + nice;
-
-    if (total > 0) {
-        rec->usage.user = user * 100.0 / total;
-        rec->usage.system = sys * 100.0 / total;
-        rec->usage.idle = idle * 100.0 / total;
-        rec->usage.nice = nice * 100.0 / total;
-    } else {
-        rec->usage = lastRec->usage;
-    }
-
-    usedPages = rec->stat.wirePages + rec->stat.activePages;
-    if( minUsedPages < usedPages) minUsedPages = usedPages;
-    if( maxUsedPages > usedPages) maxUsedPages = usedPages;
-}
-
-- (int)totalPages { return totalPages; }
-- (int)minUsedPages { return minUsedPages; }
-- (int)maxUsedPages { return maxUsedPages; }
-- (int)length { return bufLen; }
-
-//
-// wèµ½ÊuÌvîñð¾é
-//   index: Êu(ÅVª0)
-//
-- (const StatisticsRecord*)indexAt:(unsigned)index;
-{
-    if (index >= bufLen) return nil;
-    index = (index <= bufHead) ? bufHead - index : bufLen + bufHead - index;
-    return &ringBuffer[index];
-}
-
-//
-// àÁÆàVµ¢vîñðÔ·
-//
-- (const StatisticsRecord*)head
-{
-    return &ringBuffer[bufHead];
-}
-
-//
-// àÁÆàÃ¢vîñðÔ·
-//
-- (const StatisticsRecord*)tail;
-{
-    return &ringBuffer[bufTail];
-}
-
-@end
-
-*/
Index: /trunk/MacFaceLibrary/MacFaceLibrary.csproj
===================================================================
--- /trunk/MacFaceLibrary/MacFaceLibrary.csproj	(revision 20)
+++ /trunk/MacFaceLibrary/MacFaceLibrary.csproj	(revision 30)
@@ -85,4 +85,9 @@
                     HintPath = "..\..\..\..\..\..\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.Drawing.dll"
                 />
+                <Reference
+                    Name = "System.Management"
+                    AssemblyName = "System.Management"
+                    HintPath = "..\..\..\..\..\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.Management.dll"
+                />
             </References>
         </Build>
@@ -91,4 +96,14 @@
                 <File
                     RelPath = "AssemblyInfo.cs"
+                    SubType = "Code"
+                    BuildAction = "Compile"
+                />
+                <File
+                    RelPath = "CPUUsage.cs"
+                    SubType = "Code"
+                    BuildAction = "Compile"
+                />
+                <File
+                    RelPath = "CPUUsageCounter.cs"
                     SubType = "Code"
                     BuildAction = "Compile"
@@ -105,5 +120,10 @@
                 />
                 <File
-                    RelPath = "HostStatistics.cs"
+                    RelPath = "MemoryUsage.cs"
+                    SubType = "Code"
+                    BuildAction = "Compile"
+                />
+                <File
+                    RelPath = "MemoryUsageCounter.cs"
                     SubType = "Code"
                     BuildAction = "Compile"
@@ -111,4 +131,9 @@
                 <File
                     RelPath = "Part.cs"
+                    SubType = "Code"
+                    BuildAction = "Compile"
+                />
+                <File
+                    RelPath = "Pentium4UsageCounter.cs"
                     SubType = "Code"
                     BuildAction = "Compile"
Index: /trunk/MacFaceLibrary/MemoryUsage.cs
===================================================================
--- /trunk/MacFaceLibrary/MemoryUsage.cs	(revision 30)
+++ /trunk/MacFaceLibrary/MemoryUsage.cs	(revision 30)
@@ -0,0 +1,46 @@
+/*
+ * $Id$
+ */
+using System;
+
+namespace MacFace
+{
+	/// <summary>
+	/// MemoryUsage ÌTvÌà¾Å·B
+	/// </summary>
+	public class MemoryUsage
+	{
+		private int available;
+		private int committed;
+		private int pagein;
+		private int pageout;
+
+		public MemoryUsage(int available, int committed, int pagein, int pageout)
+		{
+			this.available = available;
+			this.committed = committed;
+			this.pagein = pagein;
+			this.pageout = pageout;
+		}
+
+		public int Available
+		{
+			get { return available; }
+		}
+
+		public int Committed
+		{
+			get { return committed; }
+		}
+
+		public int Pagein
+		{
+			get { return pagein; }
+		}
+
+		public int Pageout
+		{
+			get { return pageout; }
+		}
+	}
+}
Index: /trunk/MacFaceLibrary/MemoryUsageCounter.cs
===================================================================
--- /trunk/MacFaceLibrary/MemoryUsageCounter.cs	(revision 30)
+++ /trunk/MacFaceLibrary/MemoryUsageCounter.cs	(revision 30)
@@ -0,0 +1,48 @@
+/*
+ * $Id$
+ */
+using System;
+using System.Diagnostics;
+
+namespace MacFace
+{
+	/// <summary>
+	/// MemoryUsageCounter ÌTvÌà¾Å·B
+	/// </summary>
+	public class MemoryUsageCounter
+	{
+		private PerformanceCounter availableCounter;
+		private PerformanceCounter committedCounter;
+		private PerformanceCounter pageoutCounter;
+		private PerformanceCounter pageinCounter;
+
+		public MemoryUsageCounter()
+		{
+			availableCounter = new PerformanceCounter();
+			availableCounter.CategoryName = "Memory";
+			availableCounter.CounterName = "Available Bytes";
+
+			committedCounter = new PerformanceCounter();
+			committedCounter.CategoryName = "Memory";
+			committedCounter.CounterName = "Committed Bytes";
+
+			pageoutCounter = new PerformanceCounter();
+			pageoutCounter.CategoryName = "Memory";
+			pageoutCounter.CounterName = "Pages Output/sec";
+
+			pageinCounter = new PerformanceCounter();
+			pageinCounter.CategoryName = "Memory";
+			pageinCounter.CounterName = "Pages Input/sec";
+		}
+
+		public MemoryUsage CurrentUsage()
+		{
+			int available = (int)availableCounter.NextValue();
+			int committed = (int)committedCounter.NextValue();
+			int pagein	= (int)pageinCounter.NextValue();
+			int pageout   = (int)pageoutCounter.NextValue();
+
+			return new MemoryUsage(available, committed, pagein, pageout);
+		}
+	}
+}
Index: /trunk/MacFaceLibrary/Part.cs
===================================================================
--- /trunk/MacFaceLibrary/Part.cs	(revision 20)
+++ /trunk/MacFaceLibrary/Part.cs	(revision 30)
@@ -15,34 +15,30 @@
 	{
 		private Image _image;
-		private string _filename;
+		private string _imagePath;
 		private Point _point;
 
-		/*public Part(string basePath, Hashtable partDef)
-		{
-			this.path = (string)Path.Combine(partDef["filename"]);
-			this.x = (int)partDef["pos x"];
-			this.y = (int)partDef["pos y"];
-		}*/
-		
 		public Part(String path, int x, int y)
 		{
-			_filename = System.IO.Path.GetFileName(path);
+			_imagePath = path;
 			_image = Image.FromFile(path);
-			this.X = x;
-			this.Y = y;
+			_point.X = x;
+			_point.Y = y;
 		}
 
 		public Part(String path, Image image, int x, int y)
 		{
-			_filename = System.IO.Path.GetFileName(path);
-			_image = image;
-			this.X = x;
-			this.Y = y;
+            _imagePath = path;
+            _image = image;
+			_point.X = x;
+			_point.Y = y;
 		}
 
 		public string FileName 
 		{
-			get { return _filename; }
-		}
+            get
+            {
+                return System.IO.Path.GetFileName(_imagePath);
+            }
+        }
 
 		public Image Image 
@@ -64,6 +60,6 @@
 		public int Y
 		{
-			get { return 128 - _point.Y - _image.Height; }
-			set { _point.Y = 128 - value - _image.Height; }
+			get { return _point.Y; }
+			set { _point.Y = value; }
 		}
 
Index: /trunk/MacFaceLibrary/Pentium4UsageCounter.cs
===================================================================
--- /trunk/MacFaceLibrary/Pentium4UsageCounter.cs	(revision 30)
+++ /trunk/MacFaceLibrary/Pentium4UsageCounter.cs	(revision 30)
@@ -0,0 +1,20 @@
+/*
+ * $Id$
+ */
+using System;
+
+namespace MacFace
+{
+	/// <summary>
+	/// Pentium4UsageCounter ÌTvÌà¾Å·B
+	/// </summary>
+	public class Pentium4UsageCounter
+	{
+		public Pentium4UsageCounter()
+		{
+			// 
+			// TODO: RXgN^ WbNð±±ÉÇÁµÄ­¾³¢B
+			//
+		}
+	}
+}
