Exemplo n.º 1
0
        /// <summary>
        /// This is called when the game should draw itself.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);

            spriteBatch.Begin();
            Vector2 len = font1.MeasureString(content);

            spriteBatch.DrawString(font1, "按下 F12 啟用 / 停用 IME", new Vector2(10, 10), Color.White);
            spriteBatch.DrawString(font1, content, new Vector2(10, 30), Color.White);
            Vector2 drawPos   = new Vector2(15 + len.X, 30);
            Vector2 measStr   = new Vector2(0, 15);
            Color   compColor = Color.White;

            if (handler.CompositionCursorPos == 0)
            {
                spriteBatch.Draw(whitePixel, new Rectangle((int)drawPos.X, (int)drawPos.Y, 1, (int)measStr.Y), Color.White);
            }
            for (int i = 0; i < handler.Composition.Length; i++)
            {
                string val = handler.Composition[i].ToString();
                switch (handler.GetCompositionAttr(i))
                {
                case CompositionAttributes.Converted: compColor = Color.LightGreen; break;

                case CompositionAttributes.FixedConverted: compColor = Color.Gray; break;

                case CompositionAttributes.Input: compColor = Color.Orange; break;

                case CompositionAttributes.InputError: compColor = Color.Red; break;

                case CompositionAttributes.TargetConverted: compColor = Color.Yellow; break;

                case CompositionAttributes.TargetNotConverted: compColor = Color.SkyBlue; break;
                }
                spriteBatch.DrawString(font1, val, drawPos, compColor);
                measStr  = font1.MeasureString(val);
                drawPos += new Vector2(measStr.X, 0);
                if ((i + 1) == handler.CompositionCursorPos)
                {
                    spriteBatch.Draw(whitePixel, new Rectangle((int)drawPos.X, (int)drawPos.Y, 1, (int)measStr.Y), Color.White);
                }
            }
            for (uint i = handler.CandidatesPageStart;
                 i < Math.Min(handler.CandidatesPageStart + handler.CandidatesPageSize, handler.Candidates.Length);
                 i++)
            {
                spriteBatch.DrawString(font1,
                                       String.Format("{0}.{1}", i + 1 - handler.CandidatesPageStart, handler.Candidates[i]),
                                       new Vector2(15 + len.X, 50 + (i - handler.CandidatesPageStart) * 20),
                                       i == handler.CandidatesSelection ? Color.Yellow : Color.White);
            }
            spriteBatch.End();
            base.Draw(gameTime);
        }
Exemplo n.º 2
0
        private void FakeDraw()
        {
            Color compColor = Color.White;

            var compString = string.Empty;

            for (int i = 0; i < imeHandler.Composition.Length; i++)
            {
                string val = imeHandler.Composition[i].ToString();
                switch (imeHandler.GetCompositionAttr(i))
                {
                case CompositionAttributes.Converted: compColor = Color.LightGreen; break;

                case CompositionAttributes.FixedConverted: compColor = Color.Gray; break;

                case CompositionAttributes.Input: compColor = Color.Orange; break;

                case CompositionAttributes.InputError: compColor = Color.Red; break;

                case CompositionAttributes.TargetConverted: compColor = Color.Yellow; break;

                case CompositionAttributes.TargetNotConverted: compColor = Color.SkyBlue; break;
                }

                if (val[0] > UnicodeSimplifiedChineseMax)
                {
                    val = DefaultChar;
                }

                compString += val;
            }

            labelComp.Text = compString;

            var candidatesList = string.Empty;

            for (uint i = imeHandler.CandidatesPageStart;
                 i < Math.Min(imeHandler.CandidatesPageStart + imeHandler.CandidatesPageSize, imeHandler.Candidates.Length);
                 i++)
            {
                if (imeHandler.Candidates[i][0] > UnicodeSimplifiedChineseMax)
                {
                    imeHandler.Candidates[i] = DefaultChar;
                }

                candidatesList += string.Format("{0}.{1}\r\n", i + 1 - imeHandler.CandidatesPageStart, imeHandler.Candidates[i]);
            }

            textBoxCandidates.Text = candidatesList;
        }
Exemplo n.º 3
0
        /// <summary>
        /// This is called when the game should draw itself.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);
            spriteBatch.Begin();

            Vector2 len = font1.MeasureString(inputContent);

            spriteBatch.DrawString(font1, "按下 F1 启用 / 停用 IME", new Vector2(10, 10), Color.White);
            spriteBatch.DrawString(font1, inputContent, new Vector2(10, 50), Color.White);

            Vector2 drawPos   = new Vector2(15 + len.X, 50);
            Vector2 measStr   = new Vector2(0, font1.MeasureString("|").Y);
            Color   compColor = Color.White;

            if (imeHandler.CompositionCursorPos == 0)
            {
                spriteBatch.Draw(whitePixel, new Rectangle((int)drawPos.X, (int)drawPos.Y, 1, (int)measStr.Y), Color.White);
            }

            for (int i = 0; i < imeHandler.Composition.Length; i++)
            {
                string val = imeHandler.Composition[i].ToString();
                switch (imeHandler.GetCompositionAttr(i))
                {
                case CompositionAttributes.Converted: compColor = Color.LightGreen; break;

                case CompositionAttributes.FixedConverted: compColor = Color.Gray; break;

                case CompositionAttributes.Input: compColor = Color.Orange; break;

                case CompositionAttributes.InputError: compColor = Color.Red; break;

                case CompositionAttributes.TargetConverted: compColor = Color.Yellow; break;

                case CompositionAttributes.TargetNotConverted: compColor = Color.SkyBlue; break;
                }

                if (val[0] > UnicodeSimplifiedChineseMax)
                {
                    val = DefaultChar;
                }

                spriteBatch.DrawString(font1, val, drawPos, compColor);

                measStr  = font1.MeasureString(val);
                drawPos += new Vector2(measStr.X, 0);

                if ((i + 1) == imeHandler.CompositionCursorPos)
                {
                    spriteBatch.Draw(whitePixel, new Rectangle((int)drawPos.X, (int)drawPos.Y, 1, (int)measStr.Y), Color.White);
                }
            }

            for (uint i = imeHandler.CandidatesPageStart;
                 i < Math.Min(imeHandler.CandidatesPageStart + imeHandler.CandidatesPageSize, imeHandler.Candidates.Length);
                 i++)
            {
                if (imeHandler.Candidates[i][0] > UnicodeSimplifiedChineseMax)
                {
                    imeHandler.Candidates[i] = DefaultChar;
                }

                try
                {
                    spriteBatch.DrawString(font1,
                                           String.Format("{0}.{1}", i + 1 - imeHandler.CandidatesPageStart, imeHandler.Candidates[i]),
                                           new Vector2(15 + len.X, 25 + 50 + (i - imeHandler.CandidatesPageStart) * 20),
                                           i == imeHandler.CandidatesSelection ? Color.Yellow : Color.White);
                }
                catch
                {
                    Trace.WriteLine($"Candidate string {imeHandler.Candidates[i]} has invalid codepoint in current font.");
                }
            }

            spriteBatch.End();

            base.Draw(gameTime);
        }