Beispiel #1
0
        static void DrawComment(Gtk.PrintContext context, double x, double y, double h, string comment, bool rotated)
        {
            if (string.IsNullOrEmpty(comment))
            {
                return;
            }

            Context cr = context.CairoContext;

            cr.Save();
            Pango.Layout          layout = context.CreatePangoLayout();
            Pango.FontDescription desc   = Pango.FontDescription.FromString("sans 14");
            layout.FontDescription = desc;
            layout.SetText(comment);
            int lay_w, lay_h;

            layout.GetPixelSize(out lay_w, out lay_h);
            double scale = h / lay_h;

            if (rotated)
            {
                cr.Translate(x - h, y + lay_w * scale);
                cr.Rotate(-Math.PI / 2);
            }
            else
            {
                cr.Translate(x - lay_w * scale, y - h);
            }
            cr.Scale(scale, scale);
            Pango.CairoHelper.ShowLayout(context.CairoContext, layout);
            cr.Restore();
        }
        private Pango.Layout CreateParagraphLayout(Gtk.PrintContext context,
                                                   Gtk.TextIter p_start,
                                                   Gtk.TextIter p_end,
                                                   out int indentation)
        {
            Pango.Layout layout = context.CreatePangoLayout();
            layout.FontDescription = Window.Editor.Style.FontDesc;
            int start_index = p_start.LineIndex;

            indentation = 0;

            double dpiX = context.DpiX;

            using (Pango.AttrList attr_list = new Pango.AttrList()) {
                Gtk.TextIter segm_start = p_start;
                Gtk.TextIter segm_end;

                while (segm_start.Compare(p_end) < 0)
                {
                    segm_end = segm_start;
                    IEnumerable <Pango.Attribute> attrs =
                        GetParagraphAttributes(
                            layout, dpiX, out indentation,
                            ref segm_end, p_end);

                    uint si = (uint)(segm_start.LineIndex - start_index);
                    uint ei = (uint)(segm_end.LineIndex - start_index);

                    foreach (Pango.Attribute a in attrs)
                    {
                        a.StartIndex = si;
                        a.EndIndex   = ei;
                        attr_list.Insert(a);
                    }
                    segm_start = segm_end;
                }

                layout.Attributes = attr_list;
            }

            DepthNoteTag depth = Buffer.FindDepthTag(p_start);

            if (depth != null)
            {
                indentation += ((int)(dpiX / 3)) * depth.Depth;
            }

            layout.Width = Pango.Units.FromPixels((int)context.Width -
                                                  margin_left - margin_right - indentation);
            layout.Wrap = Pango.WrapMode.WordChar;
            layout.SetText(Buffer.GetSlice(p_start, p_end, false));
            return(layout);
        }
        private Pango.Layout CreatePagenumbersLayout(Gtk.PrintContext context,
                                                     int page_number, int total_pages)
        {
            Pango.Layout layout = context.CreatePangoLayout();
            layout.FontDescription        = Window.Editor.Style.FontDesc;
            layout.Width                  = Pango.Units.FromPixels((int)context.Width);
            layout.FontDescription.Style  = Pango.Style.Normal;
            layout.FontDescription.Weight = Pango.Weight.Light;

            string footer_left = string.Format(Catalog.GetString("Page {0} of {1}"),
                                               page_number, total_pages);

            layout.Alignment = Pango.Alignment.Left;
            layout.SetText(footer_left);

            return(layout);
        }
