mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-08 07:45:00 +01:00
extend cocoa drawing test
Test app now draws 500 "meters" at random levels @ 50Hz.
This commit is contained in:
parent
d588b86e54
commit
bb19a59315
3 changed files with 55 additions and 28 deletions
|
|
@ -1,17 +1,38 @@
|
||||||
/* -*- c++ -*- */
|
/* -*- c++ -*- */
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
#include <AppKit/AppKit.h>
|
#include <AppKit/AppKit.h>
|
||||||
|
|
||||||
|
#include "meter.h"
|
||||||
#include "view.h"
|
#include "view.h"
|
||||||
|
|
||||||
|
std::vector<Meter*> meters;
|
||||||
|
|
||||||
|
void
|
||||||
|
layout (NSView* view)
|
||||||
|
{
|
||||||
|
double width = 10;
|
||||||
|
double height = 50;
|
||||||
|
double padding = 5;
|
||||||
|
|
||||||
|
for (int line = 0; line < 6; ++line) {
|
||||||
|
for (int n = 0; n < 100; ++n) {
|
||||||
|
double r = (random() % 255) / 256.;
|
||||||
|
double g = (random() % 255) / 256.;
|
||||||
|
double b = (random() % 255) / 256.;
|
||||||
|
meters.push_back (new Meter (view, n * (width + padding), line * (height + padding), width, height, r, g, b, 1.0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
main (int argc, char* argv[])
|
main (int argc, char* argv[])
|
||||||
{
|
{
|
||||||
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
||||||
|
|
||||||
NSRect rect = NSMakeRect (100, 100, 500, 500);
|
NSRect rect = NSMakeRect (100, 100, 1800, 399);
|
||||||
NSRect frameRect = NSMakeRect (10, 10, 480, 480);
|
NSRect frameRect = NSMakeRect (0, 0, 1800, 399);
|
||||||
|
|
||||||
NSWindow* win = [[NSWindow alloc] initWithContentRect:rect
|
NSWindow* win = [[NSWindow alloc] initWithContentRect:rect
|
||||||
styleMask:NSWindowStyleMaskClosable
|
styleMask:NSWindowStyleMaskClosable
|
||||||
|
|
@ -20,28 +41,18 @@ main (int argc, char* argv[])
|
||||||
|
|
||||||
CTView* view = [[CTView alloc] initWithFrame:frameRect];
|
CTView* view = [[CTView alloc] initWithFrame:frameRect];
|
||||||
|
|
||||||
|
layout (view);
|
||||||
|
|
||||||
[win setContentView:view];
|
[win setContentView:view];
|
||||||
[[NSApplication sharedApplication] activateIgnoringOtherApps : YES ];
|
[[NSApplication sharedApplication] activateIgnoringOtherApps:YES];
|
||||||
[win makeKeyAndOrderFront:win];
|
[win makeKeyAndOrderFront:win];
|
||||||
|
|
||||||
[NSRunLoop currentRunLoop];
|
[NSRunLoop currentRunLoop];
|
||||||
[NSTimer scheduledTimerWithTimeInterval:0.1 target:view selector:@selector(timedUpdate) userInfo:nil repeats:YES];
|
[NSTimer scheduledTimerWithTimeInterval:0.02 target:view selector:@selector(timedUpdate) userInfo:nil repeats:YES];
|
||||||
|
|
||||||
[[NSApplication sharedApplication] run];
|
[[NSApplication sharedApplication] run];
|
||||||
|
|
||||||
|
|
||||||
[pool release];
|
[pool release];
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
1, derive a new View type that will have our drawing methods
|
|
||||||
2. add time to the run loop to trigger redraws
|
|
||||||
|
|
||||||
figure out how to draw
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,15 @@
|
||||||
/* -*- c++ -*- */
|
/* -*- c++ -*- */
|
||||||
|
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "meter.h"
|
||||||
#include "view.h"
|
#include "view.h"
|
||||||
|
|
||||||
|
extern std::vector<Meter*> meters;
|
||||||
|
|
||||||
@implementation CTView
|
@implementation CTView
|
||||||
|
|
||||||
-(BOOL)acceptsFirstResponder
|
-(BOOL)acceptsFirstResponder
|
||||||
|
|
@ -23,34 +28,44 @@
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-(BOOL)opaque
|
||||||
|
{
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
-(void) timedUpdate
|
-(void) timedUpdate
|
||||||
{
|
{
|
||||||
NSRect rect = NSMakeRect (random() % 100, random() % 100, random() % 400, random() % 400);
|
for (auto & m : meters) {
|
||||||
[self setNeedsDisplayInRect:rect];
|
m->set_level ((random() % (int) m->height) / m->height);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
-(void)drawRect: (NSRect)rect
|
-(void)drawRect: (NSRect)rect
|
||||||
{
|
{
|
||||||
//printf ("%g, %g %g x %g\n", rect.origin.x, rect.origin.y, rect.size.width, rect.size.height);
|
// printf ("%g, %g %g x %g\n", rect.origin.x, rect.origin.y, rect.size.width, rect.size.height);
|
||||||
|
|
||||||
|
CGContextRef cg = [[NSGraphicsContext currentContext] CGContext];
|
||||||
|
|
||||||
|
for (auto & m : meters) {
|
||||||
|
m->draw (cg);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
const NSRect *drawn_rects;
|
const NSRect *drawn_rects;
|
||||||
long count;
|
long count;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
[self getRectsBeingDrawn: &drawn_rects count: &count];
|
[self getRectsBeingDrawn: &drawn_rects count: &count];
|
||||||
|
|
||||||
NSGraphicsContext* context = [NSGraphicsContext currentContext];
|
printf ("%ld rects to draw\n", count);
|
||||||
CGContextRef cg = [context CGContext];
|
|
||||||
|
|
||||||
//printf ("%ld rects to draw\n", count);
|
|
||||||
for (i = 0; i < count; i++) {
|
for (i = 0; i < count; i++) {
|
||||||
//printf ("\trect %d: %g, %g %g x %g\n", i, drawn_rects[i].origin.x, drawn_rects[i].origin.y, drawn_rects[i].size.width, drawn_rects[i].size.height);
|
//printf ("\trect %d: %g, %g %g x %g\n", i, drawn_rects[i].origin.x, drawn_rects[i].origin.y, drawn_rects[i].size.width, drawn_rects[i].size.height);
|
||||||
// CGContextSetRGBFillColor (cg, 1.0, 1.0, 1.0, 0.0);
|
//CGContextSetRGBFillColor (cg, 1.0, 0.0, 0.0, 1.0);
|
||||||
CGContextSetRGBStrokeColor (cg, 1.0, 1.0, 1.0, 1.0);
|
CGContextSetRGBStrokeColor (cg, 1.0, 1.0, 1.0, 1.0);
|
||||||
// CGContextFillRect (cg, drawn_rects[i]);
|
//CGContextFillRect (cg, drawn_rects[i]);
|
||||||
CGContextStrokeRect (cg, drawn_rects[i]);
|
CGContextStrokeRect (cg, drawn_rects[i]);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
-(void)windowWillClose:(NSNotification *)notification
|
-(void)windowWillClose:(NSNotification *)notification
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,9 @@ import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
cocoatea_sources = [
|
cocoatea_sources = [
|
||||||
'cocoatea.mm',
|
'cocoatea.mm',
|
||||||
'view.mm'
|
'view.mm',
|
||||||
|
'meter.mm'
|
||||||
]
|
]
|
||||||
|
|
||||||
def options(opt):
|
def options(opt):
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue