1ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org 2ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org/* 3ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org * Copyright 2010 Google Inc. 4ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org * 5ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org * Use of this source code is governed by a BSD-style license that can be 6ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org * found in the LICENSE file. 7ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org */ 8ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org 9ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org#include "GrRectanizer_pow2.h" 10ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org 11d537341e16524d1e22ac5e6c8b9c8f274ba1833crobertphillipsbool GrRectanizerPow2::addRect(int width, int height, SkIPoint16* loc) { 12ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org if ((unsigned)width > (unsigned)this->width() || 13ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org (unsigned)height > (unsigned)this->height()) { 14ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org return false; 15ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org } 16ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org 17901e96df6916e6f8ba95a4ea85a2ceac31e7d633robertphillips int32_t area = width * height; // computed here since height will be modified 18ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org 19ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org height = GrNextPow2(height); 20ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org if (height < kMIN_HEIGHT_POW2) { 21ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org height = kMIN_HEIGHT_POW2; 22ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org } 23ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org 24ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org Row* row = &fRows[HeightToRowIndex(height)]; 25ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org SkASSERT(row->fRowHeight == 0 || row->fRowHeight == height); 26ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org 27ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org if (0 == row->fRowHeight) { 28ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org if (!this->canAddStrip(height)) { 29ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org return false; 30ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org } 31ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org this->initRow(row, height); 32ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org } else { 33ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org if (!row->canAddWidth(width, this->width())) { 34ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org if (!this->canAddStrip(height)) { 35ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org return false; 36ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org } 37ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org // that row is now "full", so retarget our Row record for 38ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org // another one 39ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org this->initRow(row, height); 40ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org } 41ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org } 42ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org 43ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org SkASSERT(row->fRowHeight == height); 44ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org SkASSERT(row->canAddWidth(width, this->width())); 45ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org *loc = row->fLoc; 46ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org row->fLoc.fX += width; 47ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org 48ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org SkASSERT(row->fLoc.fX <= this->width()); 49ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org SkASSERT(row->fLoc.fY <= this->height()); 50ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org SkASSERT(fNextStripY <= this->height()); 51ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org fAreaSoFar += area; 52ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org return true; 53ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org} 54ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org 55ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org/////////////////////////////////////////////////////////////////////////////// 56ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org 57ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org// factory is now in GrRectanizer_skyline.cpp 58ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org//GrRectanizer* GrRectanizer::Factory(int width, int height) { 59ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org// return SkNEW_ARGS(GrRectanizerPow2, (width, height)); 60ad854bf9c0d2029cf0730e50ac7f7ddbe32d1c97commit-bot@chromium.org//} 61