From c111495cae5dd9bf693be53cbd87d7d2c5f23119 Mon Sep 17 00:00:00 2001 From: omigamedev Date: Mon, 11 Mar 2019 17:27:00 +0100 Subject: [PATCH] update tracking area on OSX when resizing view --- PanoPainter-OSX/main.cpp | 18 +++++++++++++----- PanoPainter-OSX/main.h | 1 + src/brush.cpp | 13 ++++++++----- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/PanoPainter-OSX/main.cpp b/PanoPainter-OSX/main.cpp index 0a05e89..769e59d 100644 --- a/PanoPainter-OSX/main.cpp +++ b/PanoPainter-OSX/main.cpp @@ -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 diff --git a/PanoPainter-OSX/main.h b/PanoPainter-OSX/main.h index a44d03f..67275c3 100644 --- a/PanoPainter-OSX/main.h +++ b/PanoPainter-OSX/main.h @@ -17,6 +17,7 @@ _CGLContextObject* cgl; bool gl_ready; bool cursor_visible; + NSTrackingArea* trackingArea; @public NSString* file2open; } - (void)close; diff --git a/src/brush.cpp b/src/brush.cpp index 23abf6e..38be2ed 100644 --- a/src/brush.cpp +++ b/src/brush.cpp @@ -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) 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(1, m_brush->m_tip_angle_smooth * 200.f / m_step));