Subversion Repositories AndroidProjects

Rev

Rev 1397 | Rev 1399 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;

using Tao.OpenGl;

using BauzoidNET.app;
using BauzoidNET.graphics.sprite;

using ShapeEditor.file;

namespace ShapeEditor
{
    public partial class MainForm : Form
    {
        public static BauzoidApp App = null;

        private Document mDocument = null;

        /*private BauzoidNET.graphics.sprite.SimpleSprite mSprite = null;
        private BauzoidNET.graphics.texture.Framebuffer mOffscreen = null;

        private BauzoidNET.graphics.model.SimpleGeometry mQuad = null;
        private BauzoidNET.graphics.shader.ShaderProgram mShader = null;
        private BauzoidNET.graphics.shader.ShaderUniform mTextureHandle = null;*/


        public MainForm()
        {
            InitializeComponent();
        }

        private void MainForm_Load(object sender, EventArgs e)
        {
            App = new BauzoidApp();
            App.init(mGlView.Width, mGlView.Height);

            /*mQuad = BauzoidNET.graphics.model.GeometryUtil.createQuad(mApp.getGraphics(), 0.0f, 0, 100.0f, 100.0f);
               
                //mShader = ShaderUtil.createShaderFromFile(mApp.getGraphics(), Gdx.files.internal("data/shaders/offscreen.vert"),
                                //Gdx.files.internal("data/shaders/offscreen.frag"));
            mShader = BauzoidNET.graphics.shader.ShaderUtil.createShaderFromFile(mApp.getGraphics(), "data/shaders/offscreen.vert", "data/shaders/offscreen.frag");
               
                if (mShader != null)
                {
                        mTextureHandle = mShader.getUniform("uDiffuse");
                    }

            mSprite = new BauzoidNET.graphics.sprite.SimpleSprite(mApp.getGraphics(), "data/textures/test.png");
            mSprite.init();

            mSprite.getSpriteTransform().x = 10;
            mSprite.getSpriteTransform().y = 10;
            mSprite.getSpriteTransform().w = 300;
            mSprite.getSpriteTransform().h = 300;
            mSprite.getSpriteTransform().pivotX = 0;
            mSprite.getSpriteTransform().pivotY = 0;

            mOffscreen = new BauzoidNET.graphics.texture.Framebuffer(mApp.getGraphics(), 128, 128, false);*/


            String s = Path.Combine(Application.StartupPath, @"..\\..\\..\\..\\..\\BauzoidApps\\BurutaruZ_v2\\burutaru-android\\assets\\data\\textures");
            openFileDialog.InitialDirectory = Path.GetFullPath(s);
            openSpriteDialog.InitialDirectory = Path.GetFullPath(s);
            saveFileDialog.InitialDirectory = Path.GetFullPath(s);

            mDocument = new Document(this);

            mDocument.NewDocument();
        }

        private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (!CheckDocumentModifiedAndSave())
            {
                e.Cancel = true;
                return;
            }

            /*
            if (mSprite != null)
            {
                mSprite.dispose();
                mSprite = null;
            }

            if (mOffscreen != null)
            {
                mOffscreen.dispose();
                mOffscreen = null;
            }

            if (mQuad != null)
            {
                mQuad.dispose();
                mQuad = null;
            }*/


            if (App != null)
                App.exit();

            mDocument = null;
        }

        private void GlView_Paint(object sender, PaintEventArgs e)
        {
            //mOffscreen.activate();

            /*mApp.getGraphics().clear(0.15f, 0.15f, 0.2f, 0);
            mApp.getRenderStates().projection.setOrtho(
                0.0f,
                480,
                480,
                0.0f,
                0.0f,
                1.0f
            );*/


            //mSprite.render();
            //mOffscreen.deactivate();

            //mApp.getGraphics().clear(0, 0.5f, 0.3f, 0);

            //Gl.glViewport(0, 0, mGlView.Width, mGlView.Height);
            App.getGraphics().clear(0.3f, 0.3f, 0.35f, 0);
            App.getRenderStates().projection.setOrtho(
                    0.0f,
                    App.getGraphics().getWidth(),
                    App.getGraphics().getHeight(),
                    0.0f,
                    0.0f,
                    1.0f
                );

            //mDocument.Render();

            SpriteInstance s = mDocument.GetSpriteInstance();
            s.transform.x = mGlView.Width / 2;
            s.transform.y = mGlView.Height / 2;
            s.transform.w = 100;
            s.transform.h = 100;
            s.transform.centerPivot();
            s.render();

            /*BauzoidNET.graphics.renderstates.RenderStates rs = mApp.getGraphics().renderStates;

            rs.view.identity();
            rs.model.identity();*/


/*            mShader.activate();
            {
                mTextureHandle.set(0);
                rs.getTextureStage(0).bindTexture(mOffscreen.getColorTexture());

                rs.blending.setEnabled(false);
                rs.culling.setEnabled(false);
                rs.depthTest.setEnabled(false);
                rs.activate();
                {
                    mQuad.render();
                }
                rs.deactivate();
                rs.popModelMatrix();
                rs.popViewMatrix();
            }
            mShader.deactivate();*/

        }

        private void GlView_Resize(object sender, EventArgs e)
        {
            if (App != null)
                App.getGraphics().updateSurfaceDimensions(mGlView.Width, mGlView.Height);
        }

        private void FileNew_Click(object sender, EventArgs e)
        {
            if (!CheckDocumentModifiedAndSave())
                return;

            // new file
            mDocument.NewDocument();
        }

        private void FileOpen_Click(object sender, EventArgs e)
        {
            if (!CheckDocumentModifiedAndSave())
                return;

            // open file
            PerformFileOpen();
        }

        /** Check if the document has been modified, and if yes, ask for saving.
         * Returns true if everything is ok and the operation should be continued, or false when Cancel has been pressed. */

        private bool CheckDocumentModifiedAndSave()
        {
            if (mDocument.IsDirty())
            {
                switch (MessageBox.Show("File has been modified. Save?", "New File", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question))
                {
                    case DialogResult.Yes:
                        if (!PerformFileSave())                        
                            return false;
                        break;
                    case DialogResult.No:
                        break;
                    case DialogResult.Cancel:
                        return false;
                }
            }

            return true;
        }

        /** Perform a file save operation with a file save dialog.
         * Returns false if the operation has been canceled. */

        private bool PerformFileSave(bool alwaysShowDialog = false)
        {
            if (alwaysShowDialog || !mDocument.IsFilenameSet())
            {
                if (saveFileDialog.ShowDialog() == DialogResult.Cancel)
                    return false;

                mDocument.SetFilename(saveFileDialog.FileName);
            }

            return mDocument.SaveDocument();
        }

        /** Perform a file open operation.
         * Return false if the operation was canceled. */

        private bool PerformFileOpen()
        {
            if (openFileDialog.ShowDialog() == DialogResult.Cancel)
                return false;

            return mDocument.LoadDocument(openFileDialog.FileName);
        }

        private void FileSave_Click(object sender, EventArgs e)
        {
            PerformFileSave();
        }

        private void FileSaveAs_Click(object sender, EventArgs e)
        {
            PerformFileSave(true);
        }

        private void FileExit_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void ChangeSprite_Click(object sender, EventArgs e)
        {
            if (openSpriteDialog.ShowDialog() == DialogResult.OK)
            {
                mDocument.ChangeSprite(openSpriteDialog.FileName);
                mGlView.Invalidate();
            }
        }

    }
}