public void DibujarPaginas(IGraficador generador, out Punto InicioCursor, out Punto FinCursor) { lock (this) { _documento.DibujarPagina(generador, Punto.Origen, 0, conttexto.ObtenerSeleccion()); Posicion pos = _documento.ObtenerPosicionCursor(0, conttexto.ObtenerParrafoSeleccionado(), conttexto.ObtenerPosicionInsercion()); _documento.CompletarPixels(pos); InicioCursor = new Punto(pos.PosicionPixelX, pos.PosicionPixelY); FinCursor = new Punto(pos.PosicionPixelX, pos.PosicionPixelY + pos.AltoLinea); } //e.Graphics.DrawLine(Pens.Black, new PointF(pos.PosicionPixelX, pos.PosicionPixelY), new PointF(pos.PosicionPixelX, pos.PosicionPixelY + pos.AltoLinea)); }
public Posicion ObtenerLineaInferior() { if (!VDocumento.EsUltimaLinea(IndiceLinea)) { Posicion p = new Posicion(VDocumento); p.ReferenciaX = ReferenciaX; VDocumento.Completar(p, IndicePagina, IndiceLinea + 1, PosicionCaracter); Debug.Assert(p.Linea != null); return(p); } else { return(ObtenerCopia()); } }
public void IrPaginaSiguiente(bool ampliarSeleccion) { lock (this) { Posicion pos = ObtenerPosicion(); int indiceactual = pos.IndicePagina; Posicion possiguiente = pos.ObtenerPaginaSiguiente(); int indicenuevo = possiguiente.IndicePagina; if (indicenuevo == indiceactual) { possiguiente = possiguiente.ObtenerFinPagina(); } CambiarPosicion(possiguiente, ampliarSeleccion); EnActualizarPresentacion(false); } }
public void CompletarPosicionPixels(ListaLineas lineas, Posicion posicionLinea, Medicion anchoLinea, bool incluirEspacioAnterior, bool incluirEspacioPosterior) { Medicion suma = new Medicion(0); for (int i = posicionLinea.Pagina.LineaInicio; i < posicionLinea.IndiceLinea; i++) { suma += lineas.Obtener(i).AltoLinea; } Medicion deltaAnterior = (incluirEspacioAnterior && EsPrimeraLineaParrafo ? Parrafo.Formato.ObtenerEspacioAnterior() : Medicion.Cero); Medicion deltaSiguiente = (incluirEspacioPosterior && EsUltimaLineaParrafo ? Parrafo.Formato.ObtenerEspacioPosterior() : Medicion.Cero); posicionLinea.PosicionPagina = new Punto( ObtenerPosicionCaracter(posicionLinea.PosicionCaracter) + ObtenerDeltaAlineacion(anchoLinea) , suma + deltaAnterior); posicionLinea.AltoLinea = AltoLinea - deltaSiguiente - deltaAnterior; }
public void IrSiguienteCaracter(bool moverSeleccion, TipoAvance tipoAvance) { lock (this) { if (tipoAvance == TipoAvance.AvanzarPorLineas) { Posicion posicion = ObtenerPosicion(); Posicion nueva = posicion.ObtenerFinLinea(); CambiarPosicion(nueva, moverSeleccion); } else if (tipoAvance == TipoAvance.AvanzarPorPaginas) { IrPaginaSiguiente(moverSeleccion); } else { conttexto.IrSiguienteCaracter(moverSeleccion, tipoAvance); } EnActualizarPresentacion(false); } }
Posicion BuscarParrafo(Parrafo parrafoBuscado, int paginainicio, int paginafin) { if (paginainicio > paginafin) { int centro2 = Math.Max(paginainicio, paginafin); reintentar: if (centro2 >= _Paginas.Count) { centro2 = _Paginas.Count - 1; } Pagina elemento2 = _Paginas[centro2]; int linea = BuscarLineaInicioParrafo(elemento2.LineaInicio, parrafoBuscado); Posicion p = new Posicion(_docimpreso); _docimpreso.Completar(p, centro2, linea, 0); return(p); } int centro = (paginainicio + paginafin) / 2; Pagina elemento = _Paginas[centro]; Linea inicial = _Lineas.Obtener(elemento.LineaInicio); if (inicial.Parrafo == parrafoBuscado) { int linea = BuscarLineaInicioParrafo(elemento.LineaInicio, parrafoBuscado); Posicion p = new Posicion(_docimpreso); _docimpreso.Completar(p, centro, linea, 0); return(p); //return CrearPosicion(centro, elemento.LineaInicio, 0); } else { if (inicial.Parrafo.EsSiguiente(parrafoBuscado)) { return(BuscarParrafo(parrafoBuscado, centro + 1, paginafin)); } else { return(BuscarParrafo(parrafoBuscado, paginainicio, centro - 1)); } } }
internal void CompletarPixels(Posicion posicion) { posicion.Pagina.CompletarPixels(_Lineas, posicion); }
internal void CompletarPixels(ListaLineas _Lineas, Posicion posicion) { posicion.Linea.CompletarPosicionPixels(_Lineas, posicion, ObtenerAnchoLineas(), true, true); posicion.PosicionPagina = posicion.PosicionPagina + (new Punto(Margen.Izquierdo, Margen.Superior)); }