diff --git a/Osmand-kernel/osmand/src/common.cpp b/Osmand-kernel/osmand/src/common.cpp index 4161e42574..2ab73f8687 100644 --- a/Osmand-kernel/osmand/src/common.cpp +++ b/Osmand-kernel/osmand/src/common.cpp @@ -30,9 +30,6 @@ IconDrawInfo::IconDrawInfo() { } -RenderingContext::RenderingContext() -{ -} RenderingContext::~RenderingContext() { @@ -48,14 +45,6 @@ bool RenderingContext::interrupted() -float getDensityValue(RenderingContext* rc, float val) -{ - if (rc->highResMode && rc->density > 1) - return val * rc->density * rc->mapTextSize; - else - return val * rc->mapTextSize; -} - ElapsedTimer::ElapsedTimer() : elapsedTime(0) , enableFlag(true) @@ -168,9 +157,6 @@ double checkLatitude(double latitude) { return latitude; } -inline double toRadians(double angdeg) { - return angdeg / 180 * M_PI; -} int get31TileNumberX(double longitude){ longitude = checkLongitude(longitude); diff --git a/Osmand-kernel/osmand/src/common.h b/Osmand-kernel/osmand/src/common.h index 1bf57901b0..07a5d6a068 100644 --- a/Osmand-kernel/osmand/src/common.h +++ b/Osmand-kernel/osmand/src/common.h @@ -91,6 +91,9 @@ using namespace std; struct RenderingContext; +inline double toRadians(double angdeg) { + return angdeg / 180 * M_PI; +} class ElapsedTimer { @@ -150,18 +153,9 @@ struct IconDrawInfo struct RenderingContext { - RenderingContext(); - virtual ~RenderingContext(); - - virtual bool interrupted(); - virtual SkBitmap* getCachedBitmap(const std::string& bitmapResource); - virtual std::string getTranslatedString(const std::string& src); +private : + // parameters bool useEnglishNames; - - std::vector textToDraw; - std::vector iconsToDraw; - bool highResMode; - float mapTextSize; float density; float leftX; @@ -171,8 +165,13 @@ struct RenderingContext int zoom; float rotate; - float tileDivisor; + // int shadowRenderingMode = 0; // no shadow (minumum CPU) + // int shadowRenderingMode = 1; // classic shadow (the implementaton in master) + // int shadowRenderingMode = 2; // blur shadow (most CPU, but still reasonable) + // int shadowRenderingMode = 3; solid border (CPU use like classic version or even smaller) + int shadowRenderingMode; +public: // debug purpose int pointCount; int pointInsideCount; @@ -182,22 +181,102 @@ struct RenderingContext class ElapsedTimer textRendering; class ElapsedTimer nativeOperations; - // use to calculate points - float calcX; - float calcY; +// because they used in 3rd party functions +public : + static const int TILE_SIZE = 256; + + // calculated + float tileDivisor; float cosRotateTileSize; float sinRotateTileSize; - int shadowRenderingMode; + std::vector textToDraw; + std::vector iconsToDraw; + // use to calculate points + float calcX; + float calcY; // not expect any shadow int shadowLevelMin; int shadowLevelMax; -}; +public: + RenderingContext() : shadowLevelMax(0), shadowLevelMin(256), density(true), useEnglishNames(false){ + setRotate(0); + setZoom(15); + } + virtual ~RenderingContext(); -float getDensityValue(RenderingContext* rc, float val); + virtual bool interrupted(); + virtual SkBitmap* getCachedBitmap(const std::string& bitmapResource); + virtual std::string getTranslatedString(const std::string& src); + + void setZoom(int z) { + this->zoom = z; + this->tileDivisor = (1 << (31 - z)); + } + void setRotate(float rot) { + this->rotate = rot; + this->cosRotateTileSize = cos(toRadians(rot)) * TILE_SIZE; + this->sinRotateTileSize = sin(toRadians(rot)) * TILE_SIZE; + } + + void setLocation(double leftX, double topY) { + this->leftX = leftX; + this->topY = topY; + } + + void setDimension(int width, int height) { + this->width = width; + this->height = height; + } + + inline int getShadowRenderingMode(){ + return shadowRenderingMode; + } + + inline int getWidth(){ + return width; + } + + inline int getHeight(){ + return height; + } + + inline int getZoom() { + return zoom; + } + + inline float getLeft() { + return leftX; + } + + inline float getTop() { + return topY; + } + + void setShadowRenderingMode(int mode){ + this->shadowRenderingMode = mode; + } + + void setDensityScale(float val) { + density = val; + } + + float getDensityValue(float val) { + return val * density; + } + + void setUseEnglishNames(bool b){ + this->useEnglishNames = b; + } + + bool isUsingEnglishNames(){ + return this->useEnglishNames; + } + +}; SkBitmap* getCachedBitmap(RenderingContext* rc, const std::string& bitmapResource); diff --git a/Osmand-kernel/osmand/src/java_wrap.cpp b/Osmand-kernel/osmand/src/java_wrap.cpp index b1d52eede2..6ff28b46fb 100644 --- a/Osmand-kernel/osmand/src/java_wrap.cpp +++ b/Osmand-kernel/osmand/src/java_wrap.cpp @@ -32,8 +32,6 @@ extern "C" JNIEXPORT void JNICALL Java_net_osmand_plus_render_NativeOsmandLibrar jobject obj, jint searchResult) { ResultPublisher* result = (ResultPublisher*) searchResult; if(result != NULL){ - // destructor will delete result -// deleteObjects(result->result); delete result; } } @@ -177,7 +175,7 @@ extern "C" JNIEXPORT jobject JNICALL Java_net_osmand_plus_render_NativeOsmandLib RenderingRuleSearchRequest* req = initSearchRequest(ienv, renderingRuleSearchRequest); JNIRenderingContext rc; pullFromJavaRenderingContext(ienv, renderingContext, &rc); - rc.useEnglishNames = useEnglishNames; + rc.setUseEnglishNames(useEnglishNames); ResultPublisher* result = ((ResultPublisher*) searchResult); // std::vector mapDataObjects = marshalObjects(binaryMapDataObjects); @@ -263,7 +261,7 @@ extern "C" JNIEXPORT jobject JNICALL Java_net_osmand_plus_render_NativeOsmandLib RenderingRuleSearchRequest* req = initSearchRequest(ienv, renderingRuleSearchRequest); JNIRenderingContext rc; pullFromJavaRenderingContext(ienv, renderingContext, &rc); - rc.useEnglishNames = useEnglishNames; + rc.setUseEnglishNames(useEnglishNames); ResultPublisher* result = ((ResultPublisher*) searchResult); // std::vector mapDataObjects = marshalObjects(binaryMapDataObjects); @@ -329,8 +327,6 @@ jfieldID jfield_RenderingContext_density = NULL; jfieldID jfield_RenderingContext_highResMode = NULL; jfieldID jfield_RenderingContext_mapTextSize = NULL; jfieldID jfield_RenderingContext_shadowRenderingMode = NULL; -jfieldID jfield_RenderingContext_shadowLevelMin = NULL; -jfieldID jfield_RenderingContext_shadowLevelMax = NULL; jfieldID jfield_RenderingContext_ctx = NULL; jfieldID jfield_RenderingContext_textRenderingTime = NULL; jfieldID jfield_RenderingContext_lastRenderedKey = NULL; @@ -356,8 +352,6 @@ void loadJniRenderingContext(JNIEnv* env) jfield_RenderingContext_highResMode = getFid(env, jclass_RenderingContext, "highResMode", "Z" ); jfield_RenderingContext_mapTextSize = getFid(env, jclass_RenderingContext, "mapTextSize", "F" ); jfield_RenderingContext_shadowRenderingMode = getFid(env, jclass_RenderingContext, "shadowRenderingMode", "I" ); - jfield_RenderingContext_shadowLevelMin = getFid(env, jclass_RenderingContext, "shadowLevelMin", "I" ); - jfield_RenderingContext_shadowLevelMax = getFid(env, jclass_RenderingContext, "shadowLevelMax", "I" ); jfield_RenderingContext_ctx = getFid(env, jclass_RenderingContext, "ctx", "Landroid/content/Context;" ); jfield_RenderingContext_textRenderingTime = getFid(env, jclass_RenderingContext, "textRenderingTime", "I" ); jfield_RenderingContext_lastRenderedKey = getFid(env, jclass_RenderingContext, "lastRenderedKey", "I" ); @@ -374,32 +368,22 @@ void loadJniRenderingContext(JNIEnv* env) void pullFromJavaRenderingContext(JNIEnv* env, jobject jrc, JNIRenderingContext* rc) { rc->env = env; - rc->leftX = env->GetFloatField( jrc, jfield_RenderingContext_leftX ); - rc->topY = env->GetFloatField( jrc, jfield_RenderingContext_topY ); - rc->width = env->GetIntField( jrc, jfield_RenderingContext_width ); - rc->height = env->GetIntField( jrc, jfield_RenderingContext_height ); + rc->setLocation(env->GetFloatField( jrc, jfield_RenderingContext_leftX ), env->GetFloatField( jrc, jfield_RenderingContext_topY )); + rc->setDimension(env->GetIntField( jrc, jfield_RenderingContext_width ), env->GetIntField( jrc, jfield_RenderingContext_height )); - rc->zoom = env->GetIntField( jrc, jfield_RenderingContext_zoom ); - rc->rotate = env->GetFloatField( jrc, jfield_RenderingContext_rotate ); - rc->tileDivisor = env->GetFloatField( jrc, jfield_RenderingContext_tileDivisor ); + rc->setZoom(env->GetIntField( jrc, jfield_RenderingContext_zoom )); + rc->setRotate(env->GetFloatField( jrc, jfield_RenderingContext_rotate )); - rc->pointCount = env->GetIntField( jrc, jfield_RenderingContext_pointCount ); - rc->pointInsideCount = env->GetIntField( jrc, jfield_RenderingContext_pointInsideCount ); - rc->visible = env->GetIntField( jrc, jfield_RenderingContext_visible ); - rc->allObjects = env->GetIntField( jrc, jfield_RenderingContext_allObjects ); - - rc->cosRotateTileSize = env->GetFloatField( jrc, jfield_RenderingContext_cosRotateTileSize ); - rc->sinRotateTileSize = env->GetFloatField( jrc, jfield_RenderingContext_sinRotateTileSize ); - rc->density = env->GetFloatField( jrc, jfield_RenderingContext_density ); - rc->highResMode = env->GetBooleanField( jrc, jfield_RenderingContext_highResMode ); - rc->mapTextSize = env->GetFloatField( jrc, jfield_RenderingContext_mapTextSize ); - - rc->shadowRenderingMode = env->GetIntField( jrc, jfield_RenderingContext_shadowRenderingMode ); - rc->shadowLevelMin = env->GetIntField( jrc, jfield_RenderingContext_shadowLevelMin ); - rc->shadowLevelMax = env->GetIntField( jrc, jfield_RenderingContext_shadowLevelMax ); + float density = env->GetFloatField( jrc, jfield_RenderingContext_density ); + bool highResMode = env->GetBooleanField( jrc, jfield_RenderingContext_highResMode ); + float mapTextSize = env->GetFloatField( jrc, jfield_RenderingContext_mapTextSize ); + if (highResMode && density > 1) { + rc->setDensityScale(density * mapTextSize); + } else { + rc->setDensityScale(mapTextSize); + } + rc->setShadowRenderingMode(env->GetIntField( jrc, jfield_RenderingContext_shadowRenderingMode )); rc->androidContext = env->GetObjectField(jrc, jfield_RenderingContext_ctx ); - rc->lastRenderedKey = 0; - rc->javaRenderingContext = jrc; } @@ -457,7 +441,7 @@ SkBitmap* JNIRenderingContext::getCachedBitmap(const std::string& bitmapResource } std::string JNIRenderingContext::getTranslatedString(const std::string& name) { - if (this->useEnglishNames) { + if (this->isUsingEnglishNames()) { jstring n = this->env->NewStringUTF(name.c_str()); std::string res = getString(this->env, (jstring) this->env->CallStaticObjectMethod(jclass_JUnidecode, jmethod_JUnidecode_unidecode, n)); diff --git a/Osmand-kernel/osmand/src/osmand_main.cpp b/Osmand-kernel/osmand/src/osmand_main.cpp index 1f4ceec72a..f60f59204d 100644 --- a/Osmand-kernel/osmand/src/osmand_main.cpp +++ b/Osmand-kernel/osmand/src/osmand_main.cpp @@ -123,6 +123,43 @@ void printFileInformation(const char* fileName, VerboseInfo* verbose) { } } +SkColor defaultMapColor = SK_ColorLTGRAY; +void runSimpleRendering(int zoom, int left, int right, int top, int bottom, int rowBytes) { + // TODO + initBinaryMapFile(""); + // TODO not implemented (read storage from file) + RenderingRulesStorage* st = NULL; //createRenderingRulesStorage(env, storage); + RenderingRuleSearchRequest* req = new RenderingRuleSearchRequest(st); + // TODO init rule search request +// initRenderingRuleSearchRequest(env, res, renderingRuleSearchRequest); + + SearchQuery q(left, right, top, bottom, req, new ResultPublisher()); + q.zoom = zoom; + ResultPublisher* res = searchObjectsForRendering(&q, req, true, "Nothing found"); + + SkBitmap* bitmap = new SkBitmap(); + bitmap->setConfig(SkBitmap::kRGB_565_Config, 800, 800, rowBytes); +// size_t bitmapDataSize = bitmap->getSize(); +// void* bitmapData bitmapData = malloc(bitmapDataSize); +// bitmap->setPixels(bitmapData); + + osmand_log_print(LOG_INFO, "Initializing rendering"); + ElapsedTimer initObjects; + initObjects.start(); + + RenderingContext rc; + osmand_log_print(LOG_INFO, "Rendering image"); + initObjects.pause(); + SkCanvas* canvas = new SkCanvas(*bitmap); + canvas->drawColor(defaultMapColor); + doRendering(res->result, canvas, req, &rc); + + osmand_log_print(LOG_INFO, "End Rendering image"); + osmand_log_print(LOG_INFO, "Native ok (init %d, rendering %d) ", initObjects.getElapsedTime(), + rc.nativeOperations.getElapsedTime()); + return; +} + int main(int argc, char **argv) { if (argc <= 1) { printUsage(""); diff --git a/Osmand-kernel/osmand/src/rendering.cpp b/Osmand-kernel/osmand/src/rendering.cpp index 6eceedbb58..4d383cb511 100644 --- a/Osmand-kernel/osmand/src/rendering.cpp +++ b/Osmand-kernel/osmand/src/rendering.cpp @@ -34,12 +34,12 @@ void calcPoint(std::pair c, RenderingContext* rc) float tx = c.first/ (rc->tileDivisor); float ty = c.second / (rc->tileDivisor); - float dTileX = tx - rc->leftX; - float dTileY = ty - rc->topY; + float dTileX = tx - rc->getLeft(); + float dTileY = ty - rc->getTop(); rc->calcX = rc->cosRotateTileSize * dTileX - rc->sinRotateTileSize * dTileY; rc->calcY = rc->sinRotateTileSize * dTileX + rc->cosRotateTileSize * dTileY; - if (rc->calcX >= 0 && rc->calcX < rc->width && rc->calcY >= 0 && rc->calcY < rc->height) + if (rc->calcX >= 0 && rc->calcX < rc->getWidth()&& rc->calcY >= 0 && rc->calcY < rc->getHeight()) rc->pointInsideCount++; } @@ -167,7 +167,7 @@ int updatePaint(RenderingRuleSearchRequest* req, SkPaint* paint, int ind, int ar } // do not check shadow color here - if (rc->shadowRenderingMode == 1 && ind == 0) + if (rc->getShadowRenderingMode() == 1 && ind == 0) { int shadowColor = req->getIntPropertyValue(req->props()->R_SHADOW_COLOR); int shadowLayer = req->getIntPropertyValue(req->props()->R_SHADOW_RADIUS); @@ -187,7 +187,7 @@ void renderText(MapDataObject* obj, RenderingRuleSearchRequest* req, RenderingCo if (it->second.length() > 0) { std::string name = it->second; name =rc->getTranslatedString(name); - req->setInitialTagValueZoom(tag, value, rc->zoom, obj); + req->setInitialTagValueZoom(tag, value, rc->getZoom(), obj); req->setIntFilter(req->props()->R_TEXT_LENGTH, name.length()); std::string tagName = it->first == "name" ? "" : it->first; req->setStringFilter(req->props()->R_NAME_TAG, tagName); @@ -211,7 +211,7 @@ void renderText(MapDataObject* obj, RenderingRuleSearchRequest* req, RenderingCo void drawPolylineShadow(SkCanvas* cv, SkPaint* paint, RenderingContext* rc, SkPath* path, int shadowColor, int shadowRadius) { // blurred shadows - if (rc->shadowRenderingMode == 2 && shadowRadius > 0) { + if (rc->getShadowRenderingMode() == 2 && shadowRadius > 0) { // simply draw shadow? difference from option 3 ? // paint->setColor(0xffffffff); paint->setLooper(new SkBlurDrawLooper(shadowRadius, 0, 0, shadowColor))->unref(); @@ -219,7 +219,7 @@ void drawPolylineShadow(SkCanvas* cv, SkPaint* paint, RenderingContext* rc, SkPa } // option shadow = 3 with solid border - if (rc->shadowRenderingMode == 3 && shadowRadius > 0) { + if (rc->getShadowRenderingMode() == 3 && shadowRadius > 0) { paint->setLooper(NULL); paint->setStrokeWidth(paint->getStrokeWidth() + shadowRadius * 2); // paint->setColor(0xffbababa); @@ -281,14 +281,14 @@ void drawPolyline(MapDataObject* mObj, RenderingRuleSearchRequest* req, SkCanvas std::string tag = pair.first; std::string value = pair.second; - req->setInitialTagValueZoom(tag, value, rc->zoom, mObj); + req->setInitialTagValueZoom(tag, value, rc->getZoom(), mObj); req->setIntFilter(req->props()->R_LAYER, layer); bool rendered = req->searchRule(2); if (!rendered || !updatePaint(req, paint, 0, 0, rc)) { return; } int oneway = 0; - if (rc->zoom >= 16 && pair.first == "highway") { + if (rc->getZoom() >= 16 && pair.first == "highway") { if (mObj->containsAdditional("oneway", "yes")) { oneway = 1; } else if (mObj->containsAdditional("oneway", "-1")) { @@ -345,7 +345,7 @@ void drawPolygon(MapDataObject* mObj, RenderingRuleSearchRequest* req, SkCanvas* std::string tag = pair.first; std::string value = pair.second; - req->setInitialTagValueZoom(tag, value, rc->zoom, mObj); + req->setInitialTagValueZoom(tag, value, rc->getZoom(), mObj); bool rendered = req->searchRule(3); float xText = 0; @@ -397,7 +397,7 @@ void drawPoint(MapDataObject* mObj, RenderingRuleSearchRequest* req, SkCanvas* c std::string tag = pair.first; std::string value = pair.second; - req->setInitialTagValueZoom(tag, value, rc->zoom, mObj); + req->setInitialTagValueZoom(tag, value, rc->getZoom(), mObj); req->searchRule(1); std::string resId = req->getStringPropertyValue(req-> props()-> R_ICON); SkBitmap* bmp = getCachedBitmap(rc, resId); @@ -452,9 +452,9 @@ void drawObject(RenderingContext* rc, MapDataObject* mObj, SkCanvas* cv, Renderi void drawIconsOverCanvas(RenderingContext* rc, SkCanvas* canvas) { - int skewConstant = (int) getDensityValue(rc, 16); - int iconsW = rc -> width / skewConstant; - int iconsH = rc -> height / skewConstant; + int skewConstant = (int) rc->getDensityValue(16); + int iconsW = rc -> getWidth() / skewConstant; + int iconsH = rc -> getHeight() / skewConstant; int len = (iconsW * iconsH) / 32; int alreadyDrawnIcons[len]; memset(alreadyDrawnIcons, 0, sizeof(int)*len); @@ -464,30 +464,26 @@ void drawIconsOverCanvas(RenderingContext* rc, SkCanvas* canvas) for(;ji< rc->iconsToDraw.size(); ji++) { IconDrawInfo icon = rc->iconsToDraw.at(ji); - if (icon.y >= 0 && icon.y < rc -> height && icon.x >= 0 && icon.x < rc -> width && - icon.bmp != NULL) { - int z = (((int) icon.x / skewConstant) + ((int) icon.y / skewConstant) * iconsW); - int i = z / 32; - if (i >= len) { - continue; - } - int ind = alreadyDrawnIcons[i]; - int b = z % 32; - // check bit b if it is set - if (((ind >> b) & 1) == 0) { - alreadyDrawnIcons[i] = ind | (1 << b); - SkBitmap* ico = icon.bmp; - if(rc->highResMode) { - float left = icon.x - getDensityValue(rc, ico->width() / 2); - float top = icon.y - getDensityValue(rc, ico->height() / 2); - SkRect r = SkRect::MakeXYWH(left, top, getDensityValue(rc, ico->width()), getDensityValue(rc, ico->height())); - PROFILE_NATIVE_OPERATION(rc, canvas->drawBitmapRect(*ico, (SkIRect*) NULL, r, &p)); - } else { - PROFILE_NATIVE_OPERATION(rc, canvas->drawBitmap(*ico, icon.x - ico->width() / 2, icon.y - ico->height() / 2, &p)); - } - } + if (icon.y >= 0 && icon.y < rc->getHeight() && icon.x >= 0 && icon.x < rc->getWidth() && icon.bmp != NULL) { + int z = (((int) icon.x / skewConstant) + ((int) icon.y / skewConstant) * iconsW); + int i = z / 32; + if (i >= len) { + continue; + } + int ind = alreadyDrawnIcons[i]; + int b = z % 32; + // check bit b if it is set + if (((ind >> b) & 1) == 0) { + alreadyDrawnIcons[i] = ind | (1 << b); + SkBitmap* ico = icon.bmp; + float left = icon.x - rc->getDensityValue(ico->width() / 2); + float top = icon.y - rc->getDensityValue(ico->height() / 2); + SkRect r = SkRect::MakeXYWH(left, top, rc->getDensityValue(ico->width()), + rc->getDensityValue(ico->height())); + PROFILE_NATIVE_OPERATION(rc, canvas->drawBitmapRect(*ico, (SkIRect*) NULL, r, &p)); + } } - if(rc->interrupted()){ + if (rc->interrupted()) { return; } } @@ -508,7 +504,7 @@ HMAP::hash_map > sortObjectsByProperOrder(std::vector getSimpleLayer(); tag_value pair = mobj->types[j]; - req->setTagValueZoomLayer(pair.first, pair.second, rc->zoom, layer, mobj); + req->setTagValueZoomLayer(pair.first, pair.second, rc->getZoom(), layer, mobj); req->setIntFilter(req->props()->R_AREA, mobj->area); req->setIntFilter(req->props()->R_POINT, mobj->points.size() == 1); req->setIntFilter(req->props()->R_CYCLE, mobj->cycle()); @@ -548,7 +544,7 @@ void doRendering(std::vector mapDataObjects, SkCanvas* canvas, bool shadowDrawn = false; for (std::set::iterator ks = keys.begin(); ks != keys.end(); ks++) { - if (!shadowDrawn && *ks >= rc->shadowLevelMin && *ks <= rc->shadowLevelMax && rc->shadowRenderingMode > 1) { + if (!shadowDrawn && *ks >= rc->shadowLevelMin && *ks <= rc->shadowLevelMax && rc->getShadowRenderingMode() > 1) { for (std::set::iterator ki = ks; ki != keys.end(); ki++) { if (*ki > rc->shadowLevelMax || rc->interrupted()) { break; diff --git a/Osmand-kernel/osmand/src/textdraw.cpp b/Osmand-kernel/osmand/src/textdraw.cpp index 1ca7373517..c4720720b5 100644 --- a/Osmand-kernel/osmand/src/textdraw.cpp +++ b/Osmand-kernel/osmand/src/textdraw.cpp @@ -227,8 +227,8 @@ bool calculatePathToRotate(RenderingContext* rc, TextDrawInfo* p) { float normalTextLen = 1.5 * textw; for (i = 0; i < len; i++) { - bool inside = points[i].fX >= 0 && points[i].fX <= rc->width && - points[i].fY >= 0 && points[i].fY <= rc->height; + bool inside = points[i].fX >= 0 && points[i].fX <= rc->getWidth() && + points[i].fY >= 0 && points[i].fY <= rc->getHeight(); if (i > 0) { float d = sqrt( (points[i].fX - points[i - 1].fX) * (points[i].fX - points[i - 1].fX) @@ -411,7 +411,7 @@ bool findTextIntersection(SkCanvas* cv, RenderingContext* rc, quad_treemeasureText(text->text.c_str(), text->text.length(), &text->bounds); // make wider - text->bounds.inset(-getDensityValue(rc, 3), -getDensityValue(rc, 10)); + text->bounds.inset(-rc->getDensityValue( 3), -rc->getDensityValue(10)); bool display = calculatePathToRotate(rc, text); if (!display) { @@ -437,7 +437,7 @@ bool findTextIntersection(SkCanvas* cv, RenderingContext* rc, quad_treeminDistance > 0) { SkRect boundsSearch = text->bounds; - boundsSearch.inset(-getDensityValue(rc, max(5.0f, text->minDistance)), -getDensityValue(rc, 15)); + boundsSearch.inset(-rc->getDensityValue(max(5.0f, text->minDistance)), -rc->getDensityValue(15)); boundIntersections.query_in_box(boundsSearch, searchText); // drawTestBox(cv, &boundsSearch, text->pathRotate, paintIcon, text->text, paintText); for (uint i = 0; i < searchText.size(); i++) { @@ -460,7 +460,7 @@ bool textOrder(TextDrawInfo* text1, TextDrawInfo* text2) { SkTypeface* serif = SkTypeface::CreateFromName("Droid Serif", SkTypeface::kNormal); void drawTextOverCanvas(RenderingContext* rc, SkCanvas* cv) { - SkRect r = SkRect::MakeLTRB(0, 0, rc->width, rc->height); + SkRect r = SkRect::MakeLTRB(0, 0, rc->getWidth(), rc->getHeight()); r.inset(-100, -100); quad_tree boundsIntersect(r, 4, 0.6); @@ -484,7 +484,7 @@ void drawTextOverCanvas(RenderingContext* rc, SkCanvas* cv) { TextDrawInfo* text = rc->textToDraw.at(i); if (text->text.length() > 0) { // sest text size before finding intersection (it is used there) - float textSize = getDensityValue(rc, text->textSize); + float textSize = rc->getDensityValue(text->textSize); paintText.setTextSize(textSize); paintText.setFakeBoldText(text->bold); paintText.setColor(text->textColor); @@ -520,15 +520,12 @@ void drawTextOverCanvas(RenderingContext* rc, SkCanvas* cv) { if (text->shieldRes.length() > 0) { SkBitmap* ico = getCachedBitmap(rc, text->shieldRes); if (ico != NULL) { - if(rc->highResMode) { - float left = text->centerX - getDensityValue(rc, ico->width() / 2) - 0.5f; - float top =text->centerY - getDensityValue(rc, ico->height() / 2) - getDensityValue(rc, 4.5f); - SkRect r = SkRect::MakeXYWH(left, top, getDensityValue(rc, ico->width()), getDensityValue(rc, ico->height())); - PROFILE_NATIVE_OPERATION(rc, cv->drawBitmapRect(*ico, (SkIRect*) NULL, r, &paintIcon)); - } else { - PROFILE_NATIVE_OPERATION(rc, cv->drawBitmap(*ico, text->centerX - ico->width() / 2 - 0.5f, - text->centerY - ico->height() / 2 - getDensityValue(rc, 4.5f), &paintIcon)); - } + float left = text->centerX - rc->getDensityValue(ico->width() / 2) - 0.5f; + float top = text->centerY - rc->getDensityValue(ico->height() / 2) + - rc->getDensityValue(4.5f); + SkRect r = SkRect::MakeXYWH(left, top, rc->getDensityValue(ico->width()), + rc->getDensityValue(ico->height())); + PROFILE_NATIVE_OPERATION(rc, cv->drawBitmapRect(*ico, (SkIRect*) NULL, r, &paintIcon)); } } drawWrappedText(rc, cv, text, textSize, paintText);