| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "SkColorFilter.h" | 8 #include "SkColorFilter.h" |
| 9 #include "SkDevice.h" | 9 #include "SkDevice.h" |
| 10 #include "SkDraw.h" | 10 #include "SkDraw.h" |
| 11 #include "SkDrawFilter.h" | 11 #include "SkDrawFilter.h" |
| 12 #include "SkImage_Base.h" | 12 #include "SkImage_Base.h" |
| 13 #include "SkLightingShader.h" |
| 13 #include "SkMetaData.h" | 14 #include "SkMetaData.h" |
| 14 #include "SkNinePatchIter.h" | 15 #include "SkNinePatchIter.h" |
| 15 #include "SkPatchUtils.h" | 16 #include "SkPatchUtils.h" |
| 16 #include "SkPathMeasure.h" | 17 #include "SkPathMeasure.h" |
| 17 #include "SkRasterClip.h" | 18 #include "SkRasterClip.h" |
| 18 #include "SkRSXform.h" | 19 #include "SkRSXform.h" |
| 19 #include "SkShader.h" | 20 #include "SkShader.h" |
| 20 #include "SkTextBlob.h" | 21 #include "SkTextBlob.h" |
| 21 #include "SkTextToPathIter.h" | 22 #include "SkTextToPathIter.h" |
| 22 | 23 |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 205 pnt.setColorFilter(cf); | 206 pnt.setColorFilter(cf); |
| 206 } | 207 } |
| 207 | 208 |
| 208 path.rewind(); | 209 path.rewind(); |
| 209 path.addPoly(quad, 4, true); | 210 path.addPoly(quad, 4, true); |
| 210 path.setConvexity(SkPath::kConvex_Convexity); | 211 path.setConvexity(SkPath::kConvex_Convexity); |
| 211 this->drawPath(draw, path, pnt, NULL, true); | 212 this->drawPath(draw, path, pnt, NULL, true); |
| 212 } | 213 } |
| 213 } | 214 } |
| 214 | 215 |
| 216 #include "SkGr.h" |
| 217 |
| 218 static bool wrap_as_bm(const SkImage* image, SkBitmap* bm) { |
| 219 GrTexture* tex = as_IB(image)->getTexture(); |
| 220 if (tex) { |
| 221 GrWrapTextureInBitmap(tex, image->width(), image->height(), image->isOpa
que(), bm); |
| 222 return true; |
| 223 } else { |
| 224 return as_IB(image)->getROPixels(bm); |
| 225 } |
| 226 } |
| 227 |
| 228 void SkBaseDevice::drawLitAtlas(const SkDraw& draw, const SkImage* atlas, const
SkRSXform xform[], |
| 229 const SkRect diffTex[], const SkRect normTex[], |
| 230 const SkColor colors[], int count, SkXfermode::M
ode mode, |
| 231 const SkPaint& paint, |
| 232 const SkLight lights[], int numLights) { |
| 233 SkPath path; |
| 234 path.setIsVolatile(true); |
| 235 |
| 236 SkBitmap bm; |
| 237 if (!wrap_as_bm(atlas, &bm)) { |
| 238 return; |
| 239 } |
| 240 |
| 241 SkLightingShader::Lights::Builder builder(lights, numLights); |
| 242 SkAutoTUnref<const SkLightingShader::Lights> lights2(builder.finish()); |
| 243 |
| 244 for (int i = 0; i < count; ++i) { |
| 245 SkASSERT(diffTex[i].width() == normTex[i].width() && |
| 246 diffTex[i].height() == normTex[i].height()); |
| 247 |
| 248 SkPoint quad[4]; |
| 249 xform[i].toQuad(diffTex[i].width(), diffTex[i].height(), quad); |
| 250 |
| 251 SkMatrix diffLocalM; |
| 252 diffLocalM.setRSXform(xform[i]); |
| 253 diffLocalM.preTranslate(-diffTex[i].left(), -diffTex[i].top()); |
| 254 |
| 255 SkMatrix normLocalM; |
| 256 normLocalM.setRSXform(xform[i]); |
| 257 normLocalM.preTranslate(diffTex[i].left()-normTex[i].left(), |
| 258 diffTex[i].top()-normTex[i].top()); |
| 259 normLocalM.preTranslate(-diffTex[i].left(), -diffTex[i].top()); |
| 260 |
| 261 SkPaint pnt(paint); |
| 262 |
| 263 pnt.setShader(SkLightingShader::Create(bm, bm, |
| 264 lights2, |
| 265 xform[i], &diffLocalM, &normLocal
M)); |
| 266 |
| 267 if (colors && colors[i] != SK_ColorWHITE) { |
| 268 SkAutoTUnref<SkColorFilter> cf(SkColorFilter::CreateModeFilter(color
s[i], mode)); |
| 269 pnt.setColorFilter(cf); |
| 270 } |
| 271 |
| 272 path.rewind(); |
| 273 path.addPoly(quad, 4, true); |
| 274 path.setConvexity(SkPath::kConvex_Convexity); |
| 275 this->drawPath(draw, path, pnt, NULL, true); |
| 276 } |
| 277 } |
| 278 |
| 215 ////////////////////////////////////////////////////////////////////////////////
/////////////////// | 279 ////////////////////////////////////////////////////////////////////////////////
/////////////////// |
| 216 | 280 |
| 217 bool SkBaseDevice::readPixels(const SkImageInfo& info, void* dstP, size_t rowByt
es, int x, int y) { | 281 bool SkBaseDevice::readPixels(const SkImageInfo& info, void* dstP, size_t rowByt
es, int x, int y) { |
| 218 #ifdef SK_DEBUG | 282 #ifdef SK_DEBUG |
| 219 SkASSERT(info.width() > 0 && info.height() > 0); | 283 SkASSERT(info.width() > 0 && info.height() > 0); |
| 220 SkASSERT(dstP); | 284 SkASSERT(dstP); |
| 221 SkASSERT(rowBytes >= info.minRowBytes()); | 285 SkASSERT(rowBytes >= info.minRowBytes()); |
| 222 SkASSERT(x >= 0 && y >= 0); | 286 SkASSERT(x >= 0 && y >= 0); |
| 223 | 287 |
| 224 const SkImageInfo& srcInfo = this->imageInfo(); | 288 const SkImageInfo& srcInfo = this->imageInfo(); |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 408 if (kUnknown_SkPixelGeometry == fSurfaceProps.pixelGeometry() | 472 if (kUnknown_SkPixelGeometry == fSurfaceProps.pixelGeometry() |
| 409 || this->onShouldDisableLCD(paint)) { | 473 || this->onShouldDisableLCD(paint)) { |
| 410 | 474 |
| 411 flags &= ~SkPaint::kLCDRenderText_Flag; | 475 flags &= ~SkPaint::kLCDRenderText_Flag; |
| 412 flags |= SkPaint::kGenA8FromLCD_Flag; | 476 flags |= SkPaint::kGenA8FromLCD_Flag; |
| 413 } | 477 } |
| 414 | 478 |
| 415 return flags; | 479 return flags; |
| 416 } | 480 } |
| 417 | 481 |
| OLD | NEW |