Browse Source

Removed a couple of old classes: MagnifierComponent (you can use Component::setTransform() instead), and MouseHoverDetector (wasn't really very useful anyway - if you need it, please just take a copy of the class and use it in your own code). Renamed the PopupMenuCustomComponent as an inner class PopupMenu::CustomComponent. Added a default constructor for MidiMessage.

tags/2021-05-28
Julian Storer 14 years ago
parent
commit
5d30aecaf2
30 changed files with 246 additions and 1738 deletions
  1. +0
    -12
      Builds/Linux/Makefile
  2. +1
    -15
      Builds/MacOSX/Juce.xcodeproj/project.pbxproj
  3. +0
    -5
      Builds/VisualStudio2005/Juce.vcproj
  4. +0
    -5
      Builds/VisualStudio2008/Juce.vcproj
  5. +0
    -5
      Builds/VisualStudio2008_DLL/Juce.vcproj
  6. +0
    -5
      Builds/VisualStudio2010/Juce.vcxproj
  7. +0
    -15
      Builds/VisualStudio2010/Juce.vcxproj.filters
  8. +1
    -15
      Builds/iPhone/Juce.xcodeproj/project.pbxproj
  9. +0
    -10
      Juce.jucer
  10. +0
    -2
      amalgamation/juce_amalgamated_template.cpp
  11. +43
    -468
      juce_amalgamated.cpp
  12. +78
    -277
      juce_amalgamated.h
  13. +8
    -0
      src/audio/midi/juce_MidiMessage.cpp
  14. +6
    -0
      src/audio/midi/juce_MidiMessage.h
  15. +4
    -10
      src/containers/juce_ValueTree.cpp
  16. +1
    -1
      src/core/juce_StandardHeader.h
  17. +2
    -3
      src/gui/components/controls/juce_Toolbar.cpp
  18. +23
    -34
      src/gui/components/menus/juce_PopupMenu.cpp
  19. +62
    -13
      src/gui/components/menus/juce_PopupMenu.h
  20. +0
    -91
      src/gui/components/menus/juce_PopupMenuCustomComponent.h
  21. +1
    -1
      src/gui/components/mouse/juce_DragAndDropContainer.cpp
  22. +0
    -146
      src/gui/components/mouse/juce_MouseHoverDetector.cpp
  23. +0
    -130
      src/gui/components/mouse/juce_MouseHoverDetector.h
  24. +11
    -3
      src/gui/components/mouse/juce_MouseInputSource.h
  25. +2
    -2
      src/gui/components/positioning/juce_MarkerList.cpp
  26. +0
    -339
      src/gui/components/special/juce_MagnifierComponent.cpp
  27. +0
    -121
      src/gui/components/special/juce_MagnifierComponent.h
  28. +1
    -1
      src/gui/graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp
  29. +0
    -9
      src/juce_app_includes.h
  30. +2
    -0
      src/native/windows/juce_win32_Midi.cpp

+ 0
- 12
Builds/Linux/Makefile View File

@@ -193,7 +193,6 @@ OBJECTS := \
$(OBJDIR)/juce_DragAndDropContainer_553e412.o \
$(OBJDIR)/juce_MouseCursor_afb68802.o \
$(OBJDIR)/juce_MouseEvent_f6ca6078.o \
$(OBJDIR)/juce_MouseHoverDetector_d4af7a00.o \
$(OBJDIR)/juce_MouseInputSource_8904aa23.o \
$(OBJDIR)/juce_MouseListener_eb73f8a0.o \
$(OBJDIR)/juce_MarkerList_2fbb4ef.o \
@@ -215,7 +214,6 @@ OBJECTS := \
$(OBJDIR)/juce_BubbleMessageComponent_22f737f9.o \
$(OBJDIR)/juce_ColourSelector_ac8bb1e2.o \
$(OBJDIR)/juce_DropShadower_5903f9f3.o \
$(OBJDIR)/juce_MagnifierComponent_58d7efb6.o \
$(OBJDIR)/juce_MidiKeyboardComponent_896e2ac8.o \
$(OBJDIR)/juce_OpenGLComponent_73944221.o \
$(OBJDIR)/juce_PreferencesPanel_dbc7d503.o \
@@ -1139,11 +1137,6 @@ $(OBJDIR)/juce_MouseEvent_f6ca6078.o: ../../src/gui/components/mouse/juce_MouseE
@echo "Compiling juce_MouseEvent.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/juce_MouseHoverDetector_d4af7a00.o: ../../src/gui/components/mouse/juce_MouseHoverDetector.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling juce_MouseHoverDetector.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/juce_MouseInputSource_8904aa23.o: ../../src/gui/components/mouse/juce_MouseInputSource.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling juce_MouseInputSource.cpp"
@@ -1249,11 +1242,6 @@ $(OBJDIR)/juce_DropShadower_5903f9f3.o: ../../src/gui/components/special/juce_Dr
@echo "Compiling juce_DropShadower.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/juce_MagnifierComponent_58d7efb6.o: ../../src/gui/components/special/juce_MagnifierComponent.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling juce_MagnifierComponent.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/juce_MidiKeyboardComponent_896e2ac8.o: ../../src/gui/components/special/juce_MidiKeyboardComponent.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling juce_MidiKeyboardComponent.cpp"


+ 1
- 15
Builds/MacOSX/Juce.xcodeproj/project.pbxproj View File

@@ -162,7 +162,6 @@
E6971F06B78AE76C35E1A19C = { isa = PBXBuildFile; fileRef = 3D74B30C63465C32E26D8E33; };
6629D535AE1ABE35A0D53C69 = { isa = PBXBuildFile; fileRef = 944BC51C440C167C5B2A23E3; };
DD4599D0A8117B025B477DE1 = { isa = PBXBuildFile; fileRef = 067D84F9291770240D1AB5B4; };
968B31D8101A937444C6DFB3 = { isa = PBXBuildFile; fileRef = 2531C57B0C861A48E3F3A673; };
E064E329741F36C329989203 = { isa = PBXBuildFile; fileRef = 441257DD380138C03568FCBD; };
61E659ADBF9D832ED8F24540 = { isa = PBXBuildFile; fileRef = 2886656DF7ACC9DDC888827F; };
9379C833B875207E5DFC5A3F = { isa = PBXBuildFile; fileRef = 82DFF1BD3665DC32672FCCE8; };
@@ -184,7 +183,6 @@
710BF477DE534CF18BD68959 = { isa = PBXBuildFile; fileRef = 4C3C3AFC3D97C1378B7D7435; };
E5DA150E966B948C4CB4EFDB = { isa = PBXBuildFile; fileRef = 0A20E7E561633610A76A34AB; };
E96B477EB51FC152AC2EA6BD = { isa = PBXBuildFile; fileRef = 9C1D5CDA61FB51F657DA8B22; };
E847271789B669289C899425 = { isa = PBXBuildFile; fileRef = 4A6A78512816BA378FFF348A; };
CF36EF39EEAB7A4744C5D310 = { isa = PBXBuildFile; fileRef = 3C8C1AAF32DFECB89EB83271; };
372B6FF28C49018F5191C517 = { isa = PBXBuildFile; fileRef = 1317F0BE5EC80371F744967B; };
D9AAB4AE220010CD526C87D2 = { isa = PBXBuildFile; fileRef = A34C0E63D41CFF5E55FD1D9E; };
@@ -702,7 +700,6 @@
502B3625329816EA6330465F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MenuBarModel.h; path = ../../src/gui/components/menus/juce_MenuBarModel.h; sourceTree = SOURCE_ROOT; };
6AACD2FD239E39F87B666C6F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PopupMenu.cpp; path = ../../src/gui/components/menus/juce_PopupMenu.cpp; sourceTree = SOURCE_ROOT; };
A563BC883D801CF5956DC4BC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_PopupMenu.h; path = ../../src/gui/components/menus/juce_PopupMenu.h; sourceTree = SOURCE_ROOT; };
7B0A07F03743BCFD719863CF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_PopupMenuCustomComponent.h; path = ../../src/gui/components/menus/juce_PopupMenuCustomComponent.h; sourceTree = SOURCE_ROOT; };
9E4B3BAB9BDB06B60D28DF48 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ComponentDragger.cpp; path = ../../src/gui/components/mouse/juce_ComponentDragger.cpp; sourceTree = SOURCE_ROOT; };
BCDD702ED33BADF3FC19384C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ComponentDragger.h; path = ../../src/gui/components/mouse/juce_ComponentDragger.h; sourceTree = SOURCE_ROOT; };
3D74B30C63465C32E26D8E33 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DragAndDropContainer.cpp; path = ../../src/gui/components/mouse/juce_DragAndDropContainer.cpp; sourceTree = SOURCE_ROOT; };
@@ -714,8 +711,6 @@
136109B3076DDA7B2E01CF90 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MouseCursor.h; path = ../../src/gui/components/mouse/juce_MouseCursor.h; sourceTree = SOURCE_ROOT; };
067D84F9291770240D1AB5B4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MouseEvent.cpp; path = ../../src/gui/components/mouse/juce_MouseEvent.cpp; sourceTree = SOURCE_ROOT; };
50C02B44D0CB18898F575B1E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MouseEvent.h; path = ../../src/gui/components/mouse/juce_MouseEvent.h; sourceTree = SOURCE_ROOT; };
2531C57B0C861A48E3F3A673 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MouseHoverDetector.cpp; path = ../../src/gui/components/mouse/juce_MouseHoverDetector.cpp; sourceTree = SOURCE_ROOT; };
D6743AC444E80E191B8C8FE3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MouseHoverDetector.h; path = ../../src/gui/components/mouse/juce_MouseHoverDetector.h; sourceTree = SOURCE_ROOT; };
441257DD380138C03568FCBD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MouseInputSource.cpp; path = ../../src/gui/components/mouse/juce_MouseInputSource.cpp; sourceTree = SOURCE_ROOT; };
07CF9AF337779EB486AC92BF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MouseInputSource.h; path = ../../src/gui/components/mouse/juce_MouseInputSource.h; sourceTree = SOURCE_ROOT; };
2886656DF7ACC9DDC888827F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MouseListener.cpp; path = ../../src/gui/components/mouse/juce_MouseListener.cpp; sourceTree = SOURCE_ROOT; };
@@ -760,8 +755,6 @@
CD9F817B7EF0DA080668A3A8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ColourSelector.h; path = ../../src/gui/components/special/juce_ColourSelector.h; sourceTree = SOURCE_ROOT; };
9C1D5CDA61FB51F657DA8B22 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DropShadower.cpp; path = ../../src/gui/components/special/juce_DropShadower.cpp; sourceTree = SOURCE_ROOT; };
7DB8CFB77EA690ACF54C63B4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DropShadower.h; path = ../../src/gui/components/special/juce_DropShadower.h; sourceTree = SOURCE_ROOT; };
4A6A78512816BA378FFF348A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MagnifierComponent.cpp; path = ../../src/gui/components/special/juce_MagnifierComponent.cpp; sourceTree = SOURCE_ROOT; };
3C61804B771D33BED18FADE4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MagnifierComponent.h; path = ../../src/gui/components/special/juce_MagnifierComponent.h; sourceTree = SOURCE_ROOT; };
3C8C1AAF32DFECB89EB83271 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MidiKeyboardComponent.cpp; path = ../../src/gui/components/special/juce_MidiKeyboardComponent.cpp; sourceTree = SOURCE_ROOT; };
127FC743FE67E6EEF2531BD5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MidiKeyboardComponent.h; path = ../../src/gui/components/special/juce_MidiKeyboardComponent.h; sourceTree = SOURCE_ROOT; };
4387C6496C7079FB0032B99D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_NSViewComponent.h; path = ../../src/gui/components/special/juce_NSViewComponent.h; sourceTree = SOURCE_ROOT; };
@@ -1446,8 +1439,7 @@
1DDE0A8E4C5857715D9B5FAE,
502B3625329816EA6330465F,
6AACD2FD239E39F87B666C6F,
A563BC883D801CF5956DC4BC,
7B0A07F03743BCFD719863CF ); name = menus; sourceTree = "<group>"; };
A563BC883D801CF5956DC4BC ); name = menus; sourceTree = "<group>"; };
4F37E36BA5E052B3BD4B87AD = { isa = PBXGroup; children = (
9E4B3BAB9BDB06B60D28DF48,
BCDD702ED33BADF3FC19384C,
@@ -1460,8 +1452,6 @@
136109B3076DDA7B2E01CF90,
067D84F9291770240D1AB5B4,
50C02B44D0CB18898F575B1E,
2531C57B0C861A48E3F3A673,
D6743AC444E80E191B8C8FE3,
441257DD380138C03568FCBD,
07CF9AF337779EB486AC92BF,
2886656DF7ACC9DDC888827F,
@@ -1509,8 +1499,6 @@
CD9F817B7EF0DA080668A3A8,
9C1D5CDA61FB51F657DA8B22,
7DB8CFB77EA690ACF54C63B4,
4A6A78512816BA378FFF348A,
3C61804B771D33BED18FADE4,
3C8C1AAF32DFECB89EB83271,
127FC743FE67E6EEF2531BD5,
4387C6496C7079FB0032B99D,
@@ -2128,7 +2116,6 @@
E6971F06B78AE76C35E1A19C,
6629D535AE1ABE35A0D53C69,
DD4599D0A8117B025B477DE1,
968B31D8101A937444C6DFB3,
E064E329741F36C329989203,
61E659ADBF9D832ED8F24540,
9379C833B875207E5DFC5A3F,
@@ -2150,7 +2137,6 @@
710BF477DE534CF18BD68959,
E5DA150E966B948C4CB4EFDB,
E96B477EB51FC152AC2EA6BD,
E847271789B669289C899425,
CF36EF39EEAB7A4744C5D310,
372B6FF28C49018F5191C517,
D9AAB4AE220010CD526C87D2,


+ 0
- 5
Builds/VisualStudio2005/Juce.vcproj View File

@@ -582,7 +582,6 @@
<File RelativePath="..\..\src\gui\components\menus\juce_MenuBarModel.h"/>
<File RelativePath="..\..\src\gui\components\menus\juce_PopupMenu.cpp"/>
<File RelativePath="..\..\src\gui\components\menus\juce_PopupMenu.h"/>
<File RelativePath="..\..\src\gui\components\menus\juce_PopupMenuCustomComponent.h"/>
</Filter>
<Filter Name="mouse">
<File RelativePath="..\..\src\gui\components\mouse\juce_ComponentDragger.cpp"/>
@@ -596,8 +595,6 @@
<File RelativePath="..\..\src\gui\components\mouse\juce_MouseCursor.h"/>
<File RelativePath="..\..\src\gui\components\mouse\juce_MouseEvent.cpp"/>
<File RelativePath="..\..\src\gui\components\mouse\juce_MouseEvent.h"/>
<File RelativePath="..\..\src\gui\components\mouse\juce_MouseHoverDetector.cpp"/>
<File RelativePath="..\..\src\gui\components\mouse\juce_MouseHoverDetector.h"/>
<File RelativePath="..\..\src\gui\components\mouse\juce_MouseInputSource.cpp"/>
<File RelativePath="..\..\src\gui\components\mouse\juce_MouseInputSource.h"/>
<File RelativePath="..\..\src\gui\components\mouse\juce_MouseListener.cpp"/>
@@ -648,8 +645,6 @@
<File RelativePath="..\..\src\gui\components\special\juce_ColourSelector.h"/>
<File RelativePath="..\..\src\gui\components\special\juce_DropShadower.cpp"/>
<File RelativePath="..\..\src\gui\components\special\juce_DropShadower.h"/>
<File RelativePath="..\..\src\gui\components\special\juce_MagnifierComponent.cpp"/>
<File RelativePath="..\..\src\gui\components\special\juce_MagnifierComponent.h"/>
<File RelativePath="..\..\src\gui\components\special\juce_MidiKeyboardComponent.cpp"/>
<File RelativePath="..\..\src\gui\components\special\juce_MidiKeyboardComponent.h"/>
<File RelativePath="..\..\src\gui\components\special\juce_NSViewComponent.h"/>


+ 0
- 5
Builds/VisualStudio2008/Juce.vcproj View File

@@ -582,7 +582,6 @@
<File RelativePath="..\..\src\gui\components\menus\juce_MenuBarModel.h"/>
<File RelativePath="..\..\src\gui\components\menus\juce_PopupMenu.cpp"/>
<File RelativePath="..\..\src\gui\components\menus\juce_PopupMenu.h"/>
<File RelativePath="..\..\src\gui\components\menus\juce_PopupMenuCustomComponent.h"/>
</Filter>
<Filter Name="mouse">
<File RelativePath="..\..\src\gui\components\mouse\juce_ComponentDragger.cpp"/>
@@ -596,8 +595,6 @@
<File RelativePath="..\..\src\gui\components\mouse\juce_MouseCursor.h"/>
<File RelativePath="..\..\src\gui\components\mouse\juce_MouseEvent.cpp"/>
<File RelativePath="..\..\src\gui\components\mouse\juce_MouseEvent.h"/>
<File RelativePath="..\..\src\gui\components\mouse\juce_MouseHoverDetector.cpp"/>
<File RelativePath="..\..\src\gui\components\mouse\juce_MouseHoverDetector.h"/>
<File RelativePath="..\..\src\gui\components\mouse\juce_MouseInputSource.cpp"/>
<File RelativePath="..\..\src\gui\components\mouse\juce_MouseInputSource.h"/>
<File RelativePath="..\..\src\gui\components\mouse\juce_MouseListener.cpp"/>
@@ -648,8 +645,6 @@
<File RelativePath="..\..\src\gui\components\special\juce_ColourSelector.h"/>
<File RelativePath="..\..\src\gui\components\special\juce_DropShadower.cpp"/>
<File RelativePath="..\..\src\gui\components\special\juce_DropShadower.h"/>
<File RelativePath="..\..\src\gui\components\special\juce_MagnifierComponent.cpp"/>
<File RelativePath="..\..\src\gui\components\special\juce_MagnifierComponent.h"/>
<File RelativePath="..\..\src\gui\components\special\juce_MidiKeyboardComponent.cpp"/>
<File RelativePath="..\..\src\gui\components\special\juce_MidiKeyboardComponent.h"/>
<File RelativePath="..\..\src\gui\components\special\juce_NSViewComponent.h"/>


+ 0
- 5
Builds/VisualStudio2008_DLL/Juce.vcproj View File

@@ -584,7 +584,6 @@
<File RelativePath="..\..\src\gui\components\menus\juce_MenuBarModel.h"/>
<File RelativePath="..\..\src\gui\components\menus\juce_PopupMenu.cpp"/>
<File RelativePath="..\..\src\gui\components\menus\juce_PopupMenu.h"/>
<File RelativePath="..\..\src\gui\components\menus\juce_PopupMenuCustomComponent.h"/>
</Filter>
<Filter Name="mouse">
<File RelativePath="..\..\src\gui\components\mouse\juce_ComponentDragger.cpp"/>
@@ -598,8 +597,6 @@
<File RelativePath="..\..\src\gui\components\mouse\juce_MouseCursor.h"/>
<File RelativePath="..\..\src\gui\components\mouse\juce_MouseEvent.cpp"/>
<File RelativePath="..\..\src\gui\components\mouse\juce_MouseEvent.h"/>
<File RelativePath="..\..\src\gui\components\mouse\juce_MouseHoverDetector.cpp"/>
<File RelativePath="..\..\src\gui\components\mouse\juce_MouseHoverDetector.h"/>
<File RelativePath="..\..\src\gui\components\mouse\juce_MouseInputSource.cpp"/>
<File RelativePath="..\..\src\gui\components\mouse\juce_MouseInputSource.h"/>
<File RelativePath="..\..\src\gui\components\mouse\juce_MouseListener.cpp"/>
@@ -650,8 +647,6 @@
<File RelativePath="..\..\src\gui\components\special\juce_ColourSelector.h"/>
<File RelativePath="..\..\src\gui\components\special\juce_DropShadower.cpp"/>
<File RelativePath="..\..\src\gui\components\special\juce_DropShadower.h"/>
<File RelativePath="..\..\src\gui\components\special\juce_MagnifierComponent.cpp"/>
<File RelativePath="..\..\src\gui\components\special\juce_MagnifierComponent.h"/>
<File RelativePath="..\..\src\gui\components\special\juce_MidiKeyboardComponent.cpp"/>
<File RelativePath="..\..\src\gui\components\special\juce_MidiKeyboardComponent.h"/>
<File RelativePath="..\..\src\gui\components\special\juce_NSViewComponent.h"/>


+ 0
- 5
Builds/VisualStudio2010/Juce.vcxproj View File

@@ -276,7 +276,6 @@
<ClCompile Include="..\..\src\gui\components\mouse\juce_DragAndDropContainer.cpp"/>
<ClCompile Include="..\..\src\gui\components\mouse\juce_MouseCursor.cpp"/>
<ClCompile Include="..\..\src\gui\components\mouse\juce_MouseEvent.cpp"/>
<ClCompile Include="..\..\src\gui\components\mouse\juce_MouseHoverDetector.cpp"/>
<ClCompile Include="..\..\src\gui\components\mouse\juce_MouseInputSource.cpp"/>
<ClCompile Include="..\..\src\gui\components\mouse\juce_MouseListener.cpp"/>
<ClCompile Include="..\..\src\gui\components\positioning\juce_MarkerList.cpp"/>
@@ -298,7 +297,6 @@
<ClCompile Include="..\..\src\gui\components\special\juce_BubbleMessageComponent.cpp"/>
<ClCompile Include="..\..\src\gui\components\special\juce_ColourSelector.cpp"/>
<ClCompile Include="..\..\src\gui\components\special\juce_DropShadower.cpp"/>
<ClCompile Include="..\..\src\gui\components\special\juce_MagnifierComponent.cpp"/>
<ClCompile Include="..\..\src\gui\components\special\juce_MidiKeyboardComponent.cpp"/>
<ClCompile Include="..\..\src\gui\components\special\juce_OpenGLComponent.cpp"/>
<ClCompile Include="..\..\src\gui\components\special\juce_PreferencesPanel.cpp"/>
@@ -628,7 +626,6 @@
<ClInclude Include="..\..\src\gui\components\menus\juce_MenuBarComponent.h"/>
<ClInclude Include="..\..\src\gui\components\menus\juce_MenuBarModel.h"/>
<ClInclude Include="..\..\src\gui\components\menus\juce_PopupMenu.h"/>
<ClInclude Include="..\..\src\gui\components\menus\juce_PopupMenuCustomComponent.h"/>
<ClInclude Include="..\..\src\gui\components\mouse\juce_ComponentDragger.h"/>
<ClInclude Include="..\..\src\gui\components\mouse\juce_DragAndDropContainer.h"/>
<ClInclude Include="..\..\src\gui\components\mouse\juce_DragAndDropTarget.h"/>
@@ -636,7 +633,6 @@
<ClInclude Include="..\..\src\gui\components\mouse\juce_LassoComponent.h"/>
<ClInclude Include="..\..\src\gui\components\mouse\juce_MouseCursor.h"/>
<ClInclude Include="..\..\src\gui\components\mouse\juce_MouseEvent.h"/>
<ClInclude Include="..\..\src\gui\components\mouse\juce_MouseHoverDetector.h"/>
<ClInclude Include="..\..\src\gui\components\mouse\juce_MouseInputSource.h"/>
<ClInclude Include="..\..\src\gui\components\mouse\juce_MouseListener.h"/>
<ClInclude Include="..\..\src\gui\components\mouse\juce_TooltipClient.h"/>
@@ -660,7 +656,6 @@
<ClInclude Include="..\..\src\gui\components\special\juce_BubbleMessageComponent.h"/>
<ClInclude Include="..\..\src\gui\components\special\juce_ColourSelector.h"/>
<ClInclude Include="..\..\src\gui\components\special\juce_DropShadower.h"/>
<ClInclude Include="..\..\src\gui\components\special\juce_MagnifierComponent.h"/>
<ClInclude Include="..\..\src\gui\components\special\juce_MidiKeyboardComponent.h"/>
<ClInclude Include="..\..\src\gui\components\special\juce_NSViewComponent.h"/>
<ClInclude Include="..\..\src\gui\components\special\juce_OpenGLComponent.h"/>


+ 0
- 15
Builds/VisualStudio2010/Juce.vcxproj.filters View File

@@ -685,9 +685,6 @@
<ClCompile Include="..\..\src\gui\components\mouse\juce_MouseEvent.cpp">
<Filter>Juce\Source\gui\components\mouse</Filter>
</ClCompile>
<ClCompile Include="..\..\src\gui\components\mouse\juce_MouseHoverDetector.cpp">
<Filter>Juce\Source\gui\components\mouse</Filter>
</ClCompile>
<ClCompile Include="..\..\src\gui\components\mouse\juce_MouseInputSource.cpp">
<Filter>Juce\Source\gui\components\mouse</Filter>
</ClCompile>
@@ -751,9 +748,6 @@
<ClCompile Include="..\..\src\gui\components\special\juce_DropShadower.cpp">
<Filter>Juce\Source\gui\components\special</Filter>
</ClCompile>
<ClCompile Include="..\..\src\gui\components\special\juce_MagnifierComponent.cpp">
<Filter>Juce\Source\gui\components\special</Filter>
</ClCompile>
<ClCompile Include="..\..\src\gui\components\special\juce_MidiKeyboardComponent.cpp">
<Filter>Juce\Source\gui\components\special</Filter>
</ClCompile>
@@ -1815,9 +1809,6 @@
<ClInclude Include="..\..\src\gui\components\menus\juce_PopupMenu.h">
<Filter>Juce\Source\gui\components\menus</Filter>
</ClInclude>
<ClInclude Include="..\..\src\gui\components\menus\juce_PopupMenuCustomComponent.h">
<Filter>Juce\Source\gui\components\menus</Filter>
</ClInclude>
<ClInclude Include="..\..\src\gui\components\mouse\juce_ComponentDragger.h">
<Filter>Juce\Source\gui\components\mouse</Filter>
</ClInclude>
@@ -1839,9 +1830,6 @@
<ClInclude Include="..\..\src\gui\components\mouse\juce_MouseEvent.h">
<Filter>Juce\Source\gui\components\mouse</Filter>
</ClInclude>
<ClInclude Include="..\..\src\gui\components\mouse\juce_MouseHoverDetector.h">
<Filter>Juce\Source\gui\components\mouse</Filter>
</ClInclude>
<ClInclude Include="..\..\src\gui\components\mouse\juce_MouseInputSource.h">
<Filter>Juce\Source\gui\components\mouse</Filter>
</ClInclude>
@@ -1911,9 +1899,6 @@
<ClInclude Include="..\..\src\gui\components\special\juce_DropShadower.h">
<Filter>Juce\Source\gui\components\special</Filter>
</ClInclude>
<ClInclude Include="..\..\src\gui\components\special\juce_MagnifierComponent.h">
<Filter>Juce\Source\gui\components\special</Filter>
</ClInclude>
<ClInclude Include="..\..\src\gui\components\special\juce_MidiKeyboardComponent.h">
<Filter>Juce\Source\gui\components\special</Filter>
</ClInclude>


+ 1
- 15
Builds/iPhone/Juce.xcodeproj/project.pbxproj View File

@@ -162,7 +162,6 @@
E6971F06B78AE76C35E1A19C = { isa = PBXBuildFile; fileRef = 3D74B30C63465C32E26D8E33; };
6629D535AE1ABE35A0D53C69 = { isa = PBXBuildFile; fileRef = 944BC51C440C167C5B2A23E3; };
DD4599D0A8117B025B477DE1 = { isa = PBXBuildFile; fileRef = 067D84F9291770240D1AB5B4; };
968B31D8101A937444C6DFB3 = { isa = PBXBuildFile; fileRef = 2531C57B0C861A48E3F3A673; };
E064E329741F36C329989203 = { isa = PBXBuildFile; fileRef = 441257DD380138C03568FCBD; };
61E659ADBF9D832ED8F24540 = { isa = PBXBuildFile; fileRef = 2886656DF7ACC9DDC888827F; };
9379C833B875207E5DFC5A3F = { isa = PBXBuildFile; fileRef = 82DFF1BD3665DC32672FCCE8; };
@@ -184,7 +183,6 @@
710BF477DE534CF18BD68959 = { isa = PBXBuildFile; fileRef = 4C3C3AFC3D97C1378B7D7435; };
E5DA150E966B948C4CB4EFDB = { isa = PBXBuildFile; fileRef = 0A20E7E561633610A76A34AB; };
E96B477EB51FC152AC2EA6BD = { isa = PBXBuildFile; fileRef = 9C1D5CDA61FB51F657DA8B22; };
E847271789B669289C899425 = { isa = PBXBuildFile; fileRef = 4A6A78512816BA378FFF348A; };
CF36EF39EEAB7A4744C5D310 = { isa = PBXBuildFile; fileRef = 3C8C1AAF32DFECB89EB83271; };
372B6FF28C49018F5191C517 = { isa = PBXBuildFile; fileRef = 1317F0BE5EC80371F744967B; };
D9AAB4AE220010CD526C87D2 = { isa = PBXBuildFile; fileRef = A34C0E63D41CFF5E55FD1D9E; };
@@ -702,7 +700,6 @@
502B3625329816EA6330465F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MenuBarModel.h; path = ../../src/gui/components/menus/juce_MenuBarModel.h; sourceTree = SOURCE_ROOT; };
6AACD2FD239E39F87B666C6F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PopupMenu.cpp; path = ../../src/gui/components/menus/juce_PopupMenu.cpp; sourceTree = SOURCE_ROOT; };
A563BC883D801CF5956DC4BC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_PopupMenu.h; path = ../../src/gui/components/menus/juce_PopupMenu.h; sourceTree = SOURCE_ROOT; };
7B0A07F03743BCFD719863CF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_PopupMenuCustomComponent.h; path = ../../src/gui/components/menus/juce_PopupMenuCustomComponent.h; sourceTree = SOURCE_ROOT; };
9E4B3BAB9BDB06B60D28DF48 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ComponentDragger.cpp; path = ../../src/gui/components/mouse/juce_ComponentDragger.cpp; sourceTree = SOURCE_ROOT; };
BCDD702ED33BADF3FC19384C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ComponentDragger.h; path = ../../src/gui/components/mouse/juce_ComponentDragger.h; sourceTree = SOURCE_ROOT; };
3D74B30C63465C32E26D8E33 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DragAndDropContainer.cpp; path = ../../src/gui/components/mouse/juce_DragAndDropContainer.cpp; sourceTree = SOURCE_ROOT; };
@@ -714,8 +711,6 @@
136109B3076DDA7B2E01CF90 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MouseCursor.h; path = ../../src/gui/components/mouse/juce_MouseCursor.h; sourceTree = SOURCE_ROOT; };
067D84F9291770240D1AB5B4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MouseEvent.cpp; path = ../../src/gui/components/mouse/juce_MouseEvent.cpp; sourceTree = SOURCE_ROOT; };
50C02B44D0CB18898F575B1E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MouseEvent.h; path = ../../src/gui/components/mouse/juce_MouseEvent.h; sourceTree = SOURCE_ROOT; };
2531C57B0C861A48E3F3A673 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MouseHoverDetector.cpp; path = ../../src/gui/components/mouse/juce_MouseHoverDetector.cpp; sourceTree = SOURCE_ROOT; };
D6743AC444E80E191B8C8FE3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MouseHoverDetector.h; path = ../../src/gui/components/mouse/juce_MouseHoverDetector.h; sourceTree = SOURCE_ROOT; };
441257DD380138C03568FCBD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MouseInputSource.cpp; path = ../../src/gui/components/mouse/juce_MouseInputSource.cpp; sourceTree = SOURCE_ROOT; };
07CF9AF337779EB486AC92BF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MouseInputSource.h; path = ../../src/gui/components/mouse/juce_MouseInputSource.h; sourceTree = SOURCE_ROOT; };
2886656DF7ACC9DDC888827F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MouseListener.cpp; path = ../../src/gui/components/mouse/juce_MouseListener.cpp; sourceTree = SOURCE_ROOT; };
@@ -760,8 +755,6 @@
CD9F817B7EF0DA080668A3A8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ColourSelector.h; path = ../../src/gui/components/special/juce_ColourSelector.h; sourceTree = SOURCE_ROOT; };
9C1D5CDA61FB51F657DA8B22 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DropShadower.cpp; path = ../../src/gui/components/special/juce_DropShadower.cpp; sourceTree = SOURCE_ROOT; };
7DB8CFB77EA690ACF54C63B4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DropShadower.h; path = ../../src/gui/components/special/juce_DropShadower.h; sourceTree = SOURCE_ROOT; };
4A6A78512816BA378FFF348A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MagnifierComponent.cpp; path = ../../src/gui/components/special/juce_MagnifierComponent.cpp; sourceTree = SOURCE_ROOT; };
3C61804B771D33BED18FADE4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MagnifierComponent.h; path = ../../src/gui/components/special/juce_MagnifierComponent.h; sourceTree = SOURCE_ROOT; };
3C8C1AAF32DFECB89EB83271 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MidiKeyboardComponent.cpp; path = ../../src/gui/components/special/juce_MidiKeyboardComponent.cpp; sourceTree = SOURCE_ROOT; };
127FC743FE67E6EEF2531BD5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_MidiKeyboardComponent.h; path = ../../src/gui/components/special/juce_MidiKeyboardComponent.h; sourceTree = SOURCE_ROOT; };
4387C6496C7079FB0032B99D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_NSViewComponent.h; path = ../../src/gui/components/special/juce_NSViewComponent.h; sourceTree = SOURCE_ROOT; };
@@ -1446,8 +1439,7 @@
1DDE0A8E4C5857715D9B5FAE,
502B3625329816EA6330465F,
6AACD2FD239E39F87B666C6F,
A563BC883D801CF5956DC4BC,
7B0A07F03743BCFD719863CF ); name = menus; sourceTree = "<group>"; };
A563BC883D801CF5956DC4BC ); name = menus; sourceTree = "<group>"; };
4F37E36BA5E052B3BD4B87AD = { isa = PBXGroup; children = (
9E4B3BAB9BDB06B60D28DF48,
BCDD702ED33BADF3FC19384C,
@@ -1460,8 +1452,6 @@
136109B3076DDA7B2E01CF90,
067D84F9291770240D1AB5B4,
50C02B44D0CB18898F575B1E,
2531C57B0C861A48E3F3A673,
D6743AC444E80E191B8C8FE3,
441257DD380138C03568FCBD,
07CF9AF337779EB486AC92BF,
2886656DF7ACC9DDC888827F,
@@ -1509,8 +1499,6 @@
CD9F817B7EF0DA080668A3A8,
9C1D5CDA61FB51F657DA8B22,
7DB8CFB77EA690ACF54C63B4,
4A6A78512816BA378FFF348A,
3C61804B771D33BED18FADE4,
3C8C1AAF32DFECB89EB83271,
127FC743FE67E6EEF2531BD5,
4387C6496C7079FB0032B99D,
@@ -2128,7 +2116,6 @@
E6971F06B78AE76C35E1A19C,
6629D535AE1ABE35A0D53C69,
DD4599D0A8117B025B477DE1,
968B31D8101A937444C6DFB3,
E064E329741F36C329989203,
61E659ADBF9D832ED8F24540,
9379C833B875207E5DFC5A3F,
@@ -2150,7 +2137,6 @@
710BF477DE534CF18BD68959,
E5DA150E966B948C4CB4EFDB,
E96B477EB51FC152AC2EA6BD,
E847271789B669289C899425,
CF36EF39EEAB7A4744C5D310,
372B6FF28C49018F5191C517,
D9AAB4AE220010CD526C87D2,


+ 0
- 10
Juce.jucer View File

@@ -792,8 +792,6 @@
file="src/gui/components/menus/juce_PopupMenu.cpp"/>
<FILE id="VNJnvSCVQ" name="juce_PopupMenu.h" compile="0" resource="0"
file="src/gui/components/menus/juce_PopupMenu.h"/>
<FILE id="fdRptQQCr" name="juce_PopupMenuCustomComponent.h" compile="0"
resource="0" file="src/gui/components/menus/juce_PopupMenuCustomComponent.h"/>
</GROUP>
<GROUP id="4Z6gX1IB5" name="mouse">
<FILE id="zg6SjElG2" name="juce_ComponentDragger.cpp" compile="1" resource="0"
@@ -818,10 +816,6 @@
file="src/gui/components/mouse/juce_MouseEvent.cpp"/>
<FILE id="w6gpReQJ" name="juce_MouseEvent.h" compile="0" resource="0"
file="src/gui/components/mouse/juce_MouseEvent.h"/>
<FILE id="jWJffCCWt" name="juce_MouseHoverDetector.cpp" compile="1"
resource="0" file="src/gui/components/mouse/juce_MouseHoverDetector.cpp"/>
<FILE id="wLpGKPDBH" name="juce_MouseHoverDetector.h" compile="0" resource="0"
file="src/gui/components/mouse/juce_MouseHoverDetector.h"/>
<FILE id="RxLJE2TH8" name="juce_MouseInputSource.cpp" compile="1" resource="0"
file="src/gui/components/mouse/juce_MouseInputSource.cpp"/>
<FILE id="bf62P4hKo" name="juce_MouseInputSource.h" compile="0" resource="0"
@@ -916,10 +910,6 @@
file="src/gui/components/special/juce_DropShadower.cpp"/>
<FILE id="tNsR3nrMx" name="juce_DropShadower.h" compile="0" resource="0"
file="src/gui/components/special/juce_DropShadower.h"/>
<FILE id="dPsalIXYm" name="juce_MagnifierComponent.cpp" compile="1"
resource="0" file="src/gui/components/special/juce_MagnifierComponent.cpp"/>
<FILE id="9mE7Snh9t" name="juce_MagnifierComponent.h" compile="0" resource="0"
file="src/gui/components/special/juce_MagnifierComponent.h"/>
<FILE id="azZgJ9Sn" name="juce_MidiKeyboardComponent.cpp" compile="1"
resource="0" file="src/gui/components/special/juce_MidiKeyboardComponent.cpp"/>
<FILE id="lZq5kJdPd" name="juce_MidiKeyboardComponent.h" compile="0"


+ 0
- 2
amalgamation/juce_amalgamated_template.cpp View File

@@ -297,7 +297,6 @@
#include "../src/gui/components/mouse/juce_MouseCursor.cpp"
#include "../src/gui/components/mouse/juce_MouseEvent.cpp"
#include "../src/gui/components/mouse/juce_MouseInputSource.cpp"
#include "../src/gui/components/mouse/juce_MouseHoverDetector.cpp"
#include "../src/gui/components/mouse/juce_MouseListener.cpp"
#include "../src/gui/components/properties/juce_BooleanPropertyComponent.cpp"
#include "../src/gui/components/properties/juce_ButtonPropertyComponent.cpp"
@@ -311,7 +310,6 @@
#include "../src/gui/components/special/juce_BubbleMessageComponent.cpp"
#include "../src/gui/components/special/juce_ColourSelector.cpp"
#include "../src/gui/components/special/juce_DropShadower.cpp"
#include "../src/gui/components/special/juce_MagnifierComponent.cpp"
#include "../src/gui/components/special/juce_MidiKeyboardComponent.cpp"
#include "../src/gui/components/special/juce_OpenGLComponent.cpp"
#include "../src/gui/components/special/juce_PreferencesPanel.cpp"


+ 43
- 468
juce_amalgamated.cpp View File

@@ -17595,8 +17595,6 @@ public:
{
}

~SetPropertyAction() {}

bool perform()
{
jassert (! (isAddingNewProperty && target->hasProperty (name)));
@@ -17663,8 +17661,6 @@ public:
jassert (child != 0);
}

~AddOrRemoveChildAction() {}

bool perform()
{
if (isDeleting)
@@ -17716,8 +17712,6 @@ public:
{
}

~MoveChildAction() {}

bool perform()
{
parent->moveChild (startIndex, endIndex, 0);
@@ -17919,7 +17913,7 @@ ValueTree ValueTree::SharedObject::getChildWithName (const Identifier& typeToMat
{
for (int i = 0; i < children.size(); ++i)
if (children.getUnchecked(i)->type == typeToMatch)
return ValueTree (static_cast <SharedObject*> (children.getUnchecked(i)));
return ValueTree (children.getUnchecked(i).getObject());

return ValueTree::invalid;
}
@@ -17928,7 +17922,7 @@ ValueTree ValueTree::SharedObject::getOrCreateChildWithName (const Identifier& t
{
for (int i = 0; i < children.size(); ++i)
if (children.getUnchecked(i)->type == typeToMatch)
return ValueTree (static_cast <SharedObject*> (children.getUnchecked(i)));
return ValueTree (children.getUnchecked(i).getObject());

SharedObject* const newObject = new SharedObject (typeToMatch);
addChild (newObject, -1, undoManager);
@@ -17940,7 +17934,7 @@ ValueTree ValueTree::SharedObject::getChildWithProperty (const Identifier& prope
{
for (int i = 0; i < children.size(); ++i)
if (children.getUnchecked(i)->getProperty (propertyName) == propertyValue)
return ValueTree (static_cast <SharedObject*> (children.getUnchecked(i)));
return ValueTree (children.getUnchecked(i).getObject());

return ValueTree::invalid;
}
@@ -18179,7 +18173,7 @@ ValueTree ValueTree::getSibling (const int delta) const
return invalid;

const int index = object->parent->indexOf (*this) + delta;
return ValueTree (static_cast <SharedObject*> (object->parent->children [index]));
return ValueTree (object->parent->children [index].getObject());
}

const var& ValueTree::operator[] (const Identifier& name) const
@@ -28605,6 +28599,14 @@ int MidiMessage::getMessageLengthFromFirstByte (const uint8 firstByte) throw()
return messageLengths [firstByte & 0x7f];
}

MidiMessage::MidiMessage() throw()
: timeStamp (0),
data (static_cast<uint8*> (preallocatedData.asBytes)),
size (1)
{
data[0] = 0xfe;
}

MidiMessage::MidiMessage (const void* const d, const int dataSize, const double t)
: timeStamp (t),
size (dataSize)
@@ -54772,11 +54774,11 @@ private:
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ToolbarSpacerComp);
};

class Toolbar::MissingItemsComponent : public PopupMenuCustomComponent
class Toolbar::MissingItemsComponent : public PopupMenu::CustomComponent
{
public:
MissingItemsComponent (Toolbar& owner_, const int height_)
: PopupMenuCustomComponent (true),
: PopupMenu::CustomComponent (true),
owner (&owner_),
height (height_)
{
@@ -68844,7 +68846,7 @@ public:
const Image& im,
const Colour& textColour_,
const bool usesColour_,
PopupMenuCustomComponent* const customComp_,
CustomComponent* const customComp_,
const PopupMenu* const subMenu_,
ApplicationCommandManager* const commandManager_)
: itemId (itemId_), text (text_), textColour (textColour_),
@@ -68906,7 +68908,7 @@ public:
const Colour textColour;
const bool active, isSeparator, isTicked, usesColour;
Image image;
ReferenceCountedObjectPtr <PopupMenuCustomComponent> customComp;
ReferenceCountedObjectPtr <CustomComponent> customComp;
ScopedPointer <PopupMenu> subMenu;
ApplicationCommandManager* const commandManager;

@@ -68939,22 +68941,15 @@ public:
removeChildComponent (itemInfo.customComp);
}

void getIdealSize (int& idealWidth,
int& idealHeight,
const int standardItemHeight)
void getIdealSize (int& idealWidth, int& idealHeight, const int standardItemHeight)
{
if (itemInfo.customComp != 0)
{
itemInfo.customComp->getIdealSize (idealWidth, idealHeight);
}
else
{
getLookAndFeel().getIdealPopupMenuItemSize (itemInfo.text,
itemInfo.isSeparator,
standardItemHeight,
idealWidth,
idealHeight);
}
idealWidth, idealHeight);
}

void paint (Graphics& g)
@@ -68999,10 +68994,7 @@ public:
isHighlighted = shouldBeHighlighted;

if (itemInfo.customComp != 0)
{
itemInfo.customComp->isHighlighted = shouldBeHighlighted;
itemInfo.customComp->repaint();
}
itemInfo.customComp->setHighlighted (shouldBeHighlighted);

repaint();
}
@@ -69899,9 +69891,7 @@ private:
&& (isOver || (activeSubMenu == 0) || ! activeSubMenu->isVisible()))
{
if (isOver && (c != 0) && (activeSubMenu != 0))
{
activeSubMenu->hide (0, true);
}

if (! isOver)
mic = 0;
@@ -69916,7 +69906,7 @@ private:
if (currentChild != 0
&& currentChild->itemInfo.canBeTriggered()
&& (currentChild->itemInfo.customComp == 0
|| currentChild->itemInfo.customComp->isTriggeredAutomatically))
|| currentChild->itemInfo.customComp->isTriggeredAutomatically()))
{
dismissMenu (&currentChild->itemInfo);
}
@@ -70064,8 +70054,7 @@ void PopupMenu::addColouredItem (const int itemResultId,
itemTextColour, true, 0, 0, 0));
}

