Page Menu
Home
Search
Configure Global Search
Log In
Files
F12188
CocoaProgressBar02.patch
Public
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Authored By
Matt Ebb (broken)
Nov 13 2013, 2:31 PM
Size
9 KB
Subscribers
None
CocoaProgressBar02.patch
View Options
Index: intern/ghost/GHOST_C-api.h
===================================================================
--- intern/ghost/GHOST_C-api.h (revision 29115)
+++ intern/ghost/GHOST_C-api.h (working copy)
@@ -264,7 +264,24 @@
extern GHOST_TSuccess GHOST_AddEventConsumer(GHOST_SystemHandle systemhandle,
GHOST_EventConsumerHandle consumerhandle);
+/***************************************************************************************
+ ** Progress bar functionality
+ ***************************************************************************************/
+/**
+ * Sets the progress bar value displayed in the window/application icon
+ * @param windowhandle The handle to the window
+ * @param progress The progress % (0.0 to 1.0)
+ */
+extern GHOST_TSuccess GHOST_SetProgressBar(GHOST_WindowHandle windowhandle, float progress);
+
+/**
+ * Hides the progress bar in the icon
+ * @param windowhandle The handle to the window
+ */
+extern GHOST_TSuccess GHOST_EndProgressBar(GHOST_WindowHandle windowhandle);
+
+
/***************************************************************************************
** N-degree of freedom device management functionality
***************************************************************************************/
Index: intern/ghost/intern/GHOST_WindowCocoa.mm
===================================================================
--- intern/ghost/intern/GHOST_WindowCocoa.mm (revision 29115)
+++ intern/ghost/intern/GHOST_WindowCocoa.mm (working copy)
@@ -1020,6 +1020,61 @@
return GHOST_kSuccess;
}
+#pragma mark Progress bar
+
+GHOST_TSuccess GHOST_WindowCocoa::setProgressBar(float progress)
+{
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+
+ if ((progress >=0.0) && (progress <=1.0)) {
+ NSImage* dockIcon = [[NSImage alloc] initWithSize:NSMakeSize(128,128)];
+
+ [dockIcon lockFocus];
+ NSRect progressBox = {{4, 4}, {120, 16}};
+
+ [[NSImage imageNamed:@"NSApplicationIcon"] dissolveToPoint:NSZeroPoint fraction:1.0];
+
+ // Track & Outline
+ [[NSColor blackColor] setFill];
+ NSRectFill(progressBox);
+
+ [[NSColor whiteColor] set];
+ NSFrameRect(progressBox);
+
+ // Progress fill
+ progressBox = NSInsetRect(progressBox, 1, 1);
+ [[NSColor knobColor] setFill];
+ progressBox.size.width = progressBox.size.width * progress;
+ NSRectFill(progressBox);
+
+ [dockIcon unlockFocus];
+
+ [NSApp setApplicationIconImage:dockIcon];
+ [dockIcon release];
+ }
+
+ [pool drain];
+ return GHOST_kSuccess;
+}
+
+
+GHOST_TSuccess GHOST_WindowCocoa::endProgressBar()
+{
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+
+ NSImage* dockIcon = [[NSImage alloc] initWithSize:NSMakeSize(128,128)];
+ [dockIcon lockFocus];
+ [[NSImage imageNamed:@"NSApplicationIcon"] dissolveToPoint:NSZeroPoint fraction:1.0];
+ [dockIcon unlockFocus];
+ [NSApp setApplicationIconImage:dockIcon];
+ [dockIcon release];
+
+ [pool drain];
+ return GHOST_kSuccess;
+}
+
+
+
#pragma mark Cursor handling
void GHOST_WindowCocoa::loadCursor(bool visible, GHOST_TStandardCursor cursor) const
Index: intern/ghost/intern/GHOST_WindowCocoa.h
===================================================================
--- intern/ghost/intern/GHOST_WindowCocoa.h (revision 29115)
+++ intern/ghost/intern/GHOST_WindowCocoa.h (working copy)
@@ -226,6 +226,17 @@
GHOST_TabletData& GetCocoaTabletData()
{ return m_tablet; }
+
+ /**
+ * Sets the progress bar value displayed in the window/application icon
+ * @param progress The progress % (0.0 to 1.0)
+ */
+ virtual GHOST_TSuccess setProgressBar(float progress);
+
+ /**
+ * Hides the progress bar icon
+ */
+ virtual GHOST_TSuccess endProgressBar();
protected:
/**
* Tries to install a rendering context in this window.
@@ -291,14 +302,6 @@
NSCursor* m_customCursor;
GHOST_TabletData m_tablet;
-
- /**
- * The width/height of the size rectangle in the lower right corner of a
- * Mac/Carbon window. This is also the height of the gutter area.
- */
-#ifdef GHOST_DRAW_CARBON_GUTTER
- static const GHOST_TInt32 s_sizeRectSize;
-#endif // GHOST_DRAW_CARBON_GUTTER
};
#endif // _GHOST_WINDOW_COCOA_H_
Index: intern/ghost/intern/GHOST_C-api.cpp
===================================================================
--- intern/ghost/intern/GHOST_C-api.cpp (revision 29115)
+++ intern/ghost/intern/GHOST_C-api.cpp (working copy)
@@ -248,6 +248,21 @@
return system->addEventConsumer((GHOST_CallbackEventConsumer*)consumerhandle);
}
+GHOST_TSuccess GHOST_SetProgressBar(GHOST_WindowHandle windowhandle,float progress)
+{
+ GHOST_IWindow* window = (GHOST_IWindow*) windowhandle;
+
+ return window->setProgressBar(progress);
+}
+
+GHOST_TSuccess GHOST_EndProgressBar(GHOST_WindowHandle windowhandle)
+{
+ GHOST_IWindow* window = (GHOST_IWindow*) windowhandle;
+
+ return window->endProgressBar();
+}
+
+
int GHOST_OpenNDOF(GHOST_SystemHandle systemhandle, GHOST_WindowHandle windowhandle,
GHOST_NDOFLibraryInit_fp setNdofLibraryInit,
GHOST_NDOFLibraryShutdown_fp setNdofLibraryShutdown,
Index: intern/ghost/intern/GHOST_Window.h
===================================================================
--- intern/ghost/intern/GHOST_Window.h (revision 29115)
+++ intern/ghost/intern/GHOST_Window.h (working copy)
@@ -192,6 +192,17 @@
virtual GHOST_TSuccess getCursorGrabBounds(GHOST_Rect& bounds);
/**
+ * Sets the progress bar value displayed in the window/application icon
+ * @param progress The progress % (0.0 to 1.0)
+ */
+ virtual GHOST_TSuccess setProgressBar(float progress) {return GHOST_kFailure;};
+
+ /**
+ * Hides the progress bar in the icon
+ */
+ virtual GHOST_TSuccess endProgressBar() {return GHOST_kFailure;};
+
+ /**
* Tells if the ongoing drag'n'drop object can be accepted upon mouse drop
*/
virtual void setAcceptDragOperation(bool canAccept);
Index: intern/ghost/GHOST_IWindow.h
===================================================================
--- intern/ghost/GHOST_IWindow.h (revision 29115)
+++ intern/ghost/GHOST_IWindow.h (working copy)
@@ -235,6 +235,21 @@
virtual const GHOST_TabletData* GetTabletData() = 0;
/***************************************************************************************
+ ** Progress bar functionality
+ ***************************************************************************************/
+
+ /**
+ * Sets the progress bar value displayed in the window/application icon
+ * @param progress The progress %
+ */
+ virtual GHOST_TSuccess setProgressBar(float progress) = 0;
+
+ /**
+ * Hides the progress bar in the icon
+ */
+ virtual GHOST_TSuccess endProgressBar() = 0;
+
+ /***************************************************************************************
** Cursor management functionality
***************************************************************************************/
Index: source/blender/windowmanager/intern/wm_jobs.c
===================================================================
--- source/blender/windowmanager/intern/wm_jobs.c (revision 29115)
+++ source/blender/windowmanager/intern/wm_jobs.c (working copy)
@@ -381,7 +381,10 @@
void wm_jobs_timer(const bContext *C, wmWindowManager *wm, wmTimer *wt)
{
wmJob *steve= wm->jobs.first, *stevenext;
+ float total_progress= 0.f;
+ float jobs_progress=0;
+
for(; steve; steve= stevenext) {
stevenext= steve->next;
@@ -397,8 +400,15 @@
if(steve->note)
WM_event_add_notifier(C, steve->note, NULL);
- if (steve->flag & WM_JOB_PROGRESS)
+ if (steve->flag & WM_JOB_PROGRESS) {
WM_event_add_notifier(C, NC_WM|ND_JOB, NULL);
+
+ /* accumulate globabl progress for running jobs */
+ if (!steve->ready) {
+ jobs_progress++;
+ total_progress += steve->progress;
+ }
+ }
steve->do_update= 0;
}
@@ -441,5 +451,13 @@
}
}
}
+
+ /* if there are running jobs, set the global progress indicator */
+ if (jobs_progress > 0) {
+ float progress = total_progress / (float)jobs_progress;
+ WM_progress_set(wm->winactive, progress);
+ } else {
+ WM_progress_clear(wm->winactive);
+ }
}
Index: source/blender/windowmanager/intern/wm_window.c
===================================================================
--- source/blender/windowmanager/intern/wm_window.c (revision 29115)
+++ source/blender/windowmanager/intern/wm_window.c (working copy)
@@ -1018,6 +1018,18 @@
#endif
}
+/* ******************* progress bar **************** */
+
+void WM_progress_set(wmWindow *win, float progress)
+{
+ GHOST_SetProgressBar(win->ghostwin, progress);
+}
+
+void WM_progress_clear(wmWindow *win)
+{
+ GHOST_EndProgressBar(win->ghostwin);
+}
+
/* ************************************ */
void wm_window_get_position(wmWindow *win, int *posx_r, int *posy_r)
Index: source/blender/windowmanager/WM_api.h
===================================================================
--- source/blender/windowmanager/WM_api.h (revision 29115)
+++ source/blender/windowmanager/WM_api.h (working copy)
@@ -324,5 +324,9 @@
char *WM_clipboard_text_get(int selection);
void WM_clipboard_text_set(char *buf, int selection);
+ /* progress */
+void WM_progress_set(struct wmWindow *win, float progress);
+void WM_progress_clear(struct wmWindow *win);
+
#endif /* WM_API_H */
File Metadata
Details
Mime Type
text/x-diff
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
be/05/d1b5befcb60b32a692e829da4d1d
Event Timeline
Log In to Comment