Author: alg
Date: Mon Jul 23 16:40:53 2012
New Revision: 1364705
URL: http://svn.apache.org/viewvc?rev=1364705&view=rev
Log:
#120230# Adapt hatch processing to keep a view-dependent minimal distance for
more pleasant visualisation
Modified:
incubator/ooo/trunk/main/drawinglayer/inc/drawinglayer/attribute/fillhatchattribute.hxx
incubator/ooo/trunk/main/drawinglayer/inc/drawinglayer/primitive2d/fillhatchprimitive2d.hxx
incubator/ooo/trunk/main/drawinglayer/inc/drawinglayer/primitive2d/primitivetools2d.hxx
incubator/ooo/trunk/main/drawinglayer/source/attribute/fillhatchattribute.cxx
incubator/ooo/trunk/main/drawinglayer/source/primitive2d/fillhatchprimitive2d.cxx
incubator/ooo/trunk/main/drawinglayer/source/primitive2d/metafileprimitive2d.cxx
incubator/ooo/trunk/main/drawinglayer/source/primitive2d/primitivetools2d.cxx
incubator/ooo/trunk/main/svx/source/sdr/contact/viewobjectcontactofsdrole2obj.cxx
incubator/ooo/trunk/main/svx/source/sdr/overlay/overlaytools.cxx
incubator/ooo/trunk/main/svx/source/sdr/primitive2d/sdrattributecreator.cxx
Modified:
incubator/ooo/trunk/main/drawinglayer/inc/drawinglayer/attribute/fillhatchattribute.hxx
URL:
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/drawinglayer/inc/drawinglayer/attribute/fillhatchattribute.hxx?rev=1364705&r1=1364704&r2=1364705&view=diff
==============================================================================
---
incubator/ooo/trunk/main/drawinglayer/inc/drawinglayer/attribute/fillhatchattribute.hxx
(original)
+++
incubator/ooo/trunk/main/drawinglayer/inc/drawinglayer/attribute/fillhatchattribute.hxx
Mon Jul 23 16:40:53 2012
@@ -68,6 +68,7 @@ namespace drawinglayer
double fDistance,
double fAngle,
const basegfx::BColor& rColor,
+ sal_uInt32 nMinimalDiscreteDistance,
bool bFillBackground);
FillHatchAttribute();
FillHatchAttribute(const FillHatchAttribute&
rCandidate);
@@ -85,7 +86,17 @@ namespace drawinglayer
double getDistance() const;
double getAngle() const;
const basegfx::BColor& getColor() const;
- bool isFillBackground() const;
+
+ // #120230# If a minimal discrete distance is wanted (VCL used 3,
this is the default for the
+ // global instance, too), set this unequal to zero. Zero means not
to use it. If set
+ // bigger zero (should be at least two, one leads to a full plane
filled with lines when
+ // Distance in discrete views is smaller than one) this will be
used when the discrete
+ // value is less than the given one. This is used to 'emulate' old
VCL behaviour which
+ // makes hatches look better by not making distances as small as
needed, but keeping
+ // them on a minimal discrete value for more appealing
visualisation.
+ sal_uInt32 getMinimalDiscreteDistance() const;
+
+ bool isFillBackground() const;
};
} // end of namespace attribute
} // end of namespace drawinglayer
Modified:
incubator/ooo/trunk/main/drawinglayer/inc/drawinglayer/primitive2d/fillhatchprimitive2d.hxx
URL:
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/drawinglayer/inc/drawinglayer/primitive2d/fillhatchprimitive2d.hxx?rev=1364705&r1=1364704&r2=1364705&view=diff
==============================================================================
---
incubator/ooo/trunk/main/drawinglayer/inc/drawinglayer/primitive2d/fillhatchprimitive2d.hxx
(original)
+++
incubator/ooo/trunk/main/drawinglayer/inc/drawinglayer/primitive2d/fillhatchprimitive2d.hxx
Mon Jul 23 16:40:53 2012
@@ -25,7 +25,7 @@
#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_FILLHATCHPRIMITIVE2D_HXX
#include <drawinglayer/drawinglayerdllapi.h>
-#include <drawinglayer/primitive2d/baseprimitive2d.hxx>
+#include <drawinglayer/primitive2d/primitivetools2d.hxx>
#include <drawinglayer/attribute/fillhatchattribute.hxx>
#include <basegfx/color/bcolor.hxx>
@@ -43,9 +43,14 @@ namespace drawinglayer
If the background is to be filled, a flag in FillHatchAttribute is
set and
the BColor defines the background color.
+ #120230# This primitive is now evtl. metric dependent due to the
value
+ MinimalDiscreteDistance in the FillHatchAttribute if the value is
not zero.
+ This is used for a more appealing, VCL-like visualisation by not
letting the
+ distances get too small between lines.
+
The decomposition will deliver the hatch lines.
*/
- class DRAWINGLAYER_DLLPUBLIC FillHatchPrimitive2D : public
BufferedDecompositionPrimitive2D
+ class DRAWINGLAYER_DLLPUBLIC FillHatchPrimitive2D : public
DiscreteMetricDependentPrimitive2D
{
private:
/// the geometric definition
@@ -61,7 +66,7 @@ namespace drawinglayer
/// local decomposition.
virtual Primitive2DSequence create2DDecomposition(const
geometry::ViewInformation2D& rViewInformation) const;
- public:
+ public:
/// constructor
FillHatchPrimitive2D(
const basegfx::B2DRange& rObjectRange,
@@ -79,7 +84,10 @@ namespace drawinglayer
/// get range
virtual basegfx::B2DRange getB2DRange(const
geometry::ViewInformation2D& rViewInformation) const;
- /// provide unique ID
+ /// get local decomposition. Overloaded since this
decomposition is view-dependent
+ virtual Primitive2DSequence get2DDecomposition(const
geometry::ViewInformation2D& rViewInformation) const;
+
+ /// provide unique ID
DeclPrimitrive2DIDBlock()
};
} // end of namespace primitive2d
Modified:
incubator/ooo/trunk/main/drawinglayer/inc/drawinglayer/primitive2d/primitivetools2d.hxx
URL:
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/drawinglayer/inc/drawinglayer/primitive2d/primitivetools2d.hxx?rev=1364705&r1=1364704&r2=1364705&view=diff
==============================================================================
---
incubator/ooo/trunk/main/drawinglayer/inc/drawinglayer/primitive2d/primitivetools2d.hxx
(original)
+++
incubator/ooo/trunk/main/drawinglayer/inc/drawinglayer/primitive2d/primitivetools2d.hxx
Mon Jul 23 16:40:53 2012
@@ -50,6 +50,13 @@ namespace drawinglayer
*/
double
mfDiscreteUnit;
+ protected:
+ /// helper to update discrete unit
+ void updateDiscreteUnit(double fNew)
+ {
+ mfDiscreteUnit = fNew;
+ }
+
public:
/// constructor
DiscreteMetricDependentPrimitive2D()
Modified:
incubator/ooo/trunk/main/drawinglayer/source/attribute/fillhatchattribute.cxx
URL:
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/drawinglayer/source/attribute/fillhatchattribute.cxx?rev=1364705&r1=1364704&r2=1364705&view=diff
==============================================================================
---
incubator/ooo/trunk/main/drawinglayer/source/attribute/fillhatchattribute.cxx
(original)
+++
incubator/ooo/trunk/main/drawinglayer/source/attribute/fillhatchattribute.cxx
Mon Jul 23 16:40:53 2012
@@ -42,6 +42,7 @@ namespace drawinglayer
double
mfDistance;
double
mfAngle;
basegfx::BColor
maColor;
+ sal_uInt32 mnMinimalDiscreteDistance;
// bitfield
unsigned
mbFillBackground : 1;
@@ -51,12 +52,14 @@ namespace drawinglayer
double fDistance,
double fAngle,
const basegfx::BColor& rColor,
+ sal_uInt32 nMinimalDiscreteDistance,
bool bFillBackground)
: mnRefCount(0),
meStyle(eStyle),
mfDistance(fDistance),
mfAngle(fAngle),
maColor(rColor),
+ mnMinimalDiscreteDistance(nMinimalDiscreteDistance),
mbFillBackground(bFillBackground)
{
}
@@ -66,6 +69,7 @@ namespace drawinglayer
double getDistance() const { return mfDistance; }
double getAngle() const { return mfAngle; }
const basegfx::BColor& getColor() const { return
maColor; }
+ sal_uInt32 getMinimalDiscreteDistance() const { return
mnMinimalDiscreteDistance; }
bool isFillBackground() const { return
mbFillBackground; }
bool operator==(const ImpFillHatchAttribute&
rCandidate) const
@@ -74,7 +78,8 @@ namespace drawinglayer
&& getDistance() == rCandidate.getDistance()
&& getAngle() == rCandidate.getAngle()
&& getColor() == rCandidate.getColor()
- && isFillBackground() ==
rCandidate.isFillBackground());
+ && getMinimalDiscreteDistance() ==
rCandidate.getMinimalDiscreteDistance()
+ && isFillBackground() ==
rCandidate.isFillBackground());
}
static ImpFillHatchAttribute* get_global_default()
@@ -87,6 +92,7 @@ namespace drawinglayer
HATCHSTYLE_SINGLE,
0.0, 0.0,
basegfx::BColor(),
+ 3, // same as VCL
false);
// never delete; start with RefCount 1, not 0
@@ -102,9 +108,16 @@ namespace drawinglayer
double fDistance,
double fAngle,
const basegfx::BColor& rColor,
+ sal_uInt32 nMinimalDiscreteDistance,
bool bFillBackground)
- : mpFillHatchAttribute(new ImpFillHatchAttribute(
- eStyle, fDistance, fAngle, rColor, bFillBackground))
+ : mpFillHatchAttribute(
+ new ImpFillHatchAttribute(
+ eStyle,
+ fDistance,
+ fAngle,
+ rColor,
+ nMinimalDiscreteDistance,
+ bFillBackground))
{
}
@@ -193,6 +206,11 @@ namespace drawinglayer
return mpFillHatchAttribute->getColor();
}
+ sal_uInt32 FillHatchAttribute::getMinimalDiscreteDistance() const
+ {
+ return mpFillHatchAttribute->getMinimalDiscreteDistance();
+ }
+
bool FillHatchAttribute::isFillBackground() const
{
return mpFillHatchAttribute->isFillBackground();
Modified:
incubator/ooo/trunk/main/drawinglayer/source/primitive2d/fillhatchprimitive2d.cxx
URL:
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/drawinglayer/source/primitive2d/fillhatchprimitive2d.cxx?rev=1364705&r1=1364704&r2=1364705&view=diff
==============================================================================
---
incubator/ooo/trunk/main/drawinglayer/source/primitive2d/fillhatchprimitive2d.cxx
(original)
+++
incubator/ooo/trunk/main/drawinglayer/source/primitive2d/fillhatchprimitive2d.cxx
Mon Jul 23 16:40:53 2012
@@ -32,6 +32,7 @@
#include <basegfx/tools/canvastools.hxx>
#include <drawinglayer/primitive2d/polygonprimitive2d.hxx>
#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
+#include <drawinglayer/geometry/viewinformation2d.hxx>
//////////////////////////////////////////////////////////////////////////////
@@ -46,12 +47,26 @@ namespace drawinglayer
Primitive2DSequence
FillHatchPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D&
/*rViewInformation*/) const
{
Primitive2DSequence aRetval;
+
if(!getFillHatch().isDefault())
{
// create hatch
const basegfx::BColor
aHatchColor(getFillHatch().getColor());
const double fAngle(getFillHatch().getAngle());
::std::vector< basegfx::B2DHomMatrix > aMatrices;
+ double fDistance(getFillHatch().getDistance());
+ const bool bAdaptDistance(0 !=
getFillHatch().getMinimalDiscreteDistance());
+
+ // #120230# evtl. adapt distance
+ if(bAdaptDistance)
+ {
+ const double
fDiscreteDistance(getFillHatch().getDistance() / getDiscreteUnit());
+
+ if(fDiscreteDistance <
(double)getFillHatch().getMinimalDiscreteDistance())
+ {
+ fDistance =
(double)getFillHatch().getMinimalDiscreteDistance() * getDiscreteUnit();
+ }
+ }
// get hatch transformations
switch(getFillHatch().getStyle())
@@ -59,7 +74,7 @@ namespace drawinglayer
case attribute::HATCHSTYLE_TRIPLE:
{
// rotated 45 degrees
- texture::GeoTexSvxHatch
aHatch(getObjectRange(), getFillHatch().getDistance(), fAngle - F_PI4);
+ texture::GeoTexSvxHatch
aHatch(getObjectRange(), fDistance, fAngle - F_PI4);
aHatch.appendTransformations(aMatrices);
// fall-through by purpose
@@ -67,7 +82,7 @@ namespace drawinglayer
case attribute::HATCHSTYLE_DOUBLE:
{
// rotated 90 degrees
- texture::GeoTexSvxHatch
aHatch(getObjectRange(), getFillHatch().getDistance(), fAngle - F_PI2);
+ texture::GeoTexSvxHatch
aHatch(getObjectRange(), fDistance, fAngle - F_PI2);
aHatch.appendTransformations(aMatrices);
// fall-through by purpose
@@ -75,7 +90,7 @@ namespace drawinglayer
case attribute::HATCHSTYLE_SINGLE:
{
// angle as given
- texture::GeoTexSvxHatch
aHatch(getObjectRange(), getFillHatch().getDistance(), fAngle);
+ texture::GeoTexSvxHatch
aHatch(getObjectRange(), fDistance, fAngle);
aHatch.appendTransformations(aMatrices);
}
}
@@ -120,7 +135,7 @@ namespace drawinglayer
const basegfx::B2DRange& rObjectRange,
const basegfx::BColor& rBColor,
const attribute::FillHatchAttribute& rFillHatch)
- : BufferedDecompositionPrimitive2D(),
+ : DiscreteMetricDependentPrimitive2D(),
maObjectRange(rObjectRange),
maFillHatch(rFillHatch),
maBColor(rBColor)
@@ -129,7 +144,7 @@ namespace drawinglayer
bool FillHatchPrimitive2D::operator==(const BasePrimitive2D&
rPrimitive) const
{
-
if(BufferedDecompositionPrimitive2D::operator==(rPrimitive))
+
if(DiscreteMetricDependentPrimitive2D::operator==(rPrimitive))
{
const FillHatchPrimitive2D& rCompare =
(FillHatchPrimitive2D&)rPrimitive;
@@ -147,7 +162,24 @@ namespace drawinglayer
return getObjectRange();
}
- // provide unique ID
+ Primitive2DSequence
FillHatchPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D&
rViewInformation) const
+ {
+ ::osl::MutexGuard aGuard( m_aMutex );
+ bool bAdaptDistance(0 !=
getFillHatch().getMinimalDiscreteDistance());
+
+ if(bAdaptDistance)
+ {
+ // behave view-dependent
+ return
DiscreteMetricDependentPrimitive2D::get2DDecomposition(rViewInformation);
+ }
+ else
+ {
+ // behave view-independent
+ return
BufferedDecompositionPrimitive2D::get2DDecomposition(rViewInformation);
+ }
+ }
+
+ // provide unique ID
ImplPrimitrive2DIDBlock(FillHatchPrimitive2D,
PRIMITIVE2D_ID_FILLHATCHPRIMITIVE2D)
} // end of namespace primitive2d
Modified:
incubator/ooo/trunk/main/drawinglayer/source/primitive2d/metafileprimitive2d.cxx
URL:
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/drawinglayer/source/primitive2d/metafileprimitive2d.cxx?rev=1364705&r1=1364704&r2=1364705&view=diff
==============================================================================
---
incubator/ooo/trunk/main/drawinglayer/source/primitive2d/metafileprimitive2d.cxx
(original)
+++
incubator/ooo/trunk/main/drawinglayer/source/primitive2d/metafileprimitive2d.cxx
Mon Jul 23 16:40:53 2012
@@ -964,6 +964,7 @@ namespace
(double)rHatch.GetDistance(),
(double)rHatch.GetAngle() * F_PI1800,
rHatch.GetColor().getBColor(),
+ 3, // same default as VCL, a minimum of three discrete units
(pixels) offset
false);
}
Modified:
incubator/ooo/trunk/main/drawinglayer/source/primitive2d/primitivetools2d.cxx
URL:
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/drawinglayer/source/primitive2d/primitivetools2d.cxx?rev=1364705&r1=1364704&r2=1364705&view=diff
==============================================================================
---
incubator/ooo/trunk/main/drawinglayer/source/primitive2d/primitivetools2d.cxx
(original)
+++
incubator/ooo/trunk/main/drawinglayer/source/primitive2d/primitivetools2d.cxx
Mon Jul 23 16:40:53 2012
@@ -50,7 +50,7 @@ namespace drawinglayer
if(!getBuffered2DDecomposition().hasElements())
{
// remember new valid DiscreteUnit
- const_cast< DiscreteMetricDependentPrimitive2D*
>(this)->mfDiscreteUnit = fDiscreteUnit;
+ const_cast< DiscreteMetricDependentPrimitive2D*
>(this)->updateDiscreteUnit(fDiscreteUnit);
}
// call base implementation
Modified:
incubator/ooo/trunk/main/svx/source/sdr/contact/viewobjectcontactofsdrole2obj.cxx
URL:
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svx/source/sdr/contact/viewobjectcontactofsdrole2obj.cxx?rev=1364705&r1=1364704&r2=1364705&view=diff
==============================================================================
---
incubator/ooo/trunk/main/svx/source/sdr/contact/viewobjectcontactofsdrole2obj.cxx
(original)
+++
incubator/ooo/trunk/main/svx/source/sdr/contact/viewobjectcontactofsdrole2obj.cxx
Mon Jul 23 16:40:53 2012
@@ -134,6 +134,7 @@ namespace sdr
125.0, // 1.25 mm
45.0 * F_PI180, // 45 degree
diagonal
Color(COL_BLACK).getBColor(),
// black color
+ 3, // same default as VCL, a minimum of three
discrete units (pixels) offset
false); // no filling
const
drawinglayer::primitive2d::Primitive2DReference xReference(new
drawinglayer::primitive2d::PolyPolygonHatchPrimitive2D(
Modified: incubator/ooo/trunk/main/svx/source/sdr/overlay/overlaytools.cxx
URL:
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svx/source/sdr/overlay/overlaytools.cxx?rev=1364705&r1=1364704&r2=1364705&view=diff
==============================================================================
--- incubator/ooo/trunk/main/svx/source/sdr/overlay/overlaytools.cxx (original)
+++ incubator/ooo/trunk/main/svx/source/sdr/overlay/overlaytools.cxx Mon Jul 23
16:40:53 2012
@@ -236,6 +236,7 @@ namespace drawinglayer
getDiscreteHatchDistance() *
getDiscreteUnit(),
getHatchRotation() - getRotation(),
getHatchColor(),
+ 3, // same default as VCL, a minimum of three discrete
units (pixels) offset
false);
const Primitive2DReference aPrimitive(
new PolyPolygonHatchPrimitive2D(
Modified:
incubator/ooo/trunk/main/svx/source/sdr/primitive2d/sdrattributecreator.cxx
URL:
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svx/source/sdr/primitive2d/sdrattributecreator.cxx?rev=1364705&r1=1364704&r2=1364705&view=diff
==============================================================================
--- incubator/ooo/trunk/main/svx/source/sdr/primitive2d/sdrattributecreator.cxx
(original)
+++ incubator/ooo/trunk/main/svx/source/sdr/primitive2d/sdrattributecreator.cxx
Mon Jul 23 16:40:53 2012
@@ -458,6 +458,7 @@ namespace drawinglayer
(double)rHatch.GetDistance(),
(double)rHatch.GetAngle() * F_PI1800,
aColorB.getBColor(),
+ 3, // same default as VCL, a minimum of three
discrete units (pixels) offset
((const
XFillBackgroundItem&)(rSet.Get(XATTR_FILLBACKGROUND))).GetValue());
break;