void PopupMenu::addCustomItem (const int itemResultId,
PopupMenuCustomComponent* const customComponent)
void PopupMenu::addCustomItem (const int itemResultId, CustomComponent* const customComponent)
{
jassert (itemResultId != 0); // 0 is used as a return value to indicate that the user
// didn't pick anything, so you shouldn't use it as the id
@@ -70077,19 +70066,17 @@ void PopupMenu::addCustomItem (const int itemResultId,
Colours::black, false, customComponent, 0, 0));
}

class NormalComponentWrapper : public PopupMenuCustomComponent
class NormalComponentWrapper : public PopupMenu::CustomComponent
{
public:
NormalComponentWrapper (Component* const comp, const int w, const int h,
const bool triggerMenuItemAutomaticallyWhenClicked)
: PopupMenuCustomComponent (triggerMenuItemAutomaticallyWhenClicked),
: PopupMenu::CustomComponent (triggerMenuItemAutomaticallyWhenClicked),
width (w), height (h)
{
addAndMakeVisible (comp);
}

~NormalComponentWrapper() {}

void getIdealSize (int& idealWidth, int& idealHeight)
{
idealWidth = width;
@@ -70135,11 +70122,11 @@ void PopupMenu::addSeparator()
separatorPending = true;
}

class HeaderItemComponent : public PopupMenuCustomComponent
class HeaderItemComponent : public PopupMenu::CustomComponent
{
public:
HeaderItemComponent (const String& name)
: PopupMenuCustomComponent (false)
: PopupMenu::CustomComponent (false)
{
setName (name);
}
@@ -70156,8 +70143,7 @@ public:
Justification::bottomLeft, 1);
}

