| OLD | NEW | 
|---|
| 1 /** | 1 /** | 
| 2  * Copyright (C) 2011 Nokia Inc.  All rights reserved. | 2  * Copyright (C) 2011 Nokia Inc.  All rights reserved. | 
| 3  * Copyright (C) 2012 Google Inc. All rights reserved. | 3  * Copyright (C) 2012 Google Inc. All rights reserved. | 
| 4  * | 4  * | 
| 5  * This library is free software; you can redistribute it and/or | 5  * This library is free software; you can redistribute it and/or | 
| 6  * modify it under the terms of the GNU Library General Public | 6  * modify it under the terms of the GNU Library General Public | 
| 7  * License as published by the Free Software Foundation; either | 7  * License as published by the Free Software Foundation; either | 
| 8  * version 2 of the License, or (at your option) any later version. | 8  * version 2 of the License, or (at your option) any later version. | 
| 9  * | 9  * | 
| 10  * This library is distributed in the hope that it will be useful, | 10  * This library is distributed in the hope that it will be useful, | 
| (...skipping 25 matching lines...) Expand all  Loading... | 
| 36       m_type(quote), | 36       m_type(quote), | 
| 37       m_depth(0), | 37       m_depth(0), | 
| 38       m_next(nullptr), | 38       m_next(nullptr), | 
| 39       m_previous(nullptr), | 39       m_previous(nullptr), | 
| 40       m_owningPseudo(&pseudo), | 40       m_owningPseudo(&pseudo), | 
| 41       m_attached(false) { | 41       m_attached(false) { | 
| 42   setDocumentForAnonymous(&pseudo.document()); | 42   setDocumentForAnonymous(&pseudo.document()); | 
| 43 } | 43 } | 
| 44 | 44 | 
| 45 LayoutQuote::~LayoutQuote() { | 45 LayoutQuote::~LayoutQuote() { | 
| 46   ASSERT(!m_attached); | 46   DCHECK(!m_attached); | 
| 47   ASSERT(!m_next && !m_previous); | 47   DCHECK(!m_next); | 
|  | 48   DCHECK(!m_previous); | 
| 48 } | 49 } | 
| 49 | 50 | 
| 50 void LayoutQuote::willBeDestroyed() { | 51 void LayoutQuote::willBeDestroyed() { | 
| 51   detachQuote(); | 52   detachQuote(); | 
| 52   LayoutInline::willBeDestroyed(); | 53   LayoutInline::willBeDestroyed(); | 
| 53 } | 54 } | 
| 54 | 55 | 
| 55 void LayoutQuote::willBeRemovedFromTree() { | 56 void LayoutQuote::willBeRemovedFromTree() { | 
| 56   LayoutInline::willBeRemovedFromTree(); | 57   LayoutInline::willBeRemovedFromTree(); | 
| 57   detachQuote(); | 58   detachQuote(); | 
| (...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 302   if (const QuotesData* customQuotes = style()->quotes()) | 303   if (const QuotesData* customQuotes = style()->quotes()) | 
| 303     return customQuotes; | 304     return customQuotes; | 
| 304 | 305 | 
| 305   if (const QuotesData* quotes = quotesDataForLanguage(style()->locale())) | 306   if (const QuotesData* quotes = quotesDataForLanguage(style()->locale())) | 
| 306     return quotes; | 307     return quotes; | 
| 307 | 308 | 
| 308   return basicQuotesData(); | 309   return basicQuotesData(); | 
| 309 } | 310 } | 
| 310 | 311 | 
| 311 void LayoutQuote::attachQuote() { | 312 void LayoutQuote::attachQuote() { | 
| 312   ASSERT(view()); | 313   DCHECK(view()); | 
| 313   ASSERT(!m_attached); | 314   DCHECK(!m_attached); | 
| 314   ASSERT(!m_next && !m_previous); | 315   DCHECK(!m_next); | 
| 315   ASSERT(isRooted()); | 316   DCHECK(!m_previous); | 
|  | 317   DCHECK(isRooted()); | 
| 316 | 318 | 
| 317   if (!view()->layoutQuoteHead()) { | 319   if (!view()->layoutQuoteHead()) { | 
| 318     view()->setLayoutQuoteHead(this); | 320     view()->setLayoutQuoteHead(this); | 
| 319     m_attached = true; | 321     m_attached = true; | 
| 320     return; | 322     return; | 
| 321   } | 323   } | 
| 322 | 324 | 
| 323   for (LayoutObject* predecessor = previousInPreOrder(); predecessor; | 325   for (LayoutObject* predecessor = previousInPreOrder(); predecessor; | 
| 324        predecessor = predecessor->previousInPreOrder()) { | 326        predecessor = predecessor->previousInPreOrder()) { | 
| 325     // Skip unattached predecessors to avoid having stale m_previous pointers | 327     // Skip unattached predecessors to avoid having stale m_previous pointers | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
| 338     m_next = view()->layoutQuoteHead(); | 340     m_next = view()->layoutQuoteHead(); | 
| 339     view()->setLayoutQuoteHead(this); | 341     view()->setLayoutQuoteHead(this); | 
| 340     if (m_next) | 342     if (m_next) | 
| 341       m_next->m_previous = this; | 343       m_next->m_previous = this; | 
| 342   } | 344   } | 
| 343   m_attached = true; | 345   m_attached = true; | 
| 344 | 346 | 
| 345   for (LayoutQuote* quote = this; quote; quote = quote->m_next) | 347   for (LayoutQuote* quote = this; quote; quote = quote->m_next) | 
| 346     quote->updateDepth(); | 348     quote->updateDepth(); | 
| 347 | 349 | 
| 348   ASSERT(!m_next || m_next->m_attached); | 350   DCHECK(!m_next || m_next->m_attached); | 
| 349   ASSERT(!m_next || m_next->m_previous == this); | 351   DCHECK(!m_next || m_next->m_previous == this); | 
| 350   ASSERT(!m_previous || m_previous->m_attached); | 352   DCHECK(!m_previous || m_previous->m_attached); | 
| 351   ASSERT(!m_previous || m_previous->m_next == this); | 353   DCHECK(!m_previous || m_previous->m_next == this); | 
| 352 } | 354 } | 
| 353 | 355 | 
| 354 void LayoutQuote::detachQuote() { | 356 void LayoutQuote::detachQuote() { | 
| 355   ASSERT(!m_next || m_next->m_attached); | 357   DCHECK(!m_next || m_next->m_attached); | 
| 356   ASSERT(!m_previous || m_previous->m_attached); | 358   DCHECK(!m_previous || m_previous->m_attached); | 
| 357   if (!m_attached) | 359   if (!m_attached) | 
| 358     return; | 360     return; | 
| 359 | 361 | 
| 360   // Reset our attached status at this point because it's possible for | 362   // Reset our attached status at this point because it's possible for | 
| 361   // updateDepth() to call into attachQuote(). Attach quote walks the layout | 363   // updateDepth() to call into attachQuote(). Attach quote walks the layout | 
| 362   // tree looking for quotes that are attached and does work on them. | 364   // tree looking for quotes that are attached and does work on them. | 
| 363   m_attached = false; | 365   m_attached = false; | 
| 364 | 366 | 
| 365   if (m_previous) | 367   if (m_previous) | 
| 366     m_previous->m_next = m_next; | 368     m_previous->m_next = m_next; | 
| 367   else if (view()) | 369   else if (view()) | 
| 368     view()->setLayoutQuoteHead(m_next); | 370     view()->setLayoutQuoteHead(m_next); | 
| 369   if (m_next) | 371   if (m_next) | 
| 370     m_next->m_previous = m_previous; | 372     m_next->m_previous = m_previous; | 
| 371   if (!documentBeingDestroyed()) { | 373   if (!documentBeingDestroyed()) { | 
| 372     for (LayoutQuote* quote = m_next; quote; quote = quote->m_next) | 374     for (LayoutQuote* quote = m_next; quote; quote = quote->m_next) | 
| 373       quote->updateDepth(); | 375       quote->updateDepth(); | 
| 374   } | 376   } | 
| 375   m_next = nullptr; | 377   m_next = nullptr; | 
| 376   m_previous = nullptr; | 378   m_previous = nullptr; | 
| 377   m_depth = 0; | 379   m_depth = 0; | 
| 378 } | 380 } | 
| 379 | 381 | 
| 380 void LayoutQuote::updateDepth() { | 382 void LayoutQuote::updateDepth() { | 
| 381   ASSERT(m_attached); | 383   DCHECK(m_attached); | 
| 382   int oldDepth = m_depth; | 384   int oldDepth = m_depth; | 
| 383   m_depth = 0; | 385   m_depth = 0; | 
| 384   if (m_previous) { | 386   if (m_previous) { | 
| 385     m_depth = m_previous->m_depth; | 387     m_depth = m_previous->m_depth; | 
| 386     switch (m_previous->m_type) { | 388     switch (m_previous->m_type) { | 
| 387       case OPEN_QUOTE: | 389       case OPEN_QUOTE: | 
| 388       case NO_OPEN_QUOTE: | 390       case NO_OPEN_QUOTE: | 
| 389         m_depth++; | 391         m_depth++; | 
| 390         break; | 392         break; | 
| 391       case CLOSE_QUOTE: | 393       case CLOSE_QUOTE: | 
| 392       case NO_CLOSE_QUOTE: | 394       case NO_CLOSE_QUOTE: | 
| 393         if (m_depth) | 395         if (m_depth) | 
| 394           m_depth--; | 396           m_depth--; | 
| 395         break; | 397         break; | 
| 396     } | 398     } | 
| 397   } | 399   } | 
| 398   if (oldDepth != m_depth) | 400   if (oldDepth != m_depth) | 
| 399     updateText(); | 401     updateText(); | 
| 400 } | 402 } | 
| 401 | 403 | 
| 402 }  // namespace blink | 404 }  // namespace blink | 
| OLD | NEW | 
|---|