update tracking area on OSX when resizing view

This commit is contained in:
2019-03-11 17:27:00 +01:00
parent fda399f7dd
commit c111495cae
3 changed files with 22 additions and 10 deletions

View File

@@ -125,7 +125,7 @@ std::mutex task_mutex;
[self setPixelFormat:pf];
[self setOpenGLContext:context];
NSTrackingArea* trackingArea = [[NSTrackingArea alloc] initWithRect:frameRect
self->trackingArea = [[NSTrackingArea alloc] initWithRect:frameRect
options: (NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved | NSTrackingActiveInKeyWindow )
owner:self userInfo:nil];
[self addTrackingArea:trackingArea];
@@ -266,20 +266,28 @@ static CVReturn MyDisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTime
CGLFlushDrawable(cgl);
CGLUnlockContext(cgl);
}
- (void)updateTrackingAreas
{
if(self->trackingArea != nil)
[self removeTrackingArea:self->trackingArea];
self->trackingArea = [[NSTrackingArea alloc] initWithRect:[self bounds]
options: (NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved | NSTrackingActiveInKeyWindow)
owner:self userInfo:nil];
[self addTrackingArea:trackingArea];
}
- (void)reshape
{
[super reshape];
// Get the view size in Points
NSRect viewRectPoints = [self bounds];
// We draw on a secondary thread through the display link. However, when
// resizing the view, -drawRect is called on the main thread.
// Add a mutex around to avoid the threads accessing the context
// simultaneously when resizing.
CGLLockContext([[self openGLContext] CGLContextObj]);
// Get the view size in Points
NSRect viewRectPoints = [self bounds];
#if SUPPORT_RETINA_RESOLUTION
// Rendering at retina resolutions will reduce aliasing, but at the potential

View File

@@ -17,6 +17,7 @@
_CGLContextObject* cgl;
bool gl_ready;
bool cursor_visible;
NSTrackingArea* trackingArea;
@public NSString* file2open;
}
- (void)close;

View File

@@ -163,8 +163,8 @@ StrokeSample Stroke::randomize_sample(const glm::vec3& pos, float pressure, floa
hsv.x = glm::fract(glm::mix(hsv.x, (pressure - 0.5f) * 2.0f, m_brush->m_tip_hue) + (rnd_nor() - 0.5f) * m_brush->m_jitter_hue * eachtip);
hsv.y = glm::clamp(glm::mix(hsv.y, (1.f - pressure - 0.5f) * 2.0f, m_brush->m_tip_sat) + (rnd_nor() - 0.5f) * m_brush->m_jitter_sat * eachtip, 0.f, 1.f);
hsv.z = glm::clamp(glm::mix(hsv.z, (pressure - 0.5f) * 2.0f, m_brush->m_tip_val) + (rnd_nor() - 0.5f) * m_brush->m_jitter_val * eachtip, 0.f, 1.f);
m_hsv_jitter.add(hsv);
s.col = convert_hsv2rgb(m_hsv_jitter.average());
//m_hsv_jitter.add(hsv);
s.col = convert_hsv2rgb(hsv);
return s;
}
@@ -327,9 +327,12 @@ void Stroke::start(const std::shared_ptr<Brush>& brush)
m_step = glm::max(0.5f, m_brush->m_tip_spacing * size);
auto hsv = convert_rgb2hsv(m_brush->m_tip_color);
hsv.x = glm::fract(hsv.x + (rnd_nor() - 0.5f) * m_brush->m_jitter_hue);
hsv.y = glm::clamp(hsv.y + (rnd_nor() - 0.5f) * m_brush->m_jitter_sat, 0.f, 1.f);
hsv.z = glm::clamp(hsv.z + (rnd_nor() - 0.5f) * m_brush->m_jitter_val, 0.f, 1.f);
if (!m_brush->m_jitter_hsv_eachsample)
{
hsv.x = glm::fract(hsv.x + (rnd_nor() - 0.5f) * m_brush->m_jitter_hue);
hsv.y = glm::clamp(hsv.y + (rnd_nor() - 0.5f) * m_brush->m_jitter_sat, 0.f, 1.f);
hsv.z = glm::clamp(hsv.z + (rnd_nor() - 0.5f) * m_brush->m_jitter_val, 0.f, 1.f);
}
m_tip_color = hsv;
m_direction.resize(std::max<int>(1, m_brush->m_tip_angle_smooth * 200.f / m_step));