示例#1
0
        private void UpdateParagraphItemization(int firstParagraphToItemize)
        {
            currentLayoutRightToLeft = desiredLayoutRightToLeft;

            // Remove cached script paragraphs.  They will be reitemized on demand.
            scriptParagraphCache.RemoveScriptParagraphsStartingFrom(firstParagraphToItemize);

            // Create embedded object hosts.
            Paragraph* paragraphZero = document.GetParagraphZero();
            Paragraph* startParagraph = paragraphZero + firstParagraphToItemize;
            Paragraph* endParagraph = paragraphZero + document.ParagraphCount;
            Run* runZero = document.GetRunZero();
            for (Paragraph* paragraph = startParagraph; paragraph != endParagraph; paragraph++)
            {
                Run* startRun = runZero + paragraph->RunIndex;
                Run* endRun = startRun + paragraph->RunCount;
                int charIndex = paragraph->CharIndex;
                for (Run* run = startRun; run != endRun; run++)
                {
                    switch (run->RunKind)
                    {
                        case RunKind.Object:
                        {
                            EmbeddedObjectHost embeddedObjectHost;
                            if (!embeddedObjectHosts.TryGetValue(charIndex, out embeddedObjectHost))
                            {
                                EmbeddedObject embeddedObject = document.LookupObject(run->ObjectIndex);
                                embeddedObjectHost = new EmbeddedObjectHost(embeddedObject, charIndex,
                                    parentControl,
                                    document.LookupStyle(startRun->StyleIndex),
                                    document.LookupStyle(run->StyleIndex));

                                embeddedObjectHosts.Add(charIndex, embeddedObjectHost);
                                pendingEmbeddedObjectHostsToCreate.Enqueue(embeddedObjectHost);
                            }
                            break;
                        }

                        default:
                            break;
                    }

                    charIndex += run->CharCount;
                }
            }
        }
示例#2
0
        private Rectangle GetDrawingBoundsOfEmbeddedObject(EmbeddedObjectHost embeddedObjectHost, Point layoutOrigin)
        {
            Rectangle embeddedObjectHostLayoutBounds = embeddedObjectHost.LayoutBounds;
            int x = currentLayoutRightToLeft
                ? currentLayoutWidth - embeddedObjectHostLayoutBounds.Right + layoutOrigin.X
                : embeddedObjectHostLayoutBounds.X + layoutOrigin.X;
            int y = embeddedObjectHostLayoutBounds.Y + layoutOrigin.Y;

            return new Rectangle(x, y, embeddedObjectHostLayoutBounds.Width, embeddedObjectHostLayoutBounds.Height);
        }