void getIdealSize (int& idealWidth,
int& idealHeight)
void getIdealSize (int& idealWidth, int& idealHeight)
{
getLookAndFeel().getIdealPopupMenuItemSize (getName(), false, -1, idealWidth, idealHeight);
idealHeight += idealHeight / 2;
@@ -70359,17 +70345,23 @@ void PopupMenu::setLookAndFeel (LookAndFeel* const newLookAndFeel)
lookAndFeel = newLookAndFeel;
}

PopupMenuCustomComponent::PopupMenuCustomComponent (const bool isTriggeredAutomatically_)
PopupMenu::CustomComponent::CustomComponent (const bool isTriggeredAutomatically_)
: isHighlighted (false),
isTriggeredAutomatically (isTriggeredAutomatically_)
triggeredAutomatically (isTriggeredAutomatically_)
{
}

PopupMenu::CustomComponent::~CustomComponent()
{
}

PopupMenuCustomComponent::~PopupMenuCustomComponent()
void PopupMenu::CustomComponent::setHighlighted (bool shouldBeHighlighted)
{
isHighlighted = shouldBeHighlighted;
repaint();
}

void PopupMenuCustomComponent::triggerMenuItem()
void PopupMenu::CustomComponent::triggerMenuItem()
{
PopupMenu::ItemComponent* const mic = dynamic_cast <PopupMenu::ItemComponent*> (getParentComponent());

@@ -70429,7 +70421,7 @@ bool PopupMenu::MenuItemIterator::next()
isSeparator = item->isSeparator;
isTicked = item->isTicked;
isEnabled = item->active;
isSectionHeader = dynamic_cast <HeaderItemComponent*> (static_cast <PopupMenuCustomComponent*> (item->customComp)) != 0;
isSectionHeader = dynamic_cast <HeaderItemComponent*> (static_cast <CustomComponent*> (item->customComp)) != 0;
isCustomComponent = (! isSectionHeader) && item->customComp != 0;
customColour = item->usesColour ? &(item->textColour) : 0;
customImage = item->image;
@@ -70741,7 +70733,7 @@ private:
WeakReference<Component> currentlyOverComp;
DragAndDropTarget* getCurrentlyOver()
{
return dynamic_cast <DragAndDropTarget*> (static_cast <Component*> (currentlyOverComp));
return dynamic_cast <DragAndDropTarget*> (currentlyOverComp.get());
}

String dragDesc;
@@ -71707,122 +71699,6 @@ END_JUCE_NAMESPACE
/*** End of inlined file: juce_MouseInputSource.cpp ***/


/*** Start of inlined file: juce_MouseHoverDetector.cpp ***/
BEGIN_JUCE_NAMESPACE

MouseHoverDetector::MouseHoverDetector (const int hoverTimeMillisecs_)
: source (0),
hoverTimeMillisecs (hoverTimeMillisecs_),
hasJustHovered (false)
{
internalTimer.owner = this;
}

MouseHoverDetector::~MouseHoverDetector()
{
setHoverComponent (0);
}

void MouseHoverDetector::setHoverTimeMillisecs (const int newTimeInMillisecs)
{
hoverTimeMillisecs = newTimeInMillisecs;
}

void MouseHoverDetector::setHoverComponent (Component* const newSourceComponent)
{
if (source != newSourceComponent)
{
internalTimer.stopTimer();
hasJustHovered = false;

if (source != 0)
source->removeMouseListener (&internalTimer);

source = newSourceComponent;

if (newSourceComponent != 0)
newSourceComponent->addMouseListener (&internalTimer, false);
}
}

void MouseHoverDetector::hoverTimerCallback()
{
internalTimer.stopTimer();

if (source != 0)
{
const Point<int> pos (source->getMouseXYRelative());

if (source->reallyContains (pos, false))
{
hasJustHovered = true;
mouseHovered (pos.getX(), pos.getY());
}
}
}

void MouseHoverDetector::checkJustHoveredCallback()
{
if (hasJustHovered)
{
hasJustHovered = false;
mouseMovedAfterHover();
}
}

void MouseHoverDetector::HoverDetectorInternal::timerCallback()
{
owner->hoverTimerCallback();
}

void MouseHoverDetector::HoverDetectorInternal::mouseEnter (const MouseEvent&)
{
stopTimer();
owner->checkJustHoveredCallback();
}

void MouseHoverDetector::HoverDetectorInternal::mouseExit (const MouseEvent&)
{
stopTimer();
owner->checkJustHoveredCallback();
}

void MouseHoverDetector::HoverDetectorInternal::mouseDown (const MouseEvent&)
{
stopTimer();
owner->checkJustHoveredCallback();
}

void MouseHoverDetector::HoverDetectorInternal::mouseUp (const MouseEvent&)
{
stopTimer();
owner->checkJustHoveredCallback();
}

void MouseHoverDetector::HoverDetectorInternal::mouseMove (const MouseEvent& e)
{
if (lastX != e.x || lastY != e.y) // to avoid fake mouse-moves setting it off
{
lastX = e.x;
lastY = e.y;

if (owner->source != 0)
startTimer (owner->hoverTimeMillisecs);

owner->checkJustHoveredCallback();
}
}

void MouseHoverDetector::HoverDetectorInternal::mouseWheelMove (const MouseEvent&, float, float)
{
stopTimer();
owner->checkJustHoveredCallback();
}

END_JUCE_NAMESPACE
/*** End of inlined file: juce_MouseHoverDetector.cpp ***/


/*** Start of inlined file: juce_MouseListener.cpp ***/
BEGIN_JUCE_NAMESPACE

@@ -74825,309 +74701,6 @@ END_JUCE_NAMESPACE
/*** End of inlined file: juce_DropShadower.cpp ***/


/*** Start of inlined file: juce_MagnifierComponent.cpp ***/
BEGIN_JUCE_NAMESPACE

class MagnifyingPeer : public ComponentPeer
{
public:

MagnifyingPeer (Component* const component_,
MagnifierComponent* const magnifierComp_)
: ComponentPeer (component_, 0),
magnifierComp (magnifierComp_)
{
}

~MagnifyingPeer()
{
}

void* getNativeHandle() const { return 0; }
void setVisible (bool) {}
void setTitle (const String&) {}
void setPosition (int, int) {}
void setSize (int, int) {}
void setBounds (int, int, int, int, bool) {}
void setMinimised (bool) {}
void setAlpha (float /*newAlpha*/) {}
bool isMinimised() const { return false; }
void setFullScreen (bool) {}
bool isFullScreen() const { return false; }
const BorderSize getFrameSize() const { return BorderSize (0); }
bool setAlwaysOnTop (bool) { return true; }
void toFront (bool) {}
void toBehind (ComponentPeer*) {}
void setIcon (const Image&) {}

bool isFocused() const
{
return magnifierComp->hasKeyboardFocus (true);
}

void grabFocus()
{
ComponentPeer* peer = magnifierComp->getPeer();
if (peer != 0)
peer->grabFocus();
}

void textInputRequired (const Point<int>& position)
{
ComponentPeer* peer = magnifierComp->getPeer();
if (peer != 0)
peer->textInputRequired (position);
}

const Rectangle<int> getBounds() const
{
return Rectangle<int> (magnifierComp->getScreenX(), magnifierComp->getScreenY(),
component->getWidth(), component->getHeight());
}

const Point<int> getScreenPosition() const
{
return magnifierComp->getScreenPosition();
}

const Point<int> localToGlobal (const Point<int>& relativePosition)
{
const double zoom = magnifierComp->getScaleFactor();
return magnifierComp->localPointToGlobal (Point<int> (roundToInt (relativePosition.getX() * zoom),
roundToInt (relativePosition.getY() * zoom)));
}

const Point<int> globalToLocal (const Point<int>& screenPosition)
{
const Point<int> p (magnifierComp->getLocalPoint (0, screenPosition));
const double zoom = magnifierComp->getScaleFactor();

return Point<int> (roundToInt (p.getX() / zoom),
roundToInt (p.getY() / zoom));
}

bool contains (const Point<int>& position, bool) const
{
return isPositiveAndBelow (position.getX(), magnifierComp->getWidth())
&& isPositiveAndBelow (position.getY(), magnifierComp->getHeight());
}

void repaint (const Rectangle<int>& area)
{
const double zoom = magnifierComp->getScaleFactor();

magnifierComp->repaint ((int) (area.getX() * zoom),
(int) (area.getY() * zoom),
roundToInt (area.getWidth() * zoom) + 1,
roundToInt (area.getHeight() * zoom) + 1);
}

void performAnyPendingRepaintsNow()
{
}

private:
MagnifierComponent* const magnifierComp;

JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MagnifyingPeer);
};

