* \brief This method should be called, when a widget changes its size. * * A "fast" queueResize will ignore the ancestors, and furthermore * not trigger the idle function. Used only within * viewportSizeChanged, and not available outside Layout and Widget. */
| 319 | * viewportSizeChanged, and not available outside Layout and Widget. |
| 320 | */ |
| 321 | void Widget::queueResize (int ref, bool extremesChanged, bool fast) |
| 322 | { |
| 323 | DBG_OBJ_ENTER ("resize", 0, "queueResize", "%d, %s, %s", |
| 324 | ref, extremesChanged ? "true" : "false", |
| 325 | fast ? "true" : "false"); |
| 326 | |
| 327 | enterQueueResize (); |
| 328 | |
| 329 | Widget *widget2, *child; |
| 330 | |
| 331 | Flags resizeFlag, extremesFlag, totalFlags; |
| 332 | |
| 333 | if (layout) { |
| 334 | // If RESIZE_QUEUED is set, this widget is already in the list. |
| 335 | if (!resizeQueued ()) |
| 336 | layout->queueResizeList->put (this); |
| 337 | |
| 338 | resizeFlag = RESIZE_QUEUED; |
| 339 | extremesFlag = EXTREMES_QUEUED; |
| 340 | } else { |
| 341 | resizeFlag = NEEDS_RESIZE; |
| 342 | extremesFlag = EXTREMES_CHANGED; |
| 343 | } |
| 344 | |
| 345 | setFlags (resizeFlag); |
| 346 | setFlags (ALLOCATE_QUEUED); |
| 347 | markSizeChange (ref); |
| 348 | |
| 349 | totalFlags = resizeFlag; |
| 350 | |
| 351 | if (extremesChanged) { |
| 352 | totalFlags = (Flags)(totalFlags | extremesFlag); |
| 353 | |
| 354 | setFlags (extremesFlag); |
| 355 | markExtremesChange (ref); |
| 356 | } |
| 357 | |
| 358 | if (fast) { |
| 359 | if (parent) { |
| 360 | // In this case, queueResize is called from top (may be a |
| 361 | // random entry point) to bottom, so markSizeChange and |
| 362 | // markExtremesChange have to be called explicitly for the |
| 363 | // parent. The tests (needsResize etc.) are uses to check |
| 364 | // whether queueResize has been called for the parent, or |
| 365 | // whether this widget is the entry point. |
| 366 | if (parent->needsResize () || parent->resizeQueued ()) |
| 367 | parent->markSizeChange (parentRef); |
| 368 | if (parent->extremesChanged () || parent->extremesQueued ()) |
| 369 | parent->markExtremesChange (parentRef); |
| 370 | } |
| 371 | } else { |
| 372 | for (widget2 = parent, child = this; widget2; |
| 373 | child = widget2, widget2 = widget2->parent) { |
| 374 | if (layout && !widget2->resizeQueued ()) |
| 375 | layout->queueResizeList->put (widget2); |
| 376 | |
| 377 | DBG_OBJ_MSGF ("resize", 2, "setting %s and ALLOCATE_QUEUED for %p", |
| 378 | resizeFlag == RESIZE_QUEUED ? |
nothing calls this directly
no test coverage detected