예제 #1
0
 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));
 }
예제 #2
0
 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());
     }
 }
예제 #3
0
 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);
     }
 }
예제 #4
0
        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;
        }
예제 #5
0
 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);
     }
 }
예제 #6
0
        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));
                }
            }
        }
예제 #7
0
 internal void CompletarPixels(Posicion posicion)
 {
     posicion.Pagina.CompletarPixels(_Lineas, posicion);
 }
예제 #8
0
 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));
 }