ScrollOffset ScrollAnimator::desiredTargetOffset() const { if (m_runState == RunState::WaitingToCancelOnCompositor) return currentOffset(); return (m_animationCurve || m_runState == RunState::WaitingToSendToCompositor) ? m_targetOffset : currentOffset(); }
sc::result Defective::react( const EvNewData & ev ) { (void) ev; DEBUG_MSG(NOTIFY, "new data to offset: %d", availableOffset()); DEBUG_MSG(NOTIFY, "current offset : %d", currentOffset()); context<StreamingMelter>().complete( availableOffset() - currentOffset() ); return discard_event(); }
void Lexer::setCode(const SourceCode& source, ParserArena& arena) { m_arena = &arena.identifierArena(); m_lineNumber = source.firstLine(); m_delimited = false; m_lastToken = -1; const UChar* data = source.provider()->data(); m_source = &source; m_codeStart = data; m_code = data + source.startOffset(); m_codeEnd = data + source.endOffset(); m_error = false; m_atLineStart = true; // ECMA-262 calls for stripping all Cf characters, but we only strip BOM characters. // See <https://bugs.webkit.org/show_bug.cgi?id=4931> for details. if (source.provider()->hasBOMs()) { for (const UChar* p = m_codeStart; p < m_codeEnd; ++p) { if (UNLIKELY(*p == byteOrderMark)) { copyCodeWithoutBOMs(); break; } } } // Read the first characters into the 4-character buffer. shift4(); ASSERT(currentOffset() == source.startOffset()); }
void mtpFileLoader::partLoaded(int32 offset, const MTPupload_File &result) { if (requestId) { --queue->queries; requestId = 0; } if (offset == currentOffset()) { int32 limit = locationType ? DocumentDownloadPartSize : DownloadPartSize; const MTPDupload_file &d(result.c_upload_file()); const string &bytes(d.vbytes.c_string().v); if (bytes.size()) { if (file.isOpen()) { if (file.write(bytes.data(), bytes.size()) != qint64(bytes.size())) { return finishFail(); } } else { data.append(bytes.data(), bytes.size()); } } if (bytes.size() && !(bytes.size() % 1024)) { // good next offset // offset += bytes.size(); } else { type = d.vtype; complete = true; if (file.isOpen()) { file.close(); psPostprocessFile(QFileInfo(file).absoluteFilePath()); } removeFromQueue(); App::wnd()->update(); App::wnd()->psUpdateNotifies(); } emit progress(this); } loadNext(); }
void ScrollAnimator::createAnimationCurve() { DCHECK(!m_animationCurve); m_animationCurve = CompositorScrollOffsetAnimationCurve::create( compositorOffsetFromBlinkOffset(m_targetOffset), m_lastGranularity == ScrollByPixel ? CompositorScrollOffsetAnimationCurve::ScrollDurationInverseDelta : CompositorScrollOffsetAnimationCurve::ScrollDurationConstant); m_animationCurve->setInitialValue( compositorOffsetFromBlinkOffset(currentOffset())); }
void GuiGameListMenuCtrl::onDebugRender(Point2I offset) { GuiGameListMenuProfile * profile = (GuiGameListMenuProfile *) mProfile; F32 xScale = (float) getWidth() / profile->getRowWidth(); ColorI controlBorderColor(200, 200, 200); // gray ColorI rowBorderColor(255, 127, 255); // magenta ColorI hitBorderColor(255, 0, 0); // red Point2I shrinker(-1, -1); Point2I extent = getExtent(); // render a border around the entire control RectI borderRect(offset, extent + shrinker); GFX->getDrawUtil()->drawRect(borderRect, controlBorderColor); S32 rowHeight = profile->getRowHeight(); Point2I currentOffset(offset); Point2I rowExtent(extent.x, rowHeight); rowExtent += shrinker; Point2I hitAreaExtent(profile->getHitAreaExtent()); hitAreaExtent.x *= xScale; hitAreaExtent += shrinker; Point2I hitAreaOffset = profile->mHitAreaUpperLeft; hitAreaOffset.x *= xScale; Point2I upperLeft; for (Vector<Row *>::iterator row = mRows.begin(); row < mRows.end(); ++row) { // set the top of the current row if (row != mRows.begin()) { // rows other than the first can have padding above them currentOffset.y += (*row)->mHeightPad; currentOffset.y += rowHeight; } // draw the box around the whole row's extent upperLeft = currentOffset; borderRect.point = upperLeft; borderRect.extent = rowExtent; GFX->getDrawUtil()->drawRect(borderRect, rowBorderColor); // draw the box around the hit area of the row upperLeft = currentOffset + hitAreaOffset; borderRect.point = upperLeft; borderRect.extent = hitAreaExtent; GFX->getDrawUtil()->drawRect(borderRect, hitBorderColor); } }
void mtpFileLoader::finishFail() { bool started = currentOffset(true) > 0; cancelRequests(); type = mtpc_storage_fileUnknown; complete = true; if (fileIsOpen) { file.close(); fileIsOpen = false; file.remove(); } data = QByteArray(); emit failed(this, started); file.setFileName(fname = QString()); loadNext(); }
bool ScrollAnimator::willAnimateToOffset(const ScrollOffset& targetOffset) { if (m_runState == RunState::PostAnimationCleanup) resetAnimationState(); if (m_runState == RunState::WaitingToCancelOnCompositor || m_runState == RunState::WaitingToCancelOnCompositorButNewScroll) { ASSERT(m_animationCurve); m_targetOffset = targetOffset; if (registerAndScheduleAnimation()) m_runState = RunState::WaitingToCancelOnCompositorButNewScroll; return true; } if (m_animationCurve) { if ((targetOffset - m_targetOffset).isZero()) return true; m_targetOffset = targetOffset; ASSERT(m_runState == RunState::RunningOnMainThread || m_runState == RunState::RunningOnCompositor || m_runState == RunState::RunningOnCompositorButNeedsUpdate || m_runState == RunState::RunningOnCompositorButNeedsTakeover); // Running on the main thread, simply update the target offset instead // of sending to the compositor. if (m_runState == RunState::RunningOnMainThread) { m_animationCurve->updateTarget( m_timeFunction() - m_startTime, compositorOffsetFromBlinkOffset(targetOffset)); return true; } if (registerAndScheduleAnimation()) m_runState = RunState::RunningOnCompositorButNeedsUpdate; return true; } if ((targetOffset - currentOffset()).isZero()) return false; m_targetOffset = targetOffset; m_startTime = m_timeFunction(); if (registerAndScheduleAnimation()) m_runState = RunState::WaitingToSendToCompositor; return true; }
void mtpFileLoader::finishFail() { bool started = currentOffset() > 0; if (requestId) { requestId = 0; --queue->queries; } type = MTP_storage_fileUnknown(); complete = true; if (file.isOpen()) { file.close(); file.remove(); } data = QByteArray(); emit failed(this, started); file.setFileName(QString()); loadNext(); }
void FileLoader::cancel(bool fail) { bool started = currentOffset(true) > 0; cancelRequests(); _type = mtpc_storage_fileUnknown; _complete = true; if (_fileIsOpen) { _file.close(); _fileIsOpen = false; _file.remove(); } _data = QByteArray(); if (fail) { emit failed(this, started); } else { emit progress(this); } _fname = QString(); _file.setFileName(_fname); loadNext(); }
void TimingProfiler::displayTimeProfiles() { const float FONT_SIZE = 22.f; Vector2 startLocation = Vector2( 0.f, (float)getTheRenderer().getCurrentResolution().y - ( FONT_SIZE ) ); Vector2 startLocationCurrent( 200.f, startLocation.y ); Vector2 startLocationAverage( 400.f, startLocation.y ); getTheTextRenderer().applyFontHeight( FONT_SIZE ); getTheTextRenderer().addTextToBeRendered( "Name", startLocation, RGBA_WHITE ); getTheTextRenderer().addTextToBeRendered( "Current", startLocationCurrent, RGBA_WHITE ); getTheTextRenderer().addTextToBeRendered( "Average", startLocationAverage, RGBA_WHITE ); Vector2 currentOffset( 0.f, -FONT_SIZE * 1.1f ); for( auto iter = m_TimingProfiles.begin(); iter != m_TimingProfiles.end(); ++iter ) { renderNode( *iter, FONT_SIZE, startLocation, startLocationCurrent, startLocationAverage, currentOffset ); } getTheTextRenderer().renderFrame( getTheRenderer().getCurrentResolution() ); }
bool mtpFileLoader::loadPart() { if (complete || requestId) return false; int32 limit = DocumentDownloadPartSize; MTPInputFileLocation loc; switch (locationType) { case 0: loc = MTP_inputFileLocation(MTP_long(volume), MTP_int(local), MTP_long(secret)); limit = DownloadPartSize; break; case mtpc_inputVideoFileLocation: loc = MTP_inputVideoFileLocation(MTP_long(id), MTP_long(access)); break; case mtpc_inputAudioFileLocation: loc = MTP_inputAudioFileLocation(MTP_long(id), MTP_long(access)); break; case mtpc_inputDocumentFileLocation: loc = MTP_inputDocumentFileLocation(MTP_long(id), MTP_long(access)); break; default: finishFail(); return false; break; } ++queue->queries; int32 offset = currentOffset(); MTPupload_GetFile request(MTPupload_getFile(loc, MTP_int(offset), MTP_int(limit))); requestId = MTP::send(request, rpcDone(&mtpFileLoader::partLoaded, offset), rpcFail(&mtpFileLoader::partFailed), MTP::dld + dc, 50); return true; }
S32 GuiGameListMenuCtrl::getRow(Point2I globalPoint) { Point2I localPoint = globalToLocalCoord(globalPoint); GuiGameListMenuProfile * profile = (GuiGameListMenuProfile *) mProfile; F32 xScale = (float) getWidth() / profile->getRowWidth(); S32 rowHeight = profile->getRowHeight(); Point2I currentOffset(0, 0); Point2I hitAreaUpperLeft = profile->mHitAreaUpperLeft; hitAreaUpperLeft.x *= xScale; Point2I hitAreaLowerRight = profile->mHitAreaLowerRight; hitAreaLowerRight.x *= xScale; Point2I upperLeft, lowerRight; for (Vector<Row *>::iterator row = mRows.begin(); row < mRows.end(); ++row) { if (row != mRows.begin()) { // rows other than the first can have padding above them currentOffset.y += (*row)->mHeightPad; } upperLeft = currentOffset + hitAreaUpperLeft; lowerRight = currentOffset + hitAreaLowerRight; if ((upperLeft.x <= localPoint.x) && (localPoint.x < lowerRight.x) && (upperLeft.y <= localPoint.y) && (localPoint.y < lowerRight.y)) { return row - mRows.begin(); } currentOffset.y += rowHeight; } return NO_ROW; }
int Lexer::lex(void* p1, void* p2) { ASSERT(!m_error); ASSERT(m_buffer8.isEmpty()); ASSERT(m_buffer16.isEmpty()); YYSTYPE* lvalp = static_cast<YYSTYPE*>(p1); YYLTYPE* llocp = static_cast<YYLTYPE*>(p2); int token = 0; m_terminator = false; start: while (isWhiteSpace(m_current)) shift1(); int startOffset = currentOffset(); if (m_current == -1) { if (!m_terminator && !m_delimited && !m_isReparsing) { // automatic semicolon insertion if program incomplete token = ';'; goto doneSemicolon; } return 0; } m_delimited = false; switch (m_current) { case '>': if (m_next1 == '>' && m_next2 == '>') { if (m_next3 == '=') { shift4(); token = URSHIFTEQUAL; break; } shift3(); token = URSHIFT; break; } if (m_next1 == '>') { if (m_next2 == '=') { shift3(); token = RSHIFTEQUAL; break; } shift2(); token = RSHIFT; break; } if (m_next1 == '=') { shift2(); token = GE; break; } shift1(); token = '>'; break; case '=': if (m_next1 == '=') { if (m_next2 == '=') { shift3(); token = STREQ; break; } shift2(); token = EQEQ; break; } shift1(); token = '='; break; case '!': if (m_next1 == '=') { if (m_next2 == '=') { shift3(); token = STRNEQ; break; } shift2(); token = NE; break; } shift1(); token = '!'; break; case '<': if (m_next1 == '!' && m_next2 == '-' && m_next3 == '-') { // <!-- marks the beginning of a line comment (for www usage) shift4(); goto inSingleLineComment; } if (m_next1 == '<') { if (m_next2 == '=') { shift3(); token = LSHIFTEQUAL; break; } shift2(); token = LSHIFT; break; } if (m_next1 == '=') { shift2(); token = LE; break; } shift1(); token = '<'; break; case '+': if (m_next1 == '+') { shift2(); if (m_terminator) { token = AUTOPLUSPLUS; break; } token = PLUSPLUS; break; } if (m_next1 == '=') { shift2(); token = PLUSEQUAL; break; } shift1(); token = '+'; break; case '-': if (m_next1 == '-') { if (m_atLineStart && m_next2 == '>') { shift3(); goto inSingleLineComment; } shift2(); if (m_terminator) { token = AUTOMINUSMINUS; break; } token = MINUSMINUS; break; } if (m_next1 == '=') { shift2(); token = MINUSEQUAL; break; } shift1(); token = '-'; break; case '*': if (m_next1 == '=') { shift2(); token = MULTEQUAL; break; } shift1(); token = '*'; break; case '/': if (m_next1 == '/') { shift2(); goto inSingleLineComment; } if (m_next1 == '*') goto inMultiLineComment; if (m_next1 == '=') { shift2(); token = DIVEQUAL; break; } shift1(); token = '/'; break; case '&': if (m_next1 == '&') { shift2(); token = AND; break; } if (m_next1 == '=') { shift2(); token = ANDEQUAL; break; } shift1(); token = '&'; break; case '^': if (m_next1 == '=') { shift2(); token = XOREQUAL; break; } shift1(); token = '^'; break; case '%': if (m_next1 == '=') { shift2(); token = MODEQUAL; break; } shift1(); token = '%'; break; case '|': if (m_next1 == '=') { shift2(); token = OREQUAL; break; } if (m_next1 == '|') { shift2(); token = OR; break; } shift1(); token = '|'; break; case '.': if (isASCIIDigit(m_next1)) { record8('.'); shift1(); goto inNumberAfterDecimalPoint; } token = '.'; shift1(); break; case ',': case '~': case '?': case ':': case '(': case ')': case '[': case ']': token = m_current; shift1(); break; case ';': shift1(); m_delimited = true; token = ';'; break; case '{': lvalp->intValue = currentOffset(); shift1(); token = OPENBRACE; break; case '}': lvalp->intValue = currentOffset(); shift1(); m_delimited = true; token = CLOSEBRACE; break; case '\\': goto startIdentifierWithBackslash; case '0': goto startNumberWithZeroDigit; case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': goto startNumber; case '"': case '\'': goto startString; default: if (isIdentStart(m_current)) goto startIdentifierOrKeyword; if (isLineTerminator(m_current)) { shiftLineTerminator(); m_atLineStart = true; m_terminator = true; if (lastTokenWasRestrKeyword()) { token = ';'; goto doneSemicolon; } goto start; } goto returnError; } m_atLineStart = false; goto returnToken; startString: { int stringQuoteCharacter = m_current; shift1(); const UChar* stringStart = currentCharacter(); while (m_current != stringQuoteCharacter) { // Fast check for characters that require special handling. // Catches -1, \n, \r, \, 0x2028, and 0x2029 as efficiently // as possible, and lets through all common ASCII characters. if (UNLIKELY(m_current == '\\') || UNLIKELY(((static_cast<unsigned>(m_current) - 0xE) & 0x2000))) { m_buffer16.append(stringStart, currentCharacter() - stringStart); goto inString; } shift1(); } lvalp->ident = makeIdentifier(stringStart, currentCharacter() - stringStart); shift1(); m_atLineStart = false; m_delimited = false; token = STRING; goto returnToken; inString: while (m_current != stringQuoteCharacter) { if (m_current == '\\') goto inStringEscapeSequence; if (UNLIKELY(isLineTerminator(m_current))) goto returnError; if (UNLIKELY(m_current == -1)) goto returnError; record16(m_current); shift1(); } goto doneString; inStringEscapeSequence: shift1(); if (m_current == 'x') { shift1(); if (isASCIIHexDigit(m_current) && isASCIIHexDigit(m_next1)) { record16(convertHex(m_current, m_next1)); shift2(); goto inString; } record16('x'); if (m_current == stringQuoteCharacter) goto doneString; goto inString; } if (m_current == 'u') { shift1(); if (isASCIIHexDigit(m_current) && isASCIIHexDigit(m_next1) && isASCIIHexDigit(m_next2) && isASCIIHexDigit(m_next3)) { record16(convertUnicode(m_current, m_next1, m_next2, m_next3)); shift4(); goto inString; } if (m_current == stringQuoteCharacter) { record16('u'); goto doneString; } goto returnError; } if (isASCIIOctalDigit(m_current)) { if (m_current >= '0' && m_current <= '3' && isASCIIOctalDigit(m_next1) && isASCIIOctalDigit(m_next2)) { record16((m_current - '0') * 64 + (m_next1 - '0') * 8 + m_next2 - '0'); shift3(); goto inString; } if (isASCIIOctalDigit(m_next1)) { record16((m_current - '0') * 8 + m_next1 - '0'); shift2(); goto inString; } record16(m_current - '0'); shift1(); goto inString; } if (isLineTerminator(m_current)) { shiftLineTerminator(); goto inString; } record16(singleEscape(m_current)); shift1(); goto inString; } startIdentifierWithBackslash: shift1(); if (UNLIKELY(m_current != 'u')) goto returnError; shift1(); if (UNLIKELY(!isASCIIHexDigit(m_current) || !isASCIIHexDigit(m_next1) || !isASCIIHexDigit(m_next2) || !isASCIIHexDigit(m_next3))) goto returnError; token = convertUnicode(m_current, m_next1, m_next2, m_next3); if (UNLIKELY(!isIdentStart(token))) goto returnError; goto inIdentifierAfterCharacterCheck; startIdentifierOrKeyword: { const UChar* identifierStart = currentCharacter(); shift1(); while (isIdentPart(m_current)) shift1(); if (LIKELY(m_current != '\\')) { lvalp->ident = makeIdentifier(identifierStart, currentCharacter() - identifierStart); goto doneIdentifierOrKeyword; } m_buffer16.append(identifierStart, currentCharacter() - identifierStart); } do { shift1(); if (UNLIKELY(m_current != 'u')) goto returnError; shift1(); if (UNLIKELY(!isASCIIHexDigit(m_current) || !isASCIIHexDigit(m_next1) || !isASCIIHexDigit(m_next2) || !isASCIIHexDigit(m_next3))) goto returnError; token = convertUnicode(m_current, m_next1, m_next2, m_next3); if (UNLIKELY(!isIdentPart(token))) goto returnError; inIdentifierAfterCharacterCheck: record16(token); shift4(); while (isIdentPart(m_current)) { record16(m_current); shift1(); } } while (UNLIKELY(m_current == '\\')); goto doneIdentifier; inSingleLineComment: while (!isLineTerminator(m_current)) { if (UNLIKELY(m_current == -1)) return 0; shift1(); } shiftLineTerminator(); m_atLineStart = true; m_terminator = true; if (lastTokenWasRestrKeyword()) goto doneSemicolon; goto start; inMultiLineComment: shift2(); while (m_current != '*' || m_next1 != '/') { if (isLineTerminator(m_current)) shiftLineTerminator(); else { shift1(); if (UNLIKELY(m_current == -1)) goto returnError; } } shift2(); m_atLineStart = false; goto start; startNumberWithZeroDigit: shift1(); if ((m_current | 0x20) == 'x' && isASCIIHexDigit(m_next1)) { shift1(); goto inHex; } if (m_current == '.') { record8('0'); record8('.'); shift1(); goto inNumberAfterDecimalPoint; } if ((m_current | 0x20) == 'e') { record8('0'); record8('e'); shift1(); goto inExponentIndicator; } if (isASCIIOctalDigit(m_current)) goto inOctal; if (isASCIIDigit(m_current)) goto startNumber; lvalp->doubleValue = 0; goto doneNumeric; inNumberAfterDecimalPoint: while (isASCIIDigit(m_current)) { record8(m_current); shift1(); } if ((m_current | 0x20) == 'e') { record8('e'); shift1(); goto inExponentIndicator; } goto doneNumber; inExponentIndicator: if (m_current == '+' || m_current == '-') { record8(m_current); shift1(); } if (!isASCIIDigit(m_current)) goto returnError; do { record8(m_current); shift1(); } while (isASCIIDigit(m_current)); goto doneNumber; inOctal: { do { record8(m_current); shift1(); } while (isASCIIOctalDigit(m_current)); if (isASCIIDigit(m_current)) goto startNumber; double dval = 0; const char* end = m_buffer8.end(); for (const char* p = m_buffer8.data(); p < end; ++p) { dval *= 8; dval += *p - '0'; } if (dval >= mantissaOverflowLowerBound) dval = parseIntOverflow(m_buffer8.data(), end - m_buffer8.data(), 8); m_buffer8.resize(0); lvalp->doubleValue = dval; goto doneNumeric; } inHex: { do { record8(m_current); shift1(); } while (isASCIIHexDigit(m_current)); double dval = 0; const char* end = m_buffer8.end(); for (const char* p = m_buffer8.data(); p < end; ++p) { dval *= 16; dval += toASCIIHexValue(*p); } if (dval >= mantissaOverflowLowerBound) dval = parseIntOverflow(m_buffer8.data(), end - m_buffer8.data(), 16); m_buffer8.resize(0); lvalp->doubleValue = dval; goto doneNumeric; } startNumber: record8(m_current); shift1(); while (isASCIIDigit(m_current)) { record8(m_current); shift1(); } if (m_current == '.') { record8('.'); shift1(); goto inNumberAfterDecimalPoint; } if ((m_current | 0x20) == 'e') { record8('e'); shift1(); goto inExponentIndicator; } // Fall through into doneNumber. doneNumber: // Null-terminate string for strtod. m_buffer8.append('\0'); lvalp->doubleValue = WTF::strtod(m_buffer8.data(), 0); m_buffer8.resize(0); // Fall through into doneNumeric. doneNumeric: // No identifiers allowed directly after numeric literal, e.g. "3in" is bad. if (UNLIKELY(isIdentStart(m_current))) goto returnError; m_atLineStart = false; m_delimited = false; token = NUMBER; goto returnToken; doneSemicolon: token = ';'; m_delimited = true; goto returnToken; doneIdentifier: m_atLineStart = false; m_delimited = false; lvalp->ident = makeIdentifier(m_buffer16.data(), m_buffer16.size()); m_buffer16.resize(0); token = IDENT; goto returnToken; doneIdentifierOrKeyword: { m_atLineStart = false; m_delimited = false; m_buffer16.resize(0); const HashEntry* entry = m_keywordTable.entry(m_globalData, *lvalp->ident); token = entry ? entry->lexerValue() : IDENT; goto returnToken; } doneString: // Atomize constant strings in case they're later used in property lookup. shift1(); m_atLineStart = false; m_delimited = false; lvalp->ident = makeIdentifier(m_buffer16.data(), m_buffer16.size()); m_buffer16.resize(0); token = STRING; // Fall through into returnToken. returnToken: { int lineNumber = m_lineNumber; llocp->first_line = lineNumber; llocp->last_line = lineNumber; llocp->first_column = startOffset; llocp->last_column = currentOffset(); m_lastToken = token; return token; } returnError: m_error = true; return -1; }
float64 mtpFileLoader::currentProgress() const { if (complete) return 1; if (!fullSize()) return 0; return float64(currentOffset()) / fullSize(); }
sc::result ParseSectionHeaders::react( const EvNewData & ev ) { (void) ev; DEBUG_MSG(NOTIFY, "new data to offset: %d", availableOffset()); DEBUG_MSG(NOTIFY, "current offset : %d", currentOffset()); std::size_t numberOfSections = context<StreamingMelter>().numberOfSections(); if (current_ > numberOfSections + 1) { // we already processed all sections, send padding if (availableOffset() > firstSectionDataOffset_) { context<StreamingMelter>().complete( firstSectionDataOffset_ - currentOffset() ); return transit<ParseNativeSections>(); } else { context<StreamingMelter>().complete( availableOffset() - currentOffset() ); return discard_event(); } } if (currentOffset() + sizeof(IMAGE_SECTION_HEADER) < availableOffset()) { DEBUG_MSG(NOTIFY, "header %d", current_); if (current_ < numberOfSections ) { // original PE sections PIMAGE_SECTION_HEADER header = (PIMAGE_SECTION_HEADER) context<StreamingMelter>().buffer()->data(); DEBUG_MSG(NOTIFY, "Section %s", string((PCHAR)header->Name)); if (header->PointerToRawData < firstSectionDataOffset_) firstSectionDataOffset_ = header->PointerToRawData; context<StreamingMelter>().addSection(header); } else { // added sections if (current_ == (numberOfSections)) { // dropper DEBUG_MSG(NOTIFY, "Dropper section header."); } else if (current_ == (numberOfSections + 1)) { // rebuilt resources DEBUG_MSG(NOTIFY, "Rebuilt resources section header."); } else { // unknown ... we have a problem throw parsing_error("Unknown non-original section found."); } } context<StreamingMelter>().complete( sizeof(IMAGE_SECTION_HEADER) ); current_++; } DEBUG_MSG(NOTIFY, "number of sections: %d", context<StreamingMelter>().numberOfSections()); DEBUG_MSG(NOTIFY, "file alignment : %d", context<StreamingMelter>().fileAlignment()); // context<StreamingMelter>().complete( availableOffset() - currentOffset() ); return discard_event(); }
void ScrollAnimator::updateCompositorAnimations() { ScrollAnimatorCompositorCoordinator::updateCompositorAnimations(); if (m_runState == RunState::PostAnimationCleanup) { postAnimationCleanupAndReset(); return; } if (m_runState == RunState::WaitingToCancelOnCompositor) { DCHECK(m_compositorAnimationId); abortAnimation(); postAnimationCleanupAndReset(); return; } if (m_runState == RunState::RunningOnCompositorButNeedsTakeover) { // The call to ::takeOverCompositorAnimation aborted the animation and // put us in this state. The assumption is that takeOver is called // because a main thread scrolling reason is added, and simply trying // to ::sendAnimationToCompositor will fail and we will run on the main // thread. resetAnimationIds(); m_runState = RunState::WaitingToSendToCompositor; } if (m_runState == RunState::RunningOnCompositorButNeedsUpdate || m_runState == RunState::WaitingToCancelOnCompositorButNewScroll || m_runState == RunState::RunningOnCompositorButNeedsAdjustment) { // Abort the running animation before a new one with an updated // target is added. abortAnimation(); resetAnimationIds(); if (m_runState != RunState::RunningOnCompositorButNeedsAdjustment) { // When in RunningOnCompositorButNeedsAdjustment, the call to // ::adjustScrollOffsetAnimation should have made the necessary // adjustment to the curve. m_animationCurve->updateTarget( m_timeFunction() - m_startTime, compositorOffsetFromBlinkOffset(m_targetOffset)); } if (m_runState == RunState::WaitingToCancelOnCompositorButNewScroll) { m_animationCurve->setInitialValue( compositorOffsetFromBlinkOffset(currentOffset())); } m_runState = RunState::WaitingToSendToCompositor; } if (m_runState == RunState::WaitingToSendToCompositor) { if (!m_compositorAnimationAttachedToElementId) reattachCompositorPlayerIfNeeded( getScrollableArea()->compositorAnimationTimeline()); if (!m_animationCurve) createAnimationCurve(); bool runningOnMainThread = false; bool sentToCompositor = sendAnimationToCompositor(); if (!sentToCompositor) { runningOnMainThread = registerAndScheduleAnimation(); if (runningOnMainThread) m_runState = RunState::RunningOnMainThread; } // Main thread should deal with the scroll animations it started. if (sentToCompositor || runningOnMainThread) addMainThreadScrollingReason(); else removeMainThreadScrollingReason(); } }
float64 FileLoader::currentProgress() const { if (_complete) return 1.; if (!fullSize()) return 0.; return snap(float64(currentOffset()) / fullSize(), 0., 1.); }
void DropdownWidget::Update(float deltaSecond, Vector2& mousePosition) { m_currentStateProperty = m_forStates[m_currentState]; Vector2 offset = GetOffSet(); for (unsigned int i = 0; i < NUM_WIDGET_STATE_; i++) { m_forStates[i].fromWidget.Set("parentsOffset", offset); if (m_options.size()>0) { m_options[0]->m_forStates[i].fromWidget.Set("parentsOffset", offset); } } if (m_isExpend) { for (unsigned int i = 0; i < m_options.size(); i++) { NamedProperties properties; properties.Set("widget", this, "index", i); m_options[i]->Update(deltaSecond, mousePosition, &properties); if (i>=1) { m_options[i]->SetDragable(false); } } } else { NamedProperties properties; properties.Set("widget", this, "index", 0); m_options[0]->Update(deltaSecond, mousePosition, &properties); } if (!m_isExpend) { Vector2 currentOffset(0.0f, 0.0f); currentOffset = m_options[0]->GetOffSet(); Vector2 mins; Vector2 maxs; m_options[0]->GetValueInCurrentState("mins", mins); m_options[0]->GetValueInCurrentState("maxs", maxs); AABB2D box(mins+ currentOffset, maxs+ currentOffset); if (box.IsPointInside(mousePosition)) { m_isExpend = true; } } else { Vector2 currentOffset(0.0f, 0.0f); currentOffset = m_options[0]->GetOffSet(); Vector2 mins; Vector2 maxs; m_options.back()->GetValueInCurrentState("mins", mins); m_options[0]->GetValueInCurrentState("maxs", maxs); AABB2D box(mins+ currentOffset, maxs+ currentOffset); if (!box.IsPointInside(mousePosition)) { m_isExpend = false; } //for (unsigned int i = 0; i < m_options.size(); i++) //{ // m_options[i]->GetValueInCurrentState("mins", mins); // m_options[i]->GetValueInCurrentState("maxs", maxs); // box = AABB2D(mins, maxs); // if (box.IsPointInside(mousePosition) && s_theInputSystem->WasMouseButtonJustReleased(VK_LBUTTON)) // { // NamedProperties properties; // properties.Set("widget", this, "index", i); // m_options[i]->CallEvent(&properties); // //SwitchOption(i); // } //} } }