Пример #1
0
        public Punto Dibujar(IGraficador g, Punto posicionInicial, Seleccion seleccion, AvanceBloques avance, Medicion anchoLinea, bool incluirEspacioAnterior, bool incluirEspacioPosterior)
        {
            List <Bloque>     lista            = new List <Bloque>(avance.ObtenerBloquesDe(this));
            bool              esultimalinea    = EsUltimaLineaParrafo;
            Medicion          espacioanterior  = EsPrimeraLineaParrafo?(incluirEspacioAnterior ? (Parrafo.Formato.ObtenerEspacioAnterior()) : Medicion.Cero):Medicion.Cero;
            Medicion          espacioposterior = EsUltimaLineaParrafo?(incluirEspacioPosterior?(Parrafo.Formato.ObtenerEspacioPosterior()):Medicion.Cero):Medicion.Cero;
            Medicion          altolinea        = AltoLinea - espacioposterior;
            Medicion          deltacalc        = ObtenerDeltaAlineacion(anchoLinea);
            AlineacionParrafo alineacion       = Parrafo.Formato.ObtenerAlineacionHorizontal();
            Punto             posicion         = new Punto(posicionInicial.X, posicionInicial.Y);

            for (int i = 0; i < 2; i++)
            {
                Medicion deltax;
                if (alineacion == AlineacionParrafo.Centro || alineacion == AlineacionParrafo.Derecha)
                {
                    deltax = posicion.X + deltacalc;
                }
                else
                {
                    deltax = posicion.X;
                }
                Punto pt      = posicion;
                int   posbase = Inicio;

                Medicion altobase = AltoBase;
                Bloque   ultb     = new Bloque(0, Parrafo.Formato.ObtenerFormatoTexto());
                foreach (Bloque b in lista)
                {
                    ultb = b;
                    if (b.Cantidad == 0)
                    {
                        continue;
                    }
                    Estilo    e         = new Estilo(b);
                    Medicion  baset     = e.MedirAlto();
                    string    total     = Parrafo.ObtenerSubCadena(posbase, b.Cantidad);
                    TamBloque tb        = e.Medir(total);
                    Punto     posdibujo = new Punto(deltax, posicion.Y + (altolinea - baset) - altobase);
                    Dibujar(g, posdibujo, seleccion, e, posbase, b.Cantidad, total, i);
                    posbase += b.Cantidad;
                    deltax  += tb.Ancho;
                }
                if (seleccion != null && EsUltimaLineaParrafo && seleccion.Contiene(Parrafo, Inicio + Cantidad))
                {
                    Estilo   e     = new Estilo(ultb);
                    Medicion baset = e.MedirAlto();
                    Estilo   sel   = e.Clonar();
                    sel.ColorFondo = new BrochaSolida(new ColorDocumento(0, 0, 0));
                    sel.ColorLetra = new BrochaSolida(new ColorDocumento(255, 255, 255));
                    Punto posdibujo = new Punto(deltax, posicion.Y + (altolinea - baset) - altobase);
                    DibujarConTam(sel, g, posdibujo, " ", "", i);
                }
            }
            return(new Punto(posicion.X, posicion.Y + AltoLinea));
        }
Пример #2
0
        private Medicion ObtenerDeltaAlineacion(Medicion anchoLinea)
        {
            AlineacionParrafo alineacion = Parrafo.Formato.ObtenerAlineacionHorizontal();
            Medicion          deltacalc  = Medicion.Cero;

            if (alineacion == AlineacionParrafo.Derecha || alineacion == AlineacionParrafo.Centro)
            {
                Medicion  altobase;
                TamBloque tam        = MedirDeParrafo(Inicio, Cantidad, out altobase);
                Medicion  anchotexto = tam.Ancho;
                if (alineacion == AlineacionParrafo.Derecha)
                {
                    deltacalc = anchoLinea - anchotexto;
                }
                else
                {
                    deltacalc = (anchoLinea - anchotexto) * 0.5;
                }
            }
            return(deltacalc);
        }