[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    koffice/krita/image
From:       Cyrille Berger <cyb () lepi ! org>
Date:       2010-10-13 18:04:31
Message-ID: 20101013180431.691A8AC895 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1185553 by berger:

Fix: the rectangle brush

BUG: 252144


 M  +21 -8     kis_rect_mask_generator.cpp  


--- trunk/koffice/krita/image/kis_rect_mask_generator.cpp #1185552:1185553
@@ -1,5 +1,5 @@
 /*
- *  Copyright (c) 2004,2007-2009 Cyrille Berger <cberger@cberger.net>
+ *  Copyright (c) 2004,2007,2008,2009.2010 Cyrille Berger <cberger@cberger.net>
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -18,12 +18,13 @@
 
 #include "kis_rect_mask_generator.h"
 
-#include <math.h>
+#include <cmath>
 
 #include <QDomDocument>
 
 struct KisRectangleMaskGenerator::Private {
     double m_c;
+    double m_halfWidth, m_halfHeight;
 };
 
 KisRectangleMaskGenerator::KisRectangleMaskGenerator(qreal radius, qreal ratio, \
qreal fh, qreal fv, int spikes) @@ -36,6 +37,8 @@
         d->m_c = (KisMaskGenerator::d->fv / KisMaskGenerator::d->fh);
         Q_ASSERT(!isnan(d->m_c));
     }
+    d->m_halfWidth = KisMaskGenerator::d->diameter * 0.5;
+    d->m_halfHeight = d->m_halfWidth * KisMaskGenerator::d->ratio;
 }
 
 KisRectangleMaskGenerator::~KisRectangleMaskGenerator()
@@ -45,22 +48,32 @@
 
 quint8 KisRectangleMaskGenerator::valueAt(qreal x, qreal y) const
 {
+    if (KisMaskGenerator::d->empty) return 255;
 
-    if (KisMaskGenerator::d->empty) return 255;
+    if(x > d->m_halfWidth || x < -d->m_halfWidth || y > d->m_halfHeight || y < \
-d->m_halfHeight) return 255; +    
     double xr = qAbs(x /*- m_xcenter*/) / width();
     double yr = qAbs(y /*- m_ycenter*/) / height();
     
     qreal fhTransformed = KisMaskGenerator::d->fh * softness();
     qreal fvTransformed = KisMaskGenerator::d->fv * softness();
     
-    if (xr > fhTransformed || yr > fvTransformed) {
-        if (yr <= ((xr - fhTransformed) * d->m_c + fvTransformed)) {
-            return (uchar)(255 *(xr - 0.5 * fhTransformed) / (1.0 - 0.5 * \
fhTransformed)); +    if( xr > fhTransformed )
+    {
+        if( yr > xr )
+        {
+            return (uchar)(255 *(yr - fvTransformed) / (0.5 - fvTransformed));
         } else {
-            return (uchar)(255 *(yr - 0.5 * fvTransformed) / (1.0 - 0.5 * \
fvTransformed)); +            return (uchar)(255 *(xr - fhTransformed) / (0.5 - \
fhTransformed));  }
+    } else if( yr > fvTransformed )
+    {
+        return (uchar)(255 *(yr - fvTransformed) / (0.5 - fvTransformed));
+    } else if(xr < fhTransformed && yr < fvTransformed )
+    {
+        return 0;
     } else {
-        return 0;
+        return 255;
     }
 }
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic