diff options
| author | André Nusser <andre.nusser@googlemail.com> | 2017-05-19 19:08:32 +0200 | 
|---|---|---|
| committer | André Nusser <andre.nusser@googlemail.com> | 2017-05-20 21:37:27 +0200 | 
| commit | 54838a283cd4fdfd5a1a44c5ef6ca0051872f107 (patch) | |
| tree | 83ca1a0fa778ee4917a66a4d1dfc6ce0bed4db9a /plugin | |
| parent | ff83cfac10939ceba524c93d4e36f634f4bec805 (diff) | |
Add inline drumgizmo logo.
The details (which are marked with TODO) have to be changed when we
actually get a logo from the drumkits.
Diffstat (limited to 'plugin')
| -rw-r--r-- | plugin/drumgizmo_plugin.cc | 100 | ||||
| -rw-r--r-- | plugin/drumgizmo_plugin.h | 4 | 
2 files changed, 73 insertions, 31 deletions
| diff --git a/plugin/drumgizmo_plugin.cc b/plugin/drumgizmo_plugin.cc index 168eb58..2b7f4b9 100644 --- a/plugin/drumgizmo_plugin.cc +++ b/plugin/drumgizmo_plugin.cc @@ -200,48 +200,86 @@ void DrumGizmoPlugin::onInlineRedraw(std::size_t width,                                       std::size_t max_height,                                       InlineDrawContext& context)  { -	std::size_t height = std::min(std::size_t(11), max_height); -	if(!context.data || -	   (context.width != width) || -	   (context.height != height) || -	   settingsGetter.number_of_files.hasChanged() || -	   settingsGetter.number_of_files_loaded.hasChanged() || -	   settingsGetter.drumkit_load_status.hasChanged()) +	std::size_t bar_height = bar_red.height(); +	std::size_t image_height = ((double)width / inline_display_image.width()) * inline_display_image.height(); + +	bool show_bar{false}; +	bool show_image{false}; +	std::size_t height = 0; + +	if(bar_height <= max_height) { +		show_bar = true; +		height += bar_height; +	} +	if(bar_height + image_height <= max_height) { +		show_image = true; +		height += image_height; +	} + +	bool context_needs_update = +		!context.data || +	   	context.width != width || +	   	context.height != height; +	bool bar_needs_update =  +		settingsGetter.number_of_files.hasChanged() || +		settingsGetter.number_of_files_loaded.hasChanged() || +		settingsGetter.drumkit_load_status.hasChanged() || +		context_needs_update; +	bool image_needs_update = inline_image_first_draw || context_needs_update; +		// TODO: settingsGetter.inline_image_filename.hasChanged(); +	bool something_needs_update = +		context_needs_update || +		bar_needs_update || +		image_needs_update; + +	if (something_needs_update)  	{  		context.width = width;  		context.height = height;  		assert(context.width * context.height <= sizeof(inlineDisplayBuffer));  		context.data = (unsigned char*)inlineDisplayBuffer; -		box.setSize(context.width, context.height); -  		InlineCanvas canvas(context);  		GUI::Painter painter(canvas); -		painter.clear(); -		painter.drawImage(0, 0, box); - -		double progress = -			(double)settingsGetter.number_of_files_loaded.getValue() / -			(double)settingsGetter.number_of_files.getValue(); -		int brd = 4; -		int val = (width - (2 * brd)) * progress; +		if(show_bar && bar_needs_update) +		{ +			box.setSize(context.width, bar_height); +			painter.drawImage(0, height - bar_height, box); + +			double progress = +				(double)settingsGetter.number_of_files_loaded.getValue() / +				(double)settingsGetter.number_of_files.getValue(); + +			int brd = 4; +			int val = (width - (2 * brd)) * progress; + +			switch(settingsGetter.drumkit_load_status.getValue()) +			{ +			case LoadStatus::Error: +				bar_red.setSize(val, bar_height); +				painter.drawImage(brd, height - bar_height, bar_red); +				break; +			case LoadStatus::Done: +				bar_green.setSize(val, bar_height); +				painter.drawImage(brd, height - bar_height, bar_green); +				break; +			case LoadStatus::Loading: +			case LoadStatus::Idle: +				bar_blue.setSize(val, bar_height); +				painter.drawImage(brd, height - bar_height, bar_blue); +				break; +			} +		} -		switch(settingsGetter.drumkit_load_status.getValue()) +		if(show_image && image_needs_update)  		{ -		case LoadStatus::Error: -			bar_red.setSize(val, height); -			painter.drawImage(brd, 0, bar_red); -			break; -		case LoadStatus::Done: -			bar_green.setSize(val, height); -			painter.drawImage(brd, 0, bar_green); -			break; -		case LoadStatus::Loading: -		case LoadStatus::Idle: -			bar_blue.setSize(val, height); -			painter.drawImage(brd, 0, bar_blue); -			break; +			// TODO: load new image and remove the bool +			inline_image_first_draw = false; + +			painter.setColour(.5); +			painter.drawFilledRectangle(0, 0, width, image_height); +			painter.drawImageStretched(0, 0, inline_display_image, width, image_height);  		}  		// Convert to correct pixel format diff --git a/plugin/drumgizmo_plugin.h b/plugin/drumgizmo_plugin.h index 98c6c26..36bf016 100644 --- a/plugin/drumgizmo_plugin.h +++ b/plugin/drumgizmo_plugin.h @@ -43,6 +43,7 @@  #include <texturedbox.h>  #include <imagecache.h> +#include <image.h>  class DrumGizmoPlugin  #ifdef LV2 @@ -201,7 +202,10 @@ private:  	std::shared_ptr<GUI::MainWindow> plugin_gui;  	std::shared_ptr<DrumGizmo> drumgizmo; +  	std::uint32_t inlineDisplayBuffer[1024*1024]; +	GUI::Image inline_display_image{":resources/logo.png"}; +	bool inline_image_first_draw{true};  	static constexpr std::size_t width{750};  	static constexpr std::size_t height{400}; | 