class PeerHolderComp : public Component
{
public:
PeerHolderComp (MagnifierComponent* const magnifierComp_)
: magnifierComp (magnifierComp_)
{
setVisible (true);
}

~PeerHolderComp()
{
}

ComponentPeer* createNewPeer (int, void*)
{
return new MagnifyingPeer (this, magnifierComp);
}

void childBoundsChanged (Component* c)
{
if (c != 0)
{
setSize (c->getWidth(), c->getHeight());
magnifierComp->childBoundsChanged (this);
}
}

void mouseWheelMove (const MouseEvent& e, float ix, float iy)
{
// unhandled mouse wheel moves can be referred upwards to the parent comp..
Component* const p = magnifierComp->getParentComponent();

if (p != 0)
p->mouseWheelMove (e.getEventRelativeTo (p), ix, iy);
}

private:
MagnifierComponent* const magnifierComp;

JUCE_DECLARE_NON_COPYABLE (PeerHolderComp);
};

MagnifierComponent::MagnifierComponent (Component* const content_,
const bool deleteContentCompWhenNoLongerNeeded)
: content (content_),
scaleFactor (0.0),
peer (0),
deleteContent (deleteContentCompWhenNoLongerNeeded),
quality (Graphics::lowResamplingQuality),
mouseSource (0, true)
{
holderComp = new PeerHolderComp (this);
setScaleFactor (1.0);
}

MagnifierComponent::~MagnifierComponent()
{
delete holderComp;

if (deleteContent)
delete content;
}

void MagnifierComponent::setScaleFactor (double newScaleFactor)
{
jassert (newScaleFactor > 0.0); // hmm - unlikely to work well with a negative scale factor

newScaleFactor = jlimit (1.0 / 8.0, 1000.0, newScaleFactor);

if (scaleFactor != newScaleFactor)
{
scaleFactor = newScaleFactor;

if (scaleFactor == 1.0)
{
holderComp->removeFromDesktop();
peer = 0;
addChildComponent (content);
childBoundsChanged (content);
}
else
{
holderComp->addAndMakeVisible (content);
holderComp->childBoundsChanged (content);
childBoundsChanged (holderComp);
holderComp->addToDesktop (0);
peer = holderComp->getPeer();
}

repaint();
}
}

void MagnifierComponent::setResamplingQuality (Graphics::ResamplingQuality newQuality)
{
quality = newQuality;
}

void MagnifierComponent::paint (Graphics& g)
{
const int w = holderComp->getWidth();
const int h = holderComp->getHeight();

if (w == 0 || h == 0)
return;

const Rectangle<int> r (g.getClipBounds());

const int srcX = (int) (r.getX() / scaleFactor);
const int srcY = (int) (r.getY() / scaleFactor);
int srcW = roundToInt (r.getRight() / scaleFactor) - srcX;
int srcH = roundToInt (r.getBottom() / scaleFactor) - srcY;

if (scaleFactor >= 1.0)
{
++srcW;
++srcH;
}

Image temp (Image::ARGB, jmax (w, srcX + srcW), jmax (h, srcY + srcH), false);
const Rectangle<int> area (srcX, srcY, srcW, srcH);
temp.clear (area);

{
Graphics g2 (temp);
g2.reduceClipRegion (area);
holderComp->paintEntireComponent (g2, false);
}

g.setImageResamplingQuality (quality);
g.drawImageTransformed (temp, AffineTransform::scale ((float) scaleFactor, (float) scaleFactor), false);
}

void MagnifierComponent::childBoundsChanged (Component* c)
{
if (c != 0)
setSize (roundToInt (c->getWidth() * scaleFactor),
roundToInt (c->getHeight() * scaleFactor));
}

void MagnifierComponent::passOnMouseEventToPeer (const MouseEvent& e)
{
if (peer != 0)
mouseSource.handleEvent (peer, Point<int> (scaleInt (e.x), scaleInt (e.y)),
e.eventTime.toMilliseconds(), ModifierKeys::getCurrentModifiers());
}

void MagnifierComponent::mouseDown (const MouseEvent& e)
{
passOnMouseEventToPeer (e);
}

void MagnifierComponent::mouseUp (const MouseEvent& e)
{
passOnMouseEventToPeer (e);
}

void MagnifierComponent::mouseDrag (const MouseEvent& e)
{
passOnMouseEventToPeer (e);
}

void MagnifierComponent::mouseMove (const MouseEvent& e)
{
passOnMouseEventToPeer (e);
}

void MagnifierComponent::mouseEnter (const MouseEvent& e)
{
passOnMouseEventToPeer (e);
}

void MagnifierComponent::mouseExit (const MouseEvent& e)
{
passOnMouseEventToPeer (e);
}

void MagnifierComponent::mouseWheelMove (const MouseEvent& e, float ix, float iy)
{
if (peer != 0)
peer->handleMouseWheel (e.source.getIndex(),
Point<int> (scaleInt (e.x), scaleInt (e.y)), e.eventTime.toMilliseconds(),
ix * 256.0f, iy * 256.0f);
else
Component::mouseWheelMove (e, ix, iy);
}

int MagnifierComponent::scaleInt (const int n) const
{
return roundToInt (n / scaleFactor);
}

END_JUCE_NAMESPACE
/*** End of inlined file: juce_MagnifierComponent.cpp ***/


/*** Start of inlined file: juce_MidiKeyboardComponent.cpp ***/
BEGIN_JUCE_NAMESPACE

@@ -79639,12 +79212,12 @@ public:

const Expression getSymbolValue (const String& objectName, const String& member) const
{
if (member.isNotEmpty())
if (member.isEmpty())
{
const MarkerList::Marker* const marker = markerList.getMarker (objectName);

if (marker != 0)
return Expression ((double) marker->position.resolve (this));
return Expression (marker->position.resolve (this));
}
else if (parentComponent != 0 && objectName == RelativeCoordinate::Strings::parent)
{
@@ -84461,7 +84034,7 @@ public:
}

y = y_;
generate (static_cast <SrcPixelType*> (scratchBuffer), x, width);
generate (scratchBuffer.getData(), x, width);

et.clipLineToMask (x, y_,
reinterpret_cast<uint8*> (scratchBuffer.getData()) + SrcPixelType::indexA,
@@ -249127,6 +248700,8 @@ MidiOutput* MidiOutput::openDevice (int index)

MidiOutput::~MidiOutput()
{
stopBackgroundThread();

MidiOutHandle* const h = static_cast <MidiOutHandle*> (internal);

if (MidiOutHandle::activeHandles.contains (h) && --(h->refCount) == 0)


+ 78
- 277
juce_amalgamated.h View File

@@ -73,7 +73,7 @@ namespace JuceDummyNamespace {}
*/
#define JUCE_MAJOR_VERSION 1
#define JUCE_MINOR_VERSION 53
#define JUCE_BUILDNUMBER 9
#define JUCE_BUILDNUMBER 10

/** Current Juce version number.

@@ -35473,6 +35473,12 @@ public:
int& numBytesUsed, uint8 lastStatusByte,
double timeStamp = 0);

/** Creates an active-sense message.
Since the MidiMessage has to contain a valid message, this default constructor
just initialises it with a simple one-byte active-sense message.
*/
MidiMessage() throw();

/** Creates a copy of another midi message. */
MidiMessage (const MidiMessage& other);

@@ -37943,8 +37949,6 @@ private:
#ifndef __JUCE_POPUPMENU_JUCEHEADER__
#define __JUCE_POPUPMENU_JUCEHEADER__

class PopupMenuCustomComponent;

/** Creates and displays a popup-menu.

To show a popup-menu, you create one of these, add some items to it, then
@@ -38059,19 +38063,10 @@ public:
bool isTicked = false,
const Image& iconToUse = Image::null);

/** Appends a custom menu item.

This will add a user-defined component to use as a menu item. The component
passed in will be deleted by this menu when it's no longer needed.

@see PopupMenuCustomComponent
*/
void addCustomItem (int itemResultId, PopupMenuCustomComponent* customComponent);

/** Appends a custom menu item that can't be used to trigger a result.

This will add a user-defined component to use as a menu item. Unlike the
addCustomItem() method that takes a PopupMenuCustomComponent, this version
addCustomItem() method that takes a PopupMenu::CustomComponent, this version
can't trigger a result from it, so doesn't take a menu ID. It also doesn't
delete the component when it's finished, so it's the caller's responsibility
to manage the component that is passed-in.
@@ -38081,7 +38076,7 @@ public:
menu ID specified in itemResultId. If this is false, the menu item can't
be triggered, so itemResultId is not used.

@see PopupMenuCustomComponent
@see CustomComponent
*/
void addCustomItem (int itemResultId,
Component* customComponent,
@@ -38282,6 +38277,64 @@ public:
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MenuItemIterator);
};

/** A user-defined copmonent that can be used as an item in a popup menu.
@see PopupMenu::addCustomItem
*/
class JUCE_API CustomComponent : public Component,
public ReferenceCountedObject
{
public:
/** Creates a custom item.
If isTriggeredAutomatically is true, then the menu will automatically detect
a mouse-click on this component and use that to invoke the menu item. If it's
false, then it's up to your class to manually trigger the item when it wants to.
*/
CustomComponent (bool isTriggeredAutomatically = true);

/** Destructor. */
~CustomComponent();

/** Returns a rectangle with the size that this component would like to have.

Note that the size which this method returns isn't necessarily the one that
the menu will give it, as the items will be stretched to have a uniform width.
*/
virtual void getIdealSize (int& idealWidth, int& idealHeight) = 0;

/** Dismisses the menu, indicating that this item has been chosen.

This will cause the menu to exit from its modal state, returning
this item's id as the result.
*/
void triggerMenuItem();

/** Returns true if this item should be highlighted because the mouse is over it.
You can call this method in your paint() method to find out whether
to draw a highlight.
*/
bool isItemHighlighted() const throw() { return isHighlighted; }

/** @internal. */
bool isTriggeredAutomatically() const throw() { return triggeredAutomatically; }
/** @internal. */
void setHighlighted (bool shouldBeHighlighted);

private:

bool isHighlighted, triggeredAutomatically;

JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CustomComponent);
};

/** Appends a custom menu item.

This will add a user-defined component to use as a menu item. The component
passed in will be deleted by this menu when it's no longer needed.

@see CustomComponent
*/
void addCustomItem (int itemResultId, CustomComponent* customComponent);

private:

class Item;
@@ -38291,7 +38344,7 @@ private:
friend class MenuItemIterator;
friend class ItemComponent;
friend class Window;
friend class PopupMenuCustomComponent;
friend class CustomComponent;
friend class MenuBarComponent;
friend class OwnedArray <Item>;
friend class OwnedArray <ItemComponent>;
@@ -56959,70 +57012,6 @@ private:
#endif
#ifndef __JUCE_POPUPMENU_JUCEHEADER__

#endif
#ifndef __JUCE_POPUPMENUCUSTOMCOMPONENT_JUCEHEADER__

/*** Start of inlined file: juce_PopupMenuCustomComponent.h ***/
#ifndef __JUCE_POPUPMENUCUSTOMCOMPONENT_JUCEHEADER__
#define __JUCE_POPUPMENUCUSTOMCOMPONENT_JUCEHEADER__

/** A user-defined copmonent that can appear inside one of the rows of a popup menu.

@see PopupMenu::addCustomItem
*/
class JUCE_API PopupMenuCustomComponent : public Component,
public ReferenceCountedObject
{
public:
/** Destructor. */
~PopupMenuCustomComponent();

/** Chooses the size that this component would like to have.

Note that the size which this method returns isn't necessarily the one that
the menu will give it, as it will be stretched to fit the other items in
the menu.
*/
virtual void getIdealSize (int& idealWidth,
int& idealHeight) = 0;

/** Dismisses the menu indicating that this item has been chosen.

This will cause the menu to exit from its modal state, returning
this item's id as the result.
*/
void triggerMenuItem();

/** Returns true if this item should be highlighted because the mouse is
over it.

You can call this method in your paint() method to find out whether
to draw a highlight.
*/
bool isItemHighlighted() const throw() { return isHighlighted; }

protected:
/** Constructor.

If isTriggeredAutomatically is true, then the menu will automatically detect
a click on this component and use that to trigger it. If it's false, then it's
up to your class to manually trigger the item if it wants to.
*/
PopupMenuCustomComponent (bool isTriggeredAutomatically = true);

private:
friend class PopupMenu;
friend class PopupMenu::ItemComponent;
friend class PopupMenu::Window;
bool isHighlighted, isTriggeredAutomatically;

JUCE_DECLARE_NON_COPYABLE (PopupMenuCustomComponent);
};

#endif // __JUCE_POPUPMENUCUSTOMCOMPONENT_JUCEHEADER__
/*** End of inlined file: juce_PopupMenuCustomComponent.h ***/


#endif
#ifndef __JUCE_COMPONENTDRAGGER_JUCEHEADER__

@@ -57548,109 +57537,6 @@ private:
#endif
#ifndef __JUCE_MOUSEEVENT_JUCEHEADER__

#endif
#ifndef __JUCE_MOUSEHOVERDETECTOR_JUCEHEADER__

/*** Start of inlined file: juce_MouseHoverDetector.h ***/
#ifndef __JUCE_MOUSEHOVERDETECTOR_JUCEHEADER__
#define __JUCE_MOUSEHOVERDETECTOR_JUCEHEADER__

/**
Monitors a component for mouse activity, and triggers a callback
when the mouse hovers in one place for a specified length of time.

To use a hover-detector, just create one and call its setHoverComponent()
method to start it watching a component. You can call setHoverComponent (0)
to make it inactive.

(Be careful not to delete a component that's being monitored without first
stopping or deleting the hover detector).
*/
class JUCE_API MouseHoverDetector
{
public:

/** Creates a hover detector.

Initially the object is inactive, and you need to tell it which component
to monitor, using the setHoverComponent() method.

@param hoverTimeMillisecs the number of milliseconds for which the mouse
needs to stay still before the mouseHovered() method
is invoked. You can change this setting later with
the setHoverTimeMillisecs() method
*/
MouseHoverDetector (int hoverTimeMillisecs = 400);

/** Destructor. */
virtual ~MouseHoverDetector();

/** Changes the time for which the mouse has to stay still before it's considered
to be hovering.
*/
void setHoverTimeMillisecs (int newTimeInMillisecs);

/** Changes the component that's being monitored for hovering.

Be careful not to delete a component that's being monitored without first
stopping or deleting the hover detector.
*/
void setHoverComponent (Component* newSourceComponent);

protected:

/** Called back when the mouse hovers.

After the mouse has stayed still over the component for the length of time
specified by setHoverTimeMillisecs(), this method will be invoked.

When the mouse is first moved after this callback has occurred, the
mouseMovedAfterHover() method will be called.

@param mouseX the mouse's X position relative to the component being monitored
@param mouseY the mouse's Y position relative to the component being monitored
*/
virtual void mouseHovered (int mouseX,
int mouseY) = 0;

/** Called when the mouse is moved away after just having hovered. */
virtual void mouseMovedAfterHover() = 0;

private:

class JUCE_API HoverDetectorInternal : public MouseListener,
public Timer
{
public:
MouseHoverDetector* owner;
int lastX, lastY;

void timerCallback();
void mouseEnter (const MouseEvent&);
void mouseExit (const MouseEvent&);
void mouseDown (const MouseEvent&);
void mouseUp (const MouseEvent&);
void mouseMove (const MouseEvent&);
void mouseWheelMove (const MouseEvent&, float, float);

} internalTimer;

friend class HoverDetectorInternal;

Component* source;
int hoverTimeMillisecs;
bool hasJustHovered;

void hoverTimerCallback();
void checkJustHoveredCallback();

JUCE_DECLARE_NON_COPYABLE (MouseHoverDetector);
};

#endif // __JUCE_MOUSEHOVERDETECTOR_JUCEHEADER__
/*** End of inlined file: juce_MouseHoverDetector.h ***/


#endif
#ifndef __JUCE_MOUSEINPUTSOURCE_JUCEHEADER__

@@ -57658,8 +57544,6 @@ private:
#ifndef __JUCE_MOUSEINPUTSOURCE_JUCEHEADER__
#define __JUCE_MOUSEINPUTSOURCE_JUCEHEADER__

class Component;
class ComponentPeer;
class MouseInputSourceInternal;

/**
@@ -57756,12 +57640,22 @@ public:
*/
bool hasMouseMovedSignificantlySincePressed() const throw();

/** Returns true if this input source uses a visible mouse cursor. */
bool hasMouseCursor() const throw();

/** Changes the mouse cursor, (if there is one). */
void showMouseCursor (const MouseCursor& cursor);

/** Hides the mouse cursor (if there is one). */
void hideCursor();

/** Un-hides the mouse cursor if it was hidden by hideCursor(). */
void revealCursor();

/** Forces an update of the mouse cursor for whatever component it's currently over. */
void forceMouseCursorUpdate();

/** Returns true if this mouse can be moved indefinitely in any direction without running out of space. */
bool canDoUnboundedMovement() const throw();

/** Allows the mouse to move beyond the edges of the screen.
@@ -59081,99 +58975,6 @@ private:
#endif
#ifndef __JUCE_DROPSHADOWER_JUCEHEADER__

#endif
#ifndef __JUCE_MAGNIFIERCOMPONENT_JUCEHEADER__

/*** Start of inlined file: juce_MagnifierComponent.h ***/
#ifndef __JUCE_MAGNIFIERCOMPONENT_JUCEHEADER__
#define __JUCE_MAGNIFIERCOMPONENT_JUCEHEADER__

/**
A component that contains another component, and can magnify or shrink it.

This component will continually update its size so that it fits the zoomed
version of the content component that you put inside it, so don't try to
change the size of this component directly - instead change that of the
content component.

To make it all work, the magnifier uses extremely cunning ComponentPeer tricks
to remap mouse events correctly. This means that the content component won't
appear to be a direct child of this component, and instead will think its
on the desktop.
*/
class JUCE_API MagnifierComponent : public Component
{
public:

/** Creates a MagnifierComponent.

This component will continually update its size so that it fits the zoomed
version of the content component that you put inside it, so don't try to
change the size of this component directly - instead change that of the
content component.

@param contentComponent the component to add as the magnified one
@param deleteContentCompWhenNoLongerNeeded if true, the content component will
be deleted when this component is deleted. If false,
it's the caller's responsibility to delete it later.
*/
MagnifierComponent (Component* contentComponent,
bool deleteContentCompWhenNoLongerNeeded);

/** Destructor. */
~MagnifierComponent();

/** Returns the current content component. */
Component* getContentComponent() const { return content; }

/** Changes the zoom level.

The scale factor must be greater than zero. Values less than 1 will shrink the
image; values greater than 1 will multiply its size by this amount.

When this is called, this component will change its size to fit the full extent
of the newly zoomed content.
*/
void setScaleFactor (double newScaleFactor);

/** Returns the current zoom factor. */
double getScaleFactor() const { return scaleFactor; }

/** Changes the quality setting used to rescale the graphics.
*/
void setResamplingQuality (Graphics::ResamplingQuality newQuality);

/** @internal */
void childBoundsChanged (Component*);

private:
Component* content;
Component* holderComp;
double scaleFactor;
ComponentPeer* peer;
bool deleteContent;
Graphics::ResamplingQuality quality;
MouseInputSource mouseSource;

void paint (Graphics& g);
void mouseDown (const MouseEvent& e);
void mouseUp (const MouseEvent& e);
void mouseDrag (const MouseEvent& e);
void mouseMove (const MouseEvent& e);
void mouseEnter (const MouseEvent& e);
void mouseExit (const MouseEvent& e);
void mouseWheelMove (const MouseEvent& e, float, float);

void passOnMouseEventToPeer (const MouseEvent& e);
int scaleInt (int n) const;

JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MagnifierComponent);
};

