├── .gitignore ├── .gitmodules ├── Euphoria.xcodeproj ├── project.pbxproj └── project.xcworkspace │ ├── contents.xcworkspacedata │ ├── xcshareddata │ └── Euphoria.xccheckout │ └── xcuserdata │ └── stephane.xcuserdatad │ └── UserInterfaceState.xcuserstate └── Euphoria ├── GPL ├── Euphoria.cpp ├── Euphoria.h └── texture.h ├── Info.plist ├── RSSEuphoriaConfigurationWindowController.h ├── RSSEuphoriaConfigurationWindowController.m ├── RSSEuphoriaSettings.h ├── RSSEuphoriaSettings.m ├── RSSEuphoriaView.h ├── RSSEuphoriaView.mm ├── de.lproj ├── Localized.strings └── RSSEuphoriaConfigurationWindowController.xib ├── en.lproj ├── Localized.strings └── RSSEuphoriaConfigurationWindowController.xib ├── es.lproj ├── Localized.strings └── RSSEuphoriaConfigurationWindowController.xib ├── fr.lproj ├── Localized.strings └── RSSEuphoriaConfigurationWindowController.xib ├── images ├── badmath_thumbnail.png ├── badmath_thumbnail@2x.png ├── cubism_thumbnail.png ├── cubism_thumbnail@2x.png ├── echo_thumbnail.png ├── echo_thumbnail@2x.png ├── grid_thumbnail.png ├── grid_thumbnail@2x.png ├── kaleidoscope_thumbnail.png ├── kaleidoscope_thumbnail@2x.png ├── mtheory_thumbnail.png ├── mtheory_thumbnail@2x.png ├── nowhere_thumbnail.png ├── nowhere_thumbnail@2x.png ├── regular_thumbnail.png ├── regular_thumbnail@2x.png ├── thumbnail.png ├── thumbnail@2x.png ├── uhftem_thumbnail.png └── uhftem_thumbnail@2x.png ├── it.lproj ├── Localized.strings └── RSSEuphoriaConfigurationWindowController.xib ├── ja.lproj ├── Localized.strings └── RSSEuphoriaConfigurationWindowController.xib └── sv.lproj ├── Localized.strings └── RSSEuphoriaConfigurationWindowController.xib /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | Euphoria.xcodeproj/project.xcworkspace/xcuserdata/stephane.xcuserdatad/UserInterfaceState.xcuserstate 3 | 4 | Euphoria.xcodeproj/xcuserdata/stephane.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist 5 | 6 | Euphoria.xcodeproj/xcuserdata/stephane.xcuserdatad/xcschemes/xcschememanagement.plist 7 | 8 | Euphoria.xcodeproj/xcuserdata/stephane.xcuserdatad/xcschemes/Euphoria.xcscheme 9 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "Euphoria/rsscommon"] 2 | path = Euphoria/rsscommon 3 | url = https://github.com/packagesdev/rsscommon 4 | -------------------------------------------------------------------------------- /Euphoria.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Euphoria.xcodeproj/project.xcworkspace/xcshareddata/Euphoria.xccheckout: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDESourceControlProjectFavoriteDictionaryKey 6 | 7 | IDESourceControlProjectIdentifier 8 | 1B908474-F624-46DF-AC18-B033C9092348 9 | IDESourceControlProjectName 10 | Euphoria 11 | IDESourceControlProjectOriginsDictionary 12 | 13 | 51F150AFDC369B79AFC620C0E9E34ADCDECB9665 14 | https://github.com/packagesdev/rsscommon 15 | FB7FBAF09BB94089755F9E5DEFDC72B3FDABEC28 16 | https://github.com/packagesdev/euphoria.git 17 | 18 | IDESourceControlProjectPath 19 | Euphoria.xcodeproj 20 | IDESourceControlProjectRelativeInstallPathDictionary 21 | 22 | 51F150AFDC369B79AFC620C0E9E34ADCDECB9665 23 | ../..Euphoria/rsscommon 24 | FB7FBAF09BB94089755F9E5DEFDC72B3FDABEC28 25 | ../.. 26 | 27 | IDESourceControlProjectURL 28 | https://github.com/packagesdev/euphoria.git 29 | IDESourceControlProjectVersion 30 | 111 31 | IDESourceControlProjectWCCIdentifier 32 | FB7FBAF09BB94089755F9E5DEFDC72B3FDABEC28 33 | IDESourceControlProjectWCConfigurations 34 | 35 | 36 | IDESourceControlRepositoryExtensionIdentifierKey 37 | public.vcs.git 38 | IDESourceControlWCCIdentifierKey 39 | FB7FBAF09BB94089755F9E5DEFDC72B3FDABEC28 40 | IDESourceControlWCCName 41 | euphoria 42 | 43 | 44 | IDESourceControlRepositoryExtensionIdentifierKey 45 | public.vcs.git 46 | IDESourceControlWCCIdentifierKey 47 | 51F150AFDC369B79AFC620C0E9E34ADCDECB9665 48 | IDESourceControlWCCName 49 | rsscommon 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /Euphoria.xcodeproj/project.xcworkspace/xcuserdata/stephane.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/packagesdev/euphoria/5f9dcd0036c5df8f361ab31db4cd8e9749e9a8f7/Euphoria.xcodeproj/project.xcworkspace/xcuserdata/stephane.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /Euphoria/GPL/Euphoria.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2000-2015 Terence M. Welsh 3 | * 4 | * This file is part of Euphoria. 5 | * 6 | * Euphoria is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License version 2 as 8 | * published by the Free Software Foundation. 9 | * 10 | * Euphoria is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program; if not, write to the Free Software 17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18 | */ 19 | 20 | 21 | // Euphoria screensaver 22 | 23 | #if defined(__GNUC__) 24 | #if defined(__GNUC_PATCHLEVEL__) 25 | #define __GNUC_VERSION__ (__GNUC__ * 10000 \ 26 | + __GNUC_MINOR__ * 100 \ 27 | + __GNUC_PATCHLEVEL__) 28 | #else 29 | #define __GNUC_VERSION__ (__GNUC__ * 10000 \ 30 | + __GNUC_MINOR__ * 100) 31 | #endif 32 | 33 | #if __GNUC_VERSION__ < 40000 34 | 35 | #define cosf cos 36 | #define acosf acos 37 | #define sinf sin 38 | 39 | #endif 40 | 41 | #endif 42 | 43 | #include "Euphoria.h" 44 | 45 | 46 | #include 47 | #include 48 | #include 49 | #include "rsMath.h" 50 | #include "rgbhsl.h" 51 | #include "texture.h" 52 | 53 | #include 54 | #include 55 | 56 | #define PIx2 6.28318530718f 57 | 58 | scene::scene() 59 | { 60 | srand((unsigned)time(NULL)); 61 | rand(); rand(); rand(); rand(); rand(); 62 | rand(); rand(); rand(); rand(); rand(); 63 | rand(); rand(); rand(); rand(); rand(); 64 | rand(); rand(); rand(); rand(); rand(); 65 | 66 | _lastRefresh=0; 67 | 68 | feedbackmap=NULL; 69 | wisps=NULL; 70 | backgroundLayers=NULL; 71 | 72 | 73 | textureID=0; 74 | feedbacktex=0; 75 | } 76 | 77 | scene::~scene() 78 | { 79 | if (feedbackmap!=NULL) 80 | { 81 | delete feedbackmap; 82 | feedbackmap=NULL; 83 | } 84 | 85 | if (wisps!=NULL) 86 | { 87 | delete[] wisps; 88 | wisps=NULL; 89 | } 90 | 91 | if (backgroundLayers!=NULL) 92 | { 93 | delete[] backgroundLayers; 94 | backgroundLayers=NULL; 95 | } 96 | } 97 | 98 | #pragma mark - 99 | 100 | void scene::resize(int inWidth,int inHeight) 101 | { 102 | viewport[0] = 0; 103 | viewport[1] = 0; 104 | viewport[2] = inWidth; 105 | viewport[3] = inHeight; 106 | 107 | glViewport(0,0, inWidth,inHeight); 108 | aspectRatio = inWidth / inHeight; 109 | 110 | // setup regular drawing area just in case feedback isn't used 111 | glMatrixMode(GL_PROJECTION); 112 | glLoadIdentity(); 113 | gluPerspective(20.0, aspectRatio, 0.01, 20); 114 | glMatrixMode(GL_MODELVIEW); 115 | glLoadIdentity(); 116 | glTranslatef(0.0, 0.0, -5.0); 117 | 118 | glClearColor(0.0f, 0.0f, 0.0f, 1.0f); 119 | glClear(GL_COLOR_BUFFER_BIT); 120 | } 121 | 122 | void scene::create() 123 | { 124 | 125 | fr[0] = 0.0f; 126 | fr[1] = 0.0f; 127 | fr[2] = 0.0f; 128 | fr[3] = 0.0f; 129 | 130 | lr[0] = 0.0f; 131 | lr[1] = 0.0f; 132 | lr[2] = 0.0f; 133 | 134 | glEnable(GL_BLEND); 135 | glBlendFunc(GL_ONE, GL_ONE); 136 | glLineWidth(2.0f); 137 | // Commented out because smooth lines and textures don't mix on my TNT. 138 | // It's like it rendering in software mode 139 | //glEnable(GL_LINE_SMOOTH); 140 | //glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); 141 | 142 | if (glIsTexture(textureID)) 143 | { 144 | glDeleteTextures(1, (GLuint *) &textureID); 145 | textureID=0; 146 | } 147 | 148 | if (textureType || feedback) 149 | { 150 | glEnable(GL_TEXTURE_2D); 151 | } 152 | else 153 | { 154 | glDisable(GL_TEXTURE_2D); 155 | glBindTexture(GL_TEXTURE_2D, 0); 156 | } 157 | 158 | if(textureType>0) 159 | { 160 | int whichtex = textureType; 161 | if(whichtex == 4) // random texture 162 | whichtex = rsRandi(3) + 1; 163 | 164 | glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 165 | // Initialize texture 166 | glGenTextures(1, (GLuint *) &textureID); 167 | glBindTexture(GL_TEXTURE_2D, textureID); 168 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 169 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); 170 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 171 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 172 | 173 | switch(whichtex) 174 | { 175 | case 1: 176 | gluBuild2DMipmaps(GL_TEXTURE_2D, 1, TEXSIZE, TEXSIZE, GL_LUMINANCE, GL_UNSIGNED_BYTE, plasmamap); 177 | break; 178 | case 2: 179 | gluBuild2DMipmaps(GL_TEXTURE_2D, 1, TEXSIZE, TEXSIZE, GL_LUMINANCE, GL_UNSIGNED_BYTE, stringymap); 180 | break; 181 | case 3: 182 | gluBuild2DMipmaps(GL_TEXTURE_2D, 1, TEXSIZE, TEXSIZE, GL_LUMINANCE, GL_UNSIGNED_BYTE, linesmap); 183 | } 184 | } 185 | 186 | 187 | 188 | if (feedback>0) 189 | { 190 | feedbacktexsize = int(pow(2, feedbacksize)); 191 | 192 | while(feedbacktexsize > viewport[2] || feedbacktexsize > viewport[3]) 193 | { 194 | feedbacktexsize=feedbacktexsize/2; 195 | } 196 | 197 | // feedback texture setup 198 | 199 | feedbackmap = new unsigned char[feedbacktexsize*feedbacktexsize*3]; 200 | 201 | if (glIsTexture(feedbacktex)) 202 | { 203 | glDeleteTextures(1, (GLuint *) &feedbacktex); 204 | feedbacktex=0; 205 | } 206 | 207 | glGenTextures(1, (GLuint *) &feedbacktex); 208 | glBindTexture(GL_TEXTURE_2D, feedbacktex); 209 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 210 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 211 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); 212 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); 213 | glTexImage2D(GL_TEXTURE_2D, 0, 3, feedbacktexsize, feedbacktexsize, 0, GL_RGB, GL_UNSIGNED_BYTE, feedbackmap); 214 | 215 | // feedback velocity variable setup 216 | fv[0] = float(feedbackspeed) * (rsRandf(0.025f) + 0.025f); 217 | fv[1] = float(feedbackspeed) * (rsRandf(0.05f) + 0.05f); 218 | fv[2] = float(feedbackspeed) * (rsRandf(0.05f) + 0.05f); 219 | fv[3] = float(feedbackspeed) * (rsRandf(0.1f) + 0.1f); 220 | lv[0] = float(feedbackspeed) * (rsRandf(0.0025f) + 0.0025f); 221 | lv[1] = float(feedbackspeed) * (rsRandf(0.0025f) + 0.0025f); 222 | lv[2] = float(feedbackspeed) * (rsRandf(0.0025f) + 0.0025f); 223 | } 224 | 225 | // Initialize wisps 226 | 227 | wisps = new wisp[wispsCount]; 228 | 229 | for(int i=0;i0) 235 | { 236 | backgroundLayers = new wisp[backgroundLayersCount]; 237 | 238 | for(int i=0;i PIx2) 286 | fr[i] -= PIx2; 287 | } 288 | 289 | f[0] = 30.0f * cos((double)fr[0]); 290 | f[1] = 0.2f * cos((double)fr[1]); 291 | f[2] = 0.2f * cos((double)fr[2]); 292 | f[3] = 0.8f * cos((double)fr[3]); 293 | 294 | for(int i=0; i<3; i++) 295 | { 296 | lr[i] += tElapsedTime * lv[i]; 297 | if(lr[i] > PIx2) 298 | lr[i] -= PIx2; 299 | 300 | l[i] = cos(lr[i]); 301 | 302 | l[i] = l[i] * l[i]; 303 | } 304 | 305 | // Create drawing area for feedback texture 306 | glViewport(0, 0, feedbacktexsize, feedbacktexsize); 307 | glMatrixMode(GL_PROJECTION); 308 | glLoadIdentity(); 309 | gluPerspective(30.0, aspectRatio, 0.01f, 20.0f); 310 | glMatrixMode(GL_MODELVIEW); 311 | 312 | // Draw 313 | glClear(GL_COLOR_BUFFER_BIT); 314 | glColor3f(feedbackIntensity, feedbackIntensity, feedbackIntensity); 315 | glBindTexture(GL_TEXTURE_2D, feedbacktex); 316 | glPushMatrix(); 317 | glTranslatef(f[1] * l[1], f[2] * l[1], f[3] * l[2]); 318 | glRotatef(f[0] * l[0], 0, 0, 1); 319 | glBegin(GL_TRIANGLE_STRIP); 320 | glTexCoord2f(-0.5f, -0.5f); 321 | glVertex3f(-aspectRatio*2.0f, -2.0f, 1.25f); 322 | glTexCoord2f(1.5f, -0.5f); 323 | glVertex3f(aspectRatio*2.0f, -2.0f, 1.25f); 324 | glTexCoord2f(-0.5f, 1.5f); 325 | glVertex3f(-aspectRatio*2.0f, 2.0f, 1.25f); 326 | glTexCoord2f(1.5f, 1.5f); 327 | glVertex3f(aspectRatio*2.0f, 2.0f, 1.25f); 328 | glEnd(); 329 | glPopMatrix(); 330 | glBindTexture(GL_TEXTURE_2D, textureID); 331 | 332 | for(int i=0; imeshDensity * 0.5f); 422 | 423 | meshDensity=inScene->meshDensity; 424 | 425 | vertices = new float**[meshDensity+1]; 426 | 427 | for(int i=0; i<=meshDensity; i++) 428 | { 429 | vertices[i] = new float*[meshDensity+1]; 430 | 431 | for(int j=0; j<=meshDensity; j++) 432 | { 433 | float * pointer=vertices[i][j] = new float[7]; 434 | pointer[3] = float(i) * recHalfDens - 1.0f; // x position on grid 435 | pointer[4] = float(j) * recHalfDens - 1.0f; // y position on grid 436 | // distance squared from the center 437 | pointer[5] = pointer[3] * pointer[3] 438 | + pointer[4] * pointer[4]; 439 | pointer[6] = 0.0f; // intensity 440 | } 441 | } 442 | 443 | // initialize constants 444 | for(int i=0; ispeed * 0.03f) + (inScene->speed * 0.001f); 449 | } 450 | 451 | // pick color 452 | hsl[0] = rsRandf(1.0f); 453 | hsl[1] = 0.1f + rsRandf(0.9f); 454 | hsl[2] = 1.0f; 455 | hueSpeed = rsRandf(0.1f) - 0.05f; 456 | saturationSpeed = rsRandf(0.04f) + 0.001f; 457 | } 458 | 459 | void wisp::update(int inVisibility,float inElapsedTime) 460 | { 461 | rsVec up, right, crossvec; 462 | // visibility constants 463 | float viscon1 = inVisibility * 0.01f; 464 | float viscon2 = 1.0f / viscon1; 465 | 466 | // update constants 467 | for(int i=0; i PIx2) 471 | cr[i] -= PIx2; 472 | 473 | c[i] = cosf((double) cr[i]); 474 | } 475 | 476 | // update vertex positions 477 | for(int i=0; i<=meshDensity; i++) 478 | { 479 | for(int j=0; j<=meshDensity; j++) 480 | { 481 | float * pointer=vertices[i][j]; 482 | 483 | pointer[0] = pointer[3] * pointer[3] * pointer[4] * c[0] 484 | + pointer[5] * c[1] + 0.5f * c[2]; 485 | pointer[1] = pointer[4] * pointer[4] * pointer[5] * c[3] 486 | + pointer[3] * c[4] + 0.5f * c[5]; 487 | pointer[2] = pointer[5] * pointer[5] * pointer[3] * c[6] 488 | + pointer[4] * c[7] + c[8]; 489 | } 490 | } 491 | 492 | // update vertex normals for most of mesh 493 | for(int i=1; i 1.0f) 517 | { 518 | vertices[i][j][6] = 1.0f; 519 | } 520 | else 521 | { 522 | if(vertices[i][j][6] < 0.0f) 523 | { 524 | vertices[i][j][6] = 0.0f; 525 | } 526 | } 527 | } 528 | } 529 | 530 | // update color 531 | 532 | hsl[0] += hueSpeed * inElapsedTime; 533 | 534 | if(hsl[0] < 0.0f) 535 | { 536 | hsl[0] += 1.0f; 537 | } 538 | else 539 | { 540 | if(hsl[0] > 1.0f) 541 | { 542 | hsl[0] -= 1.0f; 543 | } 544 | } 545 | 546 | hsl[1] += saturationSpeed * inElapsedTime; 547 | 548 | if(hsl[1] <= 0.1f) 549 | { 550 | hsl[1] = 0.1f; 551 | saturationSpeed = -saturationSpeed; 552 | } 553 | 554 | if(hsl[1] >= 1.0f) 555 | { 556 | hsl[1] = 1.0f; 557 | saturationSpeed = -saturationSpeed; 558 | } 559 | 560 | hsl2rgb(hsl[0], hsl[1], hsl[2], rgb[0], rgb[1], rgb[2]); 561 | } 562 | 563 | void wisp::draw(bool inShowWireframe) 564 | { 565 | glPushMatrix(); 566 | 567 | if(inShowWireframe==true) 568 | { 569 | for(int i=1; i 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | com.demonews.reallyslick.$(PRODUCT_NAME:rfc1034identifier) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 10.7 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 13 23 | NSPrincipalClass 24 | RSSEuphoriaView 25 | 26 | 27 | -------------------------------------------------------------------------------- /Euphoria/RSSEuphoriaConfigurationWindowController.h: -------------------------------------------------------------------------------- 1 | 2 | #import "RSSConfigurationWindowController.h" 3 | 4 | @interface RSSEuphoriaConfigurationWindowController : RSSConfigurationWindowController 5 | 6 | @end 7 | -------------------------------------------------------------------------------- /Euphoria/RSSEuphoriaConfigurationWindowController.m: -------------------------------------------------------------------------------- 1 | 2 | #import "RSSEuphoriaConfigurationWindowController.h" 3 | 4 | #import "RSSEuphoriaSettings.h" 5 | 6 | #import "RSSCollectionView.h" 7 | 8 | #import "RSSCollectionViewItem.h" 9 | 10 | @interface RSSEuphoriaConfigurationWindowController () 11 | { 12 | IBOutlet RSSCollectionView *_settingsCollectionView; 13 | 14 | IBOutlet NSSlider * _numberOfWispsSlider; 15 | IBOutlet NSTextField * _numberOfWispsLabel; 16 | IBOutlet NSSlider * _numberOfBackgroundLayersSlider; 17 | IBOutlet NSTextField * _numberOfBackgroundLayersLabel; 18 | 19 | IBOutlet NSSlider * _meshDensitySlider; 20 | IBOutlet NSTextField * _meshDensityLabel; 21 | IBOutlet NSSlider * _visibilitySlider; 22 | IBOutlet NSTextField * _visibilityLabel; 23 | IBOutlet NSSlider * _speedSlider; 24 | IBOutlet NSTextField * _speedLabel; 25 | 26 | IBOutlet NSSlider * _feedbackSlider; 27 | IBOutlet NSTextField * _feedbackLabel; 28 | IBOutlet NSSlider * _feedbackSpeedSlider; 29 | IBOutlet NSTextField * _feedbackSpeedLabel; 30 | IBOutlet NSSlider * _feedbackTextureSizeSlider; 31 | IBOutlet NSTextField * _feedbackTextureSizeLabel; 32 | IBOutlet NSPopUpButton * _textureTypePopupButton; 33 | IBOutlet NSButton *_wireframeCheckbox; 34 | 35 | NSNumberFormatter * _numberFormatter; 36 | } 37 | 38 | - (void)_selectCollectionViewItemWithTag:(NSInteger)inTag; 39 | 40 | - (void)_setAsCustomSet; 41 | 42 | - (IBAction)setNumberOfWisps:(id)sender; 43 | - (IBAction)setNumberOfBackgroundLayers:(id)sender; 44 | 45 | - (IBAction)setMeshDensity:(id)sender; 46 | - (IBAction)setVisibility:(id)sender; 47 | - (IBAction)setSpeed:(id)sender; 48 | 49 | - (IBAction)setFeedback:(id)sender; 50 | - (IBAction)setFeedbackSpeed:(id)sender; 51 | - (IBAction)setFeedbackTextureSize:(id)sender; 52 | - (IBAction)setTextureType:(id)sender; 53 | - (IBAction)setWireframe:(id)sender; 54 | 55 | @end 56 | 57 | @implementation RSSEuphoriaConfigurationWindowController 58 | 59 | - (void)dealloc 60 | { 61 | [[NSDistributedNotificationCenter defaultCenter] removeObserver:self]; 62 | } 63 | 64 | - (Class)settingsClass 65 | { 66 | return [RSSEuphoriaSettings class]; 67 | } 68 | 69 | - (void)windowDidLoad 70 | { 71 | [super windowDidLoad]; 72 | 73 | _numberFormatter=[NSNumberFormatter new]; 74 | 75 | if (_numberFormatter!=nil) 76 | { 77 | _numberFormatter.hasThousandSeparators=YES; 78 | _numberFormatter.localizesFormat=YES; 79 | } 80 | 81 | NSBundle * tBundle=[NSBundle bundleForClass:[self class]]; 82 | 83 | NSArray * tStandardSettingsArray=@[@{ 84 | RSSCollectionViewRepresentedObjectThumbnail : @"regular_thumbnail", 85 | RSSCollectionViewRepresentedObjectTag : @(RSSEuphoriaSetRegular), 86 | RSSCollectionViewRepresentedObjectName : NSLocalizedStringFromTableInBundle(@"Regular",@"Localized",tBundle,@"") 87 | }, 88 | @{ 89 | RSSCollectionViewRepresentedObjectThumbnail : @"grid_thumbnail", 90 | RSSCollectionViewRepresentedObjectTag : @(RSSEuphoriaSetGrid), 91 | RSSCollectionViewRepresentedObjectName : NSLocalizedStringFromTableInBundle(@"Grid",@"Localized",tBundle,@"") 92 | }, 93 | @{ 94 | RSSCollectionViewRepresentedObjectThumbnail : @"cubism_thumbnail", 95 | RSSCollectionViewRepresentedObjectTag : @(RSSEuphoriaSetCubism), 96 | RSSCollectionViewRepresentedObjectName : NSLocalizedStringFromTableInBundle(@"Cubism",@"Localized",tBundle,@"") 97 | }, 98 | @{ 99 | RSSCollectionViewRepresentedObjectThumbnail : @"badmath_thumbnail", 100 | RSSCollectionViewRepresentedObjectTag : @(RSSEuphoriaSetBadMath), 101 | RSSCollectionViewRepresentedObjectName : NSLocalizedStringFromTableInBundle(@"Bad Math",@"Localized",tBundle,@"") 102 | }, 103 | @{ 104 | RSSCollectionViewRepresentedObjectThumbnail : @"mtheory_thumbnail", 105 | RSSCollectionViewRepresentedObjectTag : @(RSSEuphoriaSetMTheory), 106 | RSSCollectionViewRepresentedObjectName : NSLocalizedStringFromTableInBundle(@"M-Theory",@"Localized",tBundle,@"") 107 | }, 108 | @{ 109 | RSSCollectionViewRepresentedObjectThumbnail : @"uhftem_thumbnail", 110 | RSSCollectionViewRepresentedObjectTag : @(RSSEuphoriaSetUHFTEM), 111 | RSSCollectionViewRepresentedObjectName : NSLocalizedStringFromTableInBundle(@"UHFTEM",@"Localized",tBundle,@"") 112 | }, 113 | @{ 114 | RSSCollectionViewRepresentedObjectThumbnail : @"nowhere_thumbnail", 115 | RSSCollectionViewRepresentedObjectTag : @(RSSEuphoriaSetNowhere), 116 | RSSCollectionViewRepresentedObjectName : NSLocalizedStringFromTableInBundle(@"Nowhere",@"Localized",tBundle,@"") 117 | }, 118 | @{ 119 | RSSCollectionViewRepresentedObjectThumbnail : @"echo_thumbnail", 120 | RSSCollectionViewRepresentedObjectTag : @(RSSEuphoriaSetEcho), 121 | RSSCollectionViewRepresentedObjectName : NSLocalizedStringFromTableInBundle(@"Echo",@"Localized",tBundle,@"") 122 | }, 123 | @{ 124 | RSSCollectionViewRepresentedObjectThumbnail : @"kaleidoscope_thumbnail", 125 | RSSCollectionViewRepresentedObjectTag : @(RSSEuphoriaSetKaleidoscope), 126 | RSSCollectionViewRepresentedObjectName : NSLocalizedStringFromTableInBundle(@"Kaleidoscope",@"Localized",tBundle,@"") 127 | }, 128 | @{ 129 | RSSCollectionViewRepresentedObjectThumbnail : @"random_thumbnail", 130 | RSSCollectionViewRepresentedObjectTag : @(RSSEuphoriaSetRandom), 131 | RSSCollectionViewRepresentedObjectName : NSLocalizedStringFromTableInBundle(@"Random",@"Localized",tBundle,@"") 132 | }, 133 | @{ 134 | RSSCollectionViewRepresentedObjectThumbnail : @"custom_thumbnail", 135 | RSSCollectionViewRepresentedObjectTag : @(RSSEuphoriaSetCustom), 136 | RSSCollectionViewRepresentedObjectName : NSLocalizedStringFromTableInBundle(@"Custom",@"Localized",tBundle,@"") 137 | }]; 138 | 139 | [_settingsCollectionView setContent:tStandardSettingsArray]; 140 | 141 | /*[[NSDistributedNotificationCenter defaultCenter] addObserver:self 142 | selector:@selector(preferredScrollerStyleDidChange:) 143 | name:NSPreferredScrollerStyleDidChangeNotification 144 | object:nil 145 | suspensionBehavior:NSNotificationSuspensionBehaviorDeliverImmediately];*/ 146 | } 147 | 148 | - (void)restoreUI 149 | { 150 | [super restoreUI]; 151 | 152 | RSSEuphoriaSettings * tEuphoriaSettings=(RSSEuphoriaSettings *) sceneSettings; 153 | 154 | [self _selectCollectionViewItemWithTag:tEuphoriaSettings.standardSet]; 155 | 156 | 157 | _numberOfWispsSlider.integerValue=tEuphoriaSettings.numberOfWisps; 158 | _numberOfWispsLabel.integerValue=tEuphoriaSettings.numberOfWisps; 159 | 160 | _numberOfBackgroundLayersSlider.integerValue=tEuphoriaSettings.numberOfBackgroundLayers; 161 | _numberOfBackgroundLayersLabel.integerValue=tEuphoriaSettings.numberOfBackgroundLayers; 162 | 163 | 164 | _meshDensitySlider.integerValue=tEuphoriaSettings.meshDensity; 165 | _meshDensityLabel.integerValue=tEuphoriaSettings.meshDensity; 166 | 167 | _visibilitySlider.integerValue=tEuphoriaSettings.visibility; 168 | _visibilityLabel.integerValue=tEuphoriaSettings.visibility; 169 | 170 | _speedSlider.integerValue=tEuphoriaSettings.speed; 171 | _speedLabel.integerValue=tEuphoriaSettings.speed; 172 | 173 | 174 | _feedbackSlider.integerValue=tEuphoriaSettings.feedback; 175 | _feedbackLabel.integerValue=tEuphoriaSettings.feedback; 176 | 177 | _feedbackSpeedSlider.integerValue=tEuphoriaSettings.feedbackSpeed; 178 | _feedbackSpeedLabel.integerValue=tEuphoriaSettings.feedbackSpeed; 179 | 180 | _feedbackTextureSizeSlider.integerValue=tEuphoriaSettings.feedbackTextureSize; 181 | _feedbackTextureSizeLabel.integerValue=tEuphoriaSettings.feedbackTextureSize; 182 | 183 | [_textureTypePopupButton selectItemWithTag:tEuphoriaSettings.texture]; 184 | 185 | _wireframeCheckbox.state=(tEuphoriaSettings.texture==YES) ? NSOnState : NSOffState; 186 | } 187 | 188 | #pragma mark - 189 | 190 | - (void)_selectCollectionViewItemWithTag:(NSInteger)inTag 191 | { 192 | [_settingsCollectionView.content enumerateObjectsUsingBlock:^(NSDictionary * bDictionary,NSUInteger bIndex,BOOL * bOutStop){ 193 | NSNumber * tNumber=bDictionary[RSSCollectionViewRepresentedObjectTag]; 194 | 195 | if (tNumber!=nil) 196 | { 197 | if (inTag==[tNumber integerValue]) 198 | { 199 | [_settingsCollectionView RSS_selectItemAtIndex:bIndex]; 200 | 201 | *bOutStop=YES; 202 | } 203 | } 204 | }]; 205 | } 206 | 207 | - (void)_setAsCustomSet 208 | { 209 | RSSEuphoriaSettings * tEuphoriaSettings=(RSSEuphoriaSettings *) sceneSettings; 210 | 211 | if (tEuphoriaSettings.standardSet!=RSSEuphoriaSetCustom) 212 | { 213 | tEuphoriaSettings.standardSet=RSSEuphoriaSetCustom; 214 | 215 | [self _selectCollectionViewItemWithTag:tEuphoriaSettings.standardSet]; 216 | } 217 | } 218 | 219 | - (IBAction)setNumberOfWisps:(id)sender 220 | { 221 | RSSEuphoriaSettings * tEuphoriaSettings=(RSSEuphoriaSettings *) sceneSettings; 222 | 223 | if (tEuphoriaSettings.numberOfWisps!=[sender integerValue]) 224 | { 225 | tEuphoriaSettings.numberOfWisps=[sender integerValue]; 226 | 227 | _numberOfWispsLabel.integerValue=tEuphoriaSettings.numberOfWisps; 228 | 229 | [self _setAsCustomSet]; 230 | } 231 | } 232 | 233 | - (IBAction)setNumberOfBackgroundLayers:(id)sender 234 | { 235 | RSSEuphoriaSettings * tEuphoriaSettings=(RSSEuphoriaSettings *) sceneSettings; 236 | 237 | if (tEuphoriaSettings.numberOfBackgroundLayers!=[sender integerValue]) 238 | { 239 | tEuphoriaSettings.numberOfBackgroundLayers=[sender integerValue]; 240 | 241 | _numberOfBackgroundLayersLabel.integerValue=tEuphoriaSettings.numberOfBackgroundLayers; 242 | 243 | [self _setAsCustomSet]; 244 | } 245 | } 246 | 247 | - (IBAction)setMeshDensity:(id)sender 248 | { 249 | RSSEuphoriaSettings * tEuphoriaSettings=(RSSEuphoriaSettings *) sceneSettings; 250 | 251 | if (tEuphoriaSettings.meshDensity!=[sender integerValue]) 252 | { 253 | tEuphoriaSettings.meshDensity=[sender integerValue]; 254 | 255 | _meshDensityLabel.integerValue=tEuphoriaSettings.meshDensity; 256 | 257 | [self _setAsCustomSet]; 258 | } 259 | } 260 | 261 | - (IBAction)setVisibility:(id)sender 262 | { 263 | RSSEuphoriaSettings * tEuphoriaSettings=(RSSEuphoriaSettings *) sceneSettings; 264 | 265 | if (tEuphoriaSettings.visibility!=[sender integerValue]) 266 | { 267 | tEuphoriaSettings.visibility=[sender integerValue]; 268 | 269 | _visibilityLabel.integerValue=tEuphoriaSettings.visibility; 270 | 271 | [self _setAsCustomSet]; 272 | } 273 | } 274 | 275 | - (IBAction)setSpeed:(id)sender 276 | { 277 | RSSEuphoriaSettings * tEuphoriaSettings=(RSSEuphoriaSettings *) sceneSettings; 278 | 279 | if (tEuphoriaSettings.speed!=[sender integerValue]) 280 | { 281 | tEuphoriaSettings.speed=[sender integerValue]; 282 | 283 | _speedLabel.integerValue=tEuphoriaSettings.speed; 284 | 285 | [self _setAsCustomSet]; 286 | } 287 | } 288 | 289 | - (IBAction)setFeedback:(id)sender 290 | { 291 | RSSEuphoriaSettings * tEuphoriaSettings=(RSSEuphoriaSettings *) sceneSettings; 292 | 293 | if (tEuphoriaSettings.feedback!=[sender integerValue]) 294 | { 295 | tEuphoriaSettings.feedback=[sender integerValue]; 296 | 297 | _feedbackLabel.integerValue=tEuphoriaSettings.feedback; 298 | 299 | [self _setAsCustomSet]; 300 | } 301 | } 302 | 303 | - (IBAction)setFeedbackSpeed:(id)sender 304 | { 305 | RSSEuphoriaSettings * tEuphoriaSettings=(RSSEuphoriaSettings *) sceneSettings; 306 | 307 | if (tEuphoriaSettings.feedbackSpeed!=[sender integerValue]) 308 | { 309 | tEuphoriaSettings.feedbackSpeed=[sender integerValue]; 310 | 311 | _feedbackSpeedLabel.integerValue=tEuphoriaSettings.feedbackSpeed; 312 | 313 | [self _setAsCustomSet]; 314 | } 315 | } 316 | 317 | - (IBAction)setFeedbackTextureSize:(id)sender 318 | { 319 | RSSEuphoriaSettings * tEuphoriaSettings=(RSSEuphoriaSettings *) sceneSettings; 320 | 321 | if (tEuphoriaSettings.feedbackTextureSize!=[sender integerValue]) 322 | { 323 | tEuphoriaSettings.feedbackTextureSize=[sender integerValue]; 324 | 325 | _feedbackTextureSizeLabel.integerValue=tEuphoriaSettings.feedbackTextureSize; 326 | 327 | [self _setAsCustomSet]; 328 | } 329 | } 330 | 331 | - (IBAction)setTextureType:(id)sender 332 | { 333 | RSSEuphoriaTextureType nTexture=[sender selectedTag]; 334 | 335 | RSSEuphoriaSettings * tEuphoriaSettings=(RSSEuphoriaSettings *) sceneSettings; 336 | 337 | if (tEuphoriaSettings.texture!=nTexture) 338 | { 339 | tEuphoriaSettings.texture=nTexture; 340 | 341 | [self _setAsCustomSet]; 342 | } 343 | } 344 | 345 | - (IBAction)setWireframe:(id)sender 346 | { 347 | BOOL nValue=([sender state]==NSOnState); 348 | 349 | RSSEuphoriaSettings * tEuphoriaSettings=(RSSEuphoriaSettings *) sceneSettings; 350 | 351 | if (tEuphoriaSettings.showWireframe!=nValue) 352 | { 353 | tEuphoriaSettings.showWireframe=nValue; 354 | 355 | [self _setAsCustomSet]; 356 | } 357 | } 358 | 359 | #pragma mark - 360 | 361 | - (BOOL)RSS_collectionView:(NSCollectionView *)inCollectionView shouldSelectItemAtIndex:(NSInteger)inIndex 362 | { 363 | RSSCollectionViewItem * tCollectionViewItem=(RSSCollectionViewItem *)[_settingsCollectionView itemAtIndex:inIndex]; 364 | 365 | if (tCollectionViewItem!=nil) 366 | { 367 | NSInteger tTag=tCollectionViewItem.tag; 368 | 369 | if (tTag==RSSEuphoriaSetCustom) 370 | return NO; 371 | } 372 | 373 | return YES; 374 | } 375 | 376 | - (void)RSS_collectionViewSelectionDidChange:(NSNotification *)inNotification 377 | { 378 | if (inNotification.object==_settingsCollectionView) 379 | { 380 | NSIndexSet * tIndexSet=[_settingsCollectionView selectionIndexes]; 381 | NSUInteger tIndex=[tIndexSet firstIndex]; 382 | 383 | RSSCollectionViewItem * tCollectionViewItem=(RSSCollectionViewItem *)[_settingsCollectionView itemAtIndex:tIndex]; 384 | 385 | if (tCollectionViewItem!=nil) 386 | { 387 | NSInteger tTag=tCollectionViewItem.tag; 388 | RSSEuphoriaSettings * tEuphoriaSettings=(RSSEuphoriaSettings *) sceneSettings; 389 | 390 | if (tEuphoriaSettings.standardSet!=tTag) 391 | { 392 | tEuphoriaSettings.standardSet=tTag; 393 | 394 | if (tTag!=RSSEuphoriaSetRandom) 395 | { 396 | [tEuphoriaSettings resetSettingsToStandardSet:tTag]; 397 | 398 | [self restoreUI]; 399 | } 400 | } 401 | } 402 | } 403 | } 404 | 405 | @end 406 | -------------------------------------------------------------------------------- /Euphoria/RSSEuphoriaSettings.h: -------------------------------------------------------------------------------- 1 | 2 | #import "RSSSettings.h" 3 | 4 | typedef NS_ENUM(NSUInteger, RSSEuphoriaSet) 5 | { 6 | RSSEuphoriaSetCustom=0, 7 | RSSEuphoriaSetRandom=1, 8 | RSSEuphoriaSetRegular=1027, 9 | RSSEuphoriaSetGrid=1028, 10 | RSSEuphoriaSetCubism=1029, 11 | RSSEuphoriaSetBadMath=1030, 12 | RSSEuphoriaSetMTheory=31, 13 | RSSEuphoriaSetUHFTEM=1032, // ultra high frequency tunneling electron microscope 14 | RSSEuphoriaSetNowhere=1033, 15 | RSSEuphoriaSetEcho=1034, 16 | RSSEuphoriaSetKaleidoscope=1035 17 | }; 18 | 19 | typedef NS_ENUM(NSUInteger, RSSEuphoriaTextureType) 20 | { 21 | RSSEuphoriaTextureTypeNone=0, 22 | RSSEuphoriaTextureTypePlasma=1, 23 | RSSEuphoriaTextureTypeStringy=2, 24 | RSSEuphoriaTextureTypeLinear=3, 25 | RSSEuphoriaTextureTypeRandom=4 26 | }; 27 | 28 | @interface RSSEuphoriaSettings : RSSSettings 29 | 30 | @property RSSEuphoriaSet standardSet; 31 | 32 | 33 | @property NSUInteger numberOfWisps; 34 | 35 | @property NSUInteger numberOfBackgroundLayers; 36 | 37 | @property NSUInteger meshDensity; 38 | 39 | @property NSUInteger visibility; 40 | 41 | @property NSUInteger speed; 42 | 43 | @property NSUInteger feedback; 44 | 45 | @property NSUInteger feedbackSpeed; 46 | 47 | @property NSUInteger feedbackTextureSize; 48 | 49 | @property RSSEuphoriaTextureType texture; 50 | 51 | @property BOOL showWireframe; 52 | 53 | 54 | - (void)resetSettingsToStandardSet:(RSSEuphoriaSet)inSet; 55 | 56 | @end 57 | -------------------------------------------------------------------------------- /Euphoria/RSSEuphoriaSettings.m: -------------------------------------------------------------------------------- 1 | #import "RSSEuphoriaSettings.h" 2 | 3 | NSString * const RSSEuphoria_Settings_StandardSetKey=@"Standard set"; 4 | NSString * const RSSEuphoria_Settings_WispsCountKey=@"Wisps count"; 5 | NSString * const RSSEuphoria_Settings_BackgroundLayersCountKey=@"Background count"; 6 | NSString * const RSSEuphoria_Settings_MeshDensityKey=@"Density"; 7 | NSString * const RSSEuphoria_Settings_VisibilityKey=@"Visibility"; 8 | NSString * const RSSEuphoria_Settings_SpeedKey=@"Speed"; 9 | NSString * const RSSEuphoria_Settings_FeedbackKey=@"Feedback"; 10 | NSString * const RSSEuphoria_Settings_FeedbackSpeedKey=@"Feedback speed"; 11 | NSString * const RSSEuphoria_Settings_FeedbackTextureSizeKey=@"Feedback size"; 12 | NSString * const RSSEuphoria_Settings_TextureKey=@"Texture"; 13 | NSString * const RSSEuphoria_Settings_ShowWireframeKey=@"Wireframe"; 14 | 15 | @implementation RSSEuphoriaSettings 16 | 17 | - (id)initWithDictionaryRepresentation:(NSDictionary *)inDictionary 18 | { 19 | self=[super init]; 20 | 21 | if (self!=nil) 22 | { 23 | NSNumber * tNumber=inDictionary[RSSEuphoria_Settings_StandardSetKey]; 24 | 25 | if (tNumber==nil) 26 | _standardSet=RSSEuphoriaSetRegular; 27 | else 28 | _standardSet=[tNumber unsignedIntegerValue]; 29 | 30 | if (_standardSet==RSSEuphoriaSetCustom) 31 | { 32 | _numberOfWisps=[inDictionary[RSSEuphoria_Settings_WispsCountKey] unsignedIntegerValue]; 33 | _numberOfBackgroundLayers=[inDictionary[RSSEuphoria_Settings_BackgroundLayersCountKey] unsignedIntegerValue]; 34 | _meshDensity=[inDictionary[RSSEuphoria_Settings_MeshDensityKey] unsignedIntegerValue]; 35 | _visibility=[inDictionary[RSSEuphoria_Settings_VisibilityKey] unsignedIntegerValue]; 36 | _speed=[inDictionary[RSSEuphoria_Settings_SpeedKey] unsignedIntegerValue]; 37 | _feedback=[inDictionary[RSSEuphoria_Settings_FeedbackKey] unsignedIntegerValue]; 38 | _feedbackSpeed=[inDictionary[RSSEuphoria_Settings_FeedbackSpeedKey] unsignedIntegerValue]; 39 | _feedbackTextureSize=[inDictionary[RSSEuphoria_Settings_FeedbackTextureSizeKey] unsignedIntegerValue]; 40 | _texture=[inDictionary[RSSEuphoria_Settings_TextureKey] unsignedIntegerValue]; 41 | _showWireframe=[inDictionary[RSSEuphoria_Settings_ShowWireframeKey] boolValue]; 42 | } 43 | else if (_standardSet!=RSSEuphoriaSetRandom) 44 | { 45 | [self resetSettingsToStandardSet:_standardSet]; 46 | } 47 | } 48 | 49 | return self; 50 | } 51 | 52 | - (NSDictionary *)dictionaryRepresentation 53 | { 54 | NSMutableDictionary * tMutableDictionary=[NSMutableDictionary dictionary]; 55 | 56 | if (tMutableDictionary!=nil) 57 | { 58 | tMutableDictionary[RSSEuphoria_Settings_StandardSetKey]=@(_standardSet); 59 | 60 | tMutableDictionary[RSSEuphoria_Settings_WispsCountKey]=@(_numberOfWisps); 61 | tMutableDictionary[RSSEuphoria_Settings_BackgroundLayersCountKey]=@(_numberOfBackgroundLayers); 62 | tMutableDictionary[RSSEuphoria_Settings_MeshDensityKey]=@(_meshDensity); 63 | tMutableDictionary[RSSEuphoria_Settings_VisibilityKey]=@(_visibility); 64 | tMutableDictionary[RSSEuphoria_Settings_SpeedKey]=@(_speed); 65 | tMutableDictionary[RSSEuphoria_Settings_FeedbackKey]=@(_feedback); 66 | tMutableDictionary[RSSEuphoria_Settings_FeedbackSpeedKey]=@(_feedbackSpeed); 67 | tMutableDictionary[RSSEuphoria_Settings_FeedbackTextureSizeKey]=@(_feedbackTextureSize); 68 | tMutableDictionary[RSSEuphoria_Settings_TextureKey]=@(_texture); 69 | tMutableDictionary[RSSEuphoria_Settings_ShowWireframeKey]=@(_showWireframe); 70 | } 71 | 72 | return [tMutableDictionary copy]; 73 | } 74 | 75 | #pragma mark - 76 | 77 | - (void)resetSettings 78 | { 79 | _standardSet=RSSEuphoriaSetRegular; 80 | 81 | [self resetSettingsToStandardSet:_standardSet]; 82 | } 83 | 84 | - (void)resetSettingsToStandardSet:(RSSEuphoriaSet)inSet; 85 | { 86 | switch(inSet) 87 | { 88 | case RSSEuphoriaSetRegular: 89 | 90 | _numberOfWisps=5; 91 | _numberOfBackgroundLayers=0; 92 | _meshDensity=25; 93 | _visibility=35; 94 | _speed=15; 95 | 96 | _feedback=0; 97 | _feedbackSpeed=1; 98 | _feedbackTextureSize=8; 99 | _texture=RSSEuphoriaTextureTypeStringy; 100 | 101 | _showWireframe=NO; 102 | 103 | break; 104 | 105 | case RSSEuphoriaSetGrid: 106 | 107 | _numberOfWisps=4; 108 | _numberOfBackgroundLayers=1; 109 | _meshDensity=25; 110 | _visibility=70; 111 | _speed=15; 112 | 113 | _feedback=0; 114 | _feedbackSpeed=1; 115 | _feedbackTextureSize=8; 116 | _texture=RSSEuphoriaTextureTypeNone; 117 | 118 | _showWireframe=YES; 119 | 120 | break; 121 | 122 | case RSSEuphoriaSetCubism: 123 | 124 | _numberOfWisps=15; 125 | _numberOfBackgroundLayers=0; 126 | _meshDensity=4; 127 | _visibility=15; 128 | _speed=10; 129 | 130 | _feedback=0; 131 | _feedbackSpeed=1; 132 | _feedbackTextureSize=8; 133 | _texture=RSSEuphoriaTextureTypeNone; 134 | 135 | _showWireframe=NO; 136 | 137 | break; 138 | 139 | case RSSEuphoriaSetBadMath: 140 | 141 | _numberOfWisps=2; 142 | _numberOfBackgroundLayers=2; 143 | _meshDensity=20; 144 | _visibility=40; 145 | _speed=30; 146 | 147 | _feedback=40; 148 | _feedbackSpeed=5; 149 | _feedbackTextureSize=8; 150 | _texture=RSSEuphoriaTextureTypeStringy; 151 | 152 | _showWireframe=YES; 153 | 154 | break; 155 | 156 | case RSSEuphoriaSetMTheory: 157 | 158 | _numberOfWisps=3; 159 | _numberOfBackgroundLayers=0; 160 | _meshDensity=25; 161 | _visibility=15; 162 | _speed=20; 163 | 164 | _feedback=40; 165 | _feedbackSpeed=20; 166 | _feedbackTextureSize=8; 167 | _texture=RSSEuphoriaTextureTypeNone; 168 | 169 | _showWireframe=NO; 170 | 171 | break; 172 | 173 | case RSSEuphoriaSetUHFTEM: 174 | 175 | _numberOfWisps=0; 176 | _numberOfBackgroundLayers=3; 177 | _meshDensity=35; 178 | _visibility=5; 179 | _speed=50; 180 | 181 | _feedback=0; 182 | _feedbackSpeed=1; 183 | _feedbackTextureSize=8; 184 | _texture=RSSEuphoriaTextureTypeNone; 185 | 186 | _showWireframe=NO; 187 | 188 | break; 189 | 190 | case RSSEuphoriaSetNowhere: 191 | 192 | _numberOfWisps=0; 193 | _numberOfBackgroundLayers=3; 194 | _meshDensity=30; 195 | _visibility=40; 196 | _speed=20; 197 | 198 | _feedback=80; 199 | _feedbackSpeed=10; 200 | _feedbackTextureSize=8; 201 | _texture=RSSEuphoriaTextureTypeLinear; 202 | 203 | _showWireframe=YES; 204 | 205 | break; 206 | 207 | case RSSEuphoriaSetEcho: 208 | 209 | _numberOfWisps=3; 210 | _numberOfBackgroundLayers=0; 211 | _meshDensity=25; 212 | _visibility=30; 213 | _speed=20; 214 | 215 | _feedback=85; 216 | _feedbackSpeed=30; 217 | _feedbackTextureSize=8; 218 | _texture=RSSEuphoriaTextureTypePlasma; 219 | 220 | _showWireframe=NO; 221 | 222 | break; 223 | 224 | case RSSEuphoriaSetKaleidoscope: 225 | 226 | _numberOfWisps=3; 227 | _numberOfBackgroundLayers=0; 228 | _meshDensity=25; 229 | _visibility=40; 230 | _speed=15; 231 | 232 | _feedback=90; 233 | _feedbackSpeed=3; 234 | _feedbackTextureSize=8; 235 | _texture=RSSEuphoriaTextureTypeNone; 236 | 237 | _showWireframe=NO; 238 | 239 | break; 240 | 241 | default: 242 | 243 | NSLog(@"This should not be invoked for set: %u",(unsigned int)inSet); 244 | 245 | break; 246 | } 247 | } 248 | 249 | @end 250 | 251 | -------------------------------------------------------------------------------- /Euphoria/RSSEuphoriaView.h: -------------------------------------------------------------------------------- 1 | 2 | #import 3 | 4 | @interface RSSEuphoriaView : ScreenSaverView 5 | 6 | @end 7 | -------------------------------------------------------------------------------- /Euphoria/RSSEuphoriaView.mm: -------------------------------------------------------------------------------- 1 | 2 | #import "RSSEuphoriaView.h" 3 | 4 | #import "RSSEuphoriaConfigurationWindowController.h" 5 | 6 | #import "RSSUserDefaults+Constants.h" 7 | 8 | #import "RSSEuphoriaSettings.h" 9 | 10 | #include "Euphoria.h" 11 | 12 | #import 13 | 14 | @interface RSSEuphoriaView () 15 | { 16 | BOOL _preview; 17 | BOOL _mainScreen; 18 | 19 | BOOL _OpenGLIncompatibilityDetected; 20 | 21 | NSOpenGLView *_openGLView; 22 | 23 | scene *_scene; 24 | 25 | // Preferences 26 | 27 | RSSEuphoriaConfigurationWindowController *_configurationWindowController; 28 | } 29 | 30 | + (void)_initializeScene:(scene *)inScene withSettings:(RSSEuphoriaSettings *)inSettings; 31 | 32 | @end 33 | 34 | @implementation RSSEuphoriaView 35 | 36 | + (void)_initializeScene:(scene *)inScene withSettings:(RSSEuphoriaSettings *)inSettings 37 | { 38 | if (inSettings.standardSet==RSSEuphoriaSetRandom) 39 | { 40 | NSUInteger tRandomSet; 41 | 42 | tRandomSet=(NSUInteger) SSRandomFloatBetween(RSSEuphoriaSetRegular,RSSEuphoriaSetKaleidoscope); 43 | 44 | [inSettings resetSettingsToStandardSet:(RSSEuphoriaSet) tRandomSet]; 45 | } 46 | 47 | inScene->wispsCount=(int)inSettings.numberOfWisps; 48 | inScene->backgroundLayersCount=(int)inSettings.numberOfBackgroundLayers; 49 | inScene->backgroundLayersCount=(int)inSettings.numberOfBackgroundLayers; 50 | inScene->meshDensity=(int)inSettings.meshDensity; 51 | inScene->visibility=(int)inSettings.visibility; 52 | inScene->speed=(int)inSettings.speed; 53 | inScene->feedback=(int)inSettings.feedback; 54 | inScene->feedbackspeed=(int)inSettings.feedbackSpeed; 55 | inScene->feedbacksize=(int)inSettings.feedbackTextureSize; 56 | inScene->textureType=(int)inSettings.texture; 57 | inScene->wireframe=(bool)inSettings.showWireframe; 58 | } 59 | 60 | - (instancetype)initWithFrame:(NSRect)frameRect isPreview:(BOOL)isPreview 61 | { 62 | self=[super initWithFrame:frameRect isPreview:isPreview]; 63 | 64 | if (self!=nil) 65 | { 66 | _preview=isPreview; 67 | 68 | if (_preview==YES) 69 | _mainScreen=YES; 70 | else 71 | _mainScreen= (NSMinX(frameRect)==0 && NSMinY(frameRect)==0); 72 | 73 | [self setAnimationTimeInterval:0.05]; 74 | } 75 | 76 | return self; 77 | } 78 | 79 | - (void)dealloc 80 | { 81 | if (_scene!=NULL) 82 | { 83 | delete _scene; 84 | _scene=NULL; 85 | } 86 | } 87 | 88 | #pragma mark - 89 | 90 | - (void) setFrameSize:(NSSize)newSize 91 | { 92 | [super setFrameSize:newSize]; 93 | 94 | if (_openGLView!=nil) 95 | [_openGLView setFrameSize:newSize]; 96 | } 97 | 98 | #pragma mark - 99 | 100 | - (void) drawRect:(NSRect) inFrame 101 | { 102 | [[NSColor blackColor] set]; 103 | 104 | NSRectFill(inFrame); 105 | 106 | if (_OpenGLIncompatibilityDetected==YES) 107 | { 108 | BOOL tShowErrorMessage=_mainScreen; 109 | 110 | if (tShowErrorMessage==NO) 111 | { 112 | NSString *tIdentifier = [[NSBundle bundleForClass:[self class]] bundleIdentifier]; 113 | ScreenSaverDefaults *tDefaults = [ScreenSaverDefaults defaultsForModuleWithName:tIdentifier]; 114 | 115 | tShowErrorMessage=![tDefaults boolForKey:RSSUserDefaultsMainDisplayOnly]; 116 | } 117 | 118 | if (tShowErrorMessage==YES) 119 | { 120 | NSRect tFrame=self.frame; 121 | 122 | NSMutableParagraphStyle * tMutableParagraphStyle=[[NSParagraphStyle defaultParagraphStyle] mutableCopy]; 123 | [tMutableParagraphStyle setAlignment:NSCenterTextAlignment]; 124 | 125 | NSDictionary * tAttributes = @{NSFontAttributeName:[NSFont systemFontOfSize:[NSFont systemFontSize]], 126 | NSForegroundColorAttributeName:[NSColor whiteColor], 127 | NSParagraphStyleAttributeName:tMutableParagraphStyle}; 128 | 129 | 130 | NSString * tString=NSLocalizedStringFromTableInBundle(@"Minimum OpenGL requirements\rfor this Screen Effect\rnot available\ron your graphic card.",@"Localizable",[NSBundle bundleForClass:[self class]],@"No comment"); 131 | 132 | NSRect tStringFrame; 133 | 134 | tStringFrame.origin=NSZeroPoint; 135 | tStringFrame.size=[tString sizeWithAttributes:tAttributes]; 136 | 137 | tStringFrame=SSCenteredRectInRect(tStringFrame,tFrame); 138 | 139 | [tString drawInRect:tStringFrame withAttributes:tAttributes]; 140 | } 141 | } 142 | } 143 | 144 | #pragma mark - 145 | 146 | - (void)startAnimation 147 | { 148 | _OpenGLIncompatibilityDetected=NO; 149 | 150 | [super startAnimation]; 151 | 152 | NSString *tIdentifier = [[NSBundle bundleForClass:[self class]] bundleIdentifier]; 153 | ScreenSaverDefaults *tDefaults = [ScreenSaverDefaults defaultsForModuleWithName:tIdentifier]; 154 | 155 | BOOL tBool=[tDefaults boolForKey:RSSUserDefaultsMainDisplayOnly]; 156 | 157 | if (tBool==YES && _mainScreen==NO) 158 | return; 159 | 160 | // Add OpenGLView 161 | 162 | NSOpenGLPixelFormatAttribute attribs[] = 163 | { 164 | NSOpenGLPFADoubleBuffer, 165 | NSOpenGLPFADepthSize,(NSOpenGLPixelFormatAttribute)16, 166 | NSOpenGLPFAMinimumPolicy, 167 | (NSOpenGLPixelFormatAttribute)0 168 | }; 169 | 170 | NSOpenGLPixelFormat *tFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:attribs]; 171 | 172 | if (tFormat==nil) 173 | { 174 | _OpenGLIncompatibilityDetected=YES; 175 | return; 176 | } 177 | 178 | if (_openGLView!=nil) 179 | { 180 | [_openGLView removeFromSuperview]; 181 | _openGLView=nil; 182 | } 183 | 184 | _openGLView = [[NSOpenGLView alloc] initWithFrame:self.bounds pixelFormat:tFormat]; 185 | 186 | if (_openGLView!=nil) 187 | { 188 | [_openGLView setWantsBestResolutionOpenGLSurface:YES]; 189 | 190 | [self addSubview:_openGLView]; 191 | } 192 | else 193 | { 194 | _OpenGLIncompatibilityDetected=YES; 195 | return; 196 | } 197 | 198 | [[_openGLView openGLContext] makeCurrentContext]; 199 | 200 | NSRect tPixelBounds=[_openGLView convertRectToBacking:_openGLView.bounds]; 201 | NSSize tSize=tPixelBounds.size; 202 | 203 | _scene=new scene(); 204 | 205 | if (_scene!=NULL) 206 | { 207 | [RSSEuphoriaView _initializeScene:_scene 208 | withSettings:[[RSSEuphoriaSettings alloc] initWithDictionaryRepresentation:[tDefaults dictionaryRepresentation]]]; 209 | 210 | _scene->resize((int)tSize.width, (int)tSize.height); 211 | _scene->create(); 212 | } 213 | 214 | const GLint tSwapInterval=1; 215 | CGLSetParameter(CGLGetCurrentContext(), kCGLCPSwapInterval,&tSwapInterval); 216 | } 217 | 218 | - (void)stopAnimation 219 | { 220 | [super stopAnimation]; 221 | 222 | if (_scene!=NULL) 223 | { 224 | delete _scene; 225 | _scene=NULL; 226 | } 227 | } 228 | 229 | - (void)animateOneFrame 230 | { 231 | if (_openGLView!=nil) 232 | { 233 | [[_openGLView openGLContext] makeCurrentContext]; 234 | 235 | if (_scene!=NULL) 236 | _scene->draw(); 237 | 238 | [[_openGLView openGLContext] flushBuffer]; 239 | } 240 | } 241 | 242 | #pragma mark - Configuration 243 | 244 | - (BOOL)hasConfigureSheet 245 | { 246 | return YES; 247 | } 248 | 249 | - (NSWindow*)configureSheet 250 | { 251 | if (_configurationWindowController==nil) 252 | _configurationWindowController=[[RSSEuphoriaConfigurationWindowController alloc] init]; 253 | 254 | NSWindow * tWindow=_configurationWindowController.window; 255 | 256 | [_configurationWindowController restoreUI]; 257 | 258 | return tWindow; 259 | } 260 | 261 | @end 262 | -------------------------------------------------------------------------------- /Euphoria/de.lproj/Localized.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/packagesdev/euphoria/5f9dcd0036c5df8f361ab31db4cd8e9749e9a8f7/Euphoria/de.lproj/Localized.strings -------------------------------------------------------------------------------- /Euphoria/en.lproj/Localized.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/packagesdev/euphoria/5f9dcd0036c5df8f361ab31db4cd8e9749e9a8f7/Euphoria/en.lproj/Localized.strings -------------------------------------------------------------------------------- /Euphoria/es.lproj/Localized.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/packagesdev/euphoria/5f9dcd0036c5df8f361ab31db4cd8e9749e9a8f7/Euphoria/es.lproj/Localized.strings -------------------------------------------------------------------------------- /Euphoria/es.lproj/RSSEuphoriaConfigurationWindowController.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 74 | 75 | 76 | 77 | 78 | 79 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 109 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | 395 | 396 | 397 | 398 | 399 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | 426 | 427 | 428 | 429 | -------------------------------------------------------------------------------- /Euphoria/fr.lproj/Localized.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/packagesdev/euphoria/5f9dcd0036c5df8f361ab31db4cd8e9749e9a8f7/Euphoria/fr.lproj/Localized.strings -------------------------------------------------------------------------------- /Euphoria/fr.lproj/RSSEuphoriaConfigurationWindowController.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 74 | 75 | 76 | 77 | 78 | 79 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 109 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | 395 | 396 | 397 | 398 | 399 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | 426 | 427 | 428 | 429 | -------------------------------------------------------------------------------- /Euphoria/images/badmath_thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/packagesdev/euphoria/5f9dcd0036c5df8f361ab31db4cd8e9749e9a8f7/Euphoria/images/badmath_thumbnail.png -------------------------------------------------------------------------------- /Euphoria/images/badmath_thumbnail@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/packagesdev/euphoria/5f9dcd0036c5df8f361ab31db4cd8e9749e9a8f7/Euphoria/images/badmath_thumbnail@2x.png -------------------------------------------------------------------------------- /Euphoria/images/cubism_thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/packagesdev/euphoria/5f9dcd0036c5df8f361ab31db4cd8e9749e9a8f7/Euphoria/images/cubism_thumbnail.png -------------------------------------------------------------------------------- /Euphoria/images/cubism_thumbnail@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/packagesdev/euphoria/5f9dcd0036c5df8f361ab31db4cd8e9749e9a8f7/Euphoria/images/cubism_thumbnail@2x.png -------------------------------------------------------------------------------- /Euphoria/images/echo_thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/packagesdev/euphoria/5f9dcd0036c5df8f361ab31db4cd8e9749e9a8f7/Euphoria/images/echo_thumbnail.png -------------------------------------------------------------------------------- /Euphoria/images/echo_thumbnail@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/packagesdev/euphoria/5f9dcd0036c5df8f361ab31db4cd8e9749e9a8f7/Euphoria/images/echo_thumbnail@2x.png -------------------------------------------------------------------------------- /Euphoria/images/grid_thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/packagesdev/euphoria/5f9dcd0036c5df8f361ab31db4cd8e9749e9a8f7/Euphoria/images/grid_thumbnail.png -------------------------------------------------------------------------------- /Euphoria/images/grid_thumbnail@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/packagesdev/euphoria/5f9dcd0036c5df8f361ab31db4cd8e9749e9a8f7/Euphoria/images/grid_thumbnail@2x.png -------------------------------------------------------------------------------- /Euphoria/images/kaleidoscope_thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/packagesdev/euphoria/5f9dcd0036c5df8f361ab31db4cd8e9749e9a8f7/Euphoria/images/kaleidoscope_thumbnail.png -------------------------------------------------------------------------------- /Euphoria/images/kaleidoscope_thumbnail@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/packagesdev/euphoria/5f9dcd0036c5df8f361ab31db4cd8e9749e9a8f7/Euphoria/images/kaleidoscope_thumbnail@2x.png -------------------------------------------------------------------------------- /Euphoria/images/mtheory_thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/packagesdev/euphoria/5f9dcd0036c5df8f361ab31db4cd8e9749e9a8f7/Euphoria/images/mtheory_thumbnail.png -------------------------------------------------------------------------------- /Euphoria/images/mtheory_thumbnail@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/packagesdev/euphoria/5f9dcd0036c5df8f361ab31db4cd8e9749e9a8f7/Euphoria/images/mtheory_thumbnail@2x.png -------------------------------------------------------------------------------- /Euphoria/images/nowhere_thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/packagesdev/euphoria/5f9dcd0036c5df8f361ab31db4cd8e9749e9a8f7/Euphoria/images/nowhere_thumbnail.png -------------------------------------------------------------------------------- /Euphoria/images/nowhere_thumbnail@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/packagesdev/euphoria/5f9dcd0036c5df8f361ab31db4cd8e9749e9a8f7/Euphoria/images/nowhere_thumbnail@2x.png -------------------------------------------------------------------------------- /Euphoria/images/regular_thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/packagesdev/euphoria/5f9dcd0036c5df8f361ab31db4cd8e9749e9a8f7/Euphoria/images/regular_thumbnail.png -------------------------------------------------------------------------------- /Euphoria/images/regular_thumbnail@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/packagesdev/euphoria/5f9dcd0036c5df8f361ab31db4cd8e9749e9a8f7/Euphoria/images/regular_thumbnail@2x.png -------------------------------------------------------------------------------- /Euphoria/images/thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/packagesdev/euphoria/5f9dcd0036c5df8f361ab31db4cd8e9749e9a8f7/Euphoria/images/thumbnail.png -------------------------------------------------------------------------------- /Euphoria/images/thumbnail@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/packagesdev/euphoria/5f9dcd0036c5df8f361ab31db4cd8e9749e9a8f7/Euphoria/images/thumbnail@2x.png -------------------------------------------------------------------------------- /Euphoria/images/uhftem_thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/packagesdev/euphoria/5f9dcd0036c5df8f361ab31db4cd8e9749e9a8f7/Euphoria/images/uhftem_thumbnail.png -------------------------------------------------------------------------------- /Euphoria/images/uhftem_thumbnail@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/packagesdev/euphoria/5f9dcd0036c5df8f361ab31db4cd8e9749e9a8f7/Euphoria/images/uhftem_thumbnail@2x.png -------------------------------------------------------------------------------- /Euphoria/it.lproj/Localized.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/packagesdev/euphoria/5f9dcd0036c5df8f361ab31db4cd8e9749e9a8f7/Euphoria/it.lproj/Localized.strings -------------------------------------------------------------------------------- /Euphoria/it.lproj/RSSEuphoriaConfigurationWindowController.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 74 | 75 | 76 | 77 | 78 | 79 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 109 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | 395 | 396 | 397 | 398 | 399 | 400 | 401 | 402 | 403 | 404 | 405 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | 426 | 427 | 428 | 429 | -------------------------------------------------------------------------------- /Euphoria/ja.lproj/Localized.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/packagesdev/euphoria/5f9dcd0036c5df8f361ab31db4cd8e9749e9a8f7/Euphoria/ja.lproj/Localized.strings -------------------------------------------------------------------------------- /Euphoria/sv.lproj/Localized.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/packagesdev/euphoria/5f9dcd0036c5df8f361ab31db4cd8e9749e9a8f7/Euphoria/sv.lproj/Localized.strings -------------------------------------------------------------------------------- /Euphoria/sv.lproj/RSSEuphoriaConfigurationWindowController.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 74 | 75 | 76 | 77 | 78 | 79 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 109 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | 395 | 396 | 397 | 398 | 399 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | 426 | 427 | 428 | 429 | --------------------------------------------------------------------------------