Beispiel #4
0
        public void Draw(Gtk.PrintContext context)
        {
            Cairo.Context con    = context.CairoContext;
            Pango.Layout  layout = context.CreatePangoLayout();

            layout.SetText(this.textValue);
            layout.FontDescription = Pango.FontDescription.FromString(this.FontDescription);

            int pixelSizeWidth, pixelSizeHeight;

            layout.GetPixelSize(out pixelSizeWidth, out pixelSizeHeight);

            Console.WriteLine("   Text value: " + this.textValue);
            Console.WriteLine("   Pixel size width: " + pixelSizeWidth);
            Console.WriteLine("   Pixel size height: " + pixelSizeHeight);
            Console.WriteLine("   Text X position: " + this.x);
            Console.WriteLine("   Text Y position: " + this.y);

            double x_offset = pixelSizeWidth * 0;           // Disabled
            double y_offset = pixelSizeHeight * 0.83;

            Console.WriteLine("width: " + x_offset);
            Console.WriteLine("height: " + y_offset);

            /// Alignment
            /// If text.Alignment == "center", then x coordinate is indicating
            /// the center, not the left side. That's way we add pixelSizeWidth/2
            /// to x_offset
            if (this.alignment.Equals("center"))
            {
                layout.Alignment = Pango.Alignment.Center;
                x_offset        += pixelSizeWidth / 2;
            }

            con.MoveTo(this.x - x_offset, this.y - y_offset);
            Pango.CairoHelper.ShowLayout(con, layout);

//			con.MoveTo(text.X, text.Y - y_offset);
//			con.LineTo(text.X + 100, text.Y - y_offset);
//			con.Stroke();
//
//			con.MoveTo(text.X, 38.4376957919563);
//			con.LineTo(text.X + 100, 38.4376957919563);
//			con.Stroke();
        }
        private Pango.Layout CreateTimestampLayout(Gtk.PrintContext context)
        {
            Pango.Layout layout = context.CreatePangoLayout();
            layout.FontDescription        = Window.Editor.Style.FontDesc;
            layout.Width                  = Pango.Units.FromPixels((int)context.Width);
            layout.FontDescription.Style  = Pango.Style.Normal;
            layout.FontDescription.Weight = Pango.Weight.Light;

            string footer_right = DateTime.Now.ToString(

                /* Translators: Explanation of the date and time format specifications can be found here:
                * http://msdn.microsoft.com/en-us/library/system.globalization.datetimeformatinfo.aspx */
                Catalog.GetString("dddd MM/dd/yyyy, hh:mm:ss tt"));

            layout.Alignment = Pango.Alignment.Right;
            layout.SetText(footer_right);

            return(layout);
        }
Beispiel #6
0
        public void Draw(Gtk.PrintContext context,
                         Dictionary <string, string> data,
                         Dictionary <string, DataTable> dataTables,
                         double maxYToDraw,
                         bool reallyDraw)
        {
            foreach (IShape aShape in this.shapesInSection)
            {
                if (aShape is Text)
                {
                    Text aText = (Text)aShape;
                    Console.WriteLine(aText.TextValue);

                    if (data.ContainsKey(aText.Id))
                    {
                        aText.TextValue = data[aText.Id];
                    }
                }

                else if (aShape is Table)
                {
                    Table aTable = (Table)aShape;

                    /* If the table has no data, don't draw it */
                    if (!dataTables.ContainsKey(aTable.Id))
                    {
                        continue;
                    }

                    // DataTable corresponding to the Table object
                    DataTable dataTable = dataTables[aTable.Id];

                    if (this.datarowsToDraw == null)
                    {
                        this.datarowsToDraw = new List <DataRow>();

                        // Add all DataRows
                        foreach (DataRow dr in dataTable.Rows)
                        {
                            this.datarowsToDraw.Add(dr);
                        }

                        this.originalNumberOfDataRows = this.datarowsToDraw.Count;
                    }

                    Console.WriteLine("Procesando un DataTable...");

                    Text           textTemp      = null;
                    List <Text>    textRow       = new List <Text>(aTable.NumberOfColumns);
                    List <DataRow> datarowsDrawn = new List <DataRow>();

                    foreach (DataRow dataRow in this.datarowsToDraw)
                    {
                        foreach (Text aText in aTable.LastRowAdded)
                        {
                            Console.WriteLine("   Text: " + aText.TextValue);

                            textTemp           = (Text)aText.Clone();
                            textTemp.TextValue =
                                dataRow[textTemp.Id].ToString();
                            textTemp.Y = textTemp.Y +
                                         Utils.GetPixelHeightSize(textTemp,
                                                                  context.CreatePangoLayout());

                            textRow.Add(textTemp);
                        }

                        /* We stop drawing rows if we have reached the end
                         * of the section (the start of the next one) */
                        double heightOfLastText =
                            textTemp.Y + Utils.GetPixelHeightSize(textTemp,
                                                                  context.CreatePangoLayout());
                        if (heightOfLastText > maxYToDraw)
                        {
                            break;
                        }

                        aTable.AddRow(textRow);
                        textRow.Clear();

                        /* I add the DataRow to remove it later.
                         * This is for multipage reports, where there is a lot
                         * of data. Next call to this function we will draw
                         * remaning shapes */
                        datarowsDrawn.Add(dataRow);
                    }

                    // Remove already drawn datarows
                    foreach (DataRow dr in datarowsDrawn)
                    {
                        this.datarowsToDraw.Remove(dr);
                    }
                }

                // Draw the Shape
                if (reallyDraw)
                {
                    aShape.Draw(context);
                }

                // Let's reset all tables for next iteration
                if (aShape is Table)
                {
                    (aShape as Table).Reset();
                }
            }
        }