#endif // __JUCE_MAGNIFIERCOMPONENT_JUCEHEADER__
/*** End of inlined file: juce_MagnifierComponent.h ***/


#endif
#ifndef __JUCE_MIDIKEYBOARDCOMPONENT_JUCEHEADER__



+ 8
- 0
src/audio/midi/juce_MidiMessage.cpp View File

@@ -75,6 +75,14 @@ int MidiMessage::getMessageLengthFromFirstByte (const uint8 firstByte) throw()
}
//==============================================================================
MidiMessage::MidiMessage() throw()
: timeStamp (0),
data (static_cast<uint8*> (preallocatedData.asBytes)),
size (1)
{
data[0] = 0xfe;
}
MidiMessage::MidiMessage (const void* const d, const int dataSize, const double t)
: timeStamp (t),
size (dataSize)


+ 6
- 0
src/audio/midi/juce_MidiMessage.h View File

@@ -90,6 +90,12 @@ public:
int& numBytesUsed, uint8 lastStatusByte,
double timeStamp = 0);
/** Creates an active-sense message.
Since the MidiMessage has to contain a valid message, this default constructor
just initialises it with a simple one-byte active-sense message.
*/
MidiMessage() throw();
/** Creates a copy of another midi message. */
MidiMessage (const MidiMessage& other);


+ 4
- 10
src/containers/juce_ValueTree.cpp View File

@@ -43,8 +43,6 @@ public:
{
}
~SetPropertyAction() {}
bool perform()
{
jassert (! (isAddingNewProperty && target->hasProperty (name)));
@@ -112,8 +110,6 @@ public:
jassert (child != 0);
}
~AddOrRemoveChildAction() {}
bool perform()
{
if (isDeleting)
@@ -166,8 +162,6 @@ public:
{
}
~MoveChildAction() {}
bool perform()
{
parent->moveChild (startIndex, endIndex, 0);
@@ -373,7 +367,7 @@ ValueTree ValueTree::SharedObject::getChildWithName (const Identifier& typeToMat
{
for (int i = 0; i < children.size(); ++i)
if (children.getUnchecked(i)->type == typeToMatch)
return ValueTree (static_cast <SharedObject*> (children.getUnchecked(i)));
return ValueTree (children.getUnchecked(i).getObject());
return ValueTree::invalid;
}
@@ -382,7 +376,7 @@ ValueTree ValueTree::SharedObject::getOrCreateChildWithName (const Identifier& t
{
for (int i = 0; i < children.size(); ++i)
if (children.getUnchecked(i)->type == typeToMatch)
return ValueTree (static_cast <SharedObject*> (children.getUnchecked(i)));
return ValueTree (children.getUnchecked(i).getObject());
SharedObject* const newObject = new SharedObject (typeToMatch);
addChild (newObject, -1, undoManager);
@@ -394,7 +388,7 @@ ValueTree ValueTree::SharedObject::getChildWithProperty (const Identifier& prope
{
for (int i = 0; i < children.size(); ++i)
if (children.getUnchecked(i)->getProperty (propertyName) == propertyValue)
return ValueTree (static_cast <SharedObject*> (children.getUnchecked(i)));
return ValueTree (children.getUnchecked(i).getObject());
return ValueTree::invalid;
}
@@ -635,7 +629,7 @@ ValueTree ValueTree::getSibling (const int delta) const
return invalid;
const int index = object->parent->indexOf (*this) + delta;
return ValueTree (static_cast <SharedObject*> (object->parent->children [index]));
return ValueTree (object->parent->children [index].getObject());
}
const var& ValueTree::operator[] (const Identifier& name) const


+ 1
- 1
src/core/juce_StandardHeader.h View File

@@ -33,7 +33,7 @@
*/
#define JUCE_MAJOR_VERSION 1
#define JUCE_MINOR_VERSION 53
#define JUCE_BUILDNUMBER 9
#define JUCE_BUILDNUMBER 10
/** Current Juce version number.


+ 2
- 3
src/gui/components/controls/juce_Toolbar.cpp View File

@@ -32,7 +32,6 @@ BEGIN_JUCE_NAMESPACE
#include "juce_ToolbarItemFactory.h"
#include "juce_ToolbarItemPalette.h"
#include "../menus/juce_PopupMenu.h"
#include "../menus/juce_PopupMenuCustomComponent.h"
#include "../lookandfeel/juce_LookAndFeel.h"
#include "../layout/juce_StretchableObjectResizer.h"
#include "../windows/juce_DialogWindow.h"
@@ -169,11 +168,11 @@ private:
};
//==============================================================================
class Toolbar::MissingItemsComponent : public PopupMenuCustomComponent
class Toolbar::MissingItemsComponent : public PopupMenu::CustomComponent
{
public:
MissingItemsComponent (Toolbar& owner_, const int height_)
: PopupMenuCustomComponent (true),
: PopupMenu::CustomComponent (true),
owner (&owner_),
height (height_)
{


+ 23
- 34
src/gui/components/menus/juce_PopupMenu.cpp View File

@@ -28,7 +28,6 @@
BEGIN_JUCE_NAMESPACE
#include "juce_PopupMenu.h"
#include "juce_PopupMenuCustomComponent.h"
#include "../windows/juce_ComponentPeer.h"
#include "../lookandfeel/juce_LookAndFeel.h"
#include "../juce_Desktop.h"
@@ -57,7 +56,7 @@ public:
const Image& im,
const Colour& textColour_,
const bool usesColour_,
PopupMenuCustomComponent* const customComp_,
CustomComponent* const customComp_,
const PopupMenu* const subMenu_,
ApplicationCommandManager* const commandManager_)
: itemId (itemId_), text (text_), textColour (textColour_),
@@ -120,7 +119,7 @@ public:
const Colour textColour;
const bool active, isSeparator, isTicked, usesColour;
Image image;
ReferenceCountedObjectPtr <PopupMenuCustomComponent> customComp;
ReferenceCountedObjectPtr <CustomComponent> customComp;
ScopedPointer <PopupMenu> subMenu;
ApplicationCommandManager* const commandManager;
@@ -155,22 +154,15 @@ public:
removeChildComponent (itemInfo.customComp);
}
void getIdealSize (int& idealWidth,
int& idealHeight,
const int standardItemHeight)
void getIdealSize (int& idealWidth, int& idealHeight, const int standardItemHeight)
{
if (itemInfo.customComp != 0)
{
itemInfo.customComp->getIdealSize (idealWidth, idealHeight);
}
else
{
getLookAndFeel().getIdealPopupMenuItemSize (itemInfo.text,
itemInfo.isSeparator,
standardItemHeight,
idealWidth,
idealHeight);
}
idealWidth, idealHeight);
}
void paint (Graphics& g)
@@ -215,10 +207,7 @@ public:
isHighlighted = shouldBeHighlighted;
if (itemInfo.customComp != 0)
{
itemInfo.customComp->isHighlighted = shouldBeHighlighted;
itemInfo.customComp->repaint();
}
itemInfo.customComp->setHighlighted (shouldBeHighlighted);
repaint();
}
@@ -1126,9 +1115,7 @@ private:
&& (isOver || (activeSubMenu == 0) || ! activeSubMenu->isVisible()))
{
if (isOver && (c != 0) && (activeSubMenu != 0))
{
activeSubMenu->hide (0, true);
}
if (! isOver)
mic = 0;
@@ -1143,7 +1130,7 @@ private:
if (currentChild != 0
&& currentChild->itemInfo.canBeTriggered()
&& (currentChild->itemInfo.customComp == 0
|| currentChild->itemInfo.customComp->isTriggeredAutomatically))
|| currentChild->itemInfo.customComp->isTriggeredAutomatically()))
{
dismissMenu (&currentChild->itemInfo);
}
@@ -1294,8 +1281,7 @@ void PopupMenu::addColouredItem (const int itemResultId,
}
//==============================================================================
void PopupMenu::addCustomItem (const int itemResultId,
PopupMenuCustomComponent* const customComponent)
void PopupMenu::addCustomItem (const int itemResultId, CustomComponent* const customComponent)
{
jassert (itemResultId != 0); // 0 is used as a return value to indicate that the user
// didn't pick anything, so you shouldn't use it as the id
@@ -1307,19 +1293,17 @@ void PopupMenu::addCustomItem (const int itemResultId,
Colours::black, false, customComponent, 0, 0));
}
class NormalComponentWrapper : public PopupMenuCustomComponent
class NormalComponentWrapper : public PopupMenu::CustomComponent
{
public:
NormalComponentWrapper (Component* const comp, const int w, const int h,
const bool triggerMenuItemAutomaticallyWhenClicked)
: PopupMenuCustomComponent (triggerMenuItemAutomaticallyWhenClicked),
: PopupMenu::CustomComponent (triggerMenuItemAutomaticallyWhenClicked),
width (w), height (h)
{
addAndMakeVisible (comp);
}
~NormalComponentWrapper() {}
void getIdealSize (int& idealWidth, int& idealHeight)
{
idealWidth = width;
@@ -1368,11 +1352,11 @@ void PopupMenu::addSeparator()
//==============================================================================
class HeaderItemComponent : public PopupMenuCustomComponent
class HeaderItemComponent : public PopupMenu::CustomComponent
{
public:
HeaderItemComponent (const String& name)
: PopupMenuCustomComponent (false)
: PopupMenu::CustomComponent (false)
{
setName (name);
}
@@ -1389,8 +1373,7 @@ public:
Justification::bottomLeft, 1);
}
void getIdealSize (int& idealWidth,
int& idealHeight)
void getIdealSize (int& idealWidth, int& idealHeight)
{
getLookAndFeel().getIdealPopupMenuItemSize (getName(), false, -1, idealWidth, idealHeight);
idealHeight += idealHeight / 2;
@@ -1596,17 +1579,23 @@ void PopupMenu::setLookAndFeel (LookAndFeel* const newLookAndFeel)
}
//==============================================================================
PopupMenuCustomComponent::PopupMenuCustomComponent (const bool isTriggeredAutomatically_)
PopupMenu::CustomComponent::CustomComponent (const bool isTriggeredAutomatically_)
: isHighlighted (false),
isTriggeredAutomatically (isTriggeredAutomatically_)
triggeredAutomatically (isTriggeredAutomatically_)
{
}
PopupMenu::CustomComponent::~CustomComponent()
{
}
PopupMenuCustomComponent::~PopupMenuCustomComponent()
void PopupMenu::CustomComponent::setHighlighted (bool shouldBeHighlighted)
{
isHighlighted = shouldBeHighlighted;
repaint();
}
void PopupMenuCustomComponent::triggerMenuItem()
void PopupMenu::CustomComponent::triggerMenuItem()
{
PopupMenu::ItemComponent* const mic = dynamic_cast <PopupMenu::ItemComponent*> (getParentComponent());
@@ -1667,7 +1656,7 @@ bool PopupMenu::MenuItemIterator::next()
isSeparator = item->isSeparator;
isTicked = item->isTicked;
isEnabled = item->active;
isSectionHeader = dynamic_cast <HeaderItemComponent*> (static_cast <PopupMenuCustomComponent*> (item->customComp)) != 0;
isSectionHeader = dynamic_cast <HeaderItemComponent*> (static_cast <CustomComponent*> (item->customComp)) != 0;
isCustomComponent = (! isSectionHeader) && item->customComp != 0;
customColour = item->usesColour ? &(item->textColour) : 0;
customImage = item->image;


+ 62
- 13
src/gui/components/menus/juce_PopupMenu.h View File

@@ -27,7 +27,7 @@
#define __JUCE_POPUPMENU_JUCEHEADER__
#include "../../../application/juce_ApplicationCommandManager.h"
class PopupMenuCustomComponent;
#include "../../../memory/juce_ReferenceCountedObject.h"
//==============================================================================
@@ -147,19 +147,10 @@ public:
bool isTicked = false,
const Image& iconToUse = Image::null);
/** Appends a custom menu item.
This will add a user-defined component to use as a menu item. The component
passed in will be deleted by this menu when it's no longer needed.
@see PopupMenuCustomComponent
*/
void addCustomItem (int itemResultId, PopupMenuCustomComponent* customComponent);
/** Appends a custom menu item that can't be used to trigger a result.
This will add a user-defined component to use as a menu item. Unlike the
addCustomItem() method that takes a PopupMenuCustomComponent, this version
addCustomItem() method that takes a PopupMenu::CustomComponent, this version
can't trigger a result from it, so doesn't take a menu ID. It also doesn't
delete the component when it's finished, so it's the caller's responsibility
to manage the component that is passed-in.
@@ -169,7 +160,7 @@ public:
menu ID specified in itemResultId. If this is false, the menu item can't
be triggered, so itemResultId is not used.
@see PopupMenuCustomComponent
@see CustomComponent
*/
void addCustomItem (int itemResultId,
Component* customComponent,
@@ -378,6 +369,64 @@ public:
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MenuItemIterator);
};
//==============================================================================
/** A user-defined copmonent that can be used as an item in a popup menu.
@see PopupMenu::addCustomItem
*/
class JUCE_API CustomComponent : public Component,
public ReferenceCountedObject
{
public:
/** Creates a custom item.
If isTriggeredAutomatically is true, then the menu will automatically detect
a mouse-click on this component and use that to invoke the menu item. If it's
false, then it's up to your class to manually trigger the item when it wants to.
*/
CustomComponent (bool isTriggeredAutomatically = true);
/** Destructor. */
~CustomComponent();
/** Returns a rectangle with the size that this component would like to have.
Note that the size which this method returns isn't necessarily the one that
the menu will give it, as the items will be stretched to have a uniform width.
*/
virtual void getIdealSize (int& idealWidth, int& idealHeight) = 0;
/** Dismisses the menu, indicating that this item has been chosen.
This will cause the menu to exit from its modal state, returning
this item's id as the result.
*/
void triggerMenuItem();
/** Returns true if this item should be highlighted because the mouse is over it.
You can call this method in your paint() method to find out whether
to draw a highlight.
*/
bool isItemHighlighted() const throw() { return isHighlighted; }
/** @internal. */
bool isTriggeredAutomatically() const throw() { return triggeredAutomatically; }
/** @internal. */
void setHighlighted (bool shouldBeHighlighted);
private:
//==============================================================================
bool isHighlighted, triggeredAutomatically;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CustomComponent);
};
/** Appends a custom menu item.
This will add a user-defined component to use as a menu item. The component
passed in will be deleted by this menu when it's no longer needed.
@see CustomComponent
*/
void addCustomItem (int itemResultId, CustomComponent* customComponent);
private:
//==============================================================================
@@ -388,7 +437,7 @@ private:
friend class MenuItemIterator;
friend class ItemComponent;
friend class Window;
friend class PopupMenuCustomComponent;
friend class CustomComponent;
friend class MenuBarComponent;
friend class OwnedArray <Item>;
friend class OwnedArray <ItemComponent>;


+ 0
- 91
src/gui/components/menus/juce_PopupMenuCustomComponent.h View File

@@ -1,91 +0,0 @@
/*
==============================================================================
This file is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright 2004-10 by Raw Material Software Ltd.
------------------------------------------------------------------------------
JUCE can be redistributed and/or modified under the terms of the GNU General
Public License (Version 2), as published by the Free Software Foundation.
A copy of the license is included in the JUCE distribution, or can be found
online at www.gnu.org/licenses.
JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
------------------------------------------------------------------------------
To release a closed-source product which uses JUCE, commercial licenses are
available: visit www.rawmaterialsoftware.com/juce for more information.
==============================================================================
*/
#ifndef __JUCE_POPUPMENUCUSTOMCOMPONENT_JUCEHEADER__
#define __JUCE_POPUPMENUCUSTOMCOMPONENT_JUCEHEADER__
#include "juce_PopupMenu.h"
#include "../juce_Component.h"
#include "../../../memory/juce_ReferenceCountedObject.h"
//==============================================================================
/** A user-defined copmonent that can appear inside one of the rows of a popup menu.
@see PopupMenu::addCustomItem
*/
class JUCE_API PopupMenuCustomComponent : public Component,
public ReferenceCountedObject
{
public:
/** Destructor. */
~PopupMenuCustomComponent();
/** Chooses the size that this component would like to have.
Note that the size which this method returns isn't necessarily the one that
the menu will give it, as it will be stretched to fit the other items in
the menu.
*/
virtual void getIdealSize (int& idealWidth,
int& idealHeight) = 0;
/** Dismisses the menu indicating that this item has been chosen.
This will cause the menu to exit from its modal state, returning
this item's id as the result.
*/
void triggerMenuItem();
/** Returns true if this item should be highlighted because the mouse is
over it.
You can call this method in your paint() method to find out whether
to draw a highlight.
*/
bool isItemHighlighted() const throw() { return isHighlighted; }
protected:
/** Constructor.
If isTriggeredAutomatically is true, then the menu will automatically detect
a click on this component and use that to trigger it. If it's false, then it's
up to your class to manually trigger the item if it wants to.
*/
PopupMenuCustomComponent (bool isTriggeredAutomatically = true);
private:
friend class PopupMenu;
friend class PopupMenu::ItemComponent;
friend class PopupMenu::Window;
bool isHighlighted, isTriggeredAutomatically;
JUCE_DECLARE_NON_COPYABLE (PopupMenuCustomComponent);
};
#endif // __JUCE_POPUPMENUCUSTOMCOMPONENT_JUCEHEADER__

+ 1
- 1
src/gui/components/mouse/juce_DragAndDropContainer.cpp View File

@@ -286,7 +286,7 @@ private:
WeakReference<Component> currentlyOverComp;
DragAndDropTarget* getCurrentlyOver()
{
return dynamic_cast <DragAndDropTarget*> (static_cast <Component*> (currentlyOverComp));
return dynamic_cast <DragAndDropTarget*> (currentlyOverComp.get());
}
String dragDesc;


+ 0
- 146
src/gui/components/mouse/juce_MouseHoverDetector.cpp View File

@@ -1,146 +0,0 @@
/*
==============================================================================
This file is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright 2004-10 by Raw Material Software Ltd.
------------------------------------------------------------------------------
JUCE can be redistributed and/or modified under the terms of the GNU General
Public License (Version 2), as published by the Free Software Foundation.
A copy of the license is included in the JUCE distribution, or can be found
online at www.gnu.org/licenses.
JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
------------------------------------------------------------------------------
To release a closed-source product which uses JUCE, commercial licenses are
available: visit www.rawmaterialsoftware.com/juce for more information.
==============================================================================
*/
#include "../../../core/juce_StandardHeader.h"
BEGIN_JUCE_NAMESPACE
#include "../juce_Component.h"
#include "juce_MouseHoverDetector.h"
#include "juce_MouseEvent.h"
//==============================================================================
MouseHoverDetector::MouseHoverDetector (const int hoverTimeMillisecs_)
: source (0),
hoverTimeMillisecs (hoverTimeMillisecs_),
hasJustHovered (false)
{
internalTimer.owner = this;
}
MouseHoverDetector::~MouseHoverDetector()
{
setHoverComponent (0);
}
void MouseHoverDetector::setHoverTimeMillisecs (const int newTimeInMillisecs)
{
hoverTimeMillisecs = newTimeInMillisecs;
}
void MouseHoverDetector::setHoverComponent (Component* const newSourceComponent)
{
if (source != newSourceComponent)
{
internalTimer.stopTimer();
hasJustHovered = false;
if (source != 0)
source->removeMouseListener (&internalTimer);
source = newSourceComponent;
if (newSourceComponent != 0)
newSourceComponent->addMouseListener (&internalTimer, false);
}
}
void MouseHoverDetector::hoverTimerCallback()
{
internalTimer.stopTimer();
if (source != 0)
{
const Point<int> pos (source->getMouseXYRelative());
if (source->reallyContains (pos, false))
{
hasJustHovered = true;
mouseHovered (pos.getX(), pos.getY());
}
}
}
void MouseHoverDetector::checkJustHoveredCallback()
{
if (hasJustHovered)
{
hasJustHovered = false;
mouseMovedAfterHover();
}
}
//==============================================================================
void MouseHoverDetector::HoverDetectorInternal::timerCallback()
{
owner->hoverTimerCallback();
}
void MouseHoverDetector::HoverDetectorInternal::mouseEnter (const MouseEvent&)
{
stopTimer();
owner->checkJustHoveredCallback();
}
void MouseHoverDetector::HoverDetectorInternal::mouseExit (const MouseEvent&)
{
stopTimer();
owner->checkJustHoveredCallback();
}
void MouseHoverDetector::HoverDetectorInternal::mouseDown (const MouseEvent&)
{
stopTimer();
owner->checkJustHoveredCallback();
}
void MouseHoverDetector::HoverDetectorInternal::mouseUp (const MouseEvent&)
{
stopTimer();
owner->checkJustHoveredCallback();
}
void MouseHoverDetector::HoverDetectorInternal::mouseMove (const MouseEvent& e)
{
if (lastX != e.x || lastY != e.y) // to avoid fake mouse-moves setting it off
{
lastX = e.x;
lastY = e.y;
if (owner->source != 0)
startTimer (owner->hoverTimeMillisecs);
owner->checkJustHoveredCallback();
}
}
void MouseHoverDetector::HoverDetectorInternal::mouseWheelMove (const MouseEvent&, float, float)
{
stopTimer();
owner->checkJustHoveredCallback();
}
END_JUCE_NAMESPACE

+ 0
- 130
src/gui/components/mouse/juce_MouseHoverDetector.h View File

@@ -1,130 +0,0 @@
/*
==============================================================================
This file is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright 2004-10 by Raw Material Software Ltd.
------------------------------------------------------------------------------
JUCE can be redistributed and/or modified under the terms of the GNU General
Public License (Version 2), as published by the Free Software Foundation.
A copy of the license is included in the JUCE distribution, or can be found
online at www.gnu.org/licenses.
JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
------------------------------------------------------------------------------
To release a closed-source product which uses JUCE, commercial licenses are
available: visit www.rawmaterialsoftware.com/juce for more information.
==============================================================================
*/
#ifndef __JUCE_MOUSEHOVERDETECTOR_JUCEHEADER__
#define __JUCE_MOUSEHOVERDETECTOR_JUCEHEADER__
#include "juce_MouseListener.h"
#include "../../../events/juce_Timer.h"
//==============================================================================
/**
Monitors a component for mouse activity, and triggers a callback
when the mouse hovers in one place for a specified length of time.
To use a hover-detector, just create one and call its setHoverComponent()
method to start it watching a component. You can call setHoverComponent (0)
to make it inactive.
(Be careful not to delete a component that's being monitored without first
stopping or deleting the hover detector).
*/
class JUCE_API MouseHoverDetector
{
public:
//==============================================================================
/** Creates a hover detector.
Initially the object is inactive, and you need to tell it which component
to monitor, using the setHoverComponent() method.
@param hoverTimeMillisecs the number of milliseconds for which the mouse
needs to stay still before the mouseHovered() method
is invoked. You can change this setting later with
the setHoverTimeMillisecs() method
*/
MouseHoverDetector (int hoverTimeMillisecs = 400);
/** Destructor. */
virtual ~MouseHoverDetector();
//==============================================================================
/** Changes the time for which the mouse has to stay still before it's considered
to be hovering.
*/
void setHoverTimeMillisecs (int newTimeInMillisecs);
/** Changes the component that's being monitored for hovering.
Be careful not to delete a component that's being monitored without first
stopping or deleting the hover detector.
*/
void setHoverComponent (Component* newSourceComponent);
protected:
//==============================================================================
/** Called back when the mouse hovers.
After the mouse has stayed still over the component for the length of time
specified by setHoverTimeMillisecs(), this method will be invoked.
When the mouse is first moved after this callback has occurred, the
mouseMovedAfterHover() method will be called.
@param mouseX the mouse's X position relative to the component being monitored
@param mouseY the mouse's Y position relative to the component being monitored
*/
virtual void mouseHovered (int mouseX,
int mouseY) = 0;
/** Called when the mouse is moved away after just having hovered. */
virtual void mouseMovedAfterHover() = 0;
private:
//==============================================================================
class JUCE_API HoverDetectorInternal : public MouseListener,
public Timer
{
public:
MouseHoverDetector* owner;
int lastX, lastY;
void timerCallback();
void mouseEnter (const MouseEvent&);
void mouseExit (const MouseEvent&);
void mouseDown (const MouseEvent&);
void mouseUp (const MouseEvent&);
void mouseMove (const MouseEvent&);
void mouseWheelMove (const MouseEvent&, float, float);
} internalTimer;
friend class HoverDetectorInternal;
Component* source;
int hoverTimeMillisecs;
bool hasJustHovered;
void hoverTimerCallback();
void checkJustHoveredCallback();
JUCE_DECLARE_NON_COPYABLE (MouseHoverDetector);
};
#endif // __JUCE_MOUSEHOVERDETECTOR_JUCEHEADER__

+ 11
- 3
src/gui/components/mouse/juce_MouseInputSource.h View File

@@ -26,14 +26,12 @@
#ifndef __JUCE_MOUSEINPUTSOURCE_JUCEHEADER__
#define __JUCE_MOUSEINPUTSOURCE_JUCEHEADER__
class Component;
class ComponentPeer;
class MouseInputSourceInternal;
#include "../keyboard/juce_ModifierKeys.h"
#include "../../../core/juce_Time.h"
#include "../../../memory/juce_ScopedPointer.h"
#include "../../graphics/geometry/juce_Point.h"
#include "../juce_Desktop.h"
class MouseInputSourceInternal;
//==============================================================================
@@ -132,12 +130,22 @@ public:
*/
bool hasMouseMovedSignificantlySincePressed() const throw();
/** Returns true if this input source uses a visible mouse cursor. */
bool hasMouseCursor() const throw();
/** Changes the mouse cursor, (if there is one). */
void showMouseCursor (const MouseCursor& cursor);
/** Hides the mouse cursor (if there is one). */
void hideCursor();
/** Un-hides the mouse cursor if it was hidden by hideCursor(). */
void revealCursor();
/** Forces an update of the mouse cursor for whatever component it's currently over. */
void forceMouseCursorUpdate();
/** Returns true if this mouse can be moved indefinitely in any direction without running out of space. */
bool canDoUnboundedMovement() const throw();
/** Allows the mouse to move beyond the edges of the screen.


+ 2
- 2
src/gui/components/positioning/juce_MarkerList.cpp View File

@@ -257,12 +257,12 @@ public:
const Expression getSymbolValue (const String& objectName, const String& member) const
{
if (member.isNotEmpty())
if (member.isEmpty())
{
const MarkerList::Marker* const marker = markerList.getMarker (objectName);
if (marker != 0)
return Expression ((double) marker->position.resolve (this));
return Expression (marker->position.resolve (this));
}
else if (parentComponent != 0 && objectName == RelativeCoordinate::Strings::parent)
{


+ 0
- 339
src/gui/components/special/juce_MagnifierComponent.cpp View File

@@ -1,339 +0,0 @@
/*
==============================================================================
This file is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright 2004-10 by Raw Material Software Ltd.
------------------------------------------------------------------------------
JUCE can be redistributed and/or modified under the terms of the GNU General
Public License (Version 2), as published by the Free Software Foundation.
A copy of the license is included in the JUCE distribution, or can be found
online at www.gnu.org/licenses.
JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
------------------------------------------------------------------------------
To release a closed-source product which uses JUCE, commercial licenses are
available: visit www.rawmaterialsoftware.com/juce for more information.
==============================================================================
*/
#include "../../../core/juce_StandardHeader.h"
BEGIN_JUCE_NAMESPACE
#include "juce_MagnifierComponent.h"
#include "../../graphics/imaging/juce_Image.h"
#include "../windows/juce_ComponentPeer.h"
//==============================================================================
class MagnifyingPeer : public ComponentPeer
{
public:
//==============================================================================
MagnifyingPeer (Component* const component_,
MagnifierComponent* const magnifierComp_)
: ComponentPeer (component_, 0),
magnifierComp (magnifierComp_)
{
}
~MagnifyingPeer()
{
}
//==============================================================================
void* getNativeHandle() const { return 0; }
void setVisible (bool) {}
void setTitle (const String&) {}
void setPosition (int, int) {}
void setSize (int, int) {}
void setBounds (int, int, int, int, bool) {}
void setMinimised (bool) {}
void setAlpha (float /*newAlpha*/) {}
bool isMinimised() const { return false; }
void setFullScreen (bool) {}
bool isFullScreen() const { return false; }
const BorderSize getFrameSize() const { return BorderSize (0); }
bool setAlwaysOnTop (bool) { return true; }
void toFront (bool) {}
void toBehind (ComponentPeer*) {}
void setIcon (const Image&) {}
bool isFocused() const
{
return magnifierComp->hasKeyboardFocus (true);
}
void grabFocus()
{
ComponentPeer* peer = magnifierComp->getPeer();
if (peer != 0)
peer->grabFocus();
}
void textInputRequired (const Point<int>& position)
{
ComponentPeer* peer = magnifierComp->getPeer();
if (peer != 0)
peer->textInputRequired (position);
}
const Rectangle<int> getBounds() const
{
return Rectangle<int> (magnifierComp->getScreenX(), magnifierComp->getScreenY(),
component->getWidth(), component->getHeight());
}
const Point<int> getScreenPosition() const
{
return magnifierComp->getScreenPosition();
}
const Point<int> localToGlobal (const Point<int>& relativePosition)
{
const double zoom = magnifierComp->getScaleFactor();
return magnifierComp->localPointToGlobal (Point<int> (roundToInt (relativePosition.getX() * zoom),
roundToInt (relativePosition.getY() * zoom)));
}
const Point<int> globalToLocal (const Point<int>& screenPosition)
{
const Point<int> p (magnifierComp->getLocalPoint (0, screenPosition));
const double zoom = magnifierComp->getScaleFactor();
return Point<int> (roundToInt (p.getX() / zoom),
roundToInt (p.getY() / zoom));
}
bool contains (const Point<int>& position, bool) const
{
return isPositiveAndBelow (position.getX(), magnifierComp->getWidth())
&& isPositiveAndBelow (position.getY(), magnifierComp->getHeight());
}
void repaint (const Rectangle<int>& area)
{
const double zoom = magnifierComp->getScaleFactor();
magnifierComp->repaint ((int) (area.getX() * zoom),
(int) (area.getY() * zoom),
roundToInt (area.getWidth() * zoom) + 1,
roundToInt (area.getHeight() * zoom) + 1);
}
void performAnyPendingRepaintsNow()
{
}
//==============================================================================
private:
MagnifierComponent* const magnifierComp;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MagnifyingPeer);
};
//==============================================================================
class PeerHolderComp : public Component
{
public:
PeerHolderComp (MagnifierComponent* const magnifierComp_)
: magnifierComp (magnifierComp_)
{
setVisible (true);
}
~PeerHolderComp()
{
}
ComponentPeer* createNewPeer (int, void*)
{
return new MagnifyingPeer (this, magnifierComp);
}
void childBoundsChanged (Component* c)
{
if (c != 0)
{
setSize (c->getWidth(), c->getHeight());
magnifierComp->childBoundsChanged (this);
}
}
void mouseWheelMove (const MouseEvent& e, float ix, float iy)
{
// unhandled mouse wheel moves can be referred upwards to the parent comp..
Component* const p = magnifierComp->getParentComponent();
if (p != 0)
p->mouseWheelMove (e.getEventRelativeTo (p), ix, iy);
}
private:
MagnifierComponent* const magnifierComp;
JUCE_DECLARE_NON_COPYABLE (PeerHolderComp);
};
//==============================================================================
MagnifierComponent::MagnifierComponent (Component* const content_,
const bool deleteContentCompWhenNoLongerNeeded)
: content (content_),
scaleFactor (0.0),
peer (0),
deleteContent (deleteContentCompWhenNoLongerNeeded),
quality (Graphics::lowResamplingQuality),
mouseSource (0, true)
{
holderComp = new PeerHolderComp (this);
setScaleFactor (1.0);
}
MagnifierComponent::~MagnifierComponent()
{
delete holderComp;
if (deleteContent)
delete content;
}
void MagnifierComponent::setScaleFactor (double newScaleFactor)
{
jassert (newScaleFactor > 0.0); // hmm - unlikely to work well with a negative scale factor
newScaleFactor = jlimit (1.0 / 8.0, 1000.0, newScaleFactor);
if (scaleFactor != newScaleFactor)
{
scaleFactor = newScaleFactor;
if (scaleFactor == 1.0)
{
holderComp->removeFromDesktop();
peer = 0;
addChildComponent (content);
childBoundsChanged (content);
}
else
{
holderComp->addAndMakeVisible (content);
holderComp->childBoundsChanged (content);
childBoundsChanged (holderComp);
holderComp->addToDesktop (0);
peer = holderComp->getPeer();
}
repaint();
}
}
void MagnifierComponent::setResamplingQuality (Graphics::ResamplingQuality newQuality)
{
quality = newQuality;
}
void MagnifierComponent::paint (Graphics& g)
{
const int w = holderComp->getWidth();
const int h = holderComp->getHeight();
if (w == 0 || h == 0)
return;
const Rectangle<int> r (g.getClipBounds());
const int srcX = (int) (r.getX() / scaleFactor);
const int srcY = (int) (r.getY() / scaleFactor);
int srcW = roundToInt (r.getRight() / scaleFactor) - srcX;
int srcH = roundToInt (r.getBottom() / scaleFactor) - srcY;
if (scaleFactor >= 1.0)
{
++srcW;
++srcH;
}
Image temp (Image::ARGB, jmax (w, srcX + srcW), jmax (h, srcY + srcH), false);
const Rectangle<int> area (srcX, srcY, srcW, srcH);
temp.clear (area);
{
Graphics g2 (temp);
g2.reduceClipRegion (area);
holderComp->paintEntireComponent (g2, false);
}
g.setImageResamplingQuality (quality);
g.drawImageTransformed (temp, AffineTransform::scale ((float) scaleFactor, (float) scaleFactor), false);
}
void MagnifierComponent::childBoundsChanged (Component* c)
{
if (c != 0)
setSize (roundToInt (c->getWidth() * scaleFactor),
roundToInt (c->getHeight() * scaleFactor));
}
void MagnifierComponent::passOnMouseEventToPeer (const MouseEvent& e)
{
if (peer != 0)
mouseSource.handleEvent (peer, Point<int> (scaleInt (e.x), scaleInt (e.y)),
e.eventTime.toMilliseconds(), ModifierKeys::getCurrentModifiers());
}
void MagnifierComponent::mouseDown (const MouseEvent& e)
{
passOnMouseEventToPeer (e);
}
void MagnifierComponent::mouseUp (const MouseEvent& e)
{
passOnMouseEventToPeer (e);
}
void MagnifierComponent::mouseDrag (const MouseEvent& e)
{
passOnMouseEventToPeer (e);
}
void MagnifierComponent::mouseMove (const MouseEvent& e)
{
passOnMouseEventToPeer (e);
}
void MagnifierComponent::mouseEnter (const MouseEvent& e)
{
passOnMouseEventToPeer (e);
}
void MagnifierComponent::mouseExit (const MouseEvent& e)
{
passOnMouseEventToPeer (e);
}
void MagnifierComponent::mouseWheelMove (const MouseEvent& e, float ix, float iy)
{
if (peer != 0)
peer->handleMouseWheel (e.source.getIndex(),
Point<int> (scaleInt (e.x), scaleInt (e.y)), e.eventTime.toMilliseconds(),
ix * 256.0f, iy * 256.0f);
else
Component::mouseWheelMove (e, ix, iy);
}
int MagnifierComponent::scaleInt (const int n) const
{
return roundToInt (n / scaleFactor);
}
END_JUCE_NAMESPACE

+ 0
- 121
src/gui/components/special/juce_MagnifierComponent.h View File

@@ -1,121 +0,0 @@
/*
==============================================================================
This file is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright 2004-10 by Raw Material Software Ltd.
------------------------------------------------------------------------------
JUCE can be redistributed and/or modified under the terms of the GNU General
Public License (Version 2), as published by the Free Software Foundation.
A copy of the license is included in the JUCE distribution, or can be found
online at www.gnu.org/licenses.
JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
------------------------------------------------------------------------------
To release a closed-source product which uses JUCE, commercial licenses are
available: visit www.rawmaterialsoftware.com/juce for more information.
==============================================================================
*/
#ifndef __JUCE_MAGNIFIERCOMPONENT_JUCEHEADER__
#define __JUCE_MAGNIFIERCOMPONENT_JUCEHEADER__
#include "../juce_Component.h"
#include "../mouse/juce_MouseInputSource.h"
//==============================================================================
/**
A component that contains another component, and can magnify or shrink it.
This component will continually update its size so that it fits the zoomed
version of the content component that you put inside it, so don't try to
change the size of this component directly - instead change that of the
content component.
To make it all work, the magnifier uses extremely cunning ComponentPeer tricks
to remap mouse events correctly. This means that the content component won't
appear to be a direct child of this component, and instead will think its
on the desktop.
*/
class JUCE_API MagnifierComponent : public Component
{
public:
//==============================================================================
/** Creates a MagnifierComponent.
This component will continually update its size so that it fits the zoomed
version of the content component that you put inside it, so don't try to
change the size of this component directly - instead change that of the
content component.
@param contentComponent the component to add as the magnified one
@param deleteContentCompWhenNoLongerNeeded if true, the content component will
be deleted when this component is deleted. If false,
it's the caller's responsibility to delete it later.
*/
MagnifierComponent (Component* contentComponent,
bool deleteContentCompWhenNoLongerNeeded);
/** Destructor. */
~MagnifierComponent();
//==============================================================================
/** Returns the current content component. */
Component* getContentComponent() const { return content; }
//==============================================================================
/** Changes the zoom level.
The scale factor must be greater than zero. Values less than 1 will shrink the
image; values greater than 1 will multiply its size by this amount.
When this is called, this component will change its size to fit the full extent
of the newly zoomed content.
*/
void setScaleFactor (double newScaleFactor);
/** Returns the current zoom factor. */
double getScaleFactor() const { return scaleFactor; }
/** Changes the quality setting used to rescale the graphics.
*/
void setResamplingQuality (Graphics::ResamplingQuality newQuality);
//==============================================================================
/** @internal */
void childBoundsChanged (Component*);
private:
Component* content;
Component* holderComp;
double scaleFactor;
ComponentPeer* peer;
bool deleteContent;
Graphics::ResamplingQuality quality;
MouseInputSource mouseSource;
//==============================================================================
void paint (Graphics& g);
void mouseDown (const MouseEvent& e);
void mouseUp (const MouseEvent& e);
void mouseDrag (const MouseEvent& e);
void mouseMove (const MouseEvent& e);
void mouseEnter (const MouseEvent& e);
void mouseExit (const MouseEvent& e);
void mouseWheelMove (const MouseEvent& e, float, float);
void passOnMouseEventToPeer (const MouseEvent& e);
int scaleInt (int n) const;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MagnifierComponent);
};
#endif // __JUCE_MAGNIFIERCOMPONENT_JUCEHEADER__

+ 1
- 1
src/gui/graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp View File

@@ -650,7 +650,7 @@ public:
}
y = y_;
generate (static_cast <SrcPixelType*> (scratchBuffer), x, width);
generate (scratchBuffer.getData(), x, width);
et.clipLineToMask (x, y_,
reinterpret_cast<uint8*> (scratchBuffer.getData()) + SrcPixelType::indexA,


+ 0
- 9
src/juce_app_includes.h View File

@@ -482,9 +482,6 @@
#ifndef __JUCE_POPUPMENU_JUCEHEADER__
#include "gui/components/menus/juce_PopupMenu.h"
#endif
#ifndef __JUCE_POPUPMENUCUSTOMCOMPONENT_JUCEHEADER__
#include "gui/components/menus/juce_PopupMenuCustomComponent.h"
#endif
#ifndef __JUCE_COMPONENTDRAGGER_JUCEHEADER__
#include "gui/components/mouse/juce_ComponentDragger.h"
#endif
@@ -506,9 +503,6 @@
#ifndef __JUCE_MOUSEEVENT_JUCEHEADER__
#include "gui/components/mouse/juce_MouseEvent.h"
#endif
#ifndef __JUCE_MOUSEHOVERDETECTOR_JUCEHEADER__
#include "gui/components/mouse/juce_MouseHoverDetector.h"
#endif
#ifndef __JUCE_MOUSEINPUTSOURCE_JUCEHEADER__
#include "gui/components/mouse/juce_MouseInputSource.h"
#endif
@@ -578,9 +572,6 @@
#ifndef __JUCE_DROPSHADOWER_JUCEHEADER__
#include "gui/components/special/juce_DropShadower.h"
#endif
#ifndef __JUCE_MAGNIFIERCOMPONENT_JUCEHEADER__
#include "gui/components/special/juce_MagnifierComponent.h"
#endif
#ifndef __JUCE_MIDIKEYBOARDCOMPONENT_JUCEHEADER__
#include "gui/components/special/juce_MidiKeyboardComponent.h"
#endif


+ 2
- 0
src/native/windows/juce_win32_Midi.cpp View File

@@ -447,6 +447,8 @@ MidiOutput* MidiOutput::openDevice (int index)
MidiOutput::~MidiOutput()
{
stopBackgroundThread();
MidiOutHandle* const h = static_cast <MidiOutHandle*> (internal);
if (MidiOutHandle::activeHandles.contains (h) && --(h->refCount) == 0)


Loading…
Cancel
Save