File indexing completed on 2024-06-16 04:10:04

0001 
0002 /*
0003    Copyright (c) 2003-2007 Clarence Dang <dang@kde.org>
0004    All rights reserved.
0005 
0006    Redistribution and use in source and binary forms, with or without
0007    modification, are permitted provided that the following conditions
0008    are met:
0009 
0010    1. Redistributions of source code must retain the above copyright
0011       notice, this list of conditions and the following disclaimer.
0012    2. Redistributions in binary form must reproduce the above copyright
0013       notice, this list of conditions and the following disclaimer in the
0014       documentation and/or other materials provided with the distribution.
0015 
0016    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
0017    IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
0018    OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
0019    IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
0020    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
0021    NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
0022    DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
0023    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
0024    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
0025    THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
0026 */
0027 
0028 
0029 #ifndef kpAbstractImageSelectionTool_H
0030 #define kpAbstractImageSelectionTool_H
0031 
0032 
0033 #include "tools/selection/kpAbstractSelectionTool.h"
0034 
0035 
0036 class kpImageSelectionTransparency;
0037 
0038 
0039 // The only difference between the various subclasses of us is the kind of
0040 // selection that they create e.g. elliptical vs rectangular.
0041 //
0042 // For every other operation, they act identically so, for instance, it is
0043 // possible to move an elliptical selection while using the rectangular
0044 // selection tool (this situation can arise when you paste an elliptical
0045 // selection while using the rectangular selection tool; a tool change
0046 // does not occur out of convenience to the user - see
0047 // kpDocumentEnvironment::switchToCompatibleTool()).
0048 class kpAbstractImageSelectionTool : public kpAbstractSelectionTool
0049 {
0050 Q_OBJECT
0051 
0052 public:
0053     kpAbstractImageSelectionTool (const QString &text, const QString &description,
0054         int key,
0055         kpToolSelectionEnvironment *environ, QObject *parent,
0056         const QString &name);
0057 
0058 
0059 //
0060 // Drawing
0061 //
0062 
0063 protected:
0064     kpAbstractSelectionContentCommand *newGiveContentCommand () const override;
0065 
0066     QString nameOfCreateCommand () const override;
0067 
0068 
0069 //
0070 // Create, Move, Resize/Scale
0071 //
0072 
0073 protected:
0074     QString haventBegunDrawUserMessageCreate () const override;
0075     QString haventBegunDrawUserMessageMove () const override;
0076     QString haventBegunDrawUserMessageResizeScale () const override;
0077 
0078 
0079 //
0080 // User Changing Selection Transparency
0081 //
0082 
0083 protected:
0084     bool shouldChangeImageSelectionTransparency () const;
0085     // You must derive <oldTrans>, the old selection transparency, from the
0086     // one obtained from the user's current settings, as given by the
0087     // kpToolSelectionEnvironment.
0088     //
0089     // You must _not_ simply get the old selection transparency just by
0090     // querying the selection i.e. do _not_ pass in
0091     // "document()->imageSelection().transparency()".  The reason is that
0092     // transparency().transparentColor() might not be defined in Opaque
0093     // Mode.
0094     void changeImageSelectionTransparency (
0095         const QString &name,
0096         const kpImageSelectionTransparency &newTrans,
0097         const kpImageSelectionTransparency &oldTrans);
0098 
0099 protected Q_SLOTS:
0100     void slotIsOpaqueChanged (bool isOpaque) override;
0101     void slotBackgroundColorChanged (const kpColor &color) override;
0102     void slotColorSimilarityChanged (double similarity, int) override;
0103 };
0104 
0105 
0106 #endif  // kpAbstractImageSelectionTool_H