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++; } }