Beispiel #1
0
        private void AsegurarVisibilidadPagina(int numpagina, Punto pt)
        {
            Debug.Assert(PaginaSuperior <= numpagina);
            IEnumerable <Pagina> pags         = _Documento.ObtenerDesde(PaginaSuperior);
            Medicion             inicioPagina = Medicion.Cero - EsquinaSuperior.Y;
            int    indice         = PaginaSuperior;
            Pagina paginaSuperior = Documento.ObtenerPagina(numpagina);

            foreach (Pagina p in pags)
            {
                while (inicioPagina > Dimensiones.Alto)
                {
                    Medicion delta;
                    delta = inicioPagina - Dimensiones.Alto;
                    IncrementarEsquinaY(delta);
                    inicioPagina = inicioPagina - delta;
                    Pagina superior = ObtenerPaginaSuperior();
                    while (superior != null && EsquinaSuperior.Y > superior.Dimensiones.Alto + EspacioEntrePaginas)
                    {
                        Medicion altoact = ObtenerPaginaSuperior().Dimensiones.Alto + EspacioEntrePaginas;
                        PaginaSuperior = PaginaSuperior + 1;
                        IncrementarEsquinaY(Medicion.Cero - altoact);
                        inicioPagina -= altoact;
                        superior      = ObtenerPaginaSuperior();
                    }
                }
                Medicion finPagina = inicioPagina + p.Dimensiones.Alto;
                if (indice == numpagina)
                {
                    pt = pt.AgregarY(inicioPagina);//calcular coordenadas de punto en relacion a escritorio
                    if (pt.Y < Medicion.Cero)
                    {
                        Medicion delta = pt.Y;
                        EsquinaSuperior = new Punto(EsquinaSuperior.X, EsquinaSuperior.Y + delta);
                        pt = pt.AgregarY(Medicion.Cero - delta);
                        AsegurarVisibilidadX(pt);
                        return;
                    }
                    if (pt.Y > Dimensiones.Alto)
                    {
                        Medicion delta = pt.Y - Dimensiones.Alto;
                        EsquinaSuperior = new Punto(EsquinaSuperior.X, EsquinaSuperior.Y + delta);
                        pt = pt.AgregarY(Medicion.Cero - delta);
                        AsegurarVisibilidadX(pt);
                        return;
                    }
                    AsegurarVisibilidadX(pt);
                    return;
                }
                inicioPagina = finPagina + EspacioEntrePaginas;
                indice++;
            }
        }