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