00001 #pragma once
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #include "AITypes.h"
00029 #include "AIArt.h"
00030 #include "AIEvent.h"
00031 #include "AIFixedMath.h"
00032 #include "AIPlugin.h"
00033 #include "AIToolNames.h"
00034 #include "ASHelp.h"
00035 #include "AIColor.h"
00036
00037 #ifndef FLT_MAX
00038 #include <float.h>
00039 #endif
00040
00041 #include "AIHeaderBegin.h"
00042
00046
00047
00048
00049
00050
00051
00052 #define kAIToolSuite "AI Tool Suite"
00053 #define kAIToolSuiteVersion19 AIAPI_VERSION(19)
00054 #define kAIToolSuiteVersion kAIToolSuiteVersion19
00055 #define kAIToolVersion kAIToolSuiteVersion
00056
00064 #define kAIEffectiveToolChangedNotifier "AI Effective Tool Changed Notifier"
00065
00069 #define kAIUserToolChangedNotifier "AI User Tool Changed Notifier"
00070
00075 #define kAIToolSelectedNotifier "AI Tool Selected Notifier"
00076
00078 #define kAIToolDeselectedNotifier "AI Tool Deselected Notifier"
00079
00082 #define kAIInvalidateByScrollNotifier "AI Invalidate By Scroll Notifier"
00083
00089 #define kAIToolClearStateNotifier "AI Tool Clear State Notifier"
00090
00093 #define kAIToolTitleChangedNotifier "AI Tool Title Changed Notifier"
00094
00096 #define kAIToolTooltipChangedNotifier "AI Tool Tooltip Changed Notifier"
00097
00099 #define kAIToolHelpIDChangedNotifier "AI Tool Help ID Changed Notifier"
00100
00102 #define kAIToolIconChangedNotifier "AI Tool Icon Resources Changed Notifier"
00103
00105 #define kAIToolChangedNotifier "AI Tool Changed Notifier"
00106
00108 #define kAIToolWindowChangedNotifier "AI Tool Window Changed Notifier"
00109
00111 #define kAIToolSuspendNotifier "AI Tool Suspend Notifier"
00112
00114 #define kAIToolResumeNotifier "AI Tool Resume Notifier"
00115
00117 #define kAIToolTabletPointerTypeChangedNotifier "AI Tablet Pointer Type Changed Notifier"
00118
00120 #define kAIToolModifiersChangedNotifier "AI Tool Modifiers Changed Notifier"
00121
00125 #define kAIToolSuspendedBySpacebarNotifier "AI Tool Suspended by Spacebar Notifier"
00126
00129 #define kAIToolResumedBySpacebarNotifier "AI Tool Resumed by Spacebar Notifier"
00130
00137 #define kAIToolSuspendedByCmdKeyNotifier "AI Tool Suspended by Cmd Key Notifier"
00138
00143 #define kAIToolResumedByCmdKeyNotifier "AI Tool Resumed by Cmd Key Notifier"
00144
00145
00146
00147
00152 #define kAIEyedropperDragNotifier "AI Eyedropper Drag Notifier"
00153
00157 #define kCallerRadialDevice "AI Radial Device"
00158
00162 #define kSelectorAIRadialDeviceRotated "Radial Device Rotated"
00163
00167 #define kSelectorAIRadialDeviceClicked "Radial Device Clicked"
00168
00171 #define kCallerAITool "AI Tool"
00172
00177 #define kSelectorAIEditToolOptions "AI Edit Options"
00178
00182 #define kSelectorAITrackToolCursor "AI Track Cursor"
00183
00186 #define kSelectorAIToolMouseDown "AI Mouse Down"
00187
00191 #define kSelectorAIToolMouseDrag "AI Mouse Drag"
00192
00196 #define kSelectorAIToolMouseUp "AI Mouse Up"
00197
00200 #define kSelectorAISelectTool "AI Select"
00201
00204 #define kSelectorAIDeselectTool "AI Deselect"
00205
00209 #define kSelectorAIReselectTool "AI Reselect"
00210
00212 #define kSelectorAIToolDecreaseDiameter "AI Decrease Diameter"
00213
00215 #define kSelectorAIToolIncreaseDiameter "AI Increase Diameter"
00216
00225 #define kSelectorAIAlternateSelectionToolQuery "AI Alternate Selection Tool Query"
00226
00231 #define kSelectorAIAlternateSelectionToolActivate "AI Alternate Selection Tool Activate"
00232
00236 #define kSelectorAIAlternateSelectionToolDeActivate "AI Alternate Selection Tool DeActivate"
00237
00241 #define kAcceptAlternateSelectionToolReply 'ASTR'
00242
00247 #define kSelectorAIToolDrawDryInk "AI Tool Draw Dry Ink"
00248
00249
00250
00251
00252
00255 enum AIToolOptions {
00259 kToolWantsToTrackCursorOption = (1<<0),
00264 kToolDoesntWantAutoScrollOption = (1<<1),
00272 kToolWantsBufferedDraggingOption = (1<<2),
00277 kToolMaintainEditContextOption = (1<<3),
00280 kToolIsTextToolOption = (1<<4),
00284 kToolWantsToChangeDiameterOption = (1<<5),
00290 kToolWantsAlternateSelectionTool = (1<<6),
00291
00299 kToolWantsHiddenToolOption = (1<<7),
00300
00304 kToolDoesntWantSoftSelectionOption = (1<<8),
00305
00308 kToolWantsOSHandleInk = (1<<9),
00309
00312 kToolHasAlternateAction = (1<<10),
00313
00316 kToolWantsRadialDeviceEvents = (1 << 11),
00317
00320 kToolDoesntWantArtStyleExecutionSuspender = (1 << 12),
00321
00324 kToolHasItsOwnDragLoop = (1 << 13)
00325
00326 };
00327
00328
00339 enum AIToolInfoVariable {
00340 kInfoPageX = 0,
00341 kInfoPageY,
00342 kInfoSizeX,
00343 kInfoSizeY,
00344 kInfoDistance,
00345 kInfoVectorAngle,
00346 kInfoScaleX,
00347 kInfoScaleY,
00348 kInfoZoom,
00349 kInfoCornerRoundness,
00350 kInfoRotAngle,
00351 kInfoShearAngle,
00352 kInfoFontAndSize,
00353 kInfoTrackOrKern,
00354 kInfoRawRotAngle,
00355 kInfoDocX,
00356 kInfoDocY,
00357 kInfoText1,
00358 kInfoText2,
00359 kInfoText3,
00360 kInfoText4,
00361 kInfoText5,
00362 kInfoText6,
00363 kInfoLongText3,
00365 kInfoTextX,
00366 kInfoTextY,
00367 kInfoTextW,
00368 kInfoTextH,
00369
00370 kInfoNumVars,
00371 kInfoBlank,
00372
00373
00374 kInfoTextUnicode1,
00375 kInfoTextUnicode2,
00376 kInfoTextUnicode3,
00377 kInfoTextUnicode4,
00378 kInfoTextUnicode5,
00379 kInfoTextUnicode6,
00380 kInfoLongTextUnicode1,
00381 kInfoLongTextUnicode2,
00382 kInfoLongTextUnicode3,
00383
00384
00385 kInfoLongText1 = kInfoFontAndSize,
00386 kInfoLongText2 = kInfoTrackOrKern,
00387
00388
00389 kInfoEndOfList = -1
00390 };
00391
00394 #define kNoTool -2
00395
00398 typedef ai::int16 AIToolType;
00399
00403 #define kPluginToolOffset 1000
00404
00407 #define kToolCantTrackCursorErr 'TLTK'
00408
00409
00410
00411 typedef double AIToolTime;
00412
00413 #define kToolTimeDurationSecond ((AIToolTime)1.0)
00414 #define kToolTimeDurationMillisecond ((AIToolTime)(kToolTimeDurationSecond/1000))
00415 #define kToolTimeDurationNoWait ((AIToolTime)0.0)
00416 #define kToolTimeDurationForever ((AIToolTime)(-1.0))
00417
00418 #define kToolNormalIconDictKey "ToolNormalIconDictKey"
00419 #define kToolDarkNormalIconDictKey "ToolDarkNormalIconDictKey"
00420
00421
00422
00423
00424
00425
00426
00427
00430 typedef struct _t_AIToolOpaque *AIToolHandle;
00431
00434 struct AIEffectiveToolChangeData
00435 {
00437 const char* currentToolName;
00439 const char* lastToolName;
00443 AIBoolean isToolChangeTemporary;
00446 AIToolHandle currentToolHandle;
00450 AIToolHandle lastToolHandle;
00452 AIToolType currentToolNum;
00454 AIToolType lastToolNum;
00455 };
00456
00458 struct AIAddToolData {
00460 ai::UnicodeString title;
00462 ai::UnicodeString tooltip;
00464 ai::uint32 normalIconResID = 0;
00466 ai::uint32 darkIconResID = 0;
00470 AIToolType sameGroupAs = 0;
00474 AIToolType sameToolsetAs = 0;
00475
00476
00477 ai::IconType iconType = ai::IconType::kPNG;
00478 };
00479
00481 typedef struct _AIDataStack *AIDataStackRef;
00482
00484 struct AIAddToolDataPrivate {
00486 ai::UnicodeString title;
00488 ai::UnicodeString tooltip;
00490 AIDataStackRef iconResourceDictionary;
00494 AIToolType sameGroupAs = 0;
00498 AIToolType sameToolsetAs = 0;
00499
00500
00501 ai::IconType iconType = ai::IconType::kInvalid;
00502 };
00503
00506 typedef ai::int16 AIToolTabletPointerType;
00507
00510 enum AIToolTabletPointerTypeValue
00511 {
00512 kAIToolTabletPointerTypeUnknown = 0,
00514 kAIToolTabletPointerTypePen,
00516 kAIToolTabletPointerTypeCursor,
00518 kAIToolTabletPointerTypeEraser
00519 };
00520
00523 typedef ai::int16 AIToolPressure;
00526 enum AIToolPressureValue
00527 {
00529 kAIMaxToolPressure = 255,
00531 kAIMinToolPressure = 0,
00533 kAINormalToolPressure = 127
00534 };
00535
00538 typedef ai::int16 AIToolAngle;
00541 enum AIToolAngleValue
00542 {
00544 kAIToolAngle0 = 0,
00545 kAIToolAngle90 = 90,
00546 kAIToolAngleNegative179 = -179,
00547 kAIToolAngle180 = 180,
00548 kAIToolAngle360 = 360,
00549
00551 kAIToolMinBearing = kAIToolAngleNegative179,
00552 kAIToolMaxBearing = kAIToolAngle180,
00553 kAIToolNormalBearing = kAIToolAngle0,
00554
00556 kAIToolMinRotation = kAIToolAngleNegative179,
00557 kAIToolMaxRotation = kAIToolAngle180,
00558 kAIToolNormalRotation = kAIToolAngle0,
00559
00562 kAIToolMinTilt = kAIToolAngle0,
00563 kAIToolMaxTilt = kAIToolAngle90,
00564 kAIToolNormalTilt = kAIToolMinTilt
00565 };
00568 enum AITabletCapabilities
00569 {
00570
00571 kXCoordinate = 1 << 0,
00572
00573 kYCoordinate = 1 << 1,
00574
00575 kZCoordinate = 1 << 2,
00576
00577 kNormalPressure = 1 << 3,
00578
00579 kTangentPressure = 1 << 4,
00580
00581 kAltitudeOrientation = 1 << 5,
00582
00583 kAzimuthOrientation = 1 << 6,
00584
00585 kTwistOrientation = 1 << 7
00586 };
00587
00588
00589 enum AIToolMessageFlags
00590 {
00591
00592 kAIToolMsgInkSimulationFlag = 1 << 0,
00593 kAIToolMsgModifierKeyPressedDuringInk = 1 << 1,
00594
00595
00596 kAIToolMsgIsDragOver = 1 << 2
00597 };
00598
00600 struct AIEventHistoryData
00601 {
00603 AIPoint position;
00605 AIToolPressure stylusWheel;
00607 AIToolAngle tilt;
00609 AIToolAngle bearing;
00611 AIToolAngle rotation;
00612 };
00614 struct AIToolMessage {
00616 SPMessageData d;
00621 AIToolHandle tool;
00623 AIRealPoint cursor;
00627 AIToolPressure pressure;
00630 AIEvent *event;
00632 AIToolPressure stylusWheel;
00634 AIToolAngle tilt;
00636 AIToolAngle bearing;
00638 AIToolAngle rotation;
00639
00641 ai::int32 flags;
00643 ai::AutoBuffer<AIEventHistoryData> eventHistoryData;
00644 };
00645
00647 struct AIRadialDeviceMessage
00648 {
00650 SPMessageData d;
00651
00656 AIToolHandle tool = nullptr;
00657
00659 AIReal rotation = 0.0;
00660 };
00661
00663 struct AIToolNotifyData {
00666 AIToolHandle tool;
00667 };
00668
00670 struct AIEyedropperDragNotifyData {
00672 AIEvent event;
00674 AIBoolean pathStyleChanged;
00675 };
00676
00677 struct AIDocumentInkParams
00678 {
00679 enum PenTipShape
00680 {
00681 kPenTipShapeCircle,
00682 kPenTipShapeRectangle
00683 };
00684 PenTipShape fShape;
00685 AIColor fColor;
00686 AIPoint fSize;
00687 ai::AutoBuffer<ai::uint32> fModifiersList;
00688 AIReal fRotation;
00689 AIBoolean fSupportPressure;
00690 AIBoolean fCustomModifierHandling;
00691 enum PressureBasedVariant
00692 {
00693 kPressuteBasedVariantNone = 1 << 0,
00694 kPressuteBasedVariantDia = 1 << 1,
00695 kPressuteBasedVariantRoundness = 1 << 2,
00696 kPressuteBasedVariantAngle = 1 << 3,
00697 };
00698 ai::int32 fPressureBasedVariants;
00699 AIDocumentInkParams() :fShape(kPenTipShapeCircle)
00700 {
00701 fColor.kind = kThreeColor;
00702 fColor.c.rgb.red = 0.0f;
00703 fColor.c.rgb.green = 0.0f;
00704 fColor.c.rgb.blue = 0.0f;
00705 fSize.h = 1;
00706 fSize.v = 1;
00707 fRotation = 0.0f;
00708 fSupportPressure = false;
00709 fPressureBasedVariants = 0;
00710 fCustomModifierHandling = false;
00711 }
00712 };
00713
00714
00715 struct AIDocumentInkPoint
00716 {
00717 AIRealPoint fLocation;
00718 AIToolPressure fPressure;
00719 AIToolPressure fStylusWheel;
00720 AIToolAngle fRotation;
00721 AIToolPressure fBearing;
00722 AIToolPressure fTilt;
00723
00724 AIDocumentInkPoint()
00725 {
00726 fLocation.h = 0.0;
00727 fLocation.v = 0;
00728 fPressure = 0;
00729 fStylusWheel = kAIToolMinRotation;
00730 fBearing = kAIToolMinBearing;
00731 fRotation = kAIToolMinRotation;
00732 fTilt = kAIToolMinTilt;
00733 }
00734 };
00735
00737 struct AIToolDryInkMessage {
00739 SPMessageData d;
00740
00742 ai::int32 flags = 0;
00743
00748 AIToolHandle tool;
00749
00751 AIEvent *event;
00752
00753 ai::AutoBuffer<AIDocumentInkPoint> inkStrokes;
00754
00755 AIToolDryInkMessage() :tool(0), event(nullptr)
00756 {}
00757 };
00758
00759
00760
00761
00762
00763
00764
00765
00862 struct AIToolSuite {
00863
00874 AIAPI AIErr (*AddTool) ( SPPluginRef self, const char *name,
00875 const AIAddToolData &data, ai::int32 options,
00876 AIToolHandle *tool );
00877
00879 AIAPI AIErr (*AddToolPrivate) ( SPPluginRef self, const char *name,
00880 const AIAddToolDataPrivate &data, ai::int32 options,
00881 AIToolHandle *tool );
00882
00891 AIAPI AIErr (*GetToolName) ( AIToolHandle tool, char **name );
00892
00900 AIAPI AIErr (*GetToolOptions) ( AIToolHandle tool, ai::int32 *options );
00901
00908 AIAPI AIErr (*SetToolOptions) ( AIToolHandle tool, ai::int32 options );
00909
00915 AIAPI AIErr (*GetToolPlugin) ( AIToolHandle tool, SPPluginRef *plugin );
00916
00923 AIAPI AIErr (*GetSelectedTool) ( AIToolHandle *tool );
00924
00930 AIAPI AIErr (*SetSelectedTool) ( AIToolHandle tool );
00931
00936 AIAPI AIErr (*CountTools) ( ai::int32 *count );
00937
00943 AIAPI AIErr (*GetNthTool) ( ai::int32 n, AIToolHandle *tool );
00944
00953 AIAPI AIErr (*GetToolHandleFromNumber) ( AIToolType toolNum, AIToolHandle *tool );
00954
00962 AIAPI AIErr (*GetToolNumberFromName) ( const char *name, AIToolType *toolNum );
00963
00969 AIAPI AIErr (*GetToolNumberFromHandle) ( AIToolHandle tool, AIToolType *toolNum );
00970
00977 AIAPI AIErr (*GetToolNameFromNumber) ( AIToolType toolNum, char **name );
00978
00985 AIAPI AIErr (*GetToolTitle) ( AIToolHandle tool, ai::UnicodeString& title );
00986
00991 AIAPI AIErr (*SetToolTitle) ( AIToolHandle tool, ai::UnicodeString title );
00992
00993
00999 AIAPI AIErr (*GetTooltip) ( AIToolHandle tool, ai::UnicodeString& tooltip );
01000
01005 AIAPI AIErr (*SetTooltip) ( AIToolHandle tool, ai::UnicodeString tooltip );
01006
01016 AIAPI AIErr (*SetToolInfoVars) ( AIToolHandle tool, const ai::int32 infoVars[] );
01017
01053 AIAPI AIErr (*SetToolInfoVarValues) ( const ai::int32 *infoVars, void **values );
01054
01060 AIAPI AIErr (*SystemHasPressure) ( AIBoolean *hasPressure );
01061
01063 AIAPI AIErr (*GetToolNullEventInterval) (AIToolHandle tool, AIToolTime *outTime);
01064
01066 AIAPI AIErr (*SetToolNullEventInterval) (AIToolHandle tool, AIToolTime inTime);
01067
01074 AIAPI AIErr (*SetSoftSelectedTool) ( AIToolHandle tool );
01075
01083 AIAPI AIErr (*IsSoftModeSelection) ( AIBoolean *isSoftMode );
01084
01091 AIAPI AIErr (*GetAlternateSelectionToolName) (AIToolHandle tool, char **name);
01092
01099 AIAPI AIErr (*SetAlternateSelectionToolName) (AIToolHandle tool, const char* alternateTool);
01100
01109 AIAPI AIErr (*GetCurrentToolName) ( const char **name );
01110
01114 AIAPI AIErr (*GetCurrentToolNumber) ( AIToolType *toolNum );
01115
01125 AIAPI AIErr (*GetCurrentEffectiveTool) ( AIToolHandle *tool );
01126
01134 AIAPI AIErr (*GetCurrentEffectiveToolName) ( const char **name );
01135
01140 AIAPI AIErr (*GetCurrentEffectiveToolNumber) ( AIToolType *toolNum );
01141
01150 AIAPI AIToolType (*GetLastUsedSelectionTool) ( const char **name );
01151
01158 AIAPI AIErr (*SetSelectedToolByName) ( const char *name );
01159
01163 AIAPI AIErr (*SetSelectedToolByNumber) ( AIToolType toolNum );
01164
01169 AIAPI AIErr (*GetTabletHardwareCapabilities) ( ai::int32* hardwareCapabilities );
01170
01176 AIAPI AIErr (*SetToolIcons) (AIToolHandle tool, const char *normalIconResourceName, const char *darkNormalIconResourceName);
01177
01183 AIAPI AIErr(*GetToolIcons) (const AIToolHandle tool, char **normalIconResourceName, char **darkNormalIconResourceName);
01184
01187 AIAPI AIErr(*SetDocumentInkParams)(const AIToolHandle tool, const AIDocumentInkParams& inDocInkParams);
01188
01192 AIAPI AIErr (*GetToolOptionsFromNumber) (AIToolType toolNum, ai::int32 *options);
01193
01199 AIAPI AIErr (*GetToolOptionsFromName) (const char *toolName, ai::int32 *options);
01200 };
01201
01202
01203 #include "AIHeaderEnd.h"