From f64d7a352dd29bb7bc386fc1e829a764cdc9f64e Mon Sep 17 00:00:00 2001 From: "gene@chromium.org" Date: Wed, 9 May 2012 17:22:21 +0000 Subject: A better fix for scaling issue. Instead of using TLS and static function, pass scaling in the skia dictionary. BUG=125499 TEST=Make sure printing is working. Review URL: https://chromiumcodereview.appspot.com/10387022 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@136055 0039d316-1c4b-4281-b951-d872f2087c98 --- printing/custom_scaling.cc | 37 ------------------------------------- printing/custom_scaling.h | 33 --------------------------------- printing/metafile_skia_wrapper.cc | 22 +++++++++++++++++++++- printing/metafile_skia_wrapper.h | 6 +++++- printing/printing.gyp | 2 -- 5 files changed, 26 insertions(+), 74 deletions(-) delete mode 100644 printing/custom_scaling.cc delete mode 100644 printing/custom_scaling.h (limited to 'printing') diff --git a/printing/custom_scaling.cc b/printing/custom_scaling.cc deleted file mode 100644 index dead79c..0000000 --- a/printing/custom_scaling.cc +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "printing/custom_scaling.h" - -#include "base/threading/thread_local.h" - -namespace printing { - -static base::ThreadLocalPointer gPrintingPageScale; - -bool GetCustomPrintingPageScale(double* scale) { - double* ptr = gPrintingPageScale.Get(); - if (ptr != NULL) { - *scale = *ptr; - } - return ptr != NULL; -} - -void SetCustomPrintingPageScale(double scale) { - ClearCustomPrintingPageScale(); - double* ptr = new double; - *ptr = scale; - gPrintingPageScale.Set(ptr); -} - -void ClearCustomPrintingPageScale() { - double* ptr = gPrintingPageScale.Get(); - if (ptr != NULL) { - delete ptr; - } - gPrintingPageScale.Set(NULL); -} - -} // namespace printing - diff --git a/printing/custom_scaling.h b/printing/custom_scaling.h deleted file mode 100644 index 3f46d2e..0000000 --- a/printing/custom_scaling.h +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef PRINTING_CUSTOM_SCALING_H_ -#define PRINTING_CUSTOM_SCALING_H_ - -#include "printing/printing_export.h" - -namespace printing { - -// This set of function allows plugin to set custom printing scale in the -// thread local storage. It is a hack to pass scale through this, but -// alternative is to do major refactoring to pass this scale factor all the -// from plugin through webkit to the upper level. -// We should definitely revisit this approach in favor of better implementation -// later. In the mean time, this looks like a simplest way fixing printing -// issues now. - -// Gets custom printing scale from the TLS. Return false if it has not been -// set. -PRINTING_EXPORT bool GetCustomPrintingPageScale(double* scale); - -// Sets custom printing scale in TLS. -PRINTING_EXPORT void SetCustomPrintingPageScale(double scale); - -// Clears custom printing scale in TLS. -PRINTING_EXPORT void ClearCustomPrintingPageScale(); - -} // namespace printing - -#endif // PRINTING_CUSTOM_SCALING_H_ - diff --git a/printing/metafile_skia_wrapper.cc b/printing/metafile_skia_wrapper.cc index ee24a66..d4634ef 100644 --- a/printing/metafile_skia_wrapper.cc +++ b/printing/metafile_skia_wrapper.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -13,6 +13,7 @@ namespace printing { namespace { const char* kMetafileKey = "CrMetafile"; +const char* kCustomScaleKey = "CrCustomScale"; } // namespace @@ -38,6 +39,25 @@ Metafile* MetafileSkiaWrapper::GetMetafileFromCanvas(const SkCanvas& canvas) { return static_cast(value)->metafile_; } +// static +void MetafileSkiaWrapper::SetCustomScaleOnCanvas(const SkCanvas& canvas, + double scale) { + SkMetaData& meta = skia::getMetaData(canvas); + meta.setScalar(kCustomScaleKey, SkFloatToScalar(scale)); +} + +// static +bool MetafileSkiaWrapper::GetCustomScaleOnCanvas(const SkCanvas& canvas, + double* scale) { + SkMetaData& meta = skia::getMetaData(canvas); + SkScalar value; + if (!meta.findScalar(kCustomScaleKey, &value)) + return false; + + *scale = SkScalarToFloat(value); + return true; +} + MetafileSkiaWrapper::MetafileSkiaWrapper(Metafile* metafile) : metafile_(metafile) { } diff --git a/printing/metafile_skia_wrapper.h b/printing/metafile_skia_wrapper.h index 9010449..42bbc5f 100644 --- a/printing/metafile_skia_wrapper.h +++ b/printing/metafile_skia_wrapper.h @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -24,6 +24,10 @@ class PRINTING_EXPORT MetafileSkiaWrapper : public SkRefCnt { static Metafile* GetMetafileFromCanvas(const SkCanvas& canvas); + // Methods to set and retrieve custom scale factor for metafile from canvas. + static void SetCustomScaleOnCanvas(const SkCanvas& canvas, double scale); + static bool GetCustomScaleOnCanvas(const SkCanvas& canvas, double* scale); + private: explicit MetafileSkiaWrapper(Metafile* metafile); diff --git a/printing/printing.gyp b/printing/printing.gyp index c9c9790..7d02e60 100644 --- a/printing/printing.gyp +++ b/printing/printing.gyp @@ -32,8 +32,6 @@ 'backend/print_backend_consts.cc', 'backend/print_backend_consts.h', 'backend/print_backend_dummy.cc', - 'custom_scaling.cc', - 'custom_scaling.h', 'emf_win.cc', 'emf_win.h', 'image.cc', -- cgit